Hallo, Ich habe hier ein Board mit einem AtMega8 drauf. An der SPI Schnittstelle hängt ein MCP2515 (CAN-Bus Controller). Es funktioniert auch alles wunderbar, allerdings nur wenn der Programmer angeschlossen ist (AVR ISP MK2 über USB) Sobald ich den Programmer abstecke macht der Mega8 nichts mehr. In der Hauptschleife sollte als erstes eine LED angeschaltet werden, nichtmal das passiert noch... weiß nicht an was das liegen könnte. Der Reset Pin liegt auf High-Pegel, daran sollte es also schonmal nicht liegen. Sonst habe ich im Moment keine Idee.. Kann es irgendwie mit der SPI Schnittstelle zusammenhängen auf der der MCP2515 hängt? diese Pins werden ja auch zum programmieren verwendet. gruß Matthias
Spannungsversorgung mal ohne Programmer gemessen?
Oder GND-Verbindung evtl. nicht durchgängig?
ins handbuch schauen und die can ereignis behandlung nochmals gut durchlesen. abfrage des register mittels while-schleife durchführen, eventuell noch die reihenfolge beachten.
Ich habe das Problem etwas eingegrenzt: Nach dem Start des atMegas wird über die SPI Schnittstelle der MCP2515 initialisiert. Beim Senden des Bytes über SPI wird gewartet bis das Byte gesendet wurde. Offenbar bleibt der AtMega hier in der Endlosschleife hängen. Über den Watchdog kann ich ihn da rausholen und nach mehreren Fehlversuchen klappt es dann meistens auch... Was ich nicht verstehe ist die Tatsache, dass dies nur bei der Initialisierung des MCP2515 passiert, während des Betriebs werden permanent Befehle über SPI an den MCP2515 gesendet (es wird die selbe SPI routine verwendet) und dort klappt es einwandfrei. Brauche ich evtl. Pull-Up oder Pull-Down Widerstände in den SPI Leitungen?
Matthias schrieb: > Brauche ich evtl. Pull-Up oder Pull-Down Widerstände in den SPI > Leitungen? Erstmal brauchen wir hier einen Schaltplan und das Programm.
>Beim Senden des Bytes über SPI wird gewartet bis das Byte gesendet >wurde. >Offenbar bleibt der AtMega hier in der Endlosschleife hängen. Der Klassiker: SS Pin ist kein Ausgang.
Anbei mal ein Auszug aus dem Schaltplan. Der 8-Polig Stecker unten wird zum Programmieren verwendet. Hier die SPI-Routine: uint8_t spi_putc( uint8_t data ) { // Sendet ein Byte SPDR = data; // Wartet bis Byte gesendet wurde while( !( SPSR & (1<<SPIF) ) ) ; return SPDR; } ich vermute, dass ich in der while Schleife hängen bleibe... @ Holger: Der CS Pin wird als Ausgang definiert
>ich vermute, dass ich in der while Schleife hängen bleibe... Das geht aber nicht wenn du Master bist. Da kannst du dann nicht hängen bleiben. Wenn du zum Slave wirst kannst du da hängen bleiben. >Der CS Pin wird als Ausgang definiert Na dann schau mal nach ob du dir den nicht irgendwo unbemerkt wieder wegziehst.
holger schrieb: >>ich vermute, dass ich in der while Schleife hängen bleibe... > > Das geht aber nicht wenn du Master bist. Da kannst du dann nicht > hängen bleiben. Wenn du zum Slave wirst kannst du da hängen bleiben. Vielen Dank für diesen Hinweis!!!! Ich konnte den Fehler nun finden. das Problem war folgendes: Ich habe zuerst die SPI als Master initialisiert und anschließend erst das DDR für diesen Port festgelegt. Dies bewirkte, dass das MSTR bit (festlegung als Master) sofort wieder gelöscht wurde und ich somit als Slave unterwegs war. Nun beschreibe ich zuerst das DDR und initialisiere anschließend die SPI. Dann funktioniert es. Vielen Dank an dieser Stelle nochmal für die Unterstützung!!!
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.