Gast
#2296790
Hallo, ich fange gerade an, mit einem ATtiny45 zu programmieren. Bei meinen Aufrufen der delay-Funktion wundert mich, dass die Zeiten doppelt so lang sind wie gewollt. Ich habe also zunächst noch einmal die Angaben zur clock rate im Quelltext und auch die Fuses auf dem µC selbst überprüft. Wenn ich meine Fuses mit avrdude auslese avrdude: safemode: lfuse reads as 62 avrdude: safemode: hfuse reads as DF avrdude: safemode: efuse reads as FF und dann die Werte bei http://www.engbedded.com/fusecalc/ eingebe, bekomme ich raus, der Chip laufe auf 8MHz, geteilt durch 8. Ich komme rechnerisch also auf 1MHz. Das habe ich dann im Quelltext auch so vermerkt. #define F_CPU 1000000 #include <util/delay.h> #include <avr/io.h> int main(){ while(1){ PORTB |= (1<<PB1); _delay_ms(1000); PORTB ^= ~(1<<PB1); _delay_ms(1000); } } Trotzdem dauern die 1000ms aber jeweils 2 Sekunden—also 2 Sekunden LED an, dann2 Sekunden aus. Wenn ich die Fuse für den 8-fach-Teiler mal rausnehme, passiert quasi das gleiche: dann blinkt die LED eben auch bei #define F_CPU 8000000 doppelt so schnell wie sie soll. Klar, ich kann jetzt einfach 4000000 bzw. 500000 eintragen, damit alles wieder stimmt, aber das kann ja nicht die Lösung sein. Ich habe nun schon recherchiert, aber komme einfach nicht drauf. Vielleicht sehe ich auch den Wald vor lauter Bäumen nicht mehr. Gruss, Stefan