-
Thread
2 Stk. MCP2515 an einem z.B. ATMega32
Hallo zusammen, ich möchte gerne an einen ATMega32 zwei MCP2515 per SPI anschließen. Ich brauche zur Lösung der Aufgabe 2 CAN-Controller ????!!!!! Auch ein AT90CAN128 und ein MCP2515 wären denkbar. Es soll ein bidirektionaler Datenstrom eingelesen und gefiltert
//CS2 low . . . PORTB |= (1<<SPI_CS1 | 1<<SPI_CS2); // beide CS high steckt in: - mcp2515_read_register - mcp2515_write_register - mcp2515_write_register_f - mcp2515_bit_modify - mcp2515_read_rx_status - mcp2515_init - can_get_message - can_send_message also überall da, wo im
-
Thread
Probleme mit MCP25625
typedef uint8_t prog_uint8_t; prog_uint8_t can_filter[] = { // Group 0 MCP2515_FILTER(0), // Filter 0 MCP2515_FILTER(0), // Filter 1 // Group 1 MCP2515_FILTER_EXTENDED(0), // Filter 2 MCP2515_FILTER_EXTENDED(0), // Filter 3 MCP2515_FILTER_EXTENDED
, 0); #if defined(MCP2515_INT) SET_INPUT(MCP2515_INT); SET(MCP2515_INT); #endif #ifdef RXnBF_FUNKTION SET_INPUT(MCP2515_RX0BF); SET_INPUT(MCP2515_RX1BF); SET(MCP2515_RX0BF); SET
-
Thread
Universelles CAN Interface; MCP2515: Probleme beim Filter setzen
Ich verwende den MCP2515 an einem Blackfin DSP. Für meine Treiber habe ich aber nur folgende Funktionen aus der lib verwendet: mcp2515_write_register mcp2515_read_register mcp2515_bit_modify mcp2515_read_status mcp2515
( RXM0EID0, 0 ); mcp2515_write_register( RXM1SIDH, 0xff ); mcp2515_write_register( RXM1SIDL, 0xe0 ); mcp2515_write_register( RXM1EID8, 0 ); mcp2515_write_register( RXM1EID0, 0 ); mcp2515_write_register
-
Thread
MCP2515 und RPi - Problem
driver interface can: raw protocol (rev 20120528) can: broadcast manager protocol (rev 20120528 t) mcp2515 spi0.0: can0: device registered (cs=0, irq=195) mcp2515 spi0.0: can0: bit-timing not yet defined mcp2515 spi0.0: can0: bit-timing not yet defined mcp2515 spi0.0: can0: bit-timing not yet defined
interface > can: raw protocol (rev 20120528) > can: broadcast manager protocol (rev 20120528 t) > mcp2515 spi0.0: can0: device registered (cs=0, irq=195) > mcp2515 spi0.0: can0: bit-timing not yet defined > mcp2515 spi0.0: can0: bit-timing not yet defined > mcp2515 spi0.0: can0: bit-timing not yet
-
Thread
MCP2515 an Arduino mehr als 8 Frames senden
break; default: set = 0; break; } if (set) { mcp2515_setRegister(MCP_CNF1, cfg1); mcp2515_setRegister(MCP_CNF2, cfg2); mcp2515_setRegister(MCP_CNF3, cfg3); return MCP2515_OK; } else { return MCP2515_FAIL
14; i++) { /* in-buffer loop */ mcp2515_setRegister(a1, 0); mcp2515_setRegister(a2, 0); mcp2515_setRegister(a3, 0); a1++; a2++; a3++; } mcp2515_setRegister(MCP_RXB0CTRL, 0); mcp2515
-
Thread
CAN und MCP2515 - Kein Senden möglich
P_MOSI); SET_INPUT(P_MISO); SET_INPUT(MCP2515_INT); SET(MCP2515_INT); // internal pull up, why? // init SPI master interface, SPI prescaler /4 SPCR = (1<<SPE) | (1<<MSTR); SPSR = 0; // reset MCP2515 by software
// deactivate the RXnBF Pins (High Impedance State) mcp2515_write_register(BFPCTRL, 0); // set TXnRTS as normal inputs mcp2515_write_register(TXRTSCTRL, 0); // turn off filters => receive any message mcp2515_write_register(RXB0CTRL, (1<
-
Thread
SPI Problem mit MCP2515
( RXM0SIDL, 0 ); mcp2515_write_register( RXM0EID8, 0 ); mcp2515_write_register( RXM0EID0, 0 ); mcp2515_write_register( RXM1SIDH, 0 ); mcp2515_write_register( RXM1SIDL, 0 ); mcp2515_write_register( RXM1EID8,
0 ); mcp2515_write_register( RXM1SIDL, 0 ); mcp2515_write_register( RXM1EID8, 0 ); mcp2515_write_register( RXM1EID0, 0 ); // Deaktivieren der Pins RXnBF Pins ( High Impedance State ) mcp2515_write_register
-
Thread
Can Bus interface reagiert nicht. Was mache ich falsch?
Nimm doch erstmal die fertige SPI Bibliothek <mcp2515.h> direkt alles selbst schreiben kannst du ja immer noch.
sende.. wobei canbus wie folgt definiert ist: [code] spi: id: mcp2515_spi clk_pin: GPIO12 mosi_pin: GPIO11 miso_pin: GPIO13 canbus: - platform: mcp2515 id: can_mcp2515 spi_id: mcp2515_spi cs_pin: GPIO10 can_id: 0x000C01FF use_extended_id
-
Thread
Speicher voll durch Multiplikation
Standardausgabe => ab jetzt koennen wir printf() verwenden stdout = &mystdout; // Versuche den MCP2515 zu initilaisieren if (!mcp2515_init()) { PRINT("Fehler: kann den MCP2515 nicht ansprechen!\n"); for (;;); } else { PRINT("MCP2515 is aktiv\n\n"); } PRINT("Erzeuge
: MCP2515 nicht gefunden!\n"); for (;;); } [/C] oder [C] if (!mcp2515_init()) { PRINT("Error: MCP2515 not found!\n"); for (;;); } [/C] tut's auch. Und in Summe sinds dann auch
-
Thread
Mit der Butterfly an den CAN Bus?
Okay. Dann bestell ich mir jetzt den SN65HVD231D und den MCP2515
das SPI in Software nachbilden (auch nicht so schwierig). Du brauchst 4-5 Pins: MOSI (Daten zum MCP2515), MISO (Daten vom MCP2515), SCK (Takt), /SS (Chipselect-Signal, damit der MCP2515 feststellen kann, dass er gemeint ist) und vielleicht noch eine Interruptleitung vom MCp2515 zum AVR - das ist aber
-
Thread
MCP2515 CAN-Bus Modul
kannst sind die VCC Pins mit einer Leiterbahn direkt verbunden. https://github.com/yasir-shahzad/MCP2515-CAN-Bus-Module
die MCP2515 haben ja noch eine Sicherheit ggü den Datenblattwerten, in der Praxis passen die Pegel noch mit der halben Versorgungsspannung, also ca. 2,5V Für MISO des 5V MCP2515 Moduls habe ich einen Spannungsteiler
-
Thread
CAN-Bus mit Arduino auswerten
Einstieg sehr umfangreich. Meine Empfehlung: Lese dich doch erst mal beim Kreativen Chaos in den MCP2515 und SPI ein: http://www.kreatives-chaos.com/artikel/ansteuerung-eines-mcp2515
es ja mit 8 Mhz klappe.... In der Bib sind aber auch ganz andere werte als deine :D. mcp2515_setRegister(MCP_CNF1, cfg1); mcp2515_setRegister(MCP_CNF2, cfg2); mcp2515_setRegister(MCP_CNF3, cfg3); cfg1 = MCP_16MHz_1000kBPS_CFG1; cfg2 = MCP_16MHz
-
Thread
Atmega und CAN
MCP2515 MISO - MISO MOSI - MOSI SCK - SCK PB2(SS) - CS MCP2515: OSC1/2 an 16 Mhz OSC + 22nF zu gnd TXCAN und RXCAN zu TXD und RXD vom MCP2551 Reset mit Reset vom Atmel verbunden VDD = 5V Rest
Wenn du den MCP2515 initialisierst und dabei Daten auf dem CAN-Bus liegen, setzt der MCP2515 das RX0OVR oder RX1OVR Flag und nix geht mehr. Ganz wichtig beim MCP2515 und eigentlich bei allen Chips von MICROCHIP müssen
-
Thread
Spannungsteiler zw. MCP2515 und MCP2551 liefert falsche Spannung
MCP2515, der ggf. einen eher niederohmigen EINGANG hat. Das kann man leicht messen. Beide Widerstände auslöten Schalte dein Multimeter in den Strommeßbereich (mA) und verbinde das Eingangspin vom MCP2515
CAN Controller integriert hat brauchst du nicht über den SPI Flaschenhals zu gehen und lässt den MCP2515 weg.
-
Thread
Physikalischer CAN Bus mit Transceivern aber ohne CAN Controller
A. K. schrieb im Beitrag #5857600: > und auch kein MCP2515 dran Wenn es sich nicht um eine Erweiterung eines schon vorhandenen Systems handelt, würde ich den auch nicht nehmen. Ein Controller mit integriertem CAN kostet auch nicht viel mehr als der MCP2515
man an einen Buffer-Full Output des MCP2515, dann kann der in Sleep-Modi mit 1..2uA gehen. Diese Pins können als GPIO genutzt werden. Bliebe die Versorgungsspannung: MCP2515 ist runter bis 2,7V spezifiziert, etwas weniger geht bestimmt auch
-
Thread
AVR-CAN-Lib hängt nach check_message
'c', 'd', 'e', 'f' }; const uint8_t can_filter[] PROGMEM = { // Group 0 MCP2515_FILTER(0), // Filter 0 MCP2515_FILTER(0), // Filter 1 MCP2515_FILTER(0), // Filter 0 MCP2515_FILTER(0), // Filter 1 MCP2515_FILTER
MCP2515_CS B,2 #define MCP2515_INT D,2 [/c]
-
Thread
Junkers CAN-Bus Protokoll
Software) die SPI_Pin Nr. sind nicht die Pin's des ESP_Platine bzw. zur Software. static const byte MCP2515_SCK = 18 ; // SCK input of MCP2515 static const byte MCP2515_MOSI = 23 ; // SDI input of MCP2515 static const byte MCP2515_MISO = 19 ; // SDO output of MCP2515 static const byte MCP2515_
SPI_Pin > Nr. sind nicht die Pin's des ESP_Platine bzw. zur Software. > > static const byte MCP2515_SCK = 18 ; // SCK input of MCP2515 > static const byte MCP2515_MOSI = 23 ; // SDI input of MCP2515 > static const byte MCP2515_MISO = 19 ; // SDO output of MCP2515 > static const byte MCP2515_
-
Thread
MCP2515 Interrupt beim Empfang löschen
Cnf2 , &HBA Mcp2515_write_register Cnf3 , &H07 'Interrupt einstellen Mcp2515_write_register Caninte , &B00000011 Mcp2515_write_register Canintf , &B00000000 Mcp2515_write_register Rxb0ctrl , &B01100000 Mcp2515_write_register Rxb1ctrl , &B01100000 Mcp2515_write_register Rxm0sidh , &B00000000 Mcp2515_write_register Rxm0sidl , &B00000000 Mcp2515_write_register Rxm1sidh , &B00000000 Mcp2515_write_register Rxm1sidl , &B00000000 'Filter Mcp2515
-
Thread
MCP2515 Initialisierung
0 Mcp2515_write_register Rxm0eid8 , 0 Mcp2515_write_register Rxm0eid0 , 0 Mcp2515_write_register Rxm1sidh , 0 Mcp2515_write_register Rxm1sidl , 0 Mcp2515_write_register Rxm1eid8 , 0 Mcp2515_write_register
&B00000000 Print "ende MCP2515_init " Return
-
Thread
RaspberryPiB+ mit CAN (MCP2515)
besser als ein AVR+MCP2515, weil (a) der SPI-Flaschenhals wegfällt, (b) der ECAN des PIC mehr Buffer und weniger Fehler als der MCP2515 hat, (c) der anzuschließende Quarz CAN und den Rest des Prozessors taktet und (d) Du einen
, hast Du die Konfiguration Deines Adapters über spi-config geladen ? In etwa so: # CS0 ; MCP2515/INT -> GPIO25 ; MCP2515 Quarz 16 Mhz sudo spi-config devices=\ bus=0:cs=0:modalias=mcp2515:speed=1000000:gpioirq=25:pd=20:pds32-0=16000000:pdu32-4=0x2002:force_release sudo modprobe mcp251x sudo
-
Thread
MCP2515 Sendepuffer
by software reset. // After this he is in configuration mode. RESET(MCP2515_CS); spi_putc(SPI_RESET); SET(MCP2515_CS); // wait a little bit until the MCP2515 has restarted _delay_us(10); // load CNF1..3 Register RESET(MCP2515_CS); spi_putc(SPI_WRITE
(0x04); //CANCTRL SET(MCP2515_CS); Ab hier dann fröhliches Senden und empfangenn Stefan schrieb im Beitrag #2428742: > void mcp2515_write_register( uint8_t adress, uint8_t data ) > > { > > // /CS des MCP2515 auf
-
Thread
Günstige CAN-Filter Lösung
onboard. 125kbit sollten eigendlich machbar sein, wenn ich mich recht erinnere, dann lief ein MCP2515 bei mir bis 250kbit ohne Datenverlust. Das kommt natürlich etwas auf die Firmware des ATmega drauf an. Allerdings würde ich mir heute keinen MCP2515 mehr antun. Viele Grüße, Stefan
Nö, der Interrupt des MCP2515 löst die SPI-Aktionen aus. SPI selbst läuft ohne Interrupt.
-
Thread
zwei MCP2515 über eine Bibl. ansprechen
#3218062: > Teilweise. hm... ich hab es geahnt. Dazu hab ich mir folgendes gedacht: #define MCP2515_CS D,3 #define MCP2515_INT D,4 #define MCP2515_CS_1 D,5 #define MCP2515_INT_1 D,6 Immer wenn die Bibl. MCP2515_CS oder MCP2515_INT verwendet bau ich eine kleine Entweder-Oder Bedingung
@qwertz (Gast) >#define MCP2515_CS D,3 >#define MCP2515_INT D,4 >#define MCP2515_CS_1 D,5 >#define MCP2515_INT_1 D,6 >Immer wenn die Bibl. MCP2515_CS oder MCP2515_INT verwendet bau ich eine >kleine Entweder-Oder
-
Thread
CAN Kommuikation ATmega328P
habe ich die CPU Frequenz auf 8MHz gesetzt und in der Config MCP2515_CS auf B,1 und MCP2515_INT auf B,0 gesetzt. Leider kann ich bis auf einen 5V Pegel auf meinem INT Ausgang an Pin B0 des ATmegas nichts weiteres mit meinem Oszilloskop messen. Auch ein CLK Signal
Und den Interruptausgang des MCP2515 solltest du auf INT0 oder 1 des ATMega legen.
-
Thread
Include in Assemblerdatei (.S) - wie funktionierts?
Interrupt-Header einfügen #include <spi.h> // SPI-Busroutinen einfügen /* Funktionsprototypen */ void MCP2515_Reset(void); // Resettet den MCP2515 uint8_t MCP2515_Read(uint8_t); // Liest ein Byte aus dem MCP2515 void MCP2515_Write(uint8_t, uint8_t); // Schreibt ein Byte im MCP2515 void MCP2515_RTS(uint8_t Buffer); // Sendet ein "RTS" an den MCP2515 uint8_t MCP2515_Status(void); // Liest den Status des MCP2515 void MCP2515_Modify(uint8_t Address, uint8_t Mask, \ uint8_t Data); // Modifiziert ein Byte im MCP2515 /* Makros */ #
-
Thread
prog_uint8_t
ein? [c] typedef uint8_t prog_uint8_t; prog_uint8_t can_filter[] = { // Group 0 MCP2515_FILTER(0), // Filter 0 MCP2515_FILTER(0), // Filter 1 // Group 1 MCP2515_FILTER_EXTENDED(0), // Filter 2 MCP2515_FILTER_EXTENDED(0), // Filter 3 MCP2515_FILTER_EXTENDED(0), // Filter 4 MCP2515_FILTER_EXTENDED(0), // Filter 5 MCP2515_FILTER(0), // Mask 0 (for group 0) MCP2515_FILTER_EXTENDED(0), // Mask 1 (for group 1) }; [/c]
-
Thread
CAN Gateway mit AVR möglich?
aussendet ein Gateway zu bauen. Ist das noch mit einem 8-Bit AVR, also AT90CANxxx oder mit einem MCP2515 möglich? Schönen Abend. Herbert
da alle Nachrichten durch das Gateway müssen, und nur eine verändert wird. Im Datenblatt des MCP2515 steht, wie du eben gesagt hast, dass er den RXB1 füllt, wenn der RXB0 voll ist. Im Danteblatt des AT90CAN finde ich eine ähnliche Funktion nicht. Eventuell verwende ich einfach 2x MCP2515.
-
Thread
Problem mit CAN Interface MCP2515/2551
Serial.print("--- START LOOP --- "); Serial.println(counter, DEC); Serial.println("Reading MCP2515 status:"); digitalWrite(SLAVESELECT, LOW); SPI.transfer(READ); SPI.transfer(CANSTAT); canStatus = SPI.transfer(0); digitalWrite(SLAVESELECT, HIGH); Serial.print("MCP2515 Status: "); Serial.println(canStatus, BIN); Serial.println("Trying to reset MCP2515"); digitalWrite(SLAVESELECT, LOW); SPI.transfer(RESET); digitalWrite(SLAVESELECT, HIGH); delay(200); Serial.println("Reading MCP2515 status:"); digitalWrite(SLAVESELECT, LOW)
-
Thread
CAN-Bus MCP2515, Empfang bestimmter Identifier
, // damit werden alle Nachrichten empfangen mcp2515_write_register( RXM0SIDH, 0 ); mcp2515_write_register( RXM0SIDL, 0 ); mcp2515_write_register( RXM0EID8, 0 ); mcp2515_write_register( RXM0EID0, 0 ); mcp2515_write_register( RXM1SIDH, 0 ); mcp2515_write_register( RXM1SIDL, 0 ); mcp2515_write_register( RXM1EID8, 0 ); mcp2515_write_register( RXM1EID0, 0 ); /* * Einstellen der Pin Funktionen */ // Deaktivieren der Pins RXnBF
-
Thread
CAN / mcp2515: rtr bit immer gesetzt
loeschen, // damit werden alle Nachrichten empfangen mcp2515_write_register( RXM0SIDH, 0 ); mcp2515_write_register( RXM0SIDL, 0 ); mcp2515_write_register( RXM0EID8, 0 ); mcp2515_write_register( RXM0EID0, 0 ); mcp2515_write_register( RXM1SIDH, 0 ); mcp2515_write_register( RXM1SIDL, 0 ); mcp2515_write_register( RXM1EID8, 0 ); mcp2515_write_register( RXM1EID0, 0 ); /* * Einstellen der Pin Funktionen */ // Deaktivieren
-
Thread
AVR "ret" springt zu 0x00
3 MCP2515_FILTER(CAN_WHO_IS_ONLINE), // Filter 4 MCP2515_FILTER(CAN_WHO_IS_ONLINE), // Filter 5 MCP2515_FILTER(0x0FF), // Mask 0 (for group 0) MCP2515_FILTER(0x7FF), // Mask 1
3 MCP2515_FILTER(CAN_WHO_IS_ONLINE), // Filter 4 MCP2515_FILTER(CAN_WHO_IS_ONLINE), // Filter 5 MCP2515_FILTER(0x0FF), // Mask 0 (for group 0) MCP2515_FILTER(0x7FF), // Mask 1
-
Thread
Mehrere verschiedene Can Nachrichten mit Arduino versenden
message.data[4] = 0x00; message.data[5] = 0x40; message.data[6] = 0x00; message.data[7] = 0x00; mcp2515_bit_modify(CANCTRL, (1<<REQOP2)|(1<<REQOP1)|(1<<REQOP0), 0); mcp2515_send_message(&message); delay(1000); mcp2515_send_message(&message2); delay(1000); mcp2515_send_message(&message3);
] = 0x00; message5.data[5] = 0x40; message5.data[6] = 0x00; message5.data[7] = 0x00; mcp2515_bit_modify(CANCTRL, (1<<REQOP2)|(1<<REQOP1)|(1<<REQOP0), 0); mcp2515_send_message(&message); delay(1000); mcp2515_send_message(&message2); delay(1000); mcp2515_send_message(&message3);
-
Thread
2 Esp32 mit CAN verbinden
); else Serial.println("Error Initializing MCP2515..."); CAN0.setMode(MCP_NORMAL); // Set operation mode to normal so the MCP2515 sends acks to received data. pinMode(CAN0_INT, INPUT); //
Inzwischen habe ich es geschafft, dass zwei Arduino UNO über zwei MCP2515 Module kommunizieren, dass klappt auch wunderbar. Mit dem ESP32 läuft es leider immer noch nicht. Leider bin ich (noch) nicht so technisch bewandert, könnte es daran liegen, dass das MCP2515 Modul
-
Thread
CAN-Bus: MCP2515 und MCP2551 mit Linux Treiber
zw. Linux und MCP2515 tut seit 6 Jahren (mit 4MHz Quarz) hier in Stückzahlen ihren vollkommen problemlosen Dienst. Grüße MiWi
kommt bei dmesg noch eine Ausgabe CANSTAT und zwei Hex-Werte. cat /proc/interrupts zeigt ... mcp2515: 0 ... Boarddatei ist im Anhang. Danke.
-
Thread
Bus für >50m
Achso...ganz vergessen. z.B. so: Tiny <--> MCP2515
schrieb im Beitrag #2203930: > Wow so viele Antworten an einem sonnigen Sonntag :) > Coole idee den MCP2515 zu nutzen. Ich werde mich mal in CAN bus > einlesen. Und wenn Du dann den MCP2515 durch einen PIC18F25K80 ersetzt, bekomst Du auch noch gleich einen integrierten Prozessor mitgeliefert. Vorteil
-
Thread
Can Controller MCP2515 sendet nicht -> Ratlos
2 Sachen fallen mir direkt auf: void mcp2515_init(void) { // SPI Interface initialisieren spi_init(); // MCP2515 per Software Reset zuruecksetzten, // danach ist der MCP2515 im Configuration Mode PORT_CS &= ~(1
Phase Seg2 einstellen mcp2515_write_register( CNF3, (1<<PHSEG21) ); // Aktivieren der Rx Buffer Interrupts (wenn voll) mcp2515_write_register( CANINTE, (1<<RX1IE)|(1<<RX0IE) ); und hier gibst du munter die den
-
Thread
Serienwiderstand in den AVR-ISP-Leitungen
MCP2515 kommunizieren. Ich dachte mir also, ich füge "einfach" in jede SPI-Leitung, sowie in Reset, und SlaveSelect (für Kommunikationen mit dem MCP2515 ebenfalls herausgeführt) einen 1k-Serienwiederstand
A. K.: >"dann sind die zwischen Controller und MCP2515 angebracht ohnehin >nicht zielführend." Der kleine Niels meinte doch: >"Zwischen AVR und MCP2515 habe ich keine Widerstände."
-
Thread
CAN-Interface mit galvanischer Trennung für Pandaboard (OMAP4)
CAN-Controller erfolgreich mit Linux auf dem Pandaboard anbinden können? Ich habe sowohl SPI und MCP2515-Support im Kernel aktiviert und die board-Datei um die SPI und MCP2515-Routinen erweitert. Jedoch schlägt das Kompilieren des Kernels fehl, weil Attribute wie ".model" im SPI struct nicht bekannt
index.php/Linux_Kernel_2.6.35.y Vielleicht lässt sich da herausfinden, was zu tun ist, um den MCP2515 ans Laufen zu bekommen.
-
Thread
MCP2515 richtig initialisiert?
'Senden 1 Byte**************************************** Sub Senden1(byval D0 As Byte ) Mcp2515_bitmodify2 Txb0ctrl , &B00000011 , &B00000011 Mcp2515_write_register2 Txb0sidh , Idh Mcp2515_write_register2 Txb0sidl , Idl Mcp2515_write_register2 Txb0dlc , &H01
dann auch. Wie soll es anders sein hab ich jetzt aber das nächste Problem: Ich betreibe den MCP2515 im interrupt betriebe. Also vom MCP2515 eine Leitung zum int2 beim Atmega. Diese zeigt mir an wann der Nachrichten Buffer voll ist und lese in dann über die ISR Sequenz aus. Klappt auch alles wunderbar
-
Thread
Alternative zu CAN-Bus?
das Gegenteil bewiesen hat. Man muss das Rad auch nicht neu erfinden, Beispielcode für eine AVR+MCP2515 Kombination findet sich leicht (z.B. http://www.kreatives-chaos.com/artikel/ansteuerung-eines-mcp2515). Was anfangs etwas irritiert ist die Spezifikation vom Bit-Timing. Aber ein bischen googeln
Timer Opfern? Oder die Interrupt-Pins? http://www.kreatives-chaos.com/artikel/ansteuerung-eines-mcp2515
-
Thread
CAN-Device oder Platine zum üben
Hi, MCP2515 + MCP2561 sind z.B. ein gutes Gespann. Man bleibt plattformunabhängig und kann evtl. noch einen ISO-Koppler in den SPI-Bus einplanen. Interrupt-Auswertung vom MCP2515 wäre noch wichtig. Quellcode
Sebastian W. schrieb im Beitrag #7506459: > Oder du holst dir von den MCP2515-Modulen den TJA1050 runter und lötest > ihn auf eine Adapterplatine Warum? Die gibt's einzeln auf Breakout Board. Den MCP2515 wird er aber brauchen für den Arduino, der hat keinen CAN Controller
-
Thread
CAN: Timing Probleme
"); #endif return res; } switch( num ) { case 0: mcp2515_write_id(MCP_RXF0SIDH, ext, ulData); break; case 1: mcp2515_write_id(MCP_RXF1SIDH, ext, ulData); break; case 2: mcp2515_write_id(MCP_RXF2SIDH, ext, ulData); break; case 3: mcp2515_write_id(MCP_RXF3SIDH, ext, ulData); break; case 4: mcp2515_write_id(MCP_RXF4SIDH, ext, ulData); break; case 5: mcp2515_write_id(MCP_RXF5SIDH
-
Thread
CAN Datentransfer auf Basis von kreatives-chaos.com
3 MCP2515_FILTER(CAN_WHO_IS_ONLINE), // Filter 4 MCP2515_FILTER(CAN_WHO_IS_ONLINE), // Filter 5 MCP2515_FILTER(0x0FF), // Mask 0 (for group 0) MCP2515_FILTER(0x7FF), // Mask 1
), // Filter 3 MCP2515_FILTER(CAN_UPDATE_SLAVE_RESPONSE), // Filter 4 MCP2515_FILTER(CAN_UPDATE_SLAVE_RESPONSE), // Filter 5 MCP2515_FILTER(0), // Mask 0 (for group 0) MCP2515_FILTER(0), /
-
Thread
MCP2515 Register vergisst die Werte
Hallo, ich habe einen MCP2515 an einem ATMega128. Wenn ich ein Register beschreibe: // Software-Reset durchführen SPI_PORT &= ~(1<<SPI_SS); SPI_PUT(MCP2515_RESET); SPI_PORT |= (1<<SPI_SS); MCP2515_WRREG( CNF1,(1<<BRP0
_WRREG( CNF1,(1<<BRP0)); //(0x01) test = MCP2515_RDREG( CNF1 ); testtext[1]=test; UART_Text_out("CNF1:",0); UART_Text_out(testtext,1); // MCP2515 zurueck in den normalen Modus versetzen mcp2515_bit_modify( CANCTRL, 0xE0, 0);
-
Thread
Probleme CAN bekomme nur Error
dass der spi bus richtig funktioniert. Den MCP2515 initiere ich folgendermaßen: [c]void mcp2515_init(void) { PORTB &= ~(1<<PB4); spi_put_char( SPI_RESET ); _delay_ms(1); PORTB |= (1<<PB4); _delay_ms(10); mcp2515_bit_modify(CANINTE,0b10100011,0xff); //Filter Buffer0 aus mcp2515_write_register( RXB0CTRL, (1<<RXM1)|(1<<RXM0) ); //Filter Buffer0 aus mcp2515_write_register( RXB1CTRL, (1<<RXM1)|(1<<RXM0) );; //LED als Interruptsignal mcp2515
-
Thread
CANBUS MCP2515 PIC Problem
'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
-
Thread
CAN Controller MCP2515: Schreiben in CANCTRL
beschreiben kann! Meine HW-Konfiguration ist ein einfacher Atmega328p und ein CAN-Controller MCP2515, der über SPI mit dem Atmega kommuniziert. Weiß jemand wofür das 'x' (Higher Nibble) auf Seite 63 des Datanblattes für den MCP2515/ Table 11-2 steht? Ist dies ein dont't care? Dies könnte die Lösung
rcall mcp2515_write_reg ldi temp2, CNF3 ldi temp1, 0x05 rcall mcp2515_write_reg ldi temp2, RXB0CTRL ldi temp1, (1<<RXM1)|(1<<RXM0)|(1<<BUKT) rcall mcp2515_write_reg ldi temp2, RXB1CTRL ldi temp1
-
Thread
MCP2515 Botschaften Empfangen
Hallo, Ich möchte gerne über einen MCP2515 den Empfang einer Nachricht an einer LED anzeigen lassen. Mit Hilfe von http://www.kreatives-chaos.com/artikel/ansteuerung-eines-mcp2515 http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial
Nun, du hast bereits in der Initialisierung den Interrupt-Ausgang des MCP2515 eingeschalten: mcp2515_write_register(CANINTE, (1<<RX1IE)|(1<<RX0IE)); Hat dieser eine komplette Botschaft empfangen, wird am Atmega der Interrupt 1 ausgelöst. Darauf musst du nun reagieren:
-
Thread
CAN BUS Raspberry
Also: Sofort alles außer Betrieb nehmen. MCP2515 mit 3.3V versorgen. Als Transceiver nimmst Du einen MCP2562. Der braucht einmal 5V für den CAN-Bus und einmal 3.3V für RX/TX zum MCP2515. Am MISO machst Du ab Besten noch einen Pullup (irgendwas
zwischen 10k und 100k nach 3.3V), damit der Pi auch dann noch einen gültigen Logikpegel hat, wenn der MCP2515 MISO auf Z (hochohmig) setzt. fchk
-
Thread
Can Bus Simulator mit Mcp2515
ausschließlich getriggerten (nicht zyklischen) Frames: immer mit Lesen und Auswerten. Ist aber im MCP2515 in Hardware gegossen. mfg mf
1. schrieb im Beitrag #7579451: > Ein MCP2515 und Arduino Uno, Du kannst ja schon mal den Arduino, den MCP2551 und den MCP2515 nach Datenblatt- bzw. Library-Vorgabe zusammenstecken. mfg mf PS. Hast du ein Oszi? Könnte nützlich zum debuggen