Forum: Mikrocontroller und Digitale Elektronik AtMega8 funktioniert nur bei angeschlossenem Programmer


von Matthias (Gast)


Lesenswert?

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

von Düsendieb (Gast)


Lesenswert?

Spannungsversorgung mal ohne Programmer gemessen?

von mato (Gast)


Lesenswert?

Oder GND-Verbindung evtl. nicht durchgängig?

von frostbeule (Gast)


Lesenswert?

ins handbuch schauen und die can ereignis behandlung nochmals gut 
durchlesen. abfrage des register mittels while-schleife durchführen, 
eventuell noch die reihenfolge beachten.

von Matthias (Gast)


Lesenswert?

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?

von Düsendieb (Gast)


Lesenswert?

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.

von holger (Gast)


Lesenswert?

>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.

von Matthias (Gast)


Angehängte Dateien:

Lesenswert?

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

von holger (Gast)


Lesenswert?

>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.

von Matthias (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.