demmy
09.11.2015, 21:33
Hallo zusammen,
ich habe mal wieder ein merkwürdiges Problem.
Ich habe eine kleine Platine mit einem Atmega8-16PU erstellt. Die Platine wird mit 24V versorgt und über einen Schaltregler werden die 5V für den Atmega rutergeregelt. Am µC hängt ein 8Mhz Quarz. Weiter sind an dem µC 2 Relais über Transistoren angeschlossen als schaltbare Ausgänge sowie 2 Transistoren als Eingangsbeschaltung. Über Eingang 1 kann Relais 1 geschaltet werden und über Eingang 2 das Relais 2. Zusätzlich kann über die UART der Status der Relais und der Eingänge (Taster) ausgelesen werden.
Des Weiteren gibt es mehrere LEDs die an verschiedene µC-Pins hängen und verschiedene Stati anzeigen.
Nun zu meinem Problem:
Betreibe ich die Platine ohne UART funktioniert das Programm einwandfrei. Die Relais lassen sich über die Eingänge ein- und ausschalten und auch die LEDs zeigen an was sie sollen.
Schalte ich jetzt eine zweite Platine dazu, die über die UART zyklisch (Protokoll an Protokoll) den Status der ersten Platine abruft, dann fängt die erste Platine irgendwie das spinnen an!
Das heißt, die LEDs blinken kurzzeitig unregelmäßig mal hin und her oder die Relais schalten plötzlich kurz mal ein und wieder aus. Obwohl keine Taste gedrückt wurde. Also ein komplett Chaotisches Verhalten.
Die Baudrate ist auf beiden Seiten auf 9600 Baud eingestellt. Die UART lasse ich mit Interrupts arbeiten (Bascom Config SerialIn und SerialOut).
Die Daten die hin und her geschaufelt werden sind jedenfalls korrekt, das habe ich rausgemessen bzw. mitgeschrieben.
Vom Ablauf her werden permanent Daten über die UART hin und hergeschickt. Mir kommt es fast so vor, als würde der µC aus einem UART Interrupt an die falsche Stelle im Programm zurückspringen und dann unerlaubt irgendwelche Schaltungen auslösen. Ein schalten der Relais über die UART bzw. das Protokoll ist nicht möglich! Das heißt, der Fehler muss irgendwo im Timing des µC sein vermute ich. Ich habe irgendwie das Gefühl das die UART-Interrupts den µC aus dem tritt bringen oder so. Aber ganz kann ich es mir nicht erklären.
Habt Ihr sowas schonmal gehabt? Die Spannung am µC habe ich gemessen, es sind immer konstant 5V.
Würde es evtl. was bringen wenn ich mit dem Quarz runter gehe oder auf einen Baudratenquarz wechsle?
Ich hoffe Ihr habt ein paar gute Ideen und könnt mir helfen.
ich habe mal wieder ein merkwürdiges Problem.
Ich habe eine kleine Platine mit einem Atmega8-16PU erstellt. Die Platine wird mit 24V versorgt und über einen Schaltregler werden die 5V für den Atmega rutergeregelt. Am µC hängt ein 8Mhz Quarz. Weiter sind an dem µC 2 Relais über Transistoren angeschlossen als schaltbare Ausgänge sowie 2 Transistoren als Eingangsbeschaltung. Über Eingang 1 kann Relais 1 geschaltet werden und über Eingang 2 das Relais 2. Zusätzlich kann über die UART der Status der Relais und der Eingänge (Taster) ausgelesen werden.
Des Weiteren gibt es mehrere LEDs die an verschiedene µC-Pins hängen und verschiedene Stati anzeigen.
Nun zu meinem Problem:
Betreibe ich die Platine ohne UART funktioniert das Programm einwandfrei. Die Relais lassen sich über die Eingänge ein- und ausschalten und auch die LEDs zeigen an was sie sollen.
Schalte ich jetzt eine zweite Platine dazu, die über die UART zyklisch (Protokoll an Protokoll) den Status der ersten Platine abruft, dann fängt die erste Platine irgendwie das spinnen an!
Das heißt, die LEDs blinken kurzzeitig unregelmäßig mal hin und her oder die Relais schalten plötzlich kurz mal ein und wieder aus. Obwohl keine Taste gedrückt wurde. Also ein komplett Chaotisches Verhalten.
Die Baudrate ist auf beiden Seiten auf 9600 Baud eingestellt. Die UART lasse ich mit Interrupts arbeiten (Bascom Config SerialIn und SerialOut).
Die Daten die hin und her geschaufelt werden sind jedenfalls korrekt, das habe ich rausgemessen bzw. mitgeschrieben.
Vom Ablauf her werden permanent Daten über die UART hin und hergeschickt. Mir kommt es fast so vor, als würde der µC aus einem UART Interrupt an die falsche Stelle im Programm zurückspringen und dann unerlaubt irgendwelche Schaltungen auslösen. Ein schalten der Relais über die UART bzw. das Protokoll ist nicht möglich! Das heißt, der Fehler muss irgendwo im Timing des µC sein vermute ich. Ich habe irgendwie das Gefühl das die UART-Interrupts den µC aus dem tritt bringen oder so. Aber ganz kann ich es mir nicht erklären.
Habt Ihr sowas schonmal gehabt? Die Spannung am µC habe ich gemessen, es sind immer konstant 5V.
Würde es evtl. was bringen wenn ich mit dem Quarz runter gehe oder auf einen Baudratenquarz wechsle?
Ich hoffe Ihr habt ein paar gute Ideen und könnt mir helfen.