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
Code:
while (1==1)
{
if (TCNT1 == 0x3FF) {i++;}
if (i==1000)
{
if (PORTC==0x00) {PORTC=0xFF;}
if (PORTC==0xFF) {PORTC=0x00;}
i=0;
}
}
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) gemacht
Wo ist mein Denkfehler?
Lesezeichen