Forum: Mikrocontroller und Digitale Elektronik SPI Problem zwischen (DK-LM3S9b96) und (ADS1243)


von mourad e. (mourad_e)


Angehängte Dateien:

Lesenswert?

Moin..


hat schon jemand Erfahrungen mit der MCU vom Luminary (LM3S9B96) und 
seine SPI Peripherie ??

Ich arbeite an einer Eva Board : Dk-lm3s9b96
und versuche sein SPI zu steueren. das Board hat eine angenehme Funktion 
Bibliothek , die das SPI unterstütz.

Das Hacken ist aber dass ich keine Möglichkeit (was mein Wissen 
betrifft) habe die SLCK manuelle zu stopen, bzw. zu steueren.

Der (SCLK) (CS) Leitungen werden automatisch getacktet, sobald man Daten 
im schifftregister schreibt.

Der SPI muss mit einer ADC (ADS1243) verbunden werden. und der ADC hat 
eine Timing verhalten, wie oben auf dem Foto zu sehen.

PS: auf der OSZI Foto, sind 2 Byte zur ADS gesendet wurden. dazwischen 
habe ich ein Delay schleife von 100 Us gestellt.


Ich hänge hier fest... :-(

von mourad e. (mourad_e)


Lesenswert?

anscheind, hat keiner mit so einem MCU gearbeitet !!!..


schade. :-((

von Gerhard G. (xmega)


Lesenswert?

Hallo,

ADS1243 = SPI™ COMPATIBLE steht im Datenblatt.

Der LM3S9B96 ist ein CORTEX M3 Prozessor.

Der ist ebenfalls SPI kompatible:
Two Synchronous Serial Interface modules (SSI)

Der SPI MODE 0 bis 3 (ADS1243) sollte aber bekannt sein.

Gruß XMEGA

von LM3S9B96 (Gast)


Lesenswert?

Hi mourad

was willst du genau machen?

Als erstes fallen mir auf das wir zu wenig Angaben haben.
Aus deinen Scopebilder kann ich die Pegel nicht bestimmen. Hast du auf 
Ch3 und Ch4 eine 10:1 Probe? Betreibst du beide Bausteine mit der 
gleichen Speisung 3V3?

Sörend ist auch dass du auf Ch4 (SDI) 2 verschiedene Logikpegel hast 
(geschätzt 2.0V und 3.3V), das deutet meistens auf eine Konflikt mit 
vrschiedene Speisungen, Logikpegel, floatenden Eingänge, 2 Ausgänge die 
gegeneinander treiben hin.

In deinem Bsp. sendest du als Cmd "10101010", dieser ist aber laut 
Datenblatt des ADS1243 nicht spezifiziert. Was erwartest du auf diesen 
Cmd?

Laut Datenblatt( und deinem timing.png) des ADS1243 muss zwischen den 
einzelnen Bytes t6=50 tOSC periodes eingehalten werden. Machst du das? 
Dazu sollten wir auch noch wissen wie tosc bei deinem ADS1243 ist.

Du versuchst wohl dies mit deiner Delay Schleife von 100us zu erreichen. 
Mach das nicht mit Delays.. Fall der LM3S9B96 das nicht beherscht, 
reduzier die SPI Clockrate bis du diesen Wert sicher erreichst. Der 
ADS1243 ist ja kein Highspeed Wandler.

Fang als erstens mit einfachen Befehlen an. Gibt es im ADS1243 ein ID 
Register das du auslesen kannst? Ev ein Register mit festen Werten? 
Somit könntest du zuerst dein Übertragung testen da die gelesenen Werte.
Ansonsten Write Befehl auf ein Register mit einem lustigen Pattern (z.B 
0x55 oder 0xA5) und danach versuchen dieses Register wieder zu lesen.

Beschreib doch zuerst deine Schaltung bzw. zeig uns dein Schema.

Gruss
LM3S9B96

von mourad e. (mourad_e)


Angehängte Dateien:

Lesenswert?

LM3S9B96 schrieb:
> Hi mourad
>
> was willst du genau machen?

Die Idee, bzw. mein kleine Projekt ist nähmlich ein einfachen EKG zu 
realisieren. Der ADC (ADS1243) vom TI bietet eine schöne Auflösung mit 
24 Bit an. ink. integrerte Digitale Filter, noch zusätzlich sind die 
50/60 Hz Filter .
Mein erste Schritt ist natürlich das chip zu kommunizieren, dafür habe 
ich die wichtige Leitungen SCKL, CS, SDI,SDO mit dem Controller 
verbunden.

SCLK --> PA.2
CS   --> PA.3
SDI  --> PA.5
SDO  --> PA.4

VDD (Ads1243) = 3.3 V
GND

das Chip kann man auch mit 5V betreiben, dadurch wird aber der MCU 
beschädigt.



> Als erstes fallen mir auf das wir zu wenig Angaben haben.
> Aus deinen Scopebilder kann ich die Pegel nicht bestimmen. Hast du auf
> Ch3 und Ch4 eine 10:1 Probe?

das Stimmt. hatte die  10:1 gesetz, aber aus versehen.

>Betreibst du beide Bausteine mit der
> gleichen Speisung 3V3?

Ja. aber ich denke, es muss kein Problem für di Schaltung sein...!


> In deinem Bsp. sendest du als Cmd "10101010", dieser ist aber laut
> Datenblatt des ADS1243 nicht spezifiziert. Was erwartest du auf diesen
> Cmd?

Das cmd war eigentlich um den verhalten der SDI zu sehen. wann taktet 
mit 1, und wann mit 0. also ob flanke hoch, oder Flanke runter. deswegen 
habe ich die bit im Form zigzag gestelet. cmd"10101010"
Antwort vom ADS ist nicht geplant.


> Laut Datenblatt( und deinem timing.png) des ADS1243 muss zwischen den
> einzelnen Bytes t6=50 tOSC periodes eingehalten werden. Machst du das?
> Dazu sollten wir auch noch wissen wie tosc bei deinem ADS1243 ist.

der ADS habe ich mit einem extern Quarz mit 2,4576 MHZ  entsprecht
Tosc =  400 ns

t1 = der Tackt der SPI clk soll mind. 4 Tosc = 1,6 µs
F(sclk) =  mind. 625Khz.

Ich habe der SPI der Kontroller mit 700 Khz Takt konfig.

delay Zeit zwischen 2 Byt ---> t6 = 50 Tosc = 20 µs.

diese watrezeit, habe ich Gestern durch eine delay Schleife realisiert, 
leider ohne Erfolg. (Das Foto könnte ich später hochladen)


> Du versuchst wohl dies mit deiner Delay Schleife von 100us zu erreichen.
> Mach das nicht mit Delays.. Fall der LM3S9B96 das nicht beherscht,
> reduzier die SPI Clockrate bis du diesen Wert sicher erreichst. Der
> ADS1243 ist ja kein Highspeed Wandler.

Ich muss zugeben, dass ich das MCU nicht beherche, ich bin daran viel 
davon zu lernen. aber ist echt häftig, wieviel Reg. das Chip enthält.
dafür benutze ich meistens, die vorhandene Treiber od. (Funktionen)



> Fang als erstens mit einfachen Befehlen an. Gibt es im ADS1243 ein ID
> Register das du auslesen kannst? Ev ein Register mit festen Werten?
> Somit könntest du zuerst dein Übertragung testen da die gelesenen Werte.
> Ansonsten Write Befehl auf ein Register mit einem lustigen Pattern (z.B
> 0x55 oder 0xA5) und danach versuchen dieses Register wieder zu lesen.

Und das war seit Tagen mein erste Schritt... habe versucht die Register 
bloß durch den Befehl cmd "0x11! z.b. zu lesen.
Also der Register nummer 1 zu lesen.
oder cmd = 0x12 um register N° 2 zu abzulesen.


PS: Das Schema habe ich jetzt nur kurzfristig mit Pain gestellt. habe 
noch nicht die richtige Schaltung mit Eagle angefangen.

von LM3S9B96 (Gast)


Lesenswert?

mourad e. schrieb:
> t1 = der Tackt der SPI clk soll mind. 4 Tosc = 1,6 µs
> F(sclk) =  mind. 625Khz.

Nein F(sclk) = max 625Khz, wenn bei einer Zeit minimal steht entspricht 
das der Maximale Frequenz.

mourad e. schrieb:
> delay Zeit zwischen 2 Byt ---> t6 = 50 Tosc = 20 µs.

Und  das ergäbe F(sclk) = max 25kHz

Lass dein SPI mal mit 10 kHz laufen dann solltest du auf deine Delays 
verzichten können.

LM3S9B96 schrieb:
> Sörend ist auch dass du auf Ch4 (SDI) 2 verschiedene Logikpegel hast
> (geschätzt 2.0V und 3.3V), das deutet meistens auf eine Konflikt mit
> vrschiedene Speisungen, Logikpegel, floatenden Eingänge, 2 Ausgänge die
> gegeneinander treiben hin.

Hast du dazu schon Neuigkeiten? Zuerst solltest du schauen dass du 
saubere pegel hast.

Der ADS1243 besitzt leider kein Register mit festen Werten welches zum 
überprüfen deiner Read Funktion dienen kann. Du kannst aber folgendes 
versuchen:

Schreibe 0xFF in Reg IOCON (0x06) damit sind die IO Pins des ADS1243 
freigeschaltet. Danach kannst du die entsprechned Beschalten und 
versuchen die Werte aus Register DIO (0x04) zu lesen. Alternativ 
konfigriert du über Register DIR (0x05) die IOs als Ausgänge und kannst 
sie über DIO (0x04) schreiben.


Gruss
LM3S9B96

von mourad e. (mourad_e)


Lesenswert?

LM3S9B96 schrieb:
> mourad e. schrieb:
>> t1 = der Tackt der SPI clk soll mind. 4 Tosc = 1,6 µs
>> F(sclk) =  mind. 625Khz.
>
> Nein F(sclk) = max 625Khz, wenn bei einer Zeit minimal steht entspricht
> das der Maximale Frequenz.

Aaaaaa.... ärger mich

du hast vollkommen Recht. bin so ein Deep.

das stimmt, weil die Zeit = invertieren des Frequenz.
habe bis jetzt der SPI nur über die 650 Khz. teilweise mit 2 MHZ.

wahrscheinlich, darum der ADS kaum schaffen könnte. mit zuhalten.

werde heute abend das probieren. und sage dir BEscheid.

PS: danke dir noch mal ;-)

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.