Hallo zusammen, Ich habe folgendes Problem: Mein Atmega 328P auf einem Arduino UNO Bord lässt nicht zu, dass ich das SPE Register im SPCR (Kontrollregister von SPI) beschreibe. Das Programm soll an sich nicht viel machen sondern nur das Register beschreiben und eine LED danach zum blinken bringen. Allerdings kommt der Prozessor nie zu dem Punkt dass er blinkt, wenn der Befehl SPCR |= (1<<SPE) aktiv ist. Ich benutze das Atmel Studuio, habe das ganze aber auch schon mit der Arduino IDE auf Linux und Windows versucht. Kann es irgendwie an den zwei Arduinos liegen die ich benutze? Vielen Dank schonmal
Jumper M. schrieb: > Hallo zusammen, > Ich habe folgendes Problem: Mein Atmega 328P auf einem Arduino UNO Bord > lässt nicht zu, dass ich das SPE Register im SPCR (Kontrollregister von > SPI) beschreibe. Glaub ich nicht. Du MUSST das IO-Pin mit dem SS Signal VORHER auf Ausgangs setzen. Siehe Datenblatt, ""SS pin functionality". Es ist übrigens im Allgemeinen eine gute Idee, ZUERST alle IO-Pins passend zu konfigurieren und DANACH erst irgendwelche IO-Module.
Ich weiß es klingt unglaublich, ich hatte SPI davor auch aktiviert bekommen und bekam ein Signal bei SPI, aber als ich es nochmal versucht hatte ging es nicht. Die IO Pins hatte ich auch davor ursprünglich geschrieben gehabt, aber mit dem gleichen Ergebnis.
Jumper M. schrieb: > Ich weiß es klingt unglaublich, ich hatte SPI davor auch aktiviert > bekommen und bekam ein Signal bei SPI, aber als ich es nochmal versucht > hatte ging es nicht. Die IO Pins hatte ich auch davor ursprünglich > geschrieben gehabt, aber mit dem gleichen Ergebnis. Deine Einschätzung dass dein Programm "abstürzt" nur weil du ein Bit in einem Register setzt ist falsch, weil an dieser Stelle unmöglich. Du musst damit aufhören Lösungen für unmögliche Probleme zu suchen und statt dessen nochmal genau nachforschen was wirklich passiert. Wahrscheinlich funktioniert einfach nur das programmieren des Flash nicht und dein Programm wird gar nicht ausgeführt.
:
Bearbeitet durch User
Hat der 328P überhaupt ein SPCR Register. Im Datenblatt wird vom SPCR0 geschrieben.
Und die hirntote Zeile: PORTB = (0 << DDB5); Ist sowieso Unsinn. Es setzt den gesamten PORTB auf 0. Richtig wäre um ein Bit zu löschen: PORTB &= ~(1<<DDB5); zum setzen dann: PORTB |= (1 << DDB5);
:
Bearbeitet durch User
Vielen Dank schonmal für die Antworten. Nein ich habe bisher noch nicht debuggt, allerdings lässt sich das Programm ohne Probleme auf unter Atmel compilieren. Erst auf dem Arduino tritt das Problem auf, dass er nur bis zu dem Befhel arbeitet, und nicht weiter kommt.
Jumper M. schrieb: > Das Programm soll an sich nicht viel machen sondern nur das Register > beschreiben und eine LED danach zum blinken bringen. Hänge die LED mal an einen anderen Pin. PB5 ist SCK, und damit NICHT mehr als normaler GPIO nutzbar wenn SPI "scharf" gestellt wird. Das sollte man dem Manual entnehmen können als Programmierer...
Das Problem ist ja, dass OHNE den Befehl SPCR = (1<<SPE); ohne Probleme durchläuft und anfängt zu blinken, mit dem Befehl aber nicht zum blinken kommt, da er schon vorher nicht weiter kommt.
Beitrag #6396193 wurde vom Autor gelöscht.
Jim M. schrieb: > Das sollte man dem Manual entnehmen können als Programmierer... Wenns schon an korrekter Bitmanipulation scheitert kann man so viel nicht erwarten.
Cyblord -. schrieb: > Wenns schon an korrekter Bitmanipulation scheitert kann man so viel > nicht erwarten. Dass man nicht viel erwarten kann spiegelt sich schon in der Ausdrucksweise wieder. Jumper M. schrieb: > Mein Atmega 328P auf einem Arduino UNO Bord > lässt nicht zu, dass ich das SPE Register im SPCR (Kontrollregister von > SPI) beschreibe. Er wehrt sich sozusagen mit Händen und Füssen.
Hatten wir das nicht schonmal vor ein paar Tagen durchgekaut? Beitrag "Atmega168pb bleibt bei spi konfiguration hängen"
:
Bearbeitet durch User
BlaBla schrieb: > Hat der 328P überhaupt ein SPCR Register. Im Datenblatt wird vom SPCR0 > geschrieben. Merkwürdig: Im Datenblatt vom 06/2016 heißt das Register SPCR0. Im aktuellen Datenblatt SPCR. ???
Jumper M. schrieb: > Das Problem ist ja, dass OHNE den Befehl SPCR = (1<<SPE); ohne > Probleme > durchläuft und anfängt zu blinken, mit dem Befehl aber nicht zum blinken > kommt, da er schon vorher nicht weiter kommt. Es wurde dir schon gesagt! PB5 dient bei dir zum blinken. PB5 wird von der SPI Schnittstelle benutzt. Bei einem Auto kannst du auch nicht aus beiden Türen gleichzeitig aussteigen. Merke: Es gibt Situationen, wo man sich entscheiden muss. Also: Sobald du SPI benutzt/aktivierst endet das blinken. Das Verhalten ist das erwartete Verhalten. Es ist kein anderes Verhalten plausibel/denkbar. Alles ok. Nur deine Diagnose ist völlig daneben.
Beitrag #6396302 wurde von einem Moderator gelöscht.
Beitrag #6396314 wurde von einem Moderator gelöscht.
Beitrag #6396337 wurde von einem Moderator gelöscht.
Beitrag #6396355 wurde von einem Moderator gelöscht.
Beitrag #6396442 wurde von einem Moderator gelöscht.
Beitrag #6396501 wurde von einem Moderator gelöscht.
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.