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
Ja, das ist so. Du bekommst pro Durchlauf nur einen Interrupt / eine Flanke, da die Änderung erst beim Überlauf übernommen wird:
1 | The OCR0x Registers are double buffered when using any of the Pulse Width Modulation |
2 | (PWM) modes. [..] The double buffering synchronizes the update of the OCR0x Compare |
3 | Registers to either top or bottom of the counting sequence. |
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.
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.
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.