Forum: Mikrocontroller und Digitale Elektronik MCP2515 Interrupt beim Empfang löschen


von Alex A. (Gast)


Lesenswert?

Hallo!
Es geht um den MCP2515.
Der Empfang funktioniert.
Wenn die Daten im Buffer ankommen wird ein Interrupt ausgelöst.
Leider bleibt er auch erhalten.
Wie muss ich den Löschen?
Laut Datenblatt, wenn ich das richtig verstanden habe, passt alles.
Caninte , &B00000011 (interrupt für Buffer 0/1 beim Empfang)
Canintf , &B00000000 (interrupt "nicht anhaltend")

dazu Datenblatt: 
http://ww1.microchip.com/downloads/en/DeviceDoc/21801d.pdf
Seite 50, 51.

Was mache ich falsch?

Danke

Grüsse Alex

von Alex A. (Gast)


Lesenswert?

Ist die Frage unverständlich formuliert, oder ist der "kenner" noch 
nicht da gewesen?
;)

von H.Joachim S. (crazyhorse)


Lesenswert?

// Interrupt Flag löschen
  if (status & 0b01000000){      //Bit 6 set?
    mcp2515_bit_modify(CANINTF, (1<<RX0IF), 0);
  } else {
    mcp2515_bit_modify(CANINTF, (1<<RX1IF), 0);
  }

von Alex A. (Gast)


Lesenswert?

Kann das jemand "übersetzen"?
Schreibe in Basic.
So wie ich das verstehe heisst das
Wenn der bit 6 von CANINTF gesetzt ist, dass schreibe
ind register CANINTF, maske 1<<RX0IF (keine Ahnung was das heisst), 
00000000
oder so.

Also, BITTE, etwas verständlicher, wenn es geht.

Danke schön
Gruüsse Alex

von H.Joachim S. (crazyhorse)


Lesenswert?

Es war mit Absicht etwas unvollständig :-)
Ungefähr so, wie deine Frage. Was hast DU programmiert? Zeig deine 
Software.

von cskulkw (Gast)


Angehängte Dateien:

Lesenswert?

Nur so als Hinweis,

dieser Controler setzt des Interruptflag selbstständig zurück, wenn er 
mit den Read RX Buffer Instruction ausgelesen wird.

SPI-Commando 0x61,0x66,0x71,0x76.

Wenn nach dem Auslesen immer noch der Interruptpin gesetzt ist, dann 
liegt ein anderer Interrupt vor. Man kommt dann um das Herausfinden der 
Interruptquelle nicht herum.

von Alex S. (Gast)


Lesenswert?

wie kann man das erfahren, was das für ein interrupt ist?
Danke
Grüsse Alex

von cskulkw (Gast)


Lesenswert?

Also, das CANINTF sagt Dir mit den Bits B0 und B1 welches Message Object 
gefüllt ist.

Wenn Du im CANINTE nur Bit 0 und Bit 1 gesetzt hast, frage ich mich, wie 
Du die CAN-Daten liest.

Liest Du der Reihe nach über
0x03 -> Register lesen
0x36 -> RX0 Data 0
0x37 -> RX0 Data 1
0x38 -> RX0 Data 2
. . .

aus? Dann mußt Du das CANINTF-Register mit 0x03 separat löschen.

Wenn Du mit dem 1-Byte-Lesekommando 0x90 und dann anschließend 13 X eine 
Null sendest, dann erhält Du die CAN-ID, DLC und die 8 Datenbyte, ohne 
jedes mal die Registeradresse explizit angeben zu müssen. Und weil über 
die 0x90 klar ist, das die RXB0 gemeint ist, löscht der MCP automatisch 
die INT-Leitung. Man kann auch separat für RXB0 und RXB1 eine 
Interuptleitung benutzen.

BFPCTRL - RXnBF PIN CONTROL AND STATUS (ADDRESS: 0Ch) -> Hierüber werden 
die Messagebox-selektierenden Leitungen aktiviert.

Ich hoffe, dass Dir das weiter hilft

Viel Erfolg

von Alex A. (Gast)


Lesenswert?

>Liest Du der Reihe nach über
>0x03 -> Register lesen
>0x36 -> RX0 Data 0
>0x37 -> RX0 Data 1
>0x38 -> RX0 Data 2
>. . .
>aus?

ja, so lese ich dann die Register aus

>Dann mußt Du das CANINTF-Register mit 0x03 separat löschen.
die Frage ist wo und wie?

Das ist mein Programm:
1
$regfile = "m8def.dat"
2
$crystal = 8000000
3
$hwstack = 40
4
$swstack = 80
5
$framesize = 90
6
$baud = 9600
7
8
9
10
 Config Portd.0 = Output
11
 Config Portd.1 = Output
12
 Config Portd.3 = Output
13
 Config Portd.5 = Output
14
 Config Portd.6 = Output
15
 Config Portd.7 = Output
16
 Config Portb.0 = Output
17
 Config Portb.1 = Output
18
 Config Portb.2 = Output
19
 Config Portc.0 = Output
20
 Config Portc.1 = Output
21
 Config Portc.2 = Output
22
 Config Portc.3 = Output
23
 Config Portc.4 = Output
24
 Config Portc.5 = Output
25
26
27
 Config Spi = Hard , Data Order = Msb , Master = Yes , Polarity = Low , Phase = 0 , Noss = 1 , Clockrate = 16
28
 Spiinit
29
30
31
32
33
 Config Pind.2 = Input                                      'MCP Interrupt MCP2515 /INT
34
 Css Alias Portd.4
35
 Config Css = Output
36
 Set Css
37
 Wait 1
38
39
40
Config Int0 = Falling                                       'INT MCP ist low aktiv
41
On Int0 Int_mcp                                             'Wenn INT, dann Routine INT_mcp aufrufen
42
Enable Int0                                                 'INT0 einschalten
43
Enable Interrupts
44
45
46
 Declare Sub Mcp2515_write_register(byval Adress As Byte , Byval Daten As Byte)
47
 Declare Sub Mcp2515_read_register(byval Adress As Byte )
48
 Declare Sub Mcp2515_bitmodify(byval Reg_add As Byte , Byval Reg_mask As Byte , Byval Reg_val As Byte)
49
50
51
 Dim Mcphilf As Byte
52
 Dim Canin As Byte
53
54
55
56
 Const Spi_reset = &HC0
57
 Const Spi_write = &H02
58
 Const Spi_read = &H03
59
 Const Spi_rts0 = &H81
60
 Const Spi_rts1 = &H82
61
 Const Spi_rts2 = &H84
62
 Const Spi_read_status = &HA0
63
 Const Spi_bit_modify = &H05
64
65
 Const Rxb0ctrl = &H60
66
 Const Rxb1ctrl = &H70
67
68
 Const Rxm0sidh = &H20
69
 Const Rxm0sidl = &H21
70
 Const Rxm1sidh = &H24
71
 Const Rxm1sidl = &H25
72
73
 Const Rxf0sidh = &H00
74
 Const Rxf0sidl = &H01
75
 Const Rxf1sidh = &H04
76
 Const Rxf1sidl = &H05
77
78
Const Rxb0d0 = &H66                                         'Receive Buffer 0 Data Byte 0
79
Const Rxb0d1 = &H67                                         'Receive Buffer 0 Data Byte 1
80
Const Rxb0d2 = &H68                                         'Receive Buffer 0 Data Byte 2
81
Const Rxb0d3 = &H69                                         'Receive Buffer 0 Data Byte 3
82
Const Rxb0d4 = &H6A                                         'Receive Buffer 0 Data Byte 4
83
Const Rxb0d5 = &H6B                                         'Receive Buffer 0 Data Byte 5
84
Const Rxb0d6 = &H6C                                         'Receive Buffer 0 Data Byte 6
85
Const Rxb0d7 = &H6D                                         'Receive Buffer 0 Data Byte 7
86
87
88
 Const Bfpctrl = &H0C
89
 Const Txrtsctrl = &H0D
90
 Const Canctrl = &H0F
91
92
 Const Txb0ctrl = &H30                                      ' Transmit Buffer 0 Control Register
93
 Const Txb0sidh = &H31                                      ' Transmit Buffer 0 Std Identifier High
94
 Const Txb0sidl = &H32                                      ' Transmit Buffer 0 Std Identifier Low
95
 Const Txb0dlc = &H35                                       ' Transmit Buffer 0 Data Length Code
96
 Const Txb0d0 = &H36                                        ' Transmit Buffer 0 Data Byte 0
97
 Const Txb0d1 = &H37                                        ' Transmit Buffer 0 Data Byte 1
98
 Const Txb0d2 = &H38                                        ' Transmit Buffer 0 Data Byte 2
99
 Const Txb0d3 = &H39                                        ' Transmit Buffer 0 Data Byte 3
100
 Const Txb0d4 = &H3A                                        ' Transmit Buffer 0 Data Byte 4
101
 Const Txb0d5 = &H3B                                        ' Transmit Buffer 0 Data Byte 5
102
 Const Txb0d6 = &H3C                                        ' Transmit Buffer 0 Data Byte 6
103
 Const Txb0d7 = &H3D                                        ' Transmit Buffer 0 Data Byte 7
104
105
 Const Txb1ctrl = &H40                                      ' Transmit Buffer 1 Control Register
106
 Const Txb1sidh = &H41                                      ' Transmit Buffer 1 Std Identifier High
107
 Const Txb1sidl = &H42                                      ' Transmit Buffer 1 Std Identifier Low
108
 Const Txb1dlc = &H45                                       ' Transmit Buffer 1 Data Length Code
109
 Const Txb1d0 = &H46                                        ' Transmit Buffer 1 Data Byte 0
110
 Const Txb1d1 = &H47                                        ' Transmit Buffer 1 Data Byte 1
111
 Const Txb1d2 = &H48                                        ' Transmit Buffer 1 Data Byte 2
112
 Const Txb1d3 = &H49                                        ' Transmit Buffer 1 Data Byte 3
113
 Const Txb1d4 = &H4A                                        ' Transmit Buffer 1 Data Byte 4
114
 Const Txb1d5 = &H4B                                        ' Transmit Buffer 1 Data Byte 5
115
 Const Txb1d6 = &H4C                                        ' Transmit Buffer 1 Data Byte 6
116
 Const Txb1d7 = &H4D                                        ' Transmit Buffer 1 Data Byte 7
117
118
 Const Txb2ctrl = &H50                                      ' Transmit Buffer 2 Control Register
119
 Const Txb2sidh = &H51                                      ' Transmit Buffer 2 Std Identifier High
120
 Const Txb2sidl = &H52                                      ' Transmit Buffer 2 Std Identifier Low
121
 Const Txb2dlc = &H55                                       ' Transmit Buffer 2 Data Length Code
122
 Const Txb2d0 = &H56                                        ' Transmit Buffer 2 Data Byte 0
123
 Const Txb2d1 = &H57                                        ' Transmit Buffer 2 Data Byte 1
124
 Const Txb2d2 = &H58                                        ' Transmit Buffer 2 Data Byte 2
125
 Const Txb2d3 = &H59                                        ' Transmit Buffer 2 Data Byte 3
126
 Const Txb2d4 = &H5A                                        ' Transmit Buffer 2 Data Byte 4
127
 Const Txb2d5 = &H5B                                        ' Transmit Buffer 2 Data Byte 5
128
 Const Txb2d6 = &H5C                                        ' Transmit Buffer 2 Data Byte 6
129
 Const Txb2d7 = &H5D                                        ' Transmit Buffer 2 Data Byte 7
130
131
 Const Rxb0sidh = &H61
132
 Const Rxb0sidl = &H62
133
 Const Rxb0dlc = &H65
134
 Const Rxb1sidh = &H71
135
 Const Rxb1sidl = &H72
136
 Const Rxb1dlc = &H75
137
138
 Const Cnf1 = &H2A
139
 Const Cnf2 = &H29
140
 Const Cnf3 = &H28
141
 Const Caninte = &H2B
142
 Const Canintf = &H2C
143
144
145
146
147
148
149
150
 Mcp2515_init:
151
152
 Mcphilf = Spi_reset
153
 Reset Css
154
   Waitus 10
155
   Spdr = Mcphilf
156
   Do
157
   Loop Until Spsr.spif = 1
158
   Waitus 10
159
 Set Css
160
161
 Mcp2515_write_register Cnf1 , &H03
162
 Mcp2515_write_register Cnf2 , &HBA
163
 Mcp2515_write_register Cnf3 , &H07
164
165
166
'Interrupt einstellen
167
 Mcp2515_write_register Caninte , &B00000011
168
 Mcp2515_write_register Canintf , &B00000000
169
 Mcp2515_write_register Rxb0ctrl , &B01100000
170
 Mcp2515_write_register Rxb1ctrl , &B01100000
171
172
173
 Mcp2515_write_register Rxm0sidh , &B00000000
174
 Mcp2515_write_register Rxm0sidl , &B00000000
175
 Mcp2515_write_register Rxm1sidh , &B00000000
176
 Mcp2515_write_register Rxm1sidl , &B00000000
177
178
'Filter
179
180
 Mcp2515_write_register Rxf0sidh , &B00000000
181
 Mcp2515_write_register Rxf0sidl , &B00000000
182
 Mcp2515_write_register Rxf1sidh , &B00000000
183
 Mcp2515_write_register Rxf1sidl , &B00000000
184
185
186
 Mcp2515_bitmodify Canctrl , &B11101000 , &B00001000        '???
187
188
Do
189
Waitms 10
190
Loop
191
192
End
193
194
195
196
Int_mcp:
197
Gosub Lesen
198
Return
199
200
201
Lesen:
202
Mcp2515_read_register Rxb0d0
203
Print "Daten Eingang:" ; Canin
204
Mcp2515_read_register Rxb0d1
205
Print "Daten Eingang:" ; Canin
206
207
'hier muss jetzt was hin, damit der Int. vom MCP geloescht wird!!!
208
Return
209
210
211
212
213
214
215
'schreiben
216
217
 Sub Mcp2515_write_register(byval Adress As Byte , Byval Daten As Byte)
218
 Mcphilf = Spi_write
219
 Reset Css
220
 Spdr = Mcphilf
221
 Do
222
 Loop Until Spsr.spif = 1
223
 Waitms 2
224
 Spdr = Adress
225
 Do
226
 Loop Until Spsr.spif = 1
227
 Spdr = Daten
228
 Do
229
 Loop Until Spsr.spif = 1
230
 Set Css
231
 End Sub
232
233
234
235
'lesen
236
237
 Sub Mcp2515_read_register(byval Adress As Byte )
238
 Mcphilf = Spi_read
239
 Reset Css
240
 Spdr = Mcphilf
241
 Do
242
 Loop Until Spsr.spif = 1
243
 Waitms 2
244
 Spdr = Adress
245
 Do
246
 Loop Until Spsr.spif = 1
247
 Spdr = 0
248
 Do
249
 Loop Until Spsr.spif = 1
250
 Canin = Spdr
251
 Set Css
252
 End Sub
253
254
255
'bitmodify
256
257
Sub Mcp2515_bitmodify(reg_add , Reg_mask , Reg_val)
258
259
   Reset Css
260
   Mcphilf = Spi_bit_modify
261
   Spdr = Mcphilf
262
   Do
263
   Loop Until Spsr.spif = 1
264
   Waitms 2
265
   Spdr = Reg_add
266
   Do
267
   Loop Until Spsr.spif = 1
268
   Spdr = Reg_mask
269
   Do
270
   Loop Until Spsr.spif = 1
271
   Spdr = Reg_val
272
   Do
273
   Loop Until Spsr.spif = 1
274
   Set Css
275
276
End Sub

danke
Gruss Alex

von Alex A. (Gast)


Lesenswert?

So, nachdem ich das Problem mit dem Filter geklärt habe, ist mir nur 
noch der Interrupt im Weg zum Ziel.

Warum bleibt er erhalten?
Hier der Aktuelle code:
1
$regfile = "m8def.dat"
2
$crystal = 8000000
3
$hwstack = 40
4
$swstack = 80
5
$framesize = 90
6
$baud = 9600
7
8
9
 Config Portd.0 = Output
10
 Config Portd.1 = Output
11
 Config Portd.3 = Output
12
 Config Portd.5 = Output
13
 Config Portd.6 = Output
14
 Config Portd.7 = Output
15
 Config Portb.0 = Output
16
 Config Portb.1 = Output
17
 Config Portb.2 = Output
18
 Config Portc.0 = Output
19
 Config Portc.1 = Output
20
 Config Portc.2 = Output
21
 Config Portc.3 = Output
22
 Config Portc.4 = Output
23
 Config Portc.5 = Output
24
25
26
 Config Spi = Hard , Data Order = Msb , Master = Yes , Polarity = Low , Phase = 0 , Noss = 1 , Clockrate = 16
27
 Spiinit
28
29
30
 Config Pind.2 = Input                                      'MCP Interrupt MCP2515 /INT
31
 Css Alias Portd.4
32
 Config Css = Output
33
 Set Css
34
 Wait 1
35
36
37
Config Int0 = Falling                                       'INT MCP ist low aktiv
38
On Int0 Int_mcp                                             'Wenn INT, dann Routine INT_mcp aufrufen
39
Enable Int0                                                 'INT0 einschalten
40
Enable Interrupts
41
42
43
 Declare Sub Mcp2515_write_register(byval Adress As Byte , Byval Daten As Byte)
44
 Declare Sub Mcp2515_read_register(byval Adress As Byte )
45
 Declare Sub Mcp2515_bitmodify(byval Reg_add As Byte , Byval Reg_mask As Byte , Byval Reg_val As Byte)
46
47
48
 Dim Mcphilf As Byte
49
 Dim Canin As Byte
50
51
52
53
 Const Spi_reset = &HC0
54
 Const Spi_write = &H02
55
 Const Spi_read = &H03
56
 Const Spi_rts0 = &H81
57
 Const Spi_rts1 = &H82
58
 Const Spi_rts2 = &H84
59
 Const Spi_read_status = &HA0
60
 Const Spi_bit_modify = &H05
61
62
 Const Rxb0ctrl = &H60
63
 Const Rxb1ctrl = &H70
64
65
 Const Rxm0sidh = &H20
66
 Const Rxm0sidl = &H21
67
 Const Rxm1sidh = &H24
68
 Const Rxm1sidl = &H25
69
70
 Const Rxf0sidh = &H00
71
 Const Rxf0sidl = &H01
72
 Const Rxf1sidh = &H04
73
 Const Rxf1sidl = &H05
74
75
Const Rxb0d0 = &H66                                         'Receive Buffer 0 Data Byte 0
76
Const Rxb0d1 = &H67                                         'Receive Buffer 0 Data Byte 1
77
Const Rxb0d2 = &H68                                         'Receive Buffer 0 Data Byte 2
78
Const Rxb0d3 = &H69                                         'Receive Buffer 0 Data Byte 3
79
Const Rxb0d4 = &H6A                                         'Receive Buffer 0 Data Byte 4
80
Const Rxb0d5 = &H6B                                         'Receive Buffer 0 Data Byte 5
81
Const Rxb0d6 = &H6C                                         'Receive Buffer 0 Data Byte 6
82
Const Rxb0d7 = &H6D                                         'Receive Buffer 0 Data Byte 7
83
84
85
 Const Bfpctrl = &H0C
86
 Const Txrtsctrl = &H0D
87
 Const Canctrl = &H0F
88
89
 Const Txb0ctrl = &H30                                      ' Transmit Buffer 0 Control Register
90
 Const Txb0sidh = &H31                                      ' Transmit Buffer 0 Std Identifier High
91
 Const Txb0sidl = &H32                                      ' Transmit Buffer 0 Std Identifier Low
92
 Const Txb0dlc = &H35                                       ' Transmit Buffer 0 Data Length Code
93
 Const Txb0d0 = &H36                                        ' Transmit Buffer 0 Data Byte 0
94
 Const Txb0d1 = &H37                                        ' Transmit Buffer 0 Data Byte 1
95
 Const Txb0d2 = &H38                                        ' Transmit Buffer 0 Data Byte 2
96
 Const Txb0d3 = &H39                                        ' Transmit Buffer 0 Data Byte 3
97
 Const Txb0d4 = &H3A                                        ' Transmit Buffer 0 Data Byte 4
98
 Const Txb0d5 = &H3B                                        ' Transmit Buffer 0 Data Byte 5
99
 Const Txb0d6 = &H3C                                        ' Transmit Buffer 0 Data Byte 6
100
 Const Txb0d7 = &H3D                                        ' Transmit Buffer 0 Data Byte 7
101
102
 Const Txb1ctrl = &H40                                      ' Transmit Buffer 1 Control Register
103
 Const Txb1sidh = &H41                                      ' Transmit Buffer 1 Std Identifier High
104
 Const Txb1sidl = &H42                                      ' Transmit Buffer 1 Std Identifier Low
105
 Const Txb1dlc = &H45                                       ' Transmit Buffer 1 Data Length Code
106
 Const Txb1d0 = &H46                                        ' Transmit Buffer 1 Data Byte 0
107
 Const Txb1d1 = &H47                                        ' Transmit Buffer 1 Data Byte 1
108
 Const Txb1d2 = &H48                                        ' Transmit Buffer 1 Data Byte 2
109
 Const Txb1d3 = &H49                                        ' Transmit Buffer 1 Data Byte 3
110
 Const Txb1d4 = &H4A                                        ' Transmit Buffer 1 Data Byte 4
111
 Const Txb1d5 = &H4B                                        ' Transmit Buffer 1 Data Byte 5
112
 Const Txb1d6 = &H4C                                        ' Transmit Buffer 1 Data Byte 6
113
 Const Txb1d7 = &H4D                                        ' Transmit Buffer 1 Data Byte 7
114
115
 Const Txb2ctrl = &H50                                      ' Transmit Buffer 2 Control Register
116
 Const Txb2sidh = &H51                                      ' Transmit Buffer 2 Std Identifier High
117
 Const Txb2sidl = &H52                                      ' Transmit Buffer 2 Std Identifier Low
118
 Const Txb2dlc = &H55                                       ' Transmit Buffer 2 Data Length Code
119
 Const Txb2d0 = &H56                                        ' Transmit Buffer 2 Data Byte 0
120
 Const Txb2d1 = &H57                                        ' Transmit Buffer 2 Data Byte 1
121
 Const Txb2d2 = &H58                                        ' Transmit Buffer 2 Data Byte 2
122
 Const Txb2d3 = &H59                                        ' Transmit Buffer 2 Data Byte 3
123
 Const Txb2d4 = &H5A                                        ' Transmit Buffer 2 Data Byte 4
124
 Const Txb2d5 = &H5B                                        ' Transmit Buffer 2 Data Byte 5
125
 Const Txb2d6 = &H5C                                        ' Transmit Buffer 2 Data Byte 6
126
 Const Txb2d7 = &H5D                                        ' Transmit Buffer 2 Data Byte 7
127
128
 Const Rxb0sidh = &H61
129
 Const Rxb0sidl = &H62
130
 Const Rxb0dlc = &H65
131
 Const Rxb1sidh = &H71
132
 Const Rxb1sidl = &H72
133
 Const Rxb1dlc = &H75
134
135
 Const Cnf1 = &H2A
136
 Const Cnf2 = &H29
137
 Const Cnf3 = &H28
138
 Const Caninte = &H2B
139
 Const Canintf = &H2C
140
141
142
143
 Mcp2515_init:
144
145
'mcp2515 reset
146
 Mcphilf = Spi_reset
147
 Reset Css
148
   Waitus 10
149
   Spdr = Mcphilf
150
   Do
151
   Loop Until Spsr.spif = 1
152
   Waitus 10
153
 Set Css
154
155
 Mcp2515_write_register Cnf1 , &H03
156
 Mcp2515_write_register Cnf2 , &HBA
157
 Mcp2515_write_register Cnf3 , &H07
158
159
160
'Interrupt einstellen
161
 Mcp2515_write_register Caninte , &B00000001                'Interrupt auslosen, wenn Nachricht in buffer 0 liegt
162
 Mcp2515_write_register Canintf , &B00000000                'No interrupt pending
163
 Mcp2515_write_register Rxb0ctrl , &B00100000               'Empfange nur durch filter eingestelle Standart ID, Acceptance Filter 0 (RXB0)
164
165
166
'Maske
167
 Mcp2515_write_register Rxm0sidh , &B11111111               'Maske  High
168
 Mcp2515_write_register Rxm0sidl , &B11100000               'Maske  Low
169
170
171
'Filter
172
173
 Mcp2515_write_register Rxf0sidh , &B10111000               'Filter High
174
 Mcp2515_write_register Rxf0sidl , &B01100000               'Filter Low , bit 3 EXIDE Filter fuer Standert Frame
175
176
177
178
 Mcp2515_bitmodify Canctrl , &B11101000 , &B00001000        '???
179
180
Do
181
Waitms 10
182
Loop
183
184
End
185
186
187
188
Int_mcp:
189
Gosub Lesen
190
Return
191
192
193
Lesen:
194
Mcp2515_read_register Rxb0d0
195
Print "Daten Eingang:" ; Canin
196
Mcp2515_read_register Rxb0d1
197
Print "Daten Eingang:" ; Canin
198
199
'hier muss jetzt was hin, damit der Int. vom MCP geloescht wird!!!
200
Return
201
202
203
204
205
'schreiben
206
207
 Sub Mcp2515_write_register(byval Adress As Byte , Byval Daten As Byte)
208
 Mcphilf = Spi_write
209
 Reset Css
210
 Spdr = Mcphilf
211
 Do
212
 Loop Until Spsr.spif = 1
213
 Waitms 2
214
 Spdr = Adress
215
 Do
216
 Loop Until Spsr.spif = 1
217
 Spdr = Daten
218
 Do
219
 Loop Until Spsr.spif = 1
220
 Set Css
221
 End Sub
222
223
224
225
'lesen
226
227
 Sub Mcp2515_read_register(byval Adress As Byte )
228
 Mcphilf = Spi_read
229
 Reset Css
230
 Spdr = Mcphilf
231
 Do
232
 Loop Until Spsr.spif = 1
233
 Waitms 2
234
 Spdr = Adress
235
 Do
236
 Loop Until Spsr.spif = 1
237
 Spdr = 0
238
 Do
239
 Loop Until Spsr.spif = 1
240
 Canin = Spdr
241
 Set Css
242
 End Sub
243
244
245
'bitmodify
246
247
Sub Mcp2515_bitmodify(reg_add , Reg_mask , Reg_val)
248
249
   Reset Css
250
   Mcphilf = Spi_bit_modify
251
   Spdr = Mcphilf
252
   Do
253
   Loop Until Spsr.spif = 1
254
   Waitms 2
255
   Spdr = Reg_add
256
   Do
257
   Loop Until Spsr.spif = 1
258
   Spdr = Reg_mask
259
   Do
260
   Loop Until Spsr.spif = 1
261
   Spdr = Reg_val
262
   Do
263
   Loop Until Spsr.spif = 1
264
   Set Css
265
266
End Sub

Hat Jemand eine Idee?
Gruss Alex

von Alex A. (Gast)


Lesenswert?

So, auch das hat geklappt.
Die Zeile:
Mcp2515_write_register Canintf , &B00000000      'No interrupt pending
muss nach dem Auslesen des Buffers stehen, und nicht bei der 
Initializierung.

Es sind aber noch einige Frage dazu gekommen.
1. In ein Buffer z.B. RXB0 passen ja 8 bytes an Daten.
   2 Bytes schicke ich nur.
   Die Empfange ich auch an Rxb0d0 und Rxb0d1. Das ist alles richtig.
   Wenn ich aber noch Rxb0d3 auslesen, wo ich eigentlich nichts hin
   schicke, bekomme ich da nur Müll aus gelesen. Warum ist das so?
   Müssen da nicht Nullen rauskommen? Ich meine der Buffer ist ja dann
   leer.
2. Ich habe die Can-Geschwindigkeit über CNF1-3 auf 1000kbps 
eingestellt.
   Aber ich kann AUCH die Nachrichten mit 100kbps empfangen. Warum?

Danke
Gruss Alex

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.