Slave empfängt keine Daten

Gast #685861
Lesenswert?
• ▲
▼
Ich habe eine Versuchsschaltung aufgebaut in der ein Mega8 mit einem 
Mega32 verbunden sind. Die Pins sind korrekt miteinander verbunden. 
Mega8 ist Slave.
Der Bus arbeitet mit 125KHz, weniger geht nicht.

  s  |  m
-----------
MOSI | MOSI
MISO | MISO
SCK  | SCK
SS   | PB0

Master sendet die Daten, was mit einem Oszi sichtbar ist.
Im Programm vom Slave habe ich noch zusätlich eine Kontrolle eingebaut. 
Pin1 am PortB soll ein Rechtecksignal generieren. Das ist nicht der 
Fall. Also muss der uC irgendwo hängen. Meiner Ansicht nach kann er das 
nur in der Routine "SPI_SlaveReceive". Das Bit SPIF wird also nicht 
gesetzt. Warum?

Quellcode im Anhang.
Angehängte Dateien:
Gast #685961
Lesenswert?
• ▲
▼
Komisch, habe das Slave-Prgramm mit AVR Studio simuliert, es 
funktioniert. Ich habe den SCK-Takt des SPI und die "Daten" mit der Maus 
eingegeben indem ich die Bits am PIND verändert habe. Das Byte wird 
anschließend am PortD ausgegeben, so wie es sein sollte.

Der Fehler liegt also in der Hardware. Vielleicht ist die Verbindung zu 
anfällig für EM-Strahlung? Es sind aber nur etwa 7cm Kabel beim SCK und 
MOSI, außerdem liegt der Takt bei 125KHz, was ja ziemlich unkritisch 
ist. Zum Verzweifeln, sitze schon seit gestern an diesem Problem.
Gast #685980
Lesenswert?
• ▲
▼
Ja, sowohl der Takt als auch die Daten liegen an den jeweiligen 
Leitungen an und der SS-Pin wird auch auf Masse gezogen und nach der 
Übertragung wieder auf VCC.

Ich habe gerade entdeckt, dass im Master-Programm das Flag MSTR im 
Register SPCR zurückgesetzt wird. Das passiert sofort nach der 
Initialisierung. Jetzt habe ich gestern im Datenblatt gelesen, dass der 
Master auf Slave zurückgesetzt wird, falls der SS-Pin des Masters als 
Eingang konfiguriert ist und nicht an VCC anliegt. Das wird wohl der 
Fehler sein. Ich löte kurz um, mal schauen.

Komisch ist ja nur, dass die Daten trotzdem gesendet werden.
Gast #686072
Lesenswert?
• ▲
▼
Na, der Inhalt des slaves wird ja rausgeschoeben, wenn der Master was 
reinschiebt. Kannst du das verifizieren ? Schreib mal 0x55 beim slave 
ins SDR Register und schau ob das bein Master ankommt. Falls ja, ist nur 
das Problem, dass der Slave keinen Interrupt generiert. Alternativ 
koennte man im slave auch pollen, warten bis das SP Ready da ist., dann 
lesen und schreiben

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren