Hallo.
Ist mein Vorhaben möglich?
Der MCP2515 wird anfangs Initialisiert und in Listen-Only Modus
gebracht.
Dann möchte ich mitten im Programm den Filter für Empfang anders setzen.
Dafür versetze ich dem MCP in den Configirations Modus indem ich den
CANCTRL Register mit &B100000000 beschreibe.
Danach serze ich die Bits für den Filter0 um
Dann geht er wieder in Listen Only Modus zurück und das Programm wird
fortgesetzt.
Leider klappt das noch nicht so, wie ich will.
Es sind mehrere Fehlerquellen möglich, wollte Parallel zur Fehlersuche
fragen, ob das überhaupt so funktioniert.
Hier ist der Codeschnipsel, muss man aber nicht verstehen ;) :
1 | Werte_erfassen:
|
2 |
|
3 | Enable Int1
|
4 | O = 0
|
5 |
|
6 | Do
|
7 |
|
8 | If O = 1 Then //Wenn Interrupt ausgelöst wurde ist O = 1
|
9 | Disable Int1 // Deaktiviere hier vorsichtshalber den Interrupt
|
10 |
|
11 | If V1 = 0 And V2 = 0 And V3 = 0 Then
|
12 | Höhe = byte4
|
13 | Länge = byte5
|
14 | V1 = 1
|
15 | Mcp2515_bitmodify2 Canctrl , &B11100000 , &B10000000
|
16 | Mcp2515_write_register2 Rxf0sidh , &B11100110
|
17 | Mcp2515_write_register2 Rxf0sidl , &B01000000
|
18 | Mcp2515_bitmodify2 Canctrl , &B11100000 , &B01100000
|
19 | Mcp2515_read_register2 //Buffer auslesen um Interrupt zurück zu setzen
|
20 | Goto Werte_erfassen
|
21 | End If
|
22 |
|
23 |
|
24 | If V1 = 1 And V2 = 0 And V3 = 0 Then
|
25 | Feuchte = byte3
|
26 | V2 = 1
|
27 | Mcp2515_bitmodify2 Canctrl , &B11100000 , &B10000000
|
28 | Mcp2515_write_register2 Rxf0sidh , &B00110101
|
29 | Mcp2515_write_register2 Rxf0sidl , &B10100000
|
30 | Mcp2515_bitmodify2 Canctrl , &B11100000 , &B01100000
|
31 | Mcp2515_read_register2
|
32 | Goto Werte_erfassen
|
33 | End If
|
34 |
|
35 |
|
36 | If V1 = 1 And V2 = 1 And V3 = 0 Then
|
37 | Temperatur = byte4
|
38 | V3 = 1
|
39 | Mcp2515_bitmodify2 Canctrl , &B11100000 , &B10000000
|
40 | Mcp2515_write_register2 Rxf0sidh , &B10011000
|
41 | Mcp2515_write_register2 Rxf0sidl , &B00000000
|
42 | Mcp2515_bitmodify2 Canctrl , &B11100000 , &B01100000
|
43 | Mcp2515_read_register2
|
44 | Goto Werte_erfassen
|
45 | End If
|
46 |
|
47 | O = 0
|
48 | End If
|
49 |
|
50 |
|
51 |
|
52 | If V1 = 1 And V2 = 1 And V3 = 1 Then
|
53 | Gosub Rechnen_ausgeben
|
54 | V1 = 0
|
55 | V2 = 0
|
56 | V3 = 0
|
57 | End If
|
58 |
|
59 | Enable Int1
|
60 |
|
61 | Loop
|
62 |
|
63 | End
|
Danke
Gruss Alex S.