Gast
#238448
Hallo an alle hilfswütigen.... Für mein aktuelles Projekt müsste ich einen Soft UART ohne Verwendung eines Interupts realisieren. Hat jemand das schon mal unter C umgesetzt oder weiß eine Fundstelle?
|
Anzeige
|
Codeschnipsel ATMEGA Soft UART (ohne ISR)?
Gast
#238448
Hallo an alle hilfswütigen.... Für mein aktuelles Projekt müsste ich einen Soft UART ohne Verwendung eines Interupts realisieren. Hat jemand das schon mal unter C umgesetzt oder weiß eine Fundstelle?
Gast
#238449
Wie soll denn das gehen? Wie gedenkst du das Timing einzuhalten?
Gast
#238450
Wenn es nur darum geht keine Interrupts zu nutzen, kannst auch ohne
Probleme den eingebauten USART verwenden.
Ansonsten musst Du die Daten Bit für Bit auf einem Portpin rauss takten
und beim einlesen per polling die Daten rein holen.
> Wie soll denn das gehen? Wie gedenkst du das Timing einzuhalten?
Antworten beantwortet man nicht mit Gegenantworten :-).
Gast
#238451
Schau mal auf http://elm-chan.org nach. Ich glaube der hat sowas schon mal geschrieben. Gruß Andreas
Gast
#238452
Die USARTs kann ich nicht nehmen, da die bereits für andere Kommunikationslinks eingeplant sind. Was das Timing betrifft, meine ich irgendwo gelesen zu haben, dass es einen Ansatz gibt, mit einem 3fachen Oversampling zu arbeiten, d.h. mit einer dreimal höheren Rate als die Baudrate beträgt, den Receive-Pin abzutasten. Ich plane hier sowieso nur mit einer maximalen Baudrate von 19200. @Andreas: Der Link ist (vielleicht?) nicht schlecht, aber alle weiterführenden Verweise auf der Seite landen auf japanischen Contents. Nun kann ich zwar ein paar Bröckchen Japanisch sprechen, aber auf keinen Fall lesen (deshalb das "vielleicht?"). Trotzdem danke! Es existiert zu dem Prinzip ein Appnote von ATMEL, allerdings ohne Code. Meine Hoffnung war halt, etwas (halb-)fertiges zu finden.
Gast
#238453
"Irgendwo" ist mglw. eine App-Note von IAR oder meine AVR-Webseite (AVR-Anpassung der IAR-AppNote). Aber auch der "Oversampling"-Ansatz benoetigt eine Timer-ISR (allerdings keine extINT-ISR). Martin Thomas
Gast
#238454
Bei niedrigen Baudraten kann man auch einfach per asm im Bittakt samplen: warte bis startbit. warte 1/2 bitzeit warte 1 bitzeit lese leitungsstatus -> bit 7 warte 1 bitzeit lese leutungsstatus -> bit 6 ... warte 1 bitzeit lese leutungsstatus -> bit 0 warte 1 bitzeit (stopbit) warte 1/2 bitzeit beim senden halt ähnlich. Kann man sogar so machen das es sich automatisch an die Baudrate anpasst (startbitlänge messen und dann wie oben) Hab das mal auf nem tiny und auch auf einigen Ubicom SX Prozis gemacht.
Gast
#238455
http://elm-chan.org/cc_e.html -> AVR libraries for gcc projects http://elm-chan.org/docs/avrlib/suart.zip Gruß Andreas Antwort schreibenBitte melde dich an, um einen Beitrag zu schreiben. |
Anzeige
|