Hallo zusammen, ich möchte den ATtiny13 der sich im Auslieferungszustand befindet ( FUSES High = $FF ; Low = $6A ) im Fast PWM-Mode 7 als symetrischen Rechteckgenerator betreiben. Habe dazu folgendermaßen laut Datenblatt initialisiert : ; ;Fast PWM-Mode ( 7 ) initialisieren als symetrischen Rechteckgenerator ; ldi A,TCCR0B ;Timer/Counter Control RegisterB laden... ori A,1<<WGM02 ;...nur einzelnes Bit... out TCCR0B,A ;...aendern... ldi A,TCCR0A ;...Timer/Counter Control RegisterA laden... ori A,1<<WGM00 | 1<<WGM01 | 1<<COM0A0 ;...Bits aendern... out TCCR0A,A ;...und somit Fast PWM-Mode ( 7 )... clr A ;...mit Portpinn toggeln einstellen um... out OCR0A,A ;...symetrisches Rechteck zu erzeugen das... ;...Output Compare RegisterA mit Null laden. Wundere mich nun das ich nur ca. 76 Khz heraus bekomme anstatt ca. 600Khz. Wo ist mein Gedanken oder Übersetzungsfehler im Datenblatt ? Hierzu der Datenblattabschnitt der dies beschreibt ( Seite 64 ) ... A frequency (with 50% duty cycle) waveform output in fast PWM mode can be achieved by setting OC0x to toggle its logical level on each Compare Match (COM0x1:0 = 1). The waveform generated will have a maximum frequency of fOC0 = fclk_I/O/2 when OCR0A is set to zero. This feature is similar to the OC0A toggle in CTC mode, except the double buffer feature of the Output Compare unit is enabled in the fast PWM mode. Bernd_Stein
>Wundere mich nun das ich nur ca. 76 Khz heraus bekomme >anstatt ca. 600Khz. Nach doch mal die CKDIV8 Fuse weg.
holger schrieb: >>Wundere mich nun das ich nur ca. 76 Khz heraus bekomme >>anstatt ca. 600Khz. > > > Nach doch mal die CKDIV8 Fuse weg. > Entschuldigung, die ca. 76kHz hatte ich gemessen als CKDIV8 nicht programmiert war ( Systemtakt 9,6MHz ). Mit programmierter CKDIV8 Fuse wie im Auslieferungszustand ( Systemtakt 1,2MHz ) hatte ich 9,66kHz mit meinem Multimeter im 20kHz-Bereich gemessen. Der nächste Meßbereich wäre 200Khz. Habe auch mit einem Analog-Osziloskop gemessen ( errechnet 9,433kHz ). Bernd_Stein
Hi
>ldi A,TCCR0B ;Timer/Counter Control RegisterB laden...
Bist du dir sicher, das du das:
ldi A,0x33
willst? Denn nichts anderes macht die Zeile.
MfG Spess
spess53 schrieb: > Hi > >>ldi A,TCCR0B ;Timer/Counter Control RegisterB laden... > > Bist du dir sicher, das du das: > > ldi A,0x33 > > willst? Denn nichts anderes macht die Zeile. > > MfG Spess > Danke, da kann ja nur Mist bei rumkommen. Aber besser als in A,TCCR0B denn da tut sich nichts am PWM-Pinn, obwohl dies ja richtig sein müsste. Dachte erst mein Oszi spinnt wieder, aber das Testsignal ist i.O. Wahrscheinlich ist irgend etwas beim runterladen schiefgelaufen. Lade einfach das Programm noch mal runter und messe wieder. Verify sagt zwar alles OK aber mal sehen. Bis gleich Bernd_Stein
Hi - Du willst PWM-Mode 7. Warum setzt du dann nur WGM02 und WGM00? Mal zu deiner Information: Im PWM-Mode 7 ist OCR0A der Top-Wert des Timers. Also der Wert, bis zu dem der Timer zählt, bis er wieder von Null anfängt. Deine Zuweisung OCR0A ist daher Nonsens. Das Tastverhältnis wird in diesem Mode durch OCR0B eingestellt. Der Wert darf natürlich nicht größer als OCR0A sein. Wenn du wirklich nur ein symmetrisches Rechtecksignal erzeugen willt, solltest du CTC (Mode 2) benutzen. Und lies dir noch mal den Abschnitt 'Modes of Operation' im Datenblatt durch. MfG Spess
Nee, das half auch nichts. Laut Simulator sind auch alle Bits gesetzt worden wie sie sollen ( mit dem IN-Befehl natürlich ). Seltsam ist nur das seit der Umstellung von LDI auf IN auch die Programmlauf-LED nicht mehr blinkt, was ja bedeutet das der Timer Overflow Interrupt nicht ausgeführt wird. Nachdem ich im Simulator gesehen habe das das Zählerregister TCNT0 nicht hoch gezählt wurde, war klar das noch zusätzlich das Bit CS00 im TCCR0B gesetzt werden muß, damit der Timer überhaupt zählen kann und somit auch der Teilerfaktor gleich eins ist. Danke das wars ca. 625kHz mit dem Oszi. Bernd_Stein
Hi
>Danke das wars ca. 625kHz mit dem Oszi.
Glaubst du. So richtig hast du nicht verstanden was da passiert.
MfG Spess
spess53 schrieb: > Hi > > - Du willst PWM-Mode 7. Warum setzt du dann nur WGM02 und WGM00? > Denke ich habe WGM02, 01 und 00 gesetzt. > ... > Deine Zuweisung OCR0A ist daher Nonsens ... Nicht laut Datenblatt ( siehe oben im Thread ). Jetzt funktioniert die Sache ja wie im Datenblatt beschrieben. Habe diese Antwort leider zu spät gelesen, deshalb ist meine vorletzte Antwort wahrscheinlich etwas unverständlich, da es so aussieht als ob ich auf diese Frage antworten würde. > > Wenn du wirklich nur ein symmetrisches Rechtecksignal erzeugen willt, > solltest du CTC (Mode 2) benutzen. Und lies dir noch mal den Abschnitt > 'Modes of Operation' im Datenblatt durch. > Nein, das möchte ich nicht direkt, eigentlich geht es mir um diese Sache wo es einmal im Datenblatt auf der Seite 64 unten im Abschnitt heißt wenn OCR0A = 0 ist, dann gibt es nur ein Spike. Und zum anderen halt die Geschichte, wenn OCR0A = 0 und COM0x1:0 = 1 dann symetrischer Rechteckgenerator. Wie Du wieder einmal liest halte ich mich sehr lange an einer Sache auf, weil immer noch vieles aus dem Datenblatt für mich unverständlich ist und ich ausserdem fürchterliche Fehler mache. The extreme values for the OCR0A Register represents special cases when generating a PWM waveform output in the fast PWM mode. If the OCR0A is set equal to BOTTOM, the output will be a narrow spike for each MAX+1 timer clock cycle. Setting the OCR0A equal to MAX will result in a constantly high or low output (depending on the polarity of the output set by the COM0A1:0 bits.) Bernd_Stein
Hi >Seite 64 unten im Abschnitt heißt wenn OCR0A = 0 ist, >dann gibt es nur ein Spike. Das gilt nur wenn OCR0A als Compare-Register fungiert. Aber das tut es im Mode 7 nicht. Dort ist OCR0A der Top-Wert des Timers. Das sind zwei paar Schuhe. 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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.