Forum: Compiler & IDEs Problem mit SPI


von Jürgen (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,
ich befasse mich seit kurzem mit der SPI Schnittstelle und dem 
Portexpander Ic MCP23S17. Doch irgendwie bekomm ich dieses Teil nicht 
zum lauffen. Hab da auf ner seite im Internet n C-Beispiel gefunden und 
das mal in mein C-Programm übernommen.

Ziel ist es mit einem Taster Alle Portpins vom Port A des MCP23S17 
einzuschalten.

Hardwareseitig müsste alles passen.

Wär euch sehr dankbar wenn mal jemand über meinen C-Code drüberschauen 
würde.

Prozessor ist ATMEGA 32
AVR Studio und Win AVR

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Ohne ins Datenblatt des ICs geguckt zu haben: wenn du die komplette
Adressierung in deinem SPI_Write() auskommentierst, was denkst du,
woher der IC dann noch weiß, was er mit den Daten anfangen soll?

DWIM-Programmierung ist noch nicht erfundne.  (DWIM: "do what I mean")

Falls du die  Adressierung schon mal drin hattest und das irgendwie
anders "nicht ging", dann wäre es hilfreich, wenn du uns mitteilst,
was du denn alles schon kontrolliert hast, und an welcher Stelle es
klemmt.

von Jürgen (Gast)


Lesenswert?

hab die Adressierung nur auskommentiert um was auszuprobieren. In 
wirklichkeit ist sie drin. Also das Problem ist das der Controller 
anscheinend nichts sendet...

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Jürgen schrieb:
> Also das Problem ist das der Controller
> anscheinend nichts sendet...

Wodurch verifiziert?  Oszilloskop?

Hast du den Code irgendwie im Debugger verfolgt?

von Jürgen (Gast)


Lesenswert?

sicher bin ich mir nicht ob der controller nichts sendet. Ich werd mich 
morgen nochmal auf die suche begeben. Mit debugger hab ichs noch nicht 
probiert.

von Jürgen (Gast)


Lesenswert?

ich komm einfach nicht weiter. Meine Messungen haben ergeben:
aus SCL kommt der Takt. i. O.
aus MOSI der auf den PIN SO vom 23S17 geht hab ich auch Signal
und wenn ich am Pin MISO messe, der an Pin SI vom 23S17 geht auch.
Das komische ist nur wenn ich den 23S17 abstecke dann hab ich trotzdem 
an MISO signal... das dürfte doch gar nicht sein oder?

die CS Leitung funktioniert auch. Reset-Pin vom 23S17 ist auch auf 5V 
beschalten.

von gerd (Gast)


Lesenswert?

Jürgen schrieb:
> aus MOSI der auf den PIN SO vom 23S17 geht hab ich auch Signal
> und wenn ich am Pin MISO messe, der an Pin SI vom 23S17 geht auch.

Hast du dich hier vertippt?

MOSI = Master Out Slave In  muss an SI (Slave In) vom 23S17
MISO = Master In Slave Out muss SO (Slave Out) vom 23S17

Du hast es also genau verdreht!

- gerd

von Jürgen (Gast)


Lesenswert?

Danke hab ich gerade gesehen und auch schon korrigiert aber es 
funktioniert trotzdem nicht.. :(

von Jürgen (Gast)


Lesenswert?

hab den fehler gefunden.
Also der SS Pin ist gleichzeitig auch CS pin...

also nicht:

// Set MOSI (PB5), SCK (PB7) and PB4 (SS) as output, others as input

sondern:

den SS Pin auf PB0

jetzt funktionierts :)

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Eigentlich eher das Gegenteil: PB4 muss man zum Ausgang machen, wenn
man die SPI im Master-Modus betreibt, denn wenn es ein Eingang ist,
dann wirkt er als /SS, um die SPI extern in den Slave-Modus setzen
zu können.

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.