Forum: Mikrocontroller und Digitale Elektronik Rechtecksignalerzeugung ATmega8


von Manuel B. (modellbahner)


Lesenswert?

Hallo Forenmitgleider,

erstmal wünsche ich Euch frohe Weihnachten.
Gleichzeitig habe ich eine Frage an Euch:

Ich möchte folgendes Protokoll auf einem AVR (ATmega8 - 16MHz) 
implementieren:
http://home.mnet-online.de/modelleisenbahn-digital/Dig-tutorial-start.html

Jedoch weiß ich noch nicht mit welchem Timer/PWM-Modus man die drei 
Zustände erzeugen kann. Soll ich den CTC-Modus nehmen, oder Fast-PWM?

Und ja, ich weiß, dass die anderen Softwareprojekte den UART mit 38400 
BAUD dazu zweckentfremden. Ich möchte mich lieber mit den Timern 
beschäftigen und den UART für spätere Kommunikationen mit einem PC 
nutzen.

Gruß Manuel

von Matthias D. (marvin42)


Lesenswert?

Ich würde es vielleicht mal mit einem Timer versuchen, der alle 26µs 
einen internen Interrupt auslöst. Wenn du das trinäre Kommandowort als 
character string mit 9 Stellen betrachtest, zB "011-01011", dann kann 
deine Interruptroutine die einzelnen TriBits der Reihe nach 
durchschieben und senden.

von Oliver S. (oliverso)


Lesenswert?

Kannst du machen, wie du willst. Bei 16Mhz sind 26us halt nur 61 Zyklen. 
Das reicht zwar prinzipiell, um im CTC Modus alles "zu Fuß" in einer ISR 
abzuwickeln, allerdings musst du da dann schon Zyklen zählen. Wenn du 
den Ausgang per Hardware-PWM schaltest, wird es entspannter.

Oliver

von chris (Gast)


Lesenswert?

guck mal in die codesammlung auf dieser website.

welche sprache nutzt du denn ?

von kläb (Gast)


Lesenswert?

Wie wäre es mit einem uC der 2 UART besitzt?

von Andreas H. (ahz)


Lesenswert?

Oliver S. schrieb:
> Bei 16Mhz sind 26us halt nur 61 Zyklen

Hallo Oliver

Wie kommst Du denn auf 61 Zyklen ?

Die Timer werden doch mit clk_i/o betrieben und das ist doch im 
einfachsten Fall clk_sys. Also 416 Zyklen oder hab ich mich da 
verrechnet ?

Grüße
Andreas

von Oliver S. (oliverso)


Lesenswert?

Andreas H. schrieb:
> Oliver S. schrieb:
>> Bei 16Mhz sind 26us halt nur 61 Zyklen
>
> Hallo Oliver
>
> Wie kommst Du denn auf 61 Zyklen ?

Keine Ahnung ;)

Du hast natürlich Recht, es sind 416 Zyklen.

Oliver

von Andreas H. (ahz)


Lesenswert?

Oliver S. schrieb:
> Du hast natürlich Recht, es sind 416 Zyklen.

Puh, ich hatte schon befürchtet mein Taschenrechner gibt den Geist auf 
;-)

Grüße
Andreas

von Ulrich (Gast)


Lesenswert?

Das Signal ist eine Kombination aus 2 PWM Signalen. Einmal 26 µs H und 
182 µs L und dem Entgegengesetzten. Je 2 Perioden des PWM Signals werden 
für Zeichen (O,1, offen) genutzt.

Dafür müsste man nur einen Timer das Passende PWM Signal (208 µs Länge 
und Pulslänge von 26 bzw. 182 µs) erzeugen passen und jeweils nach jeder 
Periode anpassen.

von Manuel B. (modellbahner)


Lesenswert?

Danke für eure Tipps.
Mein erster Gedanke war den CTC-Modus zu nutzen, aber jetzt, wo Ulrich 
die simple Idee geliefert hat, werde ich wohl solch eine Lösung 
ausprobieren.

Das wird aber noch einige Zeit dauern, da ich leider kein Oszi besitze 
(ich geh dann zu Bekannten) und Anfang des nächsten Jahres weniger Zeit 
habe, wegen dem anstehendem Abitur.

Ach ja: Das ganze möchte ich eig. in C umsetzen. Falls die Performance 
bei den kleinen Timings zu schlecht ist, muss ich natürlich auf 
Assembler setzten. Ich werde aber ersteinmal ein Test mit einem C 
Programm machen (und hoffen, dass es wirklich keine 61 Zyklen sind :D ).

Gruß Manuel

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.