mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Softstarter und TIMER0


Autor: Herb B. (s-stoerung)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe folgendes Problem.
Ich realisiere zurzeit einen Softstarter für Motoren und die Hardware 
funktioniert prima und ist auch nicht das Prob.
Sondern die Software... Genauergesagt der Timer0.
Daten:
Prozessor: ATMEGA168
11,0592 Mhz
Phasenanschnitt
Der Nulldurchgang kommt über ne fallende Flanke jede Periode rein und 
löst den Interrupt0 aus.
Die Triacs hängen an OC0A und OC0B bzw. PD5 und PD6.
Ich synchronisiere jeden Nulldurchgang den Timer0 im Interrupt und lade 
dann die Zündvariable OCR0B ins Compare Register um den ersten triac bei 
Compare in der ISR zu zünden, durch setzen der Ausgänge oder toggeln des 
timers.
 Bei diesem CompareB ISR lade ich dann auch den nächsten Wert ins OCR0B 
um beim 2. Compare wieder abzuschalten.

Jetzt sieht es aber so aus als ob ich wärend des laufenden Timers keinen 
neuen Wert in OCR0B oder A schreiben kann.
Zumindest habe ich nur ein Compare wärend einer Periode... Das ist 
merkwürdig. Weiß da einer genau über den compare bescheid???
Mir ist schon klar das die Werte größer sein müssen da sonst der timer 
schon vorbei is ;)

TNX

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, das ist so.  Du bekommst pro Durchlauf nur einen Interrupt / eine 
Flanke, da die Änderung erst beim Überlauf übernommen wird:
The OCR0x Registers are double buffered when using any of the Pulse Width Modulation
(PWM) modes. [..] The double buffering synchronizes the update of the OCR0x Compare
Registers to either top or bottom of the counting sequence. 

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn Du den PWM-Ausgang abschaltest, kannst Du das Compare-Register so 
oft setzen, wie Du lustig bist und bekommst jedes Mal (bei jedem Match) 
einen Interrupt.  Vielleicht ist es also eine Lösung, den OC0x nicht von 
der PWM-Logik aus setzen zu lassen, sondern „von Hand“ im 
OC0x-Interrupt.  Der Jitter ist dann natürlich größer.

Autor: Herb B. (s-stoerung)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ok, hab aber vergessen zu sagen das ich im normal mode bin.
Dort kann pro Timer durchlauf und CompareA oder B auch nur ein Interrupt 
ausgelöst werden? Ich hab nur gelesen das im normal mode die register 
nicht double buffered sind.

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.