mikrocontroller.net

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


Autor: Maxim (Gast)
Datum:
Angehängte Dateien:

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

Autor: Maxim (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hier noch der Quellcode vom Slave.

Autor: Maxim (Gast)
Datum:

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

Autor: 2920 (Gast)
Datum:

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

Autor: Maxim (Gast)
Datum:

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

Autor: Maxim (Gast)
Datum:

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

Autor: Spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

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

MfG Spess

Autor: Knut Ballhause (Firma: TravelRec.) (travelrec) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hatter doch geschrieben: 125kHz.

Autor: Maxim (Gast)
Datum:

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

Autor: 2920 (Gast)
Datum:

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

Autor: Knut Ballhause (Firma: TravelRec.) (travelrec) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielleicht doch Pins vertauscht am SPI?

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.