Forum: Mikrocontroller und Digitale Elektronik Frage zum USART


von Andreas Palm (Gast)


Lesenswert?

Hallo!

Also ich bin noch relativ neu hier und muss erstmal sagen, dass ich
hier schon viele Infos gefunden habe, die mir sehr weitergeholfen
haben. Dafür schonmal herzlichen Dank!

Jetzt habe ich mal eine Frage:
Ich benutze einen ATmega8. Es gibt dort einen "sub" der in keinem
Fall gestört werden darf, daher schalte ich vorher die interrupt ab und
danach wieder an. Was passiert denn nu, wenn in dem Moment ein Byte über
den USART (am PC) ankommt und nicht schnell genug verarbeitet werden
kann, bis das nächste byte eintrifft (bei 115200 baud ist ja nich viel
zeit zwischen den bytes)? merkt der PC das irgendwie, und wartet dann?
Kann er ja eigentlich nicht, wenn nur RX und TX genutzt werden, oder?
Man müsste doch dann das RTS und CTS nutzen, oder? Während die
Interrupts abgeschaltet sind ist CTS low, so dass der PC weiß, dass der
µC nicht bereit ist.

Ist meine Überlegung richtig? Oder gibt es da noch sub-Signale die der
USART selber über die TX leitung schickt um zu sagen "verstanden" oder
"nicht verstanden"?

Wenn es zu Datenverlust kommen kann: Wie könnte man das verhindern?
Habt ihr da eine Idee?

Vielen Dank für eure Antwort schonmal im Vorraus!
Andi

von Frank Simon (Gast)


Lesenswert?

Hallo, der übliche Weg ist, den RX-Interrupt nicht zu sperren, sondern
die Daten nur flott beiseite zu schaffen (dauert vielleicht 1-2us) und
schnell zurück zu springen. Generell ist es nicht schön, Interrupts
lange zu sperren, das bringt dir für jede weitere Änderung oder
Erweiterung des Programms das gleiche Risiko, dass die Reaktionen nicht
schnell genug sind.
Was du über RTS/CTS vermutest, ist richtig. Das gleiche ohne
zusätzliche Signale wäre Xon/Xoff (auch Software-Handshaking genannt).
Das macht der Mega8 aber beides nicht heimlich, das wäre Deine Aufgabe,
wenn du das so haben willst.

von Andreas Palm (Gast)


Lesenswert?

Zunächst mal danke für die schnelle Antwort!

Um konkreter zu werden: Es soll ein DMX-Interface werden. Ich muss ja
ein DMX-Signal nach RS485-Standard erzeugen. Soweit so gut, dann müsste
ich die Interrupts ja eigentlich nur während des Senden eines Bytes
unterbrechen... zwischen stoppbit und nächstem byte kann ich da schnell
den Interrupt ausführen? Die Kiste wird mit 16MHz laufen, also wird das
wahrscheinlich noch nicht mal eine µs dauern...

Zu der anderen Möglichkeit: Ich habe ja noch ein paar Ports frei... Da
könnte ich doch den CTS an einen dranhängen und auf low setzen, wenn
der PC nicht senden darf, oder? Das müsste dann ja auch gehen, oder?

Dann noch eine Frage zum Takt: 16MHz, es wird ja mit Hilfe dieses Takts
ein RS485-Signal erzeugt, weshalb der ja wahrscheinlich ziemlich genau
sein sollte, oder? Was sollte ich da am besten als Taktgeber nehmen?
Reicht ein RC-Glied oder Quarz oder sollte es ein Oszillator sein?

Gruß
Andi

von TravelRec. (Gast)


Lesenswert?

Hardware-Handshaking ist gut und Sinnvol, wenn da noch Leitungen frei
sind, meist hat der PC mehr Luft und genügend Puffer, so daß es da eher
nicht problematisch wird. Du solltest Deinem Atmel möglicht viel Reserve
einräumen, weil ein verpaßtes oder verhunztes DMX-Signal ist schlimmer,
glaube ich. Als Taktgenerator in jedem Fall einen möglichst
temperatustabilen Quarz einsetzen. Ach ja, und der
Schnittstellen-Converter sollte auch genügend Speed verkraften können
(der zwischen PC und Interface), sonst gibt´s da Trouble mit
verrauschten Bits.

von Andreas Palm (Gast)


Lesenswert?

Was meinst du mit genügen Speed? Welchen Converter würdest mir da
empfehlen?

Aber meine Logik war richtig? Wenn ich dem PC das senden steuern will
ist die Logik: CTS=0 senden verboten und CTS=1 senden erlaubt

Wie ist das mit dem dem Interrupt verarbeiten zwischen zwei Bytes? Wird
das vom RS485-Protokoll toleriert? Weißt du das zufällig?

von Andreas Palm (Gast)


Lesenswert?

Da fällt mir noch was ein:

Zur Generierung des DMX-Signals... das könnte ja auch der USART
machen... der wird aber ja vom PC belegt! Gibt es einen ähnlichen µC,
der 2 USARTS hat? Nur so eine Idee...

von Rahul (Gast)


Lesenswert?

die grösseren wie ATmega162 haben 2 USARTs...

von Alisa 1387 (Gast)


Lesenswert?

Gibt es eigentlich einen Hardware UART im DIP-Gehäuse? Ich hätte gern
bis zu 4 oder 8 UARTS an einem AVR...

von Alisa 1387 (Gast)


Lesenswert?

Ja gibts - XR68C681 - und kostet etwa soviel wie ein Microcontroller

von Rufus T. Firefly (Gast)


Lesenswert?

Natürlich. Von ziemlich vielen Herstellern sogar:

Motorola 6850 (benötigt externen Baudratengenerator)
Rockwell 6551 (interner Baudratengenerator)
Exar 68681 (zwei Schnittstellen, int. Baudrate)

Intel 8250 (der "Urvater" der seriellen Schnittstelle, wie sie in PCs
verbaut wird, int. Baudrate)
National Semiconductor 16450 (Nachfolger 8250), 16550 (mit Sende- und
Empfangsfifos)

Von letzteren gibt es auch Zwei- und Vierfachausführungen im
PLCC-Gehäuse, das mit entsprechenden Sockeln auch in handlötbare
Dimensionen kommt, 16552 und 16554, Hersteller ist unter anderem TI.

Reichen die?

von dds5 (Gast)


Lesenswert?

Von Philips gibt es auch einen achtfach USART - SCC2698 - im PLCC84
Gehäuse.
Beim Anschauen des Preises bitte festhalten!  Bei Segor z.B. 48 Euro.
Also besser mehrere 2- oder 4-fach Bausteine nehmen.

Dieter

von Gast (Gast)


Lesenswert?

Hallo,

seit wann kann man bei einer RS485-Schnittstelle mit
RTS/CTS protokoll arbeiten? Wenn ich die Sepz. richtig
im Kopf habe, wird als Verbindung eine Leitung mit 2 Adern
benutzt, von Steuerleitungen wie bei RS232 ist da nirgendwo
die Rede.

mfg

Gast

von Thomas Burkhardt (Gast)


Lesenswert?

Hallo Gast,

der Teilnehmer will das CTS auf der Seite zum PC benutzen...

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.