Hallo allerseits
Ich versuche gerade eine RGB-LED Ansteuerung über Bluetooth zu
realisieren.
Dabei bin ich aber auf ein Problem gestossen das mich mittlerweile
verzweifeln lässt.
Ich versuche mehrere Daten nacheinander zu Empfangen. Das erste Byte der
Übertragung soll einen Befehl setzen welcher dann verschiedene
Ansteuerungen übernimmt.
Allerdings wird die Variable in der ich den Befehl setze immer wieder
auf "0" Zurückgesetzt. Das habe ich durch Ausgabe der Variable
überprüft.
Dummerweise kann ich den Code auf dem PIC16F688 nicht debuggen da ich
die Hardware dazu nicht habe.
Hier der Code:
Hauptprogramm:
1 | #include "Tornado.h"
|
2 | #include "Initialisierungen.c"
|
3 | #include "Befehl.c"
|
4 | #include "ISR.c"
|
5 |
|
6 |
|
7 | // Hauptprogramm
|
8 | void main(void)
|
9 | {
|
10 | Initialisierungen();
|
11 |
|
12 | while(1)
|
13 | {
|
14 | if(c_Rot == TMR0)
|
15 | {
|
16 | H_Rot = 0;
|
17 | I_Rot = 0;
|
18 | }
|
19 | if(c_Gruen == TMR0)
|
20 | {
|
21 | H_Gruen = 0;
|
22 | I_Gruen = 0;
|
23 | }
|
24 | if(c_Blau == TMR0)
|
25 | {
|
26 | H_Blau = 0;
|
27 | I_Blau = 0;
|
28 | }
|
29 | if(c_Luft == TMR0)
|
30 | {
|
31 | Luft = 0;
|
32 | }
|
33 | if(c_Nebel == TMR0)
|
34 | {
|
35 | Nebel = 0;
|
36 | }
|
37 | }
|
38 | }
|
Interrupt Routine:
1 | static void interrupt isr(void)
|
2 | {
|
3 | if(RCIF)
|
4 | {
|
5 | Input = RCREG;
|
6 | Befehl_empfangen();
|
7 | }
|
8 | }
|
Befehl Auswertung
1 | volatile char Befehl;
|
2 | volatile char Farbe;
|
3 |
|
4 | void Befehl_empfangen()
|
5 | {
|
6 | if(Befehl == 0)
|
7 | {
|
8 | switch(Input)
|
9 | {
|
10 | case 'F':
|
11 | Befehl = 1;
|
12 | break;
|
13 | case 'L':
|
14 | Befehl = 2;
|
15 | break;
|
16 | case 'N':
|
17 | Befehl = 3;
|
18 | break;
|
19 | }
|
20 | }
|
21 | else
|
22 | {
|
23 | switch(Befehl)
|
24 | {
|
25 | case 1:
|
26 | ++ Farbe;
|
27 | switch(Farbe)
|
28 | {
|
29 | case 1:
|
30 | c_Rot = Input;
|
31 | break;
|
32 | case 2:
|
33 | c_Gruen = Input;
|
34 | break;
|
35 | case 3:
|
36 | c_Blau = Input;
|
37 | Befehl = 0;
|
38 | Farbe = 0;
|
39 | break;
|
40 | }
|
41 | break;
|
42 | case 2:
|
43 | c_Luft = Input;
|
44 | Befehl = 0;
|
45 | break;
|
46 | case 3:
|
47 | c_Nebel = Input;
|
48 | Befehl = 0;
|
49 | break;
|
50 | }
|
51 | }
|
52 | }
|
Die Variable "Befehl" wird wie vorhergesehen gesetzt, ist aber beim
nächsten Aufruf wieder auf 0x00. Deshalb bleibt der Code ständig im
ersten Teil der Auswertung stecken und ich kann die folgenden Werte
nicht in die vorhergesehenen Variablen speichern.
Jedenfalls ist das auf meinem PIC16F688 so. Auf einem PIC16F887 hat der
Code funktioniert.
Kann mir da jemand helfen?
MfG
Michael