Forum: Mikrocontroller und Digitale Elektronik senden mir SPI


von Viktor (Gast)


Lesenswert?

Guten Tag,

ich möchte über die SPI-Schnittstelle meines Mikroconrollers Daten 
senden.
Dazu habe ich eine Funktion namens spi_Write().


Das Problem ist, dass das übergebene Byte nicht gesendet wird.
Ich schaue mit einem Oscilloskop die Leitungen MOSI und MISO an,
aber das passiert garnichts. Nur Rauschen

Die spi-Schnittstelle habe ich konfiguriert auf 650kHz.
Das spi_Write(0b10011001) führe ich in einer Endlosschleife aus.

Laut Datenblatt wird CS automatisch auf low gezogen bevor die Funktion 
spi_Write() ausgeführt wird.

Hat Jemand eine Idee woran das liegen könnte?

von Kevin K. (nemon) Benutzerseite


Lesenswert?

Kaffeesatzleserei: du hast SPI nicht aktiviert.
Erklär doch mal etwas mehr: welcher C, wie sieht dein Programm aus usw. 
usf., so wird das hier nix mit Hilfe

von Justus S. (jussa)


Lesenswert?

der Fehler ist natürlich in Zeile 42...wie immer

von Falk B. (falk)


Lesenswert?


von PittyJ (Gast)


Lesenswert?

Ich habe mal SPI.transfer() gemacht. Das hat funktioniert.

Ach ja, was machen die Clock und Slave-Select Leitungen? Auch nur 
Rauschen?
Vielleicht sind die gar nicht angeschlossen, denn die Leitungen sollten 
ja einen definierten Pegel haben.

von Viktor (Gast)


Lesenswert?

Ich benutze einen Picasso 4DGL Display mit integrierten Controller.
Hier die Seite: http://www.4dsystems.com.au/prod.php?id=224

Interne Funktionen:
http://de.scribd.com/doc/131001806/Datenblatt-PICASO-4DGL-Internal-Functions-REV6-2

Programmiert wird der Controller in C über USB Port.

In dem Programm habe ich eine main-Funktion. In dieser wird die 
SPI-Schnittstelle konfiguriert:

spi_Init(2,1,2);

Eine Funktion extra zum aktivieren der spi-Schnittstelle gibt es im 
Datenblatt(Anhang) nicht.

In der main Funktion habe ich eine while-Schleife, diese fürhrt
eine Ausgabe an der spi-Schnittstelle aus.

 var senden := 0b10011001;
 spi_Write(senden);
 pin_HI(IO2_PIN); // Zur Sicherheit. CS Pin wieher auf high ziehen


An den PINs MISO und MOSI sollten eig. die Signale rauskommen.

Auf Seite 152 im Anhang gibt es eine Auswahl an Konfigurationen von spi.
Welche Konfiguration nehme ich da am Besten?

von Viktor (Gast)


Lesenswert?

Auf der SCK - Clock-Leitung habe ich schon ein Signal anliegen. 
Rechtecke in einem bestimmten Intervall.

An der CS-Leitung habe ich eine konstannte Spannung anliegen. Da 
passiert nichts.

An den MOSI/MISO-Pins liegt keine Spannung an.

von Karl H. (kbuchegg)


Lesenswert?

Viktor schrieb:
> Ich benutze einen Picasso 4DGL Display mit integrierten Controller.
> Hier die Seite: http://www.4dsystems.com.au/prod.php?id=224
>
> Interne Funktionen:
> 
http://de.scribd.com/doc/131001806/Datenblatt-PICASO-4DGL-Internal-Functions-REV6-2

Schön.
Damit ist klar wer der Empfänger ist.

Aber wer ist der Sender?

Beim SPI Transfer ist ja der µC der aktive Part. Wenn da was nicht 
funktioniert muss man daher beim µC zu suchen anfangen. Wer am anderen 
Ende der Leitung sitzt, ist hingegen eher uninteressant. Dein µC sendet 
nicht, also sollte man mal dessen SPI Spezifikation zu Rate ziehen,


> In dem Programm habe ich eine main-Funktion. In dieser wird die
> SPI-Schnittstelle konfiguriert:
>
> spi_Init(2,1,2);

Wer oder was hat diese Funktion geschrieben?
Du? Jemand anderer? Was sagen die Parameter aus?

von Matthias L. (Gast)


Lesenswert?

>uf der SCK - Clock-Leitung habe ich schon ein Signal anliegen.
>Rechtecke in einem bestimmten Intervall.

Dann scheint der Controller defekt zu sein. Ich hätte da ein Taktsignal 
erwartet, aber Rechtecke...


>An der CS-Leitung habe ich eine konstannte Spannung anliegen. Da
>passiert nichts.

So wie ich die Hardware-SPI-Einheiten kenne (zB im Atmel), so kennen die 
gar keine CS-Leitungen. Die haben nur das Schieberegister mit MISO und 
MOSI, sowie den Takt SCK. Befehle lesen oder schreiben immer nur ein 
Byte. Wenn jetzt CS benötigt wird, muss da per Software "drumherum" 
gebaut werden.


>An den MOSI/MISO-Pins liegt keine Spannung an.

Das bezweifle ich. Auch Null Volt ist eine Spannung. Und kann bei 
low-aktiven Signalen sogar Aktionen erwirken..

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.