Hallo, ich versuche gerade einen MCP2515 zum laufen zu bringen. Dazu hab ich mir den CAN-SPI Adapter von www.avrcard.com besorgt, den ich an einen ATmega16 angeschlossen habe (10 cm Leitung). Zum testen der Kommunikation vom MCP2515 und dem ATmega16, wollte ich einfach ein Paar Register setzen, und dann den gesetzten Wert einfach wieder auslesen, allerdings bekomm ich nur 0xFF zurück. Ich habe den relevanten Codeteil im Anhang mitgeschickt. Könnte ihn bitte jemand durchschauen und auf Fehler überprüfen? Oder vielleicht andere Tipps zur Fehlereingrenzung geben. Wär echt super! Vielen Dank im Voraus. Christian hier noch die spi-Funktionen: void spi_init(void) { /* Datadirection setzen */ DDRB = (1 << MOSI) | (1 << SCK) | (1 << CS); /* SPI Control-Register konfiguirieren */ SPCR = ( 1 << SPE ) | (1 << MSTR) | ( 1 << SPR1) | ( 1 << SPR0); } void spi_write(byte_t data) { SPDR = data; loop_until_bit_is_set(SPSR,SPIF); } void spi_cs(byte_t value) { if ( value != 0) { PORTB |= 0x10; } else { PORTB &= ~(0x10); } } byte_t spi_read(void) { return SPDR; }
Hi, ich bin mir nicht 100 % sicher , aber muss der AVR nicht erst als SPI_slave im SPCR geschaltet werden? Mfg Dirk
Hi glaub ich ehrlich gesagt nicht, jedenfalls steht nichts davon im Datenblatt. mfg Christian
Wurde das Datenrichtungsregister richtig gesetzt? Anbei meine Routine für den MCP2510 mit ATMega128: void init_SPI (void) { outp(0x70,HW_SPI); // PortB ist HW_SPI outp(0x07,DDR_SPI); //Datenrichtungsregister setzen outp(0x5F,SPCR); // SPI Controll Register setzen } Gruß Mike
Hi, mmh, da müsste ich mich jetzt schon schwer täuschen, aber mit der Zeile: DDRB = (1 << MOSI) | (1 << SCK) | (1 << CS); sollte ich die notwendigen Pins auf Output geschaltet haben. Auch das Control-Register dürfte IMHO richtig sein, (1 << SPE ) /* SPI-Enable setzen */ ( 1 << MSTR) /* Master Mode */ ( 1 << SPR1) | ( 1 << SPR0); /* SCK mit fosc/128 */ In einer neueren Fassung des kleinen Testprogramms warte ich jetzt noch ein paar Sekunden bis ich den ersten SPI-Operation sende, da ich gelesen habe, dass der MCP2515 einige Taktzyklen braucht bis er überhaupt richtig läuft, dass hat aber auch kein anderes Ergebnis zur Folge gehabt. Was sagst du zu den anderen SPI-Funktionen? Hab ich da vielleicht noch einen Denkfehler drin? Muss ich vielleicht bei spi_read() noch das SPIF Flag bearbeiten? mfg Christian
Hallo, ich hänge Dir einfach mal mein Programm für den ATMega128 und den MCP2510 an. Jedenfalls hatte ich anfangs das gleiche Problem, es kam immer nur 255 zurück. Gruß Mike
Hi, super jetzt gehts!! Dein Quellcode hat mich auf meinen Fehler gebracht. Habe immer CS auf High anstatt auf Low gesetzt (schäm). Vielen Dank nochmal Christian
hat schon mal jemand den mcp2515/2510 unter einem msp430 angesteuert? würde mich brennend für den code interessieren :-) mfg tüdel
Ja, bin gerade am testen und ausprobieren. (Mit MSP430F149 über SPI Schnittstelle zum MCP2515). Komischerweise sende ich immer 4x das selbe Signal. Hatte da auch schon mal jemand Probleme damit? Grüessli wehrs
was macht dein prog? lauft es jetzt? schreibe jetzt seit einer wo routinen für dem mcp... konnte diese jedoch noch nicht testen :-( denke mal, bei meinem glück läuft wieder nix :-(
hallo ihr. ich habe auch ein problem mit dem mcp2510. er antwortet nicht! auf der out-leitung des mcp`s liegt nur ein phantomsignal der clock. diese habe ich auf 50kHz gedrosselt, da ich den mcp mit 2MHz oszi bestückt habe. cs liegt gegen masse, int ist high, reset liegt mit einem widerstand (10k) gegen vcc. auch nach einer initialisierung bekomme ich keine signale aus dem chip. auch nach einem tausch des chips gab es keinen erfolg
Hi KoF, ich habe hier: http://www.mikrocontroller.net/forum/read-1-66019.html#167959 schonmal Routinen für den MCP2515 mit mega16 gepostet. Funktioniert soweit ganz gut, musst Dir die relevanten Stellen halt etwas raussuchen. Viele Grüße, Stefan
hab den fehler grob schonmal lokalisiert. cs muß den pegel wechseln. wenn er so, wie bei mir immer gegen masse läuft geht es nicht. jetzt steuere ich es über einen extra pin meines uc`s und siehe da, er antwortet :-) aber deine quellen werde ich mir auch nochmal ansehen mfg KoF
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.