Problem bei dem UART mit dem Mikrocontroller ATMEL

Antworten
emily92
Beiträge: 4
Registriert: 25.08.2014 16:34
Geschlecht: weiblich
Studienrichtung: Elektrotechnik
Angestrebter Abschluss: Dipl-Ing.

Problem bei dem UART mit dem Mikrocontroller ATMEL

Beitrag von emily92 » 25.08.2014 16:47

Hallo, zusammen:

ich habe jetzt Problem bei dem UART, der Mikrocontroller basiert auf ARM. Das Programm ist durch ATMEL Studio 6 durchgeführt. Ich hatte schon fast alle Möglichkeiten probiert, aber das UART funktioniert immer nicht.

Um UART schneller zu verstehen, hatte ich zuerst ein UART-Beispiel von ASF (Atmel Software Framework) verwendet. Das ASF biete viele richtige Beispiele zum lernen, deswegen gibt es keinen Fehler bei der
Software-Konfiguration.

Bei meinem Borad gibt es 2 Anschlusskabeln mit dem PC, ein ist zum JTAG, ein ist zum UART. Die
Anschlusseinstellungen (Bits pro Sekunde, Datenbits, Parität, Stopbits und Flusssteuerung)bei dem Geräte-Manager von PC sind auch ganz genau wie die in dem Programm konfiguriert.

Das UART wird durch das Terminal Window durchgeführt, das durch das ATMEL Studio 6 gebietet ist.

Kennt jemand den ARM-Mikrocontroller oder hat jemand ähnliche Erfahrung?

Danke für jede Antwort

fizze
Beiträge: 21
Registriert: 28.10.2013 19:25

Re: Problem bei dem UART mit dem Mikrocontroller ATMEL

Beitrag von fizze » 26.08.2014 01:11

hallo. befasse mich gerade mit UART auf dem atmega8. also nicht ARM. kann deshalb nicht wirklich genau was zu deinen problemen sagen. aber so ein paar grundsätzliche dinge über uart sollten ja gleich sein... hier ein paar dinge aus der atmega-welt...

es ist z.b. sehr wichtig die eingestellte tacktfrequenz genau einzuhalten. das heißt: externer oszillator oder quarz. der interne rc-schwingkries ist zu ungenau. und wenn man das macht ist es vielleicht mal ganz ratsam mit nem oszilloskop (oder frequenz-zähler.. im turmlabor ist man da sehr hilfsbereit) zu schauen, ob der quarz bzw. oszillator wirklich mit der angegebenen frequenz schwingen. ich hab da schön komische sachen erlebt. schwingkreise sind teufelswerk. und auch immer im manual nachschauen ob man dann was anders jumpern muss. ist glaub ich in der regel so...

was willst du denn eigentlich tun? UART empfangen oder senden? ich hab bis jetzt nur erfahrung mit empfangen. aber da gibts auf dem ATMEGA eine flag, die gesetzt wird, wenn der empfang abgeschlossen ist. das selbe gibts auch glaube ich wenn das senden abgeschlossen ist. vll. gibts sowas ja auch für ARM. wenn man einfach mal diese flag abfragt (kleines programm schreiben, dass bei UART nen interrupt kriegt und nen pin toggelt) weiß man zumindest schonmal, dass von der baudrate und so alles passen müsste.
beim ATMEGA ist es auch so, dass diese flag erst wieder gelöscht wird, wenn man das Empfangsregister ausgelesen hat. da hab ich mal ewig zeit mit verschwendet...

wenn du nicht ganz sicher bist, ob dein board funktioniert, kannst du ja auch direkt von dem sub-d stecker auf den pin von deinem controller. hier ein bild mit der pinbelegung:
http://home.wtal.de/noegs/Sub-D-9-w.gif
mit RX und TX kannst du direkt auf einen controller. (also ich bin auch nur anfänger, aber ich sehe jetzt nichts was da dagegen sprechen sollte. übernehme hier aber natürlich keine haftung ;-) )
hast du ein oszi? dann schau doch mal, ob sich an RX oder TX überhaupt was tut... UART ist ja recht langsam, das kann man sich mal schön ansehen.

ok, ich gebe zu das sind sehr vage tipps, aber du müsstest vielleicht mal ein bisschen erzählen was denn genau nicht funktioniert. mit AVR Studio kannst du das alles ja simulieren. und da funktionieren die programme oder wie?

ansonsten ist mirkrocontroller.net vielleicht die bessere anlaufstelle. die haben ein sehr aktives forum. leider auch einen sehr ruppigen umgangston.

Benutzeravatar
Locutus
Beiträge: 604
Registriert: 30.10.2008 23:04
Geschlecht: männlich
Studienrichtung: Elektrotechnik
Matrikel: 2008
Angestrebter Abschluss: Dipl-Ing.
Wohnort: Dresden
Contact:

Re: Problem bei dem UART mit dem Mikrocontroller ATMEL

Beitrag von Locutus » 26.08.2014 09:50

fizze hat geschrieben: [...] kannst du ja auch direkt von dem sub-d stecker auf den pin von deinem controller. [...] mit RX und TX kannst du direkt auf einen controller.
Not sure if troll or... Ganz ehrlich? Du willst E-Technik studieren? Wechsel mal lieber schnell den Studiengang, wenn du schon solche einfachen Sachen nicht erkennst!

@emily92:
Tu das blos nicht!! Wenn du den COM-Port von deinem Rechner direkt mit dem Mikrocontroller verbindest, kannst du davon ausgehen, dass du den Mikrocontroller zerstörst! Warum? Weil der COM-Port mit +-15V arbeitet! Selbst bei einem USB2Serial-Adapter ist die Spannung - wenn auch etwas niedriger - noch erheblich über dem, was ein Mikrocontroller verkraftet!

Wie genau hast du deinen Mikrocontroller an den PC angeschlossen? Schnittstellenwandler zwischen Mikrocontroller und COM-Port? Welches Board verwendest du eigentlich genau? Es kann sein, dass zwischen deinem Controller und dem Anschlussport ein Schnittstellenwandler sitzt (was natürlich gut wäre), muss aber nicht. Da wären genauere Informationen durchaus hilfreich, um das Problem einzugrenzen!

Weiterhin: Wie genau greifst du unter Windows auf die serielle Schnittstelle zu? Du sagst, du machst da was direkt i, Terminal. Was genau? Alternativ: Versuchs mal mit Putty! Und guck mal, ob du den richtigen COM-Port ausgewählt hast.

emily92
Beiträge: 4
Registriert: 25.08.2014 16:34
Geschlecht: weiblich
Studienrichtung: Elektrotechnik
Angestrebter Abschluss: Dipl-Ing.

Re: Problem bei dem UART mit dem Mikrocontroller ATMEL

Beitrag von emily92 » 27.08.2014 09:57

Danke für alle Antworte :D
Zuletzt geändert von emily92 am 27.08.2014 10:59, insgesamt 1-mal geändert.

emily92
Beiträge: 4
Registriert: 25.08.2014 16:34
Geschlecht: weiblich
Studienrichtung: Elektrotechnik
Angestrebter Abschluss: Dipl-Ing.

Re: Problem bei dem UART mit dem Mikrocontroller ATMEL

Beitrag von emily92 » 27.08.2014 09:59

Locutus hat geschrieben:
fizze hat geschrieben: [...] kannst du ja auch direkt von dem sub-d stecker auf den pin von deinem controller. [...] mit RX und TX kannst du direkt auf einen controller.
Not sure if troll or... Ganz ehrlich? Du willst E-Technik studieren? Wechsel mal lieber schnell den Studiengang, wenn du schon solche einfachen Sachen nicht erkennst!

@emily92:
Tu das blos nicht!! Wenn du den COM-Port von deinem Rechner direkt mit dem Mikrocontroller verbindest, kannst du davon ausgehen, dass du den Mikrocontroller zerstörst! Warum? Weil der COM-Port mit +-15V arbeitet! Selbst bei einem USB2Serial-Adapter ist die Spannung - wenn auch etwas niedriger - noch erheblich über dem, was ein Mikrocontroller verkraftet!

Wie genau hast du deinen Mikrocontroller an den PC angeschlossen? Schnittstellenwandler zwischen Mikrocontroller und COM-Port? Welches Board verwendest du eigentlich genau? Es kann sein, dass zwischen deinem Controller und dem Anschlussport ein Schnittstellenwandler sitzt (was natürlich gut wäre), muss aber nicht. Da wären genauere Informationen durchaus hilfreich, um das Problem einzugrenzen!

Weiterhin: Wie genau greifst du unter Windows auf die serielle Schnittstelle zu? Du sagst, du machst da was direkt i, Terminal. Was genau? Alternativ: Versuchs mal mit Putty! Und guck mal, ob du den richtigen COM-Port ausgewählt hast.
Hallo, locutus:
vielen Dank für deine Antwort!
Ich finde, deine Meinung wahrscheinlich richtig ist. Weil wenn ich den usb-serial-Anschluss direkt mit dem PC USB-Schnittstelle verbinde, klingt der Mikrocontroller, es gibt stimmt ein Schützschaltung zur Stromversorgung bei der UART-Schnittstelle. Du hast Recht.

Das Board ist SAM4S-EK2, der Mikrocontroller ist ATSAM4SD32C. Auf dem Board gibt es die Kommunikationsschnittstelle, z.B. UART, USART, und JTAG. Zum Debbugen hatte ich zuerst die JTAG-Schnittstelle durch einen von Ateml hergestellten Adapter SAM-ICE mit der PC-USB-Schnittstelle verbunden. Danach möchte ich das UART konfigurieren, damit der Mikrocontroller nach unterschiedlichen Befehlen die entsprechenden Ergebnisse ausrechnen kann. Deswegen hatte ich ein USB-Serial-Converter Kabel mit der PC-USB-Schnittstelle verbunden, hatte ich noch nie über die Betriebsspannung überlegt :o . Es gibt schon keine Serial-Schnittstelle bei dem PC, Soll ich ein USB-Serial-Kabel mit Adapter mal probieren?

Benutzeravatar
Locutus
Beiträge: 604
Registriert: 30.10.2008 23:04
Geschlecht: männlich
Studienrichtung: Elektrotechnik
Matrikel: 2008
Angestrebter Abschluss: Dipl-Ing.
Wohnort: Dresden
Contact:

Re: Problem bei dem UART mit dem Mikrocontroller ATMEL

Beitrag von Locutus » 27.08.2014 11:45

Laut Datenblatt hat dein Board zwei UART-Schnittstellen, eine läuft auf UART0, die andere auf USART1. Eventuell hast du hier einfach die falsche Schnittstelle angeschlossen. Wenn du Daten auf USART1 ausgeben willst, musst du eventuell auch entsprechende Jumper noch richtig setzen. (Dies sollte die Jumper 31 und 28 betreffen, 28 sollte keine Verbindung zwischen den Pins herstellen, 31 pin 1 und 2 des Headers verbinden)

Das Datenblatt sagt auch aus, dass du an den seriellen Schnittstellen, die aus dem Board heraus geführt sind, jeweils einen Pegelwandler UART - RS232 hast. Somit kannst du an diesen Schnittstellen direkt RS232 - also einen COM-Port - anschliessen, ohne dein Board zu gefährden.

Jetzt bleibt natürlich trotzdem noch fraglich, warum die Kommunikation zwischen deinem Controller-Board und dem PC nicht funktioniert. Entweder, dein USB-seriell-Adapter ist defekt oder sonstwie nicht geeignet, du hast was in der Software am Computer falsch eingestellt (beispielsweise den falschen COM-Port ausgewählt), du hast den falschen UART am Controller-Board angeschlossen oder dein Code auf dem Mikrocontroller ist fehlerhaft und sendet gar nicht.

Zunächst zum USB-seriell-Adapter: Laut Datenblatt deines Controller-Boards sind die RS232-Anschlüsse beide jeweils wie auch am Computer belegt. Also Tx auf Pin 3, Rx auf Pin 2, GNd auf Pin 5. Normalerweise brauchst du also ein sogenanntes Null-Modem-Kabel, um die Verbindung zwischen PC und Board herzustellen. Dieses Kabel vertauscht Pin 3 und 2 der Anschlüsse, damit Tx vom einem Gerät auf Rx vom anderen Gerät ankommt. Jetzt weis ich nicht genau, was du für einen USB-seriell-Adapter hast und kann daher nicht genau sagen, ob dieser schon intern diese Vertauschung drin hat. Da müsstest du entsprechend mal ein wenig nachforschen.

Zum COM-Port: So ein USB-Seriell-Adapter ist normalerweise nicht COM1. Die Adapter bekommen im Gerätemanager eine Nummer zugewiesen, welche noch nicht vergeben ist. COM1 ist aber in den meisten Computern trotzdem noch vorhanden. Daher guck einfach mal im Gerätemanager nach, was du alles an COM-Geräten gelistet hast und probier jeden dieser Ports einmal aus! Zur Vereinfachung würde ich dir für die Kommunikation Putty empfehlen - dort kannst du den COM-Port wählen und alle verbindungsspezifischen Parameter direkt setzen. (Beim Start im Konfigurationsfenster einfach auf "serial" umstellen und dann unter Connection - Serial alle Parameter einstellen)

Wenn das alles nichts bringt, solltest du dir deinen Code noch mal genauer ansehen. Eventuell öffnet dein Controller zwar die Schnittstelle, sendet aber nichts? (Eine einfache, infinite Schleife, welche alle 100ms oder so einen einfachen String oder ein Zeichen auf die Schnittstelle schickt, würde da ja schon ausreichen)

emily92
Beiträge: 4
Registriert: 25.08.2014 16:34
Geschlecht: weiblich
Studienrichtung: Elektrotechnik
Angestrebter Abschluss: Dipl-Ing.

Re: Problem bei dem UART mit dem Mikrocontroller ATMEL

Beitrag von emily92 » 28.08.2014 12:01

Locutus hat geschrieben:Laut Datenblatt hat dein Board zwei UART-Schnittstellen, eine läuft auf UART0, die andere auf USART1. Eventuell hast du hier einfach die falsche Schnittstelle angeschlossen. Wenn du Daten auf USART1 ausgeben willst, musst du eventuell auch entsprechende Jumper noch richtig setzen. (Dies sollte die Jumper 31 und 28 betreffen, 28 sollte keine Verbindung zwischen den Pins herstellen, 31 pin 1 und 2 des Headers verbinden)

Das Datenblatt sagt auch aus, dass du an den seriellen Schnittstellen, die aus dem Board heraus geführt sind, jeweils einen Pegelwandler UART - RS232 hast. Somit kannst du an diesen Schnittstellen direkt RS232 - also einen COM-Port - anschliessen, ohne dein Board zu gefährden.

Jetzt bleibt natürlich trotzdem noch fraglich, warum die Kommunikation zwischen deinem Controller-Board und dem PC nicht funktioniert. Entweder, dein USB-seriell-Adapter ist defekt oder sonstwie nicht geeignet, du hast was in der Software am Computer falsch eingestellt (beispielsweise den falschen COM-Port ausgewählt), du hast den falschen UART am Controller-Board angeschlossen oder dein Code auf dem Mikrocontroller ist fehlerhaft und sendet gar nicht.

Zunächst zum USB-seriell-Adapter: Laut Datenblatt deines Controller-Boards sind die RS232-Anschlüsse beide jeweils wie auch am Computer belegt. Also Tx auf Pin 3, Rx auf Pin 2, GNd auf Pin 5. Normalerweise brauchst du also ein sogenanntes Null-Modem-Kabel, um die Verbindung zwischen PC und Board herzustellen. Dieses Kabel vertauscht Pin 3 und 2 der Anschlüsse, damit Tx vom einem Gerät auf Rx vom anderen Gerät ankommt. Jetzt weis ich nicht genau, was du für einen USB-seriell-Adapter hast und kann daher nicht genau sagen, ob dieser schon intern diese Vertauschung drin hat. Da müsstest du entsprechend mal ein wenig nachforschen.

Zum COM-Port: So ein USB-Seriell-Adapter ist normalerweise nicht COM1. Die Adapter bekommen im Gerätemanager eine Nummer zugewiesen, welche noch nicht vergeben ist. COM1 ist aber in den meisten Computern trotzdem noch vorhanden. Daher guck einfach mal im Gerätemanager nach, was du alles an COM-Geräten gelistet hast und probier jeden dieser Ports einmal aus! Zur Vereinfachung würde ich dir für die Kommunikation Putty empfehlen - dort kannst du den COM-Port wählen und alle verbindungsspezifischen Parameter direkt setzen. (Beim Start im Konfigurationsfenster einfach auf "serial" umstellen und dann unter Connection - Serial alle Parameter einstellen)

Wenn das alles nichts bringt, solltest du dir deinen Code noch mal genauer ansehen. Eventuell öffnet dein Controller zwar die Schnittstelle, sendet aber nichts? (Eine einfache, infinite Schleife, welche alle 100ms oder so einen einfachen String oder ein Zeichen auf die Schnittstelle schickt, würde da ja schon ausreichen)
Hallo, Locutus

Vielen Dank für deine so detaillierte Erklärung!

Ich finde die Konfiguration für UART ist nicht so kompliziert, GPIO, Clock, Baudrate, paritytype usw. sind schon alles konfiguriert. Das von Ateml gebietete UART-Beispiel finde ich ganz richtig, die konfigurierten Pins sind PA9 und PA10 für UART0. Die Einstellungen von dem Geräte-Manager für die serial-usb-Anschlüsse (COM3) sind auch ganz gleich wie die in der Software. Ich vermute, das Problem Hardware ist.

Weil das usb-serial-Kabel und die UART-Schnittstelle vom dem Board beide mit Stecker sind hatte ich wieder einen Gender Changer D-SUB 9 pol. Buchse auf 9 pol. Buchse gekauft. Ich finde das ist auch OK.

Was du meinst Kommunikation Putty habe ich keine Ahnung dafür. Ist das eine Software oder eine Einstellung vom Computer oder ein Software framework? Ich programmiere jetzt mit Ateml Studio. UART kann durch das Terminal Window nachgeschaut werden. Bei mir, nach dem Durchlaufen des Programms, passiert das Window gar nichts :o , ein einfaches String durch Befehl puts tritt nichts auf das Window :cry:

robotcandance
Beiträge: 20
Registriert: 22.01.2014 00:42

Re: Problem bei dem UART mit dem Mikrocontroller ATMEL

Beitrag von robotcandance » 31.10.2014 13:58

Wenn dein µController usb Schnittstelle hat, kannst du über usbcdc Daten austauschen.

Antworten

Zurück zu „Technik und Software“