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
intmain(){
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
voidsetup(){
6
DDRD=1<<1;
7
sei();
8
}
9
10
voidloop(){
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
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?
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
Der Pro Mini, der Nano und der Uno verwenden alle den ATmega328p.
Deine Hardware ist also defekt, denn das sind alle drei identische
Schaltungen die sich primär mechanisch unterscheiden.
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)
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!
Danke!
Mfg,
Florian
W. H. schrieb:> ich denke, dass hier unterschiedliche Bootloader ein unterschiedliches> Verhalten ergeben.
Wie geht das denn?
Ernste Frage, meiner Meinung nach ist der nach dem Reset inaktiv?
Stefanus F. schrieb:> Das ist so bei Arduino. Setup() wird einmal am Anfang aufgrufen, und> loop() wird danach endlos oft wiederholt.
Das ist mir mehr als klar.
Selbes prinzip bei
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?
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.
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.
FloProMini schrieb:> 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.
Ein einfaches