mikrocontroller.net

Forum: Compiler & IDEs Codeschnipsel ATMEGA Soft UART (ohne ISR)?


Autor: Volkhard (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie soll denn das gehen? Wie gedenkst du das Timing einzuhalten?

Autor: Kai Klenovsek (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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 :-).

Autor: Andreas W. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schau mal auf http://elm-chan.org nach. Ich glaube der hat sowas schon
mal geschrieben.

Gruß
Andreas

Autor: Volkhard (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: mthomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"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

Autor: Sssssss (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Andreas W. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.