Forum: Mikrocontroller und Digitale Elektronik SPI Kommunikation klappt nicht!


von Heinz W. (heinz_wichtelmann)


Lesenswert?

Ich bin dabei einen Baustein über SPI anzusprechen, jedoch funktioniert 
das einfach nicht! :-(
Verwende dazu den CCS Compiler und nen ollen PIC18F452.
Muss mehr oder weniger nur 8 Bit Daten in ein Register schreiben, SS, 
SCK und SDO vom µC sind meiner Meinung nach richtig angeschlossen...
Könntet ihr mir vielleicht n paar Tipps geben? :-)

von holger (Gast)


Lesenswert?

>Muss mehr oder weniger nur 8 Bit Daten in ein Register schreiben, SS,
>SCK und SDO vom µC sind meiner Meinung nach richtig angeschlossen...

Zeig mal Schaltung und Code. Ohne kann man kaum was dazu sagen.

von Heinz W. (heinz_wichtelmann)


Angehängte Dateien:

Lesenswert?

holger schrieb:
>>Muss mehr oder weniger nur 8 Bit Daten in ein Register schreiben, SS,
>>SCK und SDO vom µC sind meiner Meinung nach richtig angeschlossen...
>
> Zeig mal Schaltung und Code. Ohne kann man kaum was dazu sagen.

Schaltung habe ich jetzt nicht bei der Hand...
Achtung: Beim Code bin ich mir bewusst, dass ich im Header den 18F452 
deklariert habe, da ich es grad auf nem andren Board probiert 
habe...Schaltung ist auch jetzt mitm 452 verbunden...

Schaltung nur als Paint (SORRY!)

von Heinz W. (heinz_wichtelmann)


Angehängte Dateien:

Lesenswert?

Sorry, bei der Variableninitialisierung habe ich jetzt nen Fehler 
gesehen, Werte sollen nicht Hexadezimal, sondern Dezimalwerte sein, hab 
das jetzt ausgebessert, aber funktioniert trotzdem nicht!

von holger (Gast)


Lesenswert?

Beitrag "8 Bit Wert in Register schreiben (mit SPI)"

Ist das ein merkwürdiger Zufall, oder bist du schizophren?

Was soll das c.txt? Das ist ein C-Code also poste
den auch als name.c.

>#use spi(FORCE_HW, BITS=8, stream=SPI_Test2)

Das ist wieder mal so ein Problem mit Codegeneratoren.
Keiner weiss was der da jetzt aus dieser Zeile macht
und welche Pins benutzt werden. Das müsste im Handbuch
stehen, also nochmal die Pinbelegung checken.

SS hat auch eine analoge Zweitfunktion.
Da also auf jeden Fall mal nachsehen ob
der Pin auch auf digital I/O umgeschaltet wurde.

Schaltplan sieht ansonsten gut aus.
Mehr kann dir wohl nur jemand sagen der CCS kennt.

von Heinz W. (heinz_wichtelmann)


Lesenswert?

Ja tut mir leid, aber der einfachheit halber, habe ich mir gedacht den 
Code einfach als Text zu speichern, bin neu hier! sorry!
Und die Pre-Prozessor-Funktion verwendet die Pins wie im Blockdiagramm 
dargstellt, laut Compiler und Hersteller!
Also wie im Foto beschrieben!
Jedoch kannst du im Header auch sehen, dass ich (auskommentiert) einmal 
versucht habe, die SPI über die Software zu emulieren, also Software SPI 
zu verwenden, jedoch hat dies auch nicht geklappt! :-(

von holger (Gast)


Lesenswert?

>Und die Pre-Prozessor-Funktion verwendet die Pins wie im Blockdiagramm
>dargstellt, laut Compiler und Hersteller!

Tja, dann mach mal ein kleines Programm was dauernd
Daten auf SPI ausgibt und schau nach ob wenigstens SCK
taktet. Dann schaust du nach ob SS richtig gesetzt wird
und ob auch Daten auf SDO rauskommen.


Ansonsten mach die SPI und IO Initialisierung zu Fuß und sende die
Daten laut Datenblatt. Dann muss man nicht raten was passiert
und dir kann viel schneller geholfen werden.

von Heinz W. (heinz_wichtelmann)


Lesenswert?

Hab da jetzt mal mal einen Logic Analyzer drangehängt.
CLK taktet, aber hab etwas komisches erkannt:
SS macht garnichts, außer wenn ich den Ground entferne, dann taktet SS 
gleich wie CLK.
Auf der Datenleitung liegt auch nichts an -.-

Grüße

von (prx) A. K. (prx)


Lesenswert?

SS tut nicht von selbst. Die Zuordnung zum entsprechend benannten Pin 
spielt nur bei SPI-Slave eine Rolle. Wenn der PIC wie hier als Master 
auftritt, dann musst du selbst für das Signal sorgen, mit ganz normaler 
Port-I/O.

Also als Ausgang definieren, vorher aktivieren, nachher deaktivieren. 
Und vor dem Ganzen die Doku lesen, ob man den SS-Pin überhaupt verwenden 
kann wenn SPI=Master - es gibt Controller wo das nicht geht.

von Heinz W. (heinz_wichtelmann)


Lesenswert?

Was ich komisch finde ist, dass ich auf SDA immer 5 Volt am Board 
anliegen habe.

SS hab ich jetzt mal händisch aktiviert, aber Daten kommen eben nicht 
an.
Das mit SS werd ich mal nachlesen, danke :-)

Grüße

von Heinz W. (heinz_wichtelmann)


Lesenswert?

A. K. schrieb:
> SS tut nicht von selbst. Die Zuordnung zum entsprechend benannten Pin
> spielt nur bei SPI-Slave eine Rolle. Wenn der PIC wie hier als Master
> auftritt, dann musst du selbst für das Signal sorgen, mit ganz normaler
> Port-I/O.
>
> Also als Ausgang definieren, vorher aktivieren, nachher deaktivieren.
> Und vor dem Ganzen die Doku lesen, ob man den SS-Pin überhaupt verwenden
> kann wenn SPI=Master - es gibt Controller wo das nicht geht.

Ich glaub du hast recht, SS Pin wird nur im Slave-Mode verwendet.
D.h. SS kann NUR manuell gesetzt werden oder, also eben zu Fuß über I/O?

Grüße

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.