www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Frage zum USART


Autor: Andreas Palm (Gast)
Datum:

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

Autor: Frank Simon (Gast)
Datum:

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

Autor: Andreas Palm (Gast)
Datum:

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

Autor: TravelRec. (Gast)
Datum:

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

Autor: Andreas Palm (Gast)
Datum:

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

Autor: Andreas Palm (Gast)
Datum:

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

Autor: Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
die grösseren wie ATmega162 haben 2 USARTs...

Autor: Alisa 1387 (Gast)
Datum:

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

Autor: Alisa 1387 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja gibts - XR68C681 - und kostet etwa soviel wie ein Microcontroller

Autor: Rufus T. Firefly (Gast)
Datum:

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

Autor: dds5 (Gast)
Datum:

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

Autor: Gast (Gast)
Datum:

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

Autor: Thomas Burkhardt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Gast,

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

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.