Hallo,

Zitat von
sternst
...Wenn man die Funktionen aus util/delay.h verwenden will, ist es sehr wichtig, die Optimierungen einzuschalten.
Stimmt -- das hätte ich besser dazuschreiben sollen! Mein Beispiel war also nicht 100% treffend, obwohl ich erwähnt habe, dass man eine Optimierungsstufe >0 einschalten sollte!
Beim ATmega32 kann man die einzelnen Ausgangspins nicht mit Hilfe von PINx |= PINx "togglen", aber bei den neueren ATmegas geht das!
Auch bei neueren ATmegas klappt das so nicht. Mit "PINx |= PINx" bekommt man den Ausgang nur von 1 auf 0, aber nicht wieder zurück.
Dass das Toggeln so nicht geht, ist nicht korrekt: siehe Anlage (Datenblatt Atmega3290P); viele andere der neueren AVRs können das auch!
Hier ein Beispiel zum Ausprobieren im Simulator (Atmega3290P einstellen!):
Code:
#include <avr/io.h>
int main (void) {
while(1) {
DDRB = 1;
PORTB=1;
for (uint8_t i=0;i<10;i++)
asm volatile("sbi 3,0"); // = sbi PINB, 0
}
return 0;
}
// -O0, Breakpoint auf die Zeile mit "asm volatile..." setzen;
Gruß
Fred
Lesezeichen