Kommunikation PC-Atmega32 per UART

Gast #1571813
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.
#1571826
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.
Gast #1572159
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.
Gast #1573431
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.
#1573441
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.
#1573623
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.
Gast #1573661
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren