Forum: Mikrocontroller und Digitale Elektronik Problem mit SPI


von Michael (Gast)


Lesenswert?

Hallo Leute,

ich habe ein kleines Problem mit der Bedienung einer SPI-Schnittstelle. 
Ich haben einen A/D-Wandler an einen XC167CI angeschlossen, und will von 
diesem nun die Werte auslesen. Hier erst mal das Datenblatt des 
ICs(serielle Schnittstell: S. 28ff):
www.analog.com/static/imported-files/data_sheets/AD2S1210.pdf

Mein Problem besteht nun darin, dass der A/D-Wandler ja insgesamt 3 Byte 
an den XC167 schicken will. Dafür braucht er aber die ganze Zeit den 
Takt des Masters, und der wird doch nur erzeugt, wenn der Master auch 
was sendet, oder lieg ich da falsch?

Bis jetzt hab ich folgenden Code:


SSC0_BR = 0x0013;
SSC0_CON = 0x4078;
SSC0_CON |= 0x8000; //einschalten

while(1)
{
  P3_P7 = 0;                //Sample low
  P3_P7 = 1;    //Sample high

  P3_P6 = 0;               //WR low
  SSC0_TB = 0xFF;          //irgendwas schicken
  while(!SSC0_CON_BSY);    //warten bis "busy" erkannt wurde
  while(SSC0_CON_BSY);     //warten bis "busy" vorbei
  P3_P6 = 1;               //WR high
}


Das funktioniert soweit auch ganz gut, nur dass der A/D-Wandler leider 
immer nur das erste Byte schickt.
Hat jemand vielleicht eine Idee??

Viele Grüße

Michael

von Rainer (Gast)


Lesenswert?

Hallo Michael,

ich kenn zwar den Controller und den AD-Wandler nicht. Aber warum 
schickst du nicht noch zwei Dummy Bytes (zB 2x FF) an den AD-Wandler. 
Bei einem aktuellen Projekt setzen wir den ADS1256 von TI zusammen mit 
nem MSP430 ein, und da klappt das so prima.

Gruß
Rainer

von STK500-Besitzer (Gast)


Lesenswert?

>Aber warum schickst du nicht noch zwei Dummy Bytes (zB 2x FF) an den >AD-Wandler.

Ist wohl das Standard-Verfahren bei SPI-Abfragen...

von Michael (Gast)


Lesenswert?

Hallo,

danke erstmal für die schnelle Antwort. Die Kommunikation mit dem ADC 
klappt soweit schon ganz gut, nur ein Problem hab ich noch.
Wenn ich die drei Dummy-Bytes schicke und das WR Signal auf low halte 
kommen die Daten rüber. Leider ist das MSB aber immer fest auf einem 
Wert. Wenn ich immer im "Normal-Mode" bin dann ist das MSB immer auf 
low, wenn ich aber zuvor im "Configuration-Mode" ein Register gelesen 
oder geschrieben habe und anschließend im "Normal-Mode" wieder die 
Position lesen will, dann ist das MSB immer auf high.
Hat jemand vielleicht schon mal ein ähnliches Problem gehabt?
Am Eingangssignal kann es meiner Meinung nach nicht liegen, da im 
Parallel-Betrieb alles einwandfrei läuft.

Gruß

Michael

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.