Forum: Mikrocontroller und Digitale Elektronik 2 Takte gegenphasig ausgeben mit ATMEGA32


von Stefan_KM (Gast)


Lesenswert?

Hallo zusammen.

Ist es möglich mit den Timern im ATMEGA32 zwei Takte (Rechtecksignale) 
auszugeben, die genau um 180° Phasenverschoben sind?

Da es ja nur 2 8 bit Timer gibt (besser wären 2 16 bit Timer) sollte es 
mit den beiden 8 bit Timern realisiert werden.

Wäre es ein Ansatz den zweiten Timer einfach nach der halben 
Periodendauer meiner Frequenz einzuschalten?

Oder gibt es eine andere Möglichkeit?
Danke euch.

von Klaus D. (kolisson)


Lesenswert?

Warum schaltest du nicht einfach nen Inverter an einen Outpin ?

.. oder verwendest z.B. einen Tiny 25 . Der hat nämlich OC1A und /OC1A
Ausgänge

Gruss K.

von H.Joachim S. (crazyhorse)


Lesenswert?

Geht schon.
Timer1, PWM mit Top ICR1
OCR1A inverted, OCR1B non inverted

Frequenz stellst du mit Vorteiler und ICR1 ein, OCR1A=OCR1B=1/2ICR1

von Stefan_KM (Gast)


Lesenswert?

Inverter geht nicht, da ich den Takt ab und zu auschalten muss und dann 
müssen beide Ausgänge auf low sein.

Aber die Idee mit OCR1A invertiert und OCR1B nicht invertiert klingt 
vielversprechend. Dann brauch ich auch nur einen Timer.

Super. Danke erstmal.

von Stefan_KM (Gast)


Lesenswert?

Takt habe ich erzeugt mit Timer 1 an OCR1A und OCR1B. Aber wie gekomme 
ich nun B invertiert?

von Michel (Gast)


Lesenswert?

Stefan_KM schrieb:
> Takt habe ich erzeugt mit Timer 1 an OCR1A und OCR1B. Aber wie gekomme
> ich nun B invertiert?

Indem du den Mode mit COM1B1/COM1B0 entsprechend Datenblatt passend 
setzt

von Stefan_KM (Gast)


Lesenswert?

Ok, habe ich gemacht. Habe jetzt an A ein high Pegel und an B ein low 
Pegel. Aber kein Takt in sicht.
Ich habe in ICR1 0x0100 stehen. Aber der Takt liegt nicht an?

Was habe ich vergessen?

von Uwe (Gast)


Lesenswert?

Lass uns mal Alle zusammen in die Glaskugel sehen !

von Stefan_KM (Gast)


Lesenswert?

OK, sorry.

Habe folgendes gemacht:

TCCR1A=0xB2;
TCCR1B=0x11;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x05;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

von H.Joachim S. (crazyhorse)


Lesenswert?

Du musst natürlich auch in OCR1A/B was reinschreiben. Sonst hast du 0% 
PWM.
Was bei non-inverted-PWM dauerhaft L, bei inverted-PWM dauerhaft H 
bedeutet :-)

von Stefan_KM (Gast)


Lesenswert?

Ich habe jetzt jeweils FF rein geschrieben.

Kein Wirkung. Als ob ich vergessen habe den Timer zu starten.

von Stefan_KM (Gast)


Lesenswert?

Nur in die jeweiligen L Teile der 16 Register.

von H.Joachim S. (crazyhorse)


Lesenswert?

Tja, ein Wert oberhalb des Zählbereichs (ICR1=0x0005) hilft nicht 
wirklich :-)

von Stefan_KM (Gast)


Lesenswert?

Dann habe ich wohl den Zusammengang noch nicht verstanden.
Da werde ich nochmal das Datenblatt anschauen müssen. :-)

von H.Joachim S. (crazyhorse)


Lesenswert?

Der Timer läuft vo 0 bis ICR1 und zurück. (bei fast-PWM folgt auf den 
top-Wert direkt wieder 0)
Erreicht der Zählerstand nun den OCR-Wert, wird der Ausgang direkt von 
der Hardware gesetzt/gelöscht.
Da beide den gleichen Wert haben, passiert das gleichzeitig, aber 
gegenphasig.

ICR1=0x0080
OCR1A=0x0040
OCR1B=0x0040

kann sein, dass die OCR-Werte noch um 1 korrigiert werden müssen, um ein 
50:50-Signal zu erhalten, müsste ich nachschauen.

von Stefan_KM (Gast)


Lesenswert?

Ich habe den phase and frequency correct PWM gewählt. Ich bekomme an den 
Ausgängen den Takt wie gewünscht auch gegenphasig.
Ich habe aber noch nicht verstanden wie das intern abläuft und wo der 
Unterschied zu den anderen Modi ist

Auf jeden Fall habe ich jetzt versucht wie bereits erwähnt den Takt in 
betimmten Intervallen ab- und wieder anzuschalten. Ich halte dazu den 
Timer an in dem ich den Prescaler mit 0 0 Lade. Anschließend gebe ich 
die PORT PIN Funktion wieder frei (in meinem Fall an A und B low).

Wenn ich den Takt wieder zuschalte gehe ich in umgekehrter Reihenfolge 
vor. Wenn ich mir nun die Signale auf dem Oszi anschaue, kann dieser das 
Signal nicht mehr richtig triggern.

Ist es ein Problem wenn die Aus- Dauer länger ist als die An- Dauer? 
Irgendwie scheint der Zeitpunkt des Ein- und Ausschaltens immer ein 
anderer zu sein.

Muss ich eventuell noch das Zählregister TCNT löschen?

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.