Atmega32u4 - Timer0 Probleme

OP #4460286
Lesenswert?
• ▲
▼
Ich bin am verzweifeln :D

Ich habe einen Atmega32u4 und möchte dessen Timer0 im CTC Mode bringen 
und über OCR0B (PinD0) ausgeben... aktuell:


1
DDRD |= (1<<0) | (1<<4);          //Pin D0 to Output
2
  
3
TCCR0A = (1<<COM0B0)|(1<<WGM01);  //Toggle OCB0B on Compare Match & CTC Mode    
4
TCCR0B = (1<<CS00);               //Prescaler: None
5
    
6
sei();                            //Global interrupt enabled

Der müsste doch laufen?! Die Register werden sonst nirgend woanders mehr 
beschrieben.
OP #4460302
Lesenswert?
• ▲
▼
Ja, mach ich ja über TCCR0B und CS00 auf eins... damit stelle ich den 
Prescaler auf "none" - die Taktquelle ist ja der externe Quarz. Muss ich 
den auch einstellen?! Nimmt er dies nicht "intern mit"?

Ich kann über CS00, CS01, CS02 ja auch auf externe Taktquelle auf T0 Pin 
umstellen, aber dann nimmt er ja kein Prescaler mehr.
OP #4460314
Lesenswert?
• ▲
▼
Alexander S. schrieb:
> Siehe Datenblatt: Atmel-7766I-USB-ATmega16U4/32U4-Datasheet_072015
> S.99:
>
> "For generating a waveform output in CTC mode, the OC0A output can be
> set to toggle"

Ja ist ja richtig, aber muss ja auch togglen wenn OCR0A nicht gesetzt 
ist. Dann zählt er bis 0xff, toggelt und fängt bei 0x00 wieder an.

" The waveform generated
will have a maximum frequency of fOC0 = fclk_I/O/2 when OCR0A is set to 
zero (0x00)"

Ebenfalls auf der Seite 99 bissle unter deinem Satz.
OP #4460742
Lesenswert?
• ▲
▼
mohikaner schrieb:
> Rene K. schrieb:
>> Alexander S. schrieb:
>>> Du hast jetzt in TCCR0A COM0A0 gesetzt?
>>
>> Nein, ich hatte noch OCR0B gesetzt... das ist im Source oben nicht zu
>> sehen... Quasi:
>
> Ohne Worte

?!? Noch nie was im Code stehen gehabt wo man den Wald vor Bäumen nicht 
mehr gesehen hat!?!

Alexander S. schrieb:
> Rene K. schrieb:
>
>> Nach auskommentieren von dieser Zeile funktionierte es nun dann auch und
>> ich bekomme einen Takt an PinD0 (OC0B).
>
> Ist aber kein CTC, das funktioniert nur mit OCR0A.

OCR0A muss doch aber nicht zwingend gesetzt sein, CTC sagt doch noch nur 
"Clear Timer on Compare Match", dieser tritt doch auch ein wenn OCR0A = 
0x00 ist. Da dann TCNT1 bis 254 durchzählt und wieder bei 0 beginnt, 
dann aber nicht mit OCR0A vergleicht sondern weiterzählt bis 254 - Wenn 
OCR0A aber 0x01 hat, da allerdings setzt der compare TCNT1 bei 0x01 
zurück.
Gast #4460834
Lesenswert?
• ▲
▼
Rene K. schrieb:
> mohikaner schrieb:
>> Rene K. schrieb:
>>> Alexander S. schrieb:
>>>> Du hast jetzt in TCCR0A COM0A0 gesetzt?
>>>
>>> Nein, ich hatte noch OCR0B gesetzt... das ist im Source oben nicht zu
>>> sehen... Quasi:
>>
>> Ohne Worte
>
> ?!? Noch nie was im Code stehen gehabt wo man den Wald vor Bäumen nicht
> mehr gesehen hat!?!

Doch. Es wird aber immer wieder gebeten, den kompletten Code zu posten. 
Da wäre das sicher dem einen oder anderen aufgefallen. Für mich wieder 
ein Anlaß bei unvollständigen Angaben nicht tiefer zu schauen.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren