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.
Wenn Dein GUI abstuerzt weil ein Zeichen ueber die serielle
Schnittstelle empfangen wird, wuerde ich den Fehler erstmal nicht im
Controller suchen... ;)
Volker
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.
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.
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.
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.
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.
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.
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.
Eine eigene Frage?
Dieser Thread ist über 16 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.