Forum: Mikrocontroller und Digitale Elektronik AVR mit 2 UART ansteuern


von DO1SKU (Gast)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

ich möchte gerne die PEARL-Laufschrift 
(http://www.pearl.de/a-PE9441-2430.shtml?query=led+laufschrift) mit 
einem µC und RS232 ansteuern.

Es geht darum das ein Gerät Texte in Klarschrift ausgibt (Vorweg: auf 
das Ausgabe-"Format" habe ich keinen Einfluss), die Laufschrift das aber 
nicht direkt so wiedergeben kann, sondern noch ein paar 
Konfigurationsbefehle benötigt. Ich hab in den Anhang mal ein Screenshot 
gepackt, bei dem ich den Text: TESTNACHRICHT über die von Pearl 
gestellte Software und ein Null-Modemkabel an das Terminal-Programm auf 
meinem Laptop geschickt habe.

Ich habe während meines Praktikums zwar mal mit dem UART auf dem 
ATmega88 gearbeitet, dabei ging es allerdings nur darum, wenn man einen 
Taster drückt, das dann ein Befehl per RS232 an den PC gesendet wird. 
Als µC hab ich mir den ATmega162 ausgeguckt, da dieser ja schon 
hardwaremäßig 2 UART´s besitzt.

Ich habe jedoch keine Ahnung, wie ich die beiden UART´s aktiviere und 
dann den TEXT in diesen Konfiguartions-String einfüge.

Kann mir da jemand bitte helfen ? Achja und wenn es geht bitte in C :)

von Uwe (Gast)


Lesenswert?

Hi
zu was brauchst du 2 x UART? Empfangen und Senden sind 2 verschiedene 
Sachen mit 2 Pins. Also Text empfangen, deine config dazu und ausgeben.
Es sei denn dein Terminal will eine Rückantwort.
Wo klemmt es denn da jetzt und sage bitte nicht am Lesen eines pdf.

viel erfolg, Uwe

von DO1SKU (Gast)


Lesenswert?

Stimmt, ich brauch ja gar nicht in beide Richtungen RX+TX, das heisst ja 
ein UART tut es auch. Danke für den ersten Hinweis :) Wird die Schaltung 
schon mal etwas kleiner :D

Nein also, ich habe eine Box die mir Meldungen in Klartext über die 
Serielle Schnittstelle ausgibt. Wie ich das mit dem Programm von Pearl 
simuliert habe. In diesem Fall dann halt einfach nur "TESTNACHRICHT". 
Mehr spuckt die Kiste nicht aus. Jetzt soll der µC den Rest, den man 
noch, in dem Terminal-Programm, auf dem Screenshot sieht dazu basteln 
und an die Laufschrift senden. So dass die den Text wiedergeben kann.

von Falk B. (falk)


Lesenswert?

@ DO1SKU (Gast)

>Ich habe jedoch keine Ahnung, wie ich die beiden UART´s aktiviere und
>dann den TEXT in diesen Konfiguartions-String einfüge.

Ist nicht allzu schwer. Man nutz sinnvollerweise den UART-RX Interrupt, 
um die einzelnen Zeichen zu empfangen und in einem String zu speichern. 
Wenn dann ein Steuerzeichen wir CR oder LF kommt, ist dein String vom 
Terminal zu Ende und er kann bearbeitet werden. Das macht dann eine 
Funktion in deiner Hauptschleife. Die sendet erst die Steuerzeichen, 
dann den empfangenen String und dann gff. noch ein paar Steuerzeichen. 
Das ist eigentlich recht einfach. Man kann auch die UART-Bibliothek von 
Peter Fleury nehmen, da hat man gleich einen FIFO für RX und TX Richtung 
und muss sich nicht um die Interrupts kümmern.

>Kann mir da jemand bitte helfen ? Achja und wenn es geht bitte in C :)

Auf dem Silbertablett werden wir dir den fertigen Code sicher nicht 
präsentieren.

: Bearbeitet durch User
von DO1SKU (Gast)


Lesenswert?

Oh super. Allein der "Gedankenanschub" das ich keine 2 UARTS brauche. 
Hat mir schon ganz schön weiter geholfen :)

Nein, mir geht es vor allem darum auch zu verstehen was ich da mache und 
nicht irgendeine C-File von jemanden auf meinen µC zu brennen.

Danke für deine Hilfe :)

von remote1 (Gast)


Lesenswert?

Schau dir erst einmal den Artikel hier im Forum an. Da wird schon fast 
alles erläutert:
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial/Der_UART

von oldmax (Gast)


Lesenswert?

Hi
Für den Empfang im µC würde ich einen Ringpuffer empfehlen. Dafür 
brauchst du nur einen Speicherbereich und zwei Zeiger zum Lesen und 
Schreiben. So kannst du dir eine ISR einrichten, die empfangene Daten 
einfach in den Puffer an die Stelle des Schreibzeigers überträgt und den 
Zeiger weiter stellt. Im Hauptprogramm prüfst du Schreib und Lesezeiger. 
Bei Ungleichheit holst du den Wert und führst den Lesezeiger nach. Wird 
die Puffergrenze erreicht, setzt du den entsprechenden Zeiger wieder auf 
0. Die Adressierung läuft dann indirekt über die Anfangsadresse 
Ringpuffer+ Zeiger. Ich hoffe, das ist nicht all zu kompliziert erklärt, 
aber da mein C nur aus diesem Buchstaben besteht, muss ich es bei der 
Beschreibung des Prinzips belassen. Es sei denn, du möchtest mal eine 
richtige Sprache sprechen, dann kommt Assembler... ( und natürlich nun 
auch die Diskussion zu Sprachen) ok, nicht ernst nehmen.
Um deine Laufschrift unabhängig zu machen, ist es auch sinnvoll, den 
Text in einem Textpuffer zur Ausgabe aufzubereiten. Ist aber 
speicherintensiv. Wenn du den Text vielleicht ins EEProm packst, bist du 
frei vom PC und die Laufschrift arbeitet dann autark.
Gruß oldmax

von Sascha W. (sascha-w)


Lesenswert?

DO1SKU schrieb:
> Oh super. Allein der "Gedankenanschub" das ich keine 2 UARTS brauche.
> Hat mir schon ganz schön weiter geholfen :)

Wie sind denn die Baudrate und Framekonfiguration deiner "Box" und vom 
Display? Sind die unterschiedlich, dann mach das zwar die Verwendung mit 
einem UART nicht unmöglich, erschwert die Sache natürlich und es ist nur 
noch Halbduplex möglich.

Sascha

von chris (Gast)


Lesenswert?

Sascha Weber schrieb:
> Wie sind denn die Baudrate und Framekonfiguration deiner "Box" und vom
> Display? Sind die unterschiedlich, dann mach das zwar die Verwendung mit
> einem UART nicht unmöglich, erschwert die Sache natürlich und es ist nur
> noch Halbduplex möglich.

die Laufschrift braucht ja 9600 Baud, das ließe sich notfalls auch 
komfortable per Software-UART umsetzen.

lg
Chris

von spess53 (Gast)


Lesenswert?

Hi

>Sind die unterschiedlich, dann mach das zwar die Verwendung mit
>einem UART nicht unmöglich, erschwert die Sache natürlich und es ist nur
>noch Halbduplex möglich.

Es gibt auch kleinere AVRs mit zwei Hardware-UARTs: ATTiny1634.

MfG Spess

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.