elegante serielle 8N1 TX in Software? AVR, C

Gast #698673
Lesenswert?
• ▲
▼
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 #698704
Lesenswert?
• ▲
▼
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 #698789
Lesenswert?
• ▲
▼
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?
#698808
Lesenswert?
• ▲
▼
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 #698818
Lesenswert?
• ▲
▼
> 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) #699251
Lesenswert?
• ▲
▼
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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren