Forum: Mikrocontroller und Digitale Elektronik Full-Duplex UART auf ATmega32


von Jakob Keres (Gast)


Lesenswert?

Hallo,

hat jemand schon mal einen Full-Duplex UART programmiert? Ich habe
bisher nur Informationen zu Half-Duplex gefunden. Meiner Meinung nach,
sollte Full-Duplex mit wenig mehr Aufwand ebenfalls möglich sein.
Oder täusche ich mich?

Gruß
Jakob

von Peter Dannegger (Gast)


Lesenswert?

meinst Du eine SW-UART ?

Die HW-UART ist immer Full-Duplex, d.h. Senden und Empfang sind
getrennt, lediglich die Baudrate ist für beide die selbe. Bzw. beim
8052 kann man auch die getrennt einstellen.


Peter

von Jakob Keres (Gast)


Lesenswert?

> meinst Du eine SW-UART ?

Oh sorry. Ja, den meine ich. Die USART-Schnittstelle habe ich schon
verbraucht.

Gruß
Jakob

von cazy horse (Gast)


Lesenswert?

geht, aber nur für niedrige Baudraten, bei 9600 wirds schon kritisch,
wenn der MC auch sonst noch was zu tun hat.
-such dir einen MC mit 2 UARTs
-strick eine SPI-UART (www.maxim-ic.com) dran.
-programmiere einen Tiny2313 als SPI-UART

von Jakob Keres (Gast)


Lesenswert?

Ich sehe schon, der SW-UART muss weg. Wird dann wohl auf den MAX3100
hinauslaufen. (Den meintest du doch?)
Danke schön.

Jakob

von Peter Dannegger (Gast)


Lesenswert?

Full Duplex in SW geht wohl:

Nimm den Captureinterrupt zur Starterkennung und den Compareinterrupt
um danach die Bits abzutasten.
Und den anderen Compareinteruppt nimmst Du zum Senden (immer set on
compare bzw. clear on compare je nach Sendebit auswählen).

Damit ist das ganze schön jitterfrei.

Andere Interrupts dürfen aber nicht länger als 1 Bitzeit blockieren.
Bei 38,4kBaud und 16MHz sind das 416 Zyklen, sollte also gehen.


Peter

von Jakob Keres (Gast)


Lesenswert?

> Andere Interrupts dürfen aber nicht länger als 1 Bitzeit blockieren.
> Bei 38,4kBaud und 16MHz sind das 416 Zyklen, sollte also gehen.

Hmm, 416 für Senden und Empfangen. Aber bei 96k sind das nur noch 83
Zyklen pro Richtung. Wird wohl langsam ein bisschen knapp.

Zum Thema SPI-UART:
Woran erkenne ich, dass z.B. Max3100 all meine Daten verschickt hat und
ich ihn nicht mit Daten überflute, die er gar nicht mehr versenden kann?

Das SPI-Flag sagt mir ja nur, dass die Daten zwischen µC und Max
erfolgreich ausgetauscht wurden.

Gruß
Jakob

von Michael (Gast)


Lesenswert?

>>Hmm, 416 für Senden und Empfangen. Aber bei 96k sind das nur noch 83
>>Zyklen pro Richtung. Wird wohl langsam ein bisschen knapp.

Ich muß schon lachen !
Da wird vorgerechnet, daß ein SW-UART durchaus mit 38,4kBd funktioniert
(was ich nur bestätigen kann) und daß genug Zyklen für den
'Hintergrund' bleiben.
Gleich wird eine neue Anforderung gestellt: 96kBd.
Wenn jemand jetzt ein passable Lösung für 96kBd vorbringen würde, wird
die Baudrate vielleicht auf 10MBd erhöht.
Immer wieder toll, was sich Leute einfallen lassen, um jede Lösung ad
absurdum zu führen :-)

von Jakob Keres (Gast)


Lesenswert?

> Ich muß schon lachen !
> Da wird vorgerechnet, daß ein SW-UART durchaus mit 38,4kBd
> funktioniert (was ich nur bestätigen kann) und daß genug
> Zyklen für den 'Hintergrund' bleiben.
> Gleich wird eine neue Anforderung gestellt: 96kBd.
> Wenn jemand jetzt ein passable Lösung für 96kBd vorbringen
> würde, wird die Baudrate vielleicht auf 10MBd erhöht.
> Immer wieder toll, was sich Leute einfallen lassen, um jede
> Lösung ad absurdum zu führen :-)

Ich glaube, da hast du nicht alles ganz aufmerksam gelesen. Eigentlich
wollte ich zu Anfang nur wissen, ob SW-Full-Duplex-UART was
prinzipielles im Wege steht, bis Peter schrieb, 38k gingen. Ich hätte
aber gern 96k. Das war schon immer so, hatte ich aber nicht erwähnt.
Also, falls due mir ne tolle Lsg. dafür anbietest: Immer her damit!
Schneller soll's bestimmt nicht werden :)

Ansonsten wäre ich jetzt wieder beim Thema ext. SPI/UART, und wie ich
den Datenfluss handhabe.

Viele Grüße
Jakob

von hans dieter (Gast)


Lesenswert?

super 166 zyklen für jedes bit bei 16 Mhz ist doch schon, dass kann man
ja fast noch in hochsprache schreiben!
Ansonsten kann man das ja noch in assembler schreiben, dass sollte dann
noch reichlich zeit für den rest lassen.

von Peter Dannegger (Gast)


Lesenswert?

"Ich hätte aber gern 96k."

Naja, die wichtigsten Sachen schreibt man ja auch nicht erst im 7.
Post.

Die Software-UART sollte man auch immer für die kleinere Baudrate
benutzen.


Ich glaub, die Maxims sind auch nicht gerade billig, da könnte ein
ATTiny2313 als SPI-Slave ne echte Alternative sein.


Peter

von cazy horse (Gast)


Lesenswert?

jo, das war bei mir der k.o.-Grund. Wenn ich mich recht erinnere,
sollten die um die 8€/Stk bei 100 kosten. Da habe ich mir dann lieber
den Mega128 gegönnt, der kostete weniger als die nackte Zusatz-Uart.
Ich finde das Teil gut, aber der Preis stimmt hinten und vorne nicht.
Als Notanker in ein bestehendes System zu werfen - ok. Aber beim
Neudesign einzuplanen - ne.

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
Noch kein Account? Hier anmelden.