elegante serielle 8N1 TX in Software? AVR, C

Gast #698673
Hi,

ich bräuchte mal nen Anstoss für eine elegante Lösung.
Und zwar habe ich einen 4.8kHz Timerinterrupt und die Endlosschleife in 
Main zur Verfügung.

Dort zählt ggf. eine Variable von 10 herunter und entscheidet daran:

10  -> 1 Startbit
9-2 -> 8 Datenbits einer Byte-Variable
1   -> 1 Stoppbit

Das funktioniert eigentlich ganz gut.

Unzufrieden bin ich mit der eigentlichen Übertragung.
In der Endlosschleife wird die Variable von oben auf Null und eine 
weitere Zählvariable auf 3 geprüft (3 Zeichen übertragen).
Dann wird jeweils der gewünschte Wert gesetzt, und beide Zählvariablen 
aktualisiert.

Das erscheint mir umständlich, deswegen würde ich mich über bessere 
Vorschläge freuen!
Gast
Hi,

das wäre der 'eigentlich ganz gut' funkionierende Teil ohne Zählvariable 
aber mit 16 Bit Daten...

Und zwar wesentlich übersichtlicher!
Spart auch noch Speicher!

Und ist schneller?

Jedenfalls danke, ich hatte das mal angedacht..hätte ich es mal 
umgesetzt..


Jetzt bräuchte ich allerdings noch eine Art Ausgabeschlange, an die ich 
bei Gelegenheit einfach Zeichen dranhängen kann. Wie heißt sowas?
Gast
als Antwort auf welche Frage?

suart.c:79
1
 while( stx_count ); // until last byte finished

soll wohl 'bit' heißen ?

wenn ich das richtig verstehe, ist main für die dauer der übertragung 
blockiert. dann wird natürlich auch keine 'ausgabeschlange' benötigt..

ich dachte, das kann man noch pfiffiger machen?
Seb wrote:
> suart.c:79
>
1
>  while( stx_count ); // until last byte finished
2
>
>
> soll wohl 'bit' heißen ?

Ne, Byte.
Es wird erst ein neues Byte gesendet, wenn das vorherige Byte fertig 
ist, also der Bitcounter 0 ist.

> wenn ich das richtig verstehe, ist main für die dauer der übertragung
> blockiert. dann wird natürlich auch keine 'ausgabeschlange' benötigt..

Das Beispiel ist ungepuffert.
Da aber Empfang und Senden über Interrupts erfolgt, kann man natürlich 
auch eine Pufferung dazu basteln.

Macht man dann genau so wie bei ner HW-UART, daher hab ichs nicht extra 
dazu geschrieben.


Peter
Gast
> Ne, Byte.
Stimmt, ist egal.

Na ich feil noch ein bisschen dran rum, zumindest sieht es jetzt relativ 
ordentlich aus.
Hat denn so eine Pufferung einen speziellen Namen? Würde ich mir bei 
Gelegenheit gerne mal aneignen.
(Firma: DC3AX)
Hi!
AVR304 kann ich nur empfehlen. Funktioniert einwandfrei und ist leicht 
auf andere Bitzahlen modifizierbar. Musste mal ein 21-Bit serielles 
Interface adaptieren und das ging sehr gut, zumal dieser Code 0% Fehler 
bzgl. des Timings ermöglicht.

Gruß, Ulrich

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 19 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.