www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ATmega64: SPI nur bei jedem 2. RESET


Autor: Stefan Huebner (shaun)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: Stefan Huebner (shaun)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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 - ???

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.