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
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.
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
guck mal in die codesammlung auf dieser website. welche sprache nutzt du denn ?
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
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
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
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.