Hallo Ihr,
ich verwende schon länger den CAN-Bus Bootloader von Fabian Greif und
hab ihn erweitert.
Hauptsächlich verwende ich die ATMEGA328 und jetzt habe ich ihn auf den
ATmega644 und 1282 erweitern wollen nur leider kommen keine Daten aus
dem SPI raus (Oszi).
Ich habe mal die spi_putc ausgelagert in eine C-Funktion um mit LED
auszugeben was sache ist. Habe auch die Register SPCR überprüft ob diese
anderst stehen es ist aber so wie gewolt.
So schwer ist doch der SPI nicht ist doch super simple. Ach ich habe
einen Externen 16 MHz Quarz, aber auch mit dem Internen funktioniert es
nicht. Es wird einfach keine Daten rausgeschoben auf der SPI
Schnitstelle, die LED und CS Funktionieren.
Das lustige an dem Ganzen ist ja das mein eigentliches Programm über
CAN-Bus wie es soll kommuniziert und hier ist die Initalisierung auch
nicht wirklich anderst.
Hier die Fuse Bits: (E:FF, H:12, L:F7)
Vielen dank schon mal für eure Hilfe und Zeit.
Hier mal der Code von mir:
> SPCR = 0x91;//(1 << SPIE) | (1 << SPE) | (1 << MSTR) |> ( 1 << SPR0 ) | (1 << CPHA); //R_SPCR;
In der Konstanten stehen 3 Bits, im Kommentar jedoch 5?
Und ja, SPE wird nicht gesetzt.
(Den ganzen Rest habe ich mir nicht näher angeschaut - zu ungewohnt, um
es vorsichtig auszudrücken)
Florian schrieb:> Es wird einfach keine Daten rausgeschoben auf der SPI> Schnitstelle
Standardfehler ist, /SS nicht vor allen anderen als Ausgang zu setzen.
Peter D. schrieb:> Wer macht denn solchen Blödsinn, lesbare Ausdrücke durch magische> Nummern zu ersetzen?> Da kannst Du keine Hilfe erwarten.
sehr schön, dann weis ich ja wer keine Fehler macht und wo ich was
lernen kann.
Danke für die Sachliche Antwort.
Hier handelt es sich um SPI Master und CS wird als erstes gesetzt. Wie
ich geschrieben habe habe ich schon länger SPI im einsatz und der
Bootloader lief auf dem Atmega328/168...
Danke für den Hinweis, ich habe das hard codiert, da es durch das setzen
der einzelnen Bits auch nicht ging. Wie es auch immer noch nicht geht.
In meiner eigentlichen Firmware funktioniert der SPI-CAN Chip wie er
soll somit ist es nicht die Hardware.
Es wird das WCOL bit gesetzt und es gibt auf den SPI Pins auch kein
Signal , das habe ich davor ausgetestet. Wie gesagt der Bootloader
setzte ich schon lange ein bei einigen Modulen nur mit dem mega328/168.
Weiter man sieht wie der SPI die MOSI und SPI in anspruch nimmt
(High-Low-High) je nachdem wie man es setzt war als test selbst high
getrieben.
Auf der SCK gibt es kein Signal.
Was mich wundert, dass es auf meiner FW ohne Probleme läuft nur im
Bootloader gibt es mit dem 644 problme mit dem 328 geht es einwandfrei.
Florian schrieb:> Hier handelt es sich um SPI Master und CS wird als erstes gesetzt.
Ich sprach aber von /SS (= PB4).
Florian schrieb:> Es wird das WCOL bit gesetzt
Dann machst Du was falsch. Mehr kann man ohne Code nicht dazu sagen.
Warum zeigst Du nicht einfach den realen, compilierbaren Code als
Anhang, anstatt diese zusammenhanglosen Schnipselchen im Post.
15.3.2 Master Mode
When the SPI is configured as a Master (MSTR in SPCR is set), the user
can determine the direction of the SS pin.
If SS is configured as an output, the pin is a general output pin which
does not affect the SPI system. Typically, the pin will be driving the
SS pin of the SPI Slave.
If SS is configured as an input, it must be held high to ensure Master
SPI operation. If the SS pin is driven low by peripheral circuitry when
the SPI is configured as a Master with the SS pin defined as an input,
the SPI system interprets this as another master selecting the SPI as a
slave"
> ... wie der SPI die MOSI ...> Auf der SCK gibt es kein Signal.
Dann nehme ich ganz naiv an, dass 'PIN_NUM(P_SCK)' nicht PB7 ist oder
nicht auf PB7 gemessen wird.
Um es überdeutlich zu formulieren (Peter Dannegger möge entschuldigen):
Im eingangs gezeigten Programmausschnitt sieht es so aus, als sei
vergessen worden, /SS von ATmega328.PB2 auf ATmega644.PB4 umzuziehen.
Wenn nun PB4 auf der Reset-Einstellung 'Eingang' geblieben ist und,
wie auch immer, von außen auf Low gezogen wird, dann führt ein Laden von
SPDR direkt zu besagtem gesetzten WCOL.
Statt diesem Multimasterfeature, was ich noch nie in der Praxis irgendwo
gesehen habe, hätte man besser einen Sendepuffer spendieren sollen, was
insbesondere als Slave einen erheblichen Nutzen gebracht hätte.
ja hab den fehler gefunden es war wirklich der SS den ich da nicht mit
um gezogen habe.
Offt sind die Offentlichsten dinge die am meisten Zeit kosten und wo man
rein fällt.
@Peter D. man kann viel machen und sich überall verkünsteln und alles
selbst Entwerfen, so dass man zu dem eigentlichen Thema kaum Zeit hat
das alles möglich. Wie gesagt der Bootloader ist grundlegend bzw die
Variante von Kreativen Chaos seite und bin ihm dankbar das er mir da
Arbeit abgenommen hat.