www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik CANBUS MCP2515 PIC Problem


Autor: Bluebird (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Artikel im Kreativen Chaos ist doch schon eine recht detaillierte 
Schritt für Schritt Anleitung?!

Autor: Bluebird (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bluebird schrieb:

> ps. Das Programm ist in Basic geschrieben

Erklärt immerhin, weshalb du mit dem KC-Artikel nicht so arg viel 
anfangen kannst.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.