Arduino Pro Mini TXD als normalen I/O verwenden

Gast #5901911
Lesenswert?

Hallo,

Ich möchte den Pin PD1 bzw- TXD als normalen I/O Pin verwenden.
Folgender Test-Code wurde geschrieben (in Eclipse, C):
1
#include <avr/io.h>
2
#include <util/delay.h>
3
#include <avr/interrupt.h>
4

5
int main(){
6

7
  DDRD  = 1<<1; // PD1 as output
8
  sei();        // enable global interrupts
9

10
  while(1) {
11
    _delay_ms(500);
12
    PORTD ^= 1<<1; // toggle pin
13
  }
14
}

Obiger Code funktioniert nicht. Am Pin tut sich garnichts. Mit einem 
Arduino Uno und Nano funktioniert es, komischerweise.

Als nächstes habe ich in der ArduinoIDE den selben Code compiliert und 
wieder ohne Erfolg.

Dann hab ich folgendes in der ArduinoIDE probiert:
1
#include <avr/io.h>
2
#include <util/delay.h>
3
#include <avr/interrupt.h>
4

5
void setup() {
6
  DDRD  = 1<<1;
7
  sei();
8
}
9

10
void loop(){
11
  _delay_ms(500);
12
  PORTD ^= 1<<1;
13
}

Mit der setup- und loop Routine funktioniert es nun.

Hat jemand eine Idee warum dies so ist und wie ich es in normalen C 
handeln kann? Möchte ungern die ArduinoIDE verwenden...

Mfg,
Florian
Gast #5901920
Lesenswert?

FloProMini schrieb:
> Obiger Code funktioniert nicht. Am Pin tut sich garnichts. Mit einem
> Arduino Uno und Nano funktioniert es, komischerweise.

Wenn Du sagst, dass das mit einem Arduino Uno und einem Arduino Nano 
funktioniert, dann sag doch bitte auch kurz dazu, auf welcher Plattform 
es nicht funktioniert... Ein blanker ATMega328p?
Gast #5901934
Lesenswert?

Hi.Lo. schrieb:
> Wenn Du sagst, dass das mit einem Arduino Uno und einem Arduino Nano
> funktioniert, dann sag doch bitte auch kurz dazu, auf welcher Plattform
> es nicht funktioniert... Ein blanker ATMega328p?

ATMega328P mit Bootloader und was so dazugehört, kann ihn genauso 
programmieren wie den Uno/Nano, nur dieser eine Pin wirft Fragen auf.

Hi.Lo. schrieb:
> PS: Wenn du die delay.h verwendest, musst du dem Compiler die Taktrate
> mitteilen. Entweder in den Compilerflags, oder per

Natürlich. Ist nur ein Testprogramm gewesen um mein Problem zu 
erläutern..

Es wurde ein Arduino Pro Mini in dieser Variante verwendet: 5V 16Mhz
#5901966
Lesenswert?

Dann ist an deinem Test was falsch.
Die drei Platinen haben identische Schaltpläne bis auf
- Spannungsversorgung (aber 5V sind 5V)
- Quarz (16MHz, die Bauform ist aber egal)
- externe Pins (aber auch nur mechanisch)
- USB/Seriell-Adapter (einmal als FTDI, einmal als ATtiny, einmal 
extern, aber RxD und TxD ist immer das gleiche)
Gast #5902294
Lesenswert?

Hi.Lo. schrieb:
> Welchen Compiler nutzt Du denn?

avr-gcc


Danke für den Tipp, das Problem wurde schon gelöst:

FloProMini schrieb:
> W. H. schrieb:
>> ich denke, dass hier unterschiedliche Bootloader ein unterschiedliches
>> Verhalten ergeben.
>
> Vielen Dank für den Tipp! Hab den selben Bootloader der auf den Uno/Nano
> ist geflasht und es funktioniert!

Kann man den Thread irgendwie als "gelöst" markieren?
Gast #5902330
Lesenswert?

FloProMini schrieb:
> das Problem wurde schon gelöst

Das ist nich nachvollziehbar: Laut meiner Boards.txt der Arduino-IDE 
haben Nano und ProMini den gleichen Bootloader 
"atmega/ATmegaBOOT_168_atmega328.hex"

Der Uno hat einen anderen Bootloader.

Oder kann es sein, dass Du einen neuen Nano hattest, der mit Optiboot 
ausgerüstet war? Indirekt kann man das an der Baudrate beim Upload 
sehen, 57600 oder 115200.
Gast #5902338
Lesenswert?

Manfred schrieb:
> Oder kann es sein, dass Du einen neuen Nano hattest, der mit Optiboot
> ausgerüstet war?

Sorry mein Fehler. Der Nano hat einen anderen Bootloader. Das Problem 
hab ich gelöst indem ich denselben Bootloader, der auf dem Uno ist, auf 
den ProMini geflasht habe. Hab mich da etwas vertan mit meinen Posts.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren