Hallo Ich versuche seit längerer Zeit den CAN bus baustein mcp2515 zum laufen zu bringen. Leider habe ich bis heute ein erfolg bei der sache gehabt. Ich habe mir schon den Artiekel von Kreatives Chaos angeschaut aber irgendwie komme ich damit nicht zurecht. Jetzt meine Frage: Wie muss ich den MCP2515 Installieren damit er Daten vom Can bus empfangen kannn.. gibt es dazu eine Step BY Step Anleitung ? bz: Addr 0x00 = ff usw Danke für eure Hilfe
Der Artikel im Kreativen Chaos ist doch schon eine recht detaillierte Schritt für Schritt Anleitung?!
hallo So das ist mein Programm das ich geschrieben habe aber leider kann ich am can bius nix ampfangen was habe ich falsch gemacht ? ps. Das Programm ist in Basic geschrieben '******************************** 'Can bus test file 1 '******************************** Config PORTD.0 = Output 'led 1 Config PORTD.1 = Output 'LED 2 Symbol led1 = PORTD.0 Symbol led2 = PORTD.1 AllDigital Define SPI_CS_REG = PORTB Define SPI_CS_BIT = 4 Define SPI_SCK_REG = PORTB Define SPI_SCK_BIT = 1 Define SPI_SDI_REG = PORTB Define SPI_SDI_BIT = 0 Define SPI_SDO_REG = PORTC Define SPI_SDO_BIT = 7 SPIPrepare SPICSOff PORTB.4 = 1 WaitMs 5 loop: '********************************** 'SPICSOn 'WaitMs 10 '********************************** '/ MCP2515 per Software Reset zuruecksetzten, '// danach ist der MCP2515 im Configuration Mode SPICSOn led1 = 1 SPISend 0xc0 'WaitMs 1 SPICSOff led1 = 0 '/ etwas warten bis sich der mcp2515 zurueckgesetzt hat WaitMs 10 '* einstellen des Bit timings '/ prop seg und phase seg1 einstellen 'mcp2515_write_register(cnf2,(1 < < btlmode) |(1 < < phseg11)) ; SPICSOn SPISend 0x2a SPISend %11 WaitMs 1 SPICSOff '/ / wake - up filter deaktivieren, phase seg2 einstellen 'mcp2515_write_register(cnf3,(1 < < phseg21)) ; SPICSOn SPISend 0x28 SPISend %1 WaitMs 1 SPICSOff '/ / aktivieren der rx buffer interrupts 'mcp2515_write_register(caninte,(1 < < rx1ie) |(1 < < rx0ie)) ; SPICSOn SPISend 0x2b SPISend %11 WaitMs 1 SPICSOff '* einstellen der filter '/ / buffer 0: empfangen aller nachrichten 'mcp2515_write_register(rxb0ctrl,(1 < < rxm1) |(1 < < rxm0)) ; SPICSOn SPISend 0x60 SPISend %11 WaitMs 1 SPICSOff '/ / buffer 1: empfangen aller nachrichten 'mcp2515_write_register(rxb1ctrl,(1 < < rxm1) |(1 < < rxm0)) ; SPICSOn SPISend 0x70 SPISend %11 WaitMs 1 SPICSOff '/ / alle bits der empfangsmaske loeschen, '/ / damit werden alle nachrichten empfangen 'mcp2515_write_register(rxm0sidh, 0) ; SPICSOn SPISend 0x20 SPISend 00 WaitMs 1 SPICSOff 'mcp2515_write_register(rxm0sidl, 0) ; SPICSOn SPISend 0x21 SPISend 00 WaitMs 1 SPICSOff 'mcp2515_write_register(rxm0eid8, 0) ; SPICSOn SPISend 0x22 SPISend 00 WaitMs 1 SPICSOff 'mcp2515_write_register(rxm0eid0, 0) ; SPICSOn SPISend 0x23 SPISend 00 WaitMs 1 SPICSOff 'mcp2515_write_register(rxm1sidh, 0) ; SPICSOn SPISend 0x24 SPISend 00 WaitMs 1 SPICSOff 'mcp2515_write_register(rxm1sidl, 0) ; SPICSOn SPISend 0x25 SPISend 00 WaitMs 1 SPICSOff 'mcp2515_write_register(rxm1eid8, 0) ; SPICSOn SPISend 0x26 SPISend 00 WaitMs 1 SPICSOff 'mcp2515_write_register(rxm1eid0, 0) ; SPICSOn SPISend 0x27 SPISend 00 WaitMs 1 SPICSOff '/ / deaktivieren der pins rxnbf pins(High impedance state) 'mcp2515_write_register(bfpctrl, 0) ; SPICSOn SPISend 0x0c SPISend 00 WaitMs 1 SPICSOff '/ / txnrts bits als inputs schalten 'mcp2515_write_register(txrtsctrl, 0) ; SPICSOn SPISend 0x0d SPISend 00 WaitMs 1 SPICSOff '/ / device zurueck in den normalen modus versetzten 'mcp2515_bit_modify(canctrl, 0xe0, 0) ; SPICSOn SPISend 0x0f SPISend 00 WaitMs 1 SPICSOff '*********************************************************************** *4 '/ * verschickt eine nachricht ueber puffer 0 '* 2 datenbytes (0x04, 0xf3) '* standard id: 0x0123 '*/ 'uint16_t id = 0x0123; '/* Nachrichten Puffer auf Hoechste Prioritaet einstellen '(braucht man nicht wenn man nur mit einem puffer sendet, siehe text) */ 'mcp2515_bit_modify( txb0ctrl, (1<<txp1)|(1<<txp0), (1<<txp1)|(1<<txp0) ); SPICSOn SPISend 0x30 SPISend %1111 WaitMs 1 SPICSOff '// ID einstellen 'mcp2515_write_register(txb0sidh, (uint8_t) (id>>3)); SPICSOn SPISend 0x31 SPISend %111 WaitMs 1 SPICSOff 'mcp2515_write_register(txb0sidl, (uint8_t) (id<<5)); SPICSOn SPISend 0x32 SPISend %111 WaitMs 1 SPICSOff '// Nachrichten Laenge + RTR einstellen 'mcp2515_write_register(txb0dlc, 2); SPICSOn SPISend 0x35 SPISend 2 WaitMs 1 SPICSOff '// Daten 'mcp2515_write_register(txb0d0, 0x04); SPICSOn SPISend 0x36 SPISend 0x04 WaitMs 1 SPICSOff 'mcp2515_write_register(txb0d1, 0xf3); SPICSOn SPISend 0x37 SPISend 0xf3 WaitMs 1 SPICSOff '// CAN Nachricht verschicken 'port_cs &= ~(1<<p_cs); 'spi_putc(spi_rts | 0x01); 'port_cs | = (1 < < p_cs) ; SPICSOn SPISend 0x80 SPISend 0x01 WaitMs 1 SPICSOff
Bluebird schrieb: > ps. Das Programm ist in Basic geschrieben Erklärt immerhin, weshalb du mit dem KC-Artikel nicht so arg viel anfangen kannst.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.