Forum: Mikrocontroller und Digitale Elektronik TIMER Blinkproblem


von mazell (Gast)


Lesenswert?

hi,

hatte heute früh schon mal eine blinkLED gemacht mit der delayfunktion, 
aber das soll ja nicht so effiezient sein.

jetzt versuch ich das mit dem 16 bit timer beim Atmel at90can128

zum anfang so wie ich das verstehe ergibt sich doch die blinkfrequenz 
aus

meinen 16Mhz / 1024 vorteiler und nochmal durch den OCR3B (bei mir) den 
ich einfach mal auf 60000 gestellt habe, daraus folgt 0,26 hz .

an dem Ausgang von OC3 hab ich einfach mal ne LED gelegt und die blinkt 
aber alles andere als 0,26 hz.

code:
TCCR3A = (1<<WGM31) | (0<<WGM30) | (1<<COM3B0)  | (1<<COM3B1);

TCCR3B = (1<<CS32) | (0<<CS31) | (1<<CS30) |(0<<WGM33) | (0<<WGM32) ;

while (1)
{
  OCR3B = 60000;
}

von Thomas E. (thomase)


Lesenswert?

mazell schrieb:
> (1<<WGM31)
Damit hast du einen PWM-Mode eingestellt. Lass' den auf 0.
>| (1<<COM3B0)  | (1<<COM3B1);  falsch, das schaltet den Pin auf High.
Zum toggeln muß COM3B1 null sein.


mazell schrieb:
> |(0<<WGM33) | (0<<WGM32)

Eine "0" kann man nicht schieben,
Ist ja Geschmackssache. Aber ich finde das eher verwirrend als 
hilfreich.

mazell schrieb:
> OCR3B = 60000;
Das gehört nicht in die while-Schleife, sondern in die Initialisierung.

mfg.

von spess53 (Gast)


Lesenswert?

Hi

Du hast lediglich WGM31 gesetzt. Das ist 9 Bit Fast PWM!

MfG Spess

von mazell (Gast)


Lesenswert?

jap hab ich jetzt auch gesehen ;)

und noch ein fehler war drin nämlich nicht OCR3B sondern OCR3A muss es 
heißen ;)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.