Forum: Mikrocontroller und Digitale Elektronik tiny24 compare match tut nicht richtig


von Ralf (Gast)


Lesenswert?

Hallo,
ich verzweifele hier gerade an der compare Funktion des Timer0 eines
tiny24.

Im Datenblatt steht für OCR0A=0 sei die Frequenz am Ausgangspin
OC0A  =fclock/2.
Mit dem internen 8mhz oszilator (ohne Vorteiler) messe ich aber nur
500khz am Pin OC0A und nicht wie erwartet 4MHZ.

Folgende Bits des Timers habe ich gesetzt:

Register TCCR0A:

Bit 1 WGM01   CTC aktivieren
Bit 6 COM0A0  Ausgang OC0A toggelnd


Register TCCR0B:

Bit 0 CS00    Interner Systemtakt(8mhz) ohne Vorteiler

Register OCR0A habe ich null und alle Richtungsbits in ddrb auf high
gesetzt.

Habt Ihr eine Idee was mein Fehler sein könnte?

von Ronny (Gast)


Lesenswert?

Welchen Reload-Wert hast du den in OCR0A?Und wie genau sind die Fuses
für den Haupttakt den gesetzt?

von Ralf (Gast)


Lesenswert?

Mein Relaod Wert ist 0
im Datenblatt des Tiny24 steht auf Seite 77:
The waveform generated will have a maximum frequency of fclk_I/O /2
when OCR0A is set to zero (0x00)

Fuses hmm habe im AVR Studio einfach internen 8MHZ Oszi ausgewählt. In
Klammern steht da CKSEL=0010 und SUT=10

von Ralf (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

ich kann ja verstehen, das sich bei dem Durcheinander was ich da
gestern Abend verzapft habe niemand die Mühe macht mir einen Tip
zugeben. Deshalb habe ich mal den Assemblercode der Timerinitialsierung
angehängt.
Wie gesagt, mein Problem ist am Ausgang messe ich 500khz und nicht
4MHz.
(interner 8mhz oszi)
Vielleicht hat jetzt jemand von euch eine Idee?

Gruss Ralf

von Andi (Gast)


Lesenswert?

Hallo Ralf

Da ich gerade mit einem Tiny44 am experimentieren bin, habe ich es
schnell ausprobiert, und es kommen tatsächlich nur 500 kHz. Es scheint
so, dass der Tiny mit 1 MHz läuft statt 8MHz und das liegt daran dass
das CkDIV8 Bit der L-FUSE entgegen dem Datenblatt halt doch
programmiert ist. Den Clk-Prescaler kann man aber auch ohne
umprogrammieren der Fuse ändern, und mit folgendem Code kamen dann doch
4 MHz aus dem OC0A-Pin:

  ldi  r16,0b01000010         ;CTC A, Bit toggle
  out  TCCR0A,r16
  ldi  r16,0b00000001         ;Timer Prescaler=1
  out  TCCR0B,r16
  ldi  r16,0                  ;OCR0A=0
  out  OCR0A,r16
  sbi  DDRB,2                 ;OC0A=Output

  ldi     r16,$80
  out  CLKPR,r16
  ldi  r16,0                  ;CLK= 8MHz
  out  CLKPR,r16

Gruss Andi

von Andi (Gast)


Lesenswert?

Nachtrag:
Nach dem ich jetzt das neuste Datenblatt geladen habe, ist da auch
richtig angegeben, dass das CKDIV8 Bit programmiert ist.

von Ralf (Gast)


Lesenswert?

Hallo Andi,
verdammt...dieses Teiler Fuse Bit hatte ich völlig übersehen...ich
danke Dir...damit ergibt das alles einen Sinn.

Ich Danke Dir

Gruss Ralf

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.