Forum: Mikrocontroller und Digitale Elektronik Slave empfängt keine Daten


von Maxim (Gast)


Angehängte Dateien:

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.

von Maxim (Gast)


Angehängte Dateien:

Lesenswert?

Hier noch der Quellcode vom Slave.

von Maxim (Gast)


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.

von 2920 (Gast)


Lesenswert?

Du hast mit einem Scope nachgeprueft, ob die Daten auch den Master 
verlassen ? SCLK stimmt ?

von Maxim (Gast)


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.

von Maxim (Gast)


Lesenswert?

So, habe den SS-Pin des Masters als Ausgang definiert. Jetzt wird das 
MSTR-Flag nicht mehr zurückgesetzt. Aber ansonsten hat sich nichts 
verändert. Kann doch nicht sein!

von Spess53 (Gast)


Lesenswert?

Hi

Welche Taktfrequenz benutzt du? Der SPI-Clock darf maximal 1/4 der 
Taktfrequenz des Slave-Controllers betragen.

MfG Spess

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Hatter doch geschrieben: 125kHz.

von Maxim (Gast)


Lesenswert?

Ich brauche Vorschläge, wie man den Fehler finden kann. Bin mit meinen 
Ideen am Ende.

von 2920 (Gast)


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

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Vielleicht doch Pins vertauscht am SPI?

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
Noch kein Account? Hier anmelden.