Hallo zusammen, ich werde hier gerade zum Tier. Ich habe auf einer Platine einen ATmega 64 sitzen (der über die USART0-Pins ge-ISPt wird, hier liegt der Hasenhund also nicht im Pfeffer begraben). Am SPI hängt über einen 5V-toleranten 3.3V-Bustreiber ein AD9959 (4-Kanal DDS) und ein DAC8551 (D/A-Wandler). Da das Ganze nur beschrieben und nicht gelesen wird, kann man eventuelle Empfangsprobleme als Grund meines Problems auch ausschliessen. MOSI und SCK sind im DDR auf 1 gesetzt. Initialisiert wird der SPI mit (C-Code): SPCR = (1<<SPE) | (1<<MSTR) | (1<<SPR1); und dann wird mit SPDR = data; while( !(SPSR & (1<<SPIF) ) ); gesendet. Das PROBLEM: bei genau jedem 2. durch PonyProg ausgelösten RESET bleibt der AVR in der while()-Schleife hängen - dabei wird hier ja nur ein Statusbit abgefragt, welches durch die AVR-Hardware nach 8 SCK-Takten auf jeden Fall 1 werden müsste! Wenn ich mit einem Taster "resette", bleibt er immer in der while() hängen, bei einem POR nie. Wenn er irgendwo in meinem eigenen Konstrukt stehen bleiben würde, könnte ich ihn ja verstehen, aber wieso zum Geier an dieser Stelle? Hat jemand eine Idee?
Ich antworte mir gleich mal selbst, mitunter muss man ein Problem erstmal in Worte fassen. Also: es war mal angedacht, einen 2. Master auf der Platine zu haben, daher ist \SS als input definiert gewesen. Die Leitung sollte eigentlich über einen 100k auf Vcc liegen. Sollte - denn nach dem Posting habe ich alles um den SPI nochmal gemessen und musste feststellen, dass dort so ca. 1,5V anlagen. Grund: ein Pad des 0603ers, der den \SS auf Vcc ziehen soll, war nicht mit Vcc verbunden! Ich habe ihn jetzt zum Ausgang gemacht und alles ist top. Warum er allerdings bei jedem 2. Reset per Ponyprog trotzdem lief, warum er nach einem Kaltstart immer lief und wieso das Ding seit Wochen so läuft und erst jetzt Zicken macht - ???
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.