Forum: Mikrocontroller und Digitale Elektronik Timer0 startet nicht


von Christian B. (chbalnuweit)


Lesenswert?

Hallo,

ich versuche auf einem AT90USB1287 den Timer0 zu starten und den 
CTC-Mode für OC0B zu aktivieren.
1
int main(void)
2
{
3
  DDRD = (1<<PD0);
4
  TCCR0A = (1<<COM0B0) | (1<<WGM01);  // Toggle OC0B on Compare Match
5
  TCCR0B =  (1<<CS00) | (1<<CS01) | (1<<FOC0B); // Prescaler 64, Force Compare Match für OC0B
6
  OCR0B = 0x80; // 128
7
8
  while(1)
9
  {
10
  }
11
12
}

So sehe ich auf dem Oszilloskop nur Rauschen.

Es scheint als übersehe ich etwas aber ich komm nicht drauf!
Kann mir jemand weiterhelfen?

Viele Grüße

Christian

von Krapao (Gast)


Lesenswert?

Table 13-7. Waveform Generation Mode Bit Description
Mode 2 arbeitet mit OCR0A und nicht mit OCR0B als Top!

>   OCR0B = 0x80; // 255

Kommentar oder Wert stimmen nicht.

von Christian B. (chbalnuweit)


Lesenswert?

Danke für die schnelle Antwort.
Ich dachte man müsste dann alles auf "B" übertragen...
Aber OCR0A funkioniert auch nicht.
Der Kommentar war falsch ;-)meinte natürlich 128

Weitere Auffälligkeiten?

von spess53 (Gast)


Lesenswert?

Hi

>Aber OCR0A funkioniert auch nicht.

Auch den entsprechenden Ausgang gesetzt?

>....|(1<<FOC0B)

FOCxy dient nur zum 'manuellen' auslösen eines Compare-Ereignisses. In 
deinem Fall unnötig.

MfG Spess

von Krapao (Gast)


Lesenswert?

Sieht dein Code jetzt so aus?
1
#include <avr/io.h>
2
int main(void)
3
{
4
  DDRD = (1<<PD0);                   // OC0B Ausgang
5
  TCCR0A = (1<<COM0B0) | (1<<WGM01); // Toggle OC0B und CTC Modus
6
  TCCR0B = (1<<CS00) | (1<<CS01);    // Prescaler 64
7
  OCR0A = 0x80-1;                    // für Compare Match & Clear TCNT0 
8
  OCR0B = 0x80-1;                    // für OC0B Toggleaktion
9
  while(1)
10
  {
11
  }
12
}

von Christian B. (chbalnuweit)


Lesenswert?

Danke für eure Hilfe, ich habe den Fehler soeben entdeckt -.-
Ich setze später im Code DDRD = (1<<PD1) und hab vergessen "|=" zu 
schreiben, sodass (1<<PD0) quasi gelöscht wurde...

Ich danke euch trotzdem!

Viele Grüße

Christian

von spess53 (Gast)


Lesenswert?

Hi

Du hast CTC aktiviert. Damit ist OC0A (PB7) der Ausgang. OCR0B kannst 
du in dem Zusammenhang erst mal vergessen. Also setze auch die COM-Bits 
für OC0A und nicht für OC0B.

MfG spess

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.