Guten Morgen zusammen!
Ich sitze jetzt seit Freitag an einem Problem mit meinem µC-Programmcode
und weiß mir absolut keinen Rat mehr.
Mein µC soll zur Auswertung von Sensoreinheiten eingesetzt werden. Jeder
der angeschlossenen Sensoreinheiten (Sensoreinheit 1 bis 4) hat drei
Hall-Sensoren integriert die das Magnetfeld eines Relais überwachen.
Sprechen schalten die Sensoren, dann ist ein Magnetfeld vorhanden und
das Relais ist eingeschaltet. Die Drei Hall-Sensoren pro Sensoreinheit
dienen der Redundanz. Sind nicht alle Sensoren Ein oder Aus, so
entscheidet zum einen die Mehrheit über den jeweiligen Schaltzustand des
Relais und zusätzlich wird ein Störungsbit gesetzt.
Hier der Programcode der die Sensoreinheit 2 abfragt:
1 | /************************************************************
|
2 | ************************ Sensor 2 ***************************
|
3 | *************************************************************/
|
4 |
|
5 | Sensor2=Hall_2_1+Hall_2_2+Hall_2_3;
|
6 |
|
7 | /*********************** Relais EIN *************************/
|
8 | if (Sensor2 > 1){
|
9 | PORTA &= ~(1 << LED_Sensor2);
|
10 | if (sens2 == 0){
|
11 | buffer="Relais 2 -> EIN";
|
12 | uart_puts(buffer);
|
13 | uart_putc('\n');
|
14 | sens2=1;
|
15 | }
|
16 | if (Sensor2 < 3){
|
17 | PORTA &= ~(1 << LED_Warnung);
|
18 | if (stoer2 == 0){
|
19 | buffer="Sensor 2 -> Stoerung";
|
20 | uart_puts(buffer);
|
21 | uart_putc('\n');
|
22 | stoer2=1;
|
23 | }
|
24 | }
|
25 | }
|
26 |
|
27 |
|
28 | /*********************** Relais AUS *************************/
|
29 | if (Sensor2 < 2){
|
30 | PORTA |= (1 << LED_Sensor2);
|
31 | if (sens2 == 1){
|
32 | buffer="Relais 2 -> AUS"; //Problemstelle
|
33 | uart_puts(buffer);
|
34 | uart_putc('1');
|
35 | sens2=0;
|
36 | }
|
37 | if (Sensor2 > 0){
|
38 | PORTA &= ~(1 << LED_Warnung);
|
39 | if (stoer2 == 0){
|
40 | buffer="Sensor 2 -> Stoerung";
|
41 | uart_puts(buffer);
|
42 | uart_putc('\n');
|
43 | stoer2=1;
|
44 | }
|
45 | }
|
46 | }
|
Zu meinem Problem:
Zuerst will ich noch anmerken, dass die anderen Senoreinheiten absolut
identisch im Programmcode abgefragt werden.
Ich gebe die Schaltzustände über die UART-Schnittstelle mit Hilfe der
UART-Libary von Peter Fleury von meinem Atmega32 an meine serielle
Schnittstelle des Laptops und plotte hier die Zusatndmeldung mit dem
Terminalprogramm hterm mit. Da ich festgestellt habe, das mein
Programmcode in der Hauptschleife nicht über die Sensoreinheit 2 heraus
kommt habe ich testweise den folgenden Programmteil einmal oberhalb und
einmal unterhalb des oben stehenden Codes eingefügt:
1 | buffer="Endline";
|
2 | uart_puts(buffer);
|
3 | uart_putc('\n');
|
Hierbei habe ich festgestellt, dass mein Terminalprogramm "Endline" in
der Schleife plottet, wenn der Code oberhalb der Sensoreinheit 2
plaziert ist. Unterhalb findet keine Ausgabe statt. Wenn ich jedoch an
der mit "Problemstelle" im Programmcode markierten Zeile in der Variable
buffer das "->" entferne, dann wird auch unterhalb der Sensoreinheit 2
die Variable "Endline" ausgegeben. Bei der Sensoreinheit 1 funktioniert
selsamerweise der identische Programmcode.
Kann mir jemand sagen woran das leigen kann?
Die Variable buffer ist wie folgt deklariert:
Die Werte der Variablen Sensor1, Sensor2, Sensor3 und Sensor4 ist 3.
Damit kommt der Programmcode aufgrund der if-Anweisung vor der
Problemstelle eigentlich auch gar nicht an dieser Stelle vorbei.
Ich bedanke mich schon einmal im Voraus für Eure Hilfe und hoffe, dass
mir hier jemand den Fehler aufzeigen kann.
Gruß
Andreas
PS: Den kompletten Programmcode habe ich angefügt.