Hab gerad mal bißchen mit dem Timer1 rumgespielt
Code:#include <avr/io.h> uint16_t i=0; int main (void) { TCCR1B = (1<<CS12) | (1<<CS10); ) DDRC = 0xff; PORTC = 0xFF; while (1==1) { if (TCNT1 == 0x3FF) {i++;} if (i==95) {PORTC=0x00;} } return 0; }
Wenn ich anstatt
if (i=95) {PORTC=0x00;}
if (i=94) {PORTC=0x00;}
schreibe, gehen die LEDs sofort an.
Also:
<95: LEDs leuchten sofort nach Programmübertragung
>95: LEDs leuchten mit Verzögerung von ca. 5s
Dadrüber gehe es anscheinend linear weiter, also 200 dauert doppelt so lange wie 100, 400 doppelt so lange wie 200 etc.
Die 1 Hz-LED hab ich so versucht zu realisieren:
Ich zähle eine Zählvariable pro Timerdurchlauf um 1 hoch. Dann sollen alle LED ab- bzw. ausgeschaltet werden --> Blinken
Es leuchtet aber gar nichts. Bei dem if (i==1000) habe ich alle möglichen Werte probiert. Meine erste Rechnung ergab 15,3 Timerdruchläufe pro Sekunde. Also habe ich (if i==15) gemachtCode:while (1==1) { if (TCNT1 == 0x3FF) {i++;} if (i==1000) { if (PORTC==0x00) {PORTC=0xFF;} if (PORTC==0xFF) {PORTC=0x00;} i=0; } }
Wo ist mein Denkfehler?







Zitieren
Lesezeichen