mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ATtiny13 LED-blinken an PB2 und PWM-Mode 7 nicht möglich


Autor: Bernd Stein (bernd_stein)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

möchte den ATtiny13 im Fast PWM-Mode (7) betreiben und zwar so das 
OC0A-PB0(Pin5) und OC0B-PB1(Pin6) parallel geschaltet werden können.

Zusätzlich möchte ich an PB2 (Pin7) mittels Timer0 Overflow eine LED als 
Programmlaufanzeige (PLA) blinken lassen.
Das blinken der LED an PB2 (Pin7) funktioniert auch, allerdings nur 
solange
bis ich im Timer/Counter0 Control Register B (TCCR0B) das Bit 3 (WGM02)
und nur dieses zusätzlich setze, dann blinkt die LED an PB2 nicht mehr 
Sichtbar bzw. ist ständig an.

in   A,TCCR0A          ;...Timer/Counter0 Control Register A laden...
ori  A,0b10100011  ;...clear on Match, set at Top...
out  TCCR0A,A    ;...fuer OC0A und OC0B einstellen.


in   A,TCCR0B
ori  A,0b00001010
out  TCCR0B,A

ldi  A,0b00000010  ;Timer/Counter0 Overflow Interrupt...
out  TIMSK0,A    ;...enablen (TOIE0)

Habe keine FUSE oder LOCK-Bits geändert.
Habe im AVR-Simulator die Bits nochmals geprüft und das Datenblatt 
öfters zu Rate gezogen, kann den Fehler jedoch nicht entdecken.
Hoffe jemand von euch tut es.

Habe das komplette Programm als Dateianhang hinzugefügt.

Bis dann
Bernd_Stein

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es ist ne blöde Idee, im Main und Interrupt die gleichen Register (A,B) 
zu verwenden.

Der Interrupt zerstört die Werte des Main oder man muß die Register 
extra push-/popen.

Du hast 32 Register, da ist übertriebenes Sparen unnötig.


Peter

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

>möchte den ATtiny13 im Fast PWM-Mode (7) betreiben und zwar so das
>OC0A-PB0(Pin5) und OC0B-PB1(Pin6) parallel geschaltet werden können.

Im PWM-Mode7 ist OCR0A Das Register für Top. Damit steht es nicht mehr 
als PWM-Kanal zur Verfügung.

Die Initialisierung der OC-Register fehlt auch.

MfG Spess

Autor: Bernd Stein (bernd_stein)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Peter Dannegger schrieb:
> Es ist ne blöde Idee, im Main und Interrupt die gleichen Register (A,B)
> zu verwenden.
>
> Der Interrupt zerstört die Werte des Main oder man muß die Register
> extra push-/popen.
>
> Du hast 32 Register, da ist übertriebenes Sparen unnötig.

Oh ja Danke,

eigentlich weiß ich so etwas,
habe aber wohl vor lauter Bäumen den Wald nicht gesehen.
Habe dies korrigiert und weiß dadurch und durch spess53,
das es nicht am Bit3 (WGM02) im TCCR0B liegt,
sondern daran das ich die OC0RA & OCR0B Register nicht initialisiert 
habe.

Somit kommen zwei Dinge zum Tragen.

Zum einen Note 1. auf den Datenblattseiten 68 & 69

" A special case occurs when OCR0A equals TOP and COM0A1 is set.
In this case, the Compare Match is ignored,
but the set or clear is done at TOP.
See “Fast PWM Mode” on page 63 for more details. "

Was bedeutet das im Fast PWM-Mode 7 wo TOP = OCR0A ist und die
Bits COM0A1 & COM0B1 bei mir gesetzt sind - das die Ausgänge immer auf 
eins sind.

Zum anderen der Ausschnitt aus dem Datenblatt Seite 64

..." 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. "...

Was meinem Fehlerbild sehr entspricht, da die LED,
wenn sie nach GND (0) geschaltet wird leuchtet.
Und ich habe ja durch nicht initialisieren der OCR0A & OCR0B Register 
diese bei dem Wert Null belassen was ja BOTTOM entspricht.
Also habe ich nur ein paar Spikes erzeugt und andauernd einen 
Timer/Conunter0 Overflow erzeugt, da das TOV0-Flag bei TOP
( in diesem Fall TOP = OCR0A = 0 ) gesetzt wird.

Bis demnächst
Bernd_Stein

Autor: Bernd Stein (bernd_stein)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
spess53 schrieb:
> Im PWM-Mode7 ist OCR0A Das Register für Top. Damit steht es nicht mehr
> als PWM-Kanal zur Verfügung.
>
> Die Initialisierung der OC-Register fehlt auch.
>
> MfG Spess

Herzlichen Dank,

die Initialisierung der OCR0x-Register war genau die Ursache.

Die Erklärung hierzu habe ich bei Peter Dannegger geschrieben.

Bis demnächst
Bernd_Stein

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.