Forum: Mikrocontroller und Digitale Elektronik Kommunikation PC-Atmega32 per UART


von UART-Boy (Gast)


Lesenswert?

Mein Atmega32 möchte ich gerne per UART und einer GUI auf dem PC 
konfigurieren. Soweit funktioniert die Kommunikation auch. Einziges 
Problem was ich jetzt habe ist der Aufbau der Kommunikation. Es muss 
immer erst der "Config"-Button der GUI angeklicket werden. Jetzt wird in 
einer while-Schleife auf ein Zeichen des Atmels gewartet. Dieses wird 
gesendet, wenn ein Taster auf dem Atmel-Board betätigt wird. Dann werden 
die Daten jeweils ausgetauscht. Nun will ich aber erreichen, dass es 
egal ist, ob ich erst den Config-Button anklicke oder den Taster auf dem 
Board. Ein erster Versuch war, dass der Controller einmal in der Sekunde 
ein Zeichen sendet. Wenn ich jetzt den Config-Button klicke, wartet die 
GUI auf das Zeichen, empfängt es und macht ganz normal weiter. Das 
Problem was ich jetzt habe ist das die GUI abstürzt, wenn ich erst die 
Taste drücke und dann den Config-Button klicke. Umgekehrt funktioniert 
alles wie gehabt. Ich vermute, das Problem liegt nicht auf der 
Controller-Seite. Für die GUI nutze ich Qt mit der QextSerialPort 
Bibliothek.

von Volker S. (volkerschulz)


Lesenswert?

Wenn Dein GUI abstuerzt weil ein Zeichen ueber die serielle 
Schnittstelle empfangen wird, wuerde ich den Fehler erstmal nicht im 
Controller suchen... ;)

Volker

von Karl H. (kbuchegg)


Lesenswert?

IMHO ist dieses ganze Vorgehen Mist.

Nichts gegen Autoconfig. Das ist super, wenn es in einem Einstelldialog 
angeboten wird (obwohl man das meistens sowieso nicht braucht. Ein 
halbwegs Nicht-DAU Benutzer kennt die Baudrate, die sein angeschlossenes 
Gerät benutzt).

Aber für den täglichen Hausgebrauch reicht es völlig aus, wenn das 
PC-Programm die Einstellung der Schnittstelle zb in der Registry 
speichert und sie von dort beim nächsten Programmstart wieder 
restauriert.

> Das Problem was ich jetzt habe ist das die GUI abstürzt, wenn
> ich erst die Taste drücke und dann den Config-Button klicke.

Programm unter Debugger Kontrolle laufen lassen und nachsehen, wo der 
Absturz passiert. Eventuell auf dem Stack die Aufrufhierarchie verfolgen 
um Nachszusehen wie es zum Absturz gekommen ist.

Aber in erster Linie würde ich dieses Zwangs-Autoconfig ausbauen.

von UART-Boy (Gast)


Lesenswert?

Was genau ist mit Autoconfig gemeint? Falls es sich dabei um Baudrate, 
etc. handelt, so lege ich diese Konfigruation selber im Quellcode fest.
Wenn ich den Debugger beim Atmel mitlaufen lasse und hier und da 
Breakpoints setzte, habe ich das oben von mir beschriebende Problem 
komischer Weise nicht.

von UART-Boy (Gast)


Lesenswert?

Mir ist noch etwas aufgefallen. Wenn ich debugge, dann den 
Programmablauf stoppe, ist das Receive Interupt Flag aktiviert. Erst 
wenn ich es händisch lösche läuft die Kommunikation ganz normal weiter.

von Karl H. (kbuchegg)


Lesenswert?

UART-Boy schrieb:
> Was genau ist mit Autoconfig gemeint? Falls es sich dabei um Baudrate,
> etc. handelt, so lege ich diese Konfigruation selber im Quellcode fest.

Uups.
Dann hab ich wohl das hier

> Es muss
> immer erst der "Config"-Button der GUI angeklicket werden. Jetzt
> wird in einer while-Schleife auf ein Zeichen des Atmels gewartet.
> Dieses wird gesendet, wenn ein Taster auf dem Atmel-Board betätigt
> wird. Dann werden die Daten jeweils ausgetauscht.

misinterpretiert.
Mea culpa. Tut mir leid.

von Karl H. (kbuchegg)


Lesenswert?

UART-Boy schrieb:

> Wenn ich den Debugger beim Atmel mitlaufen lasse und hier und da
> Breakpoints setzte, habe ich das oben von mir beschriebende Problem
> komischer Weise nicht.

Du musst auf PC Seite nach dem Problem suchen.
Das kann alles mögliche sein.

von UART-Boy (Gast)


Lesenswert?

was macht dich so sicher, dass ich das Problem auf dem PC suchen muss?

von Karl H. (kbuchegg)


Lesenswert?

Deine GUI läuft auf dem PC.
Und es ist dein GUI Programm, das abstürzt.

Mag sein, dass dein µC dem PC irgendetwas sendet, was der nicht 
erwartet. Aber ein Programm, welches crasht, hat immer einen Bug. Egal 
was der µC zum PC sendet, das Programm auf dem PC MUSS damit klarkommen 
und darf auf keinen Fall abschmieren.

Wenn in deinem Auto das Wasser steht, ist der Fehler auch beim Auto zu 
suchen und nicht bei der Waschstrasse durch die du gefahren bist.

von UART-Boy (Gast)


Lesenswert?

Ich habe jetzt das Problem behoben, indem ich die Uart-Schnittstelle des 
Microcontroller einmal in der Sekunde neu initialisiere, solange bis die 
Kommunikation aufgebaut ist. Die GUI schneint damit Probleme zu haben, 
wenn ich von der Uart-Schnittstelle des Mic. etwas sende und dann erst 
die Uart-Schnittstelle auf dem PC initalisiere und dann etwas empfangen 
will.

von Volker S. (volkerschulz)


Lesenswert?

Das macht zwar keinen Sinn, aber Hauptsache ist ja dass es funktioniert. 
;)

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.