Forum: Mikrocontroller und Digitale Elektronik ADS1220 Temperatur SPI


von Martin S. (Gast)


Angehängte Dateien:

Lesenswert?

Hallo zusammen

Ich habe vollgendes Problem. Ich lese einen ADS1220 24bit-ADC aus über 
SPI.
Analoge Signale und Referenzen lesen geht wunderbar von -2,5V bis 2,5V.
Um aber eine Temperaturkompensation machen zu können muss ich auch den 
internen Temperatursensor auslesen. Wenn ich dies mache, dann bekomme 
ich immer so ca. 0.6 Grad aber sollte bei ca. 32-34 Grad sein. Jetzt ist 
meine Frage, hatt dies jemand auch schon ausgelesen oder sieht jemand 
den Fehler den ich im Code mache. Wert sind 14bit (ersten 14bit!!!) 
(Datenbaltt S.31)von den zwei 8 bit Werten. Aber alle 3 Werte müssen 
ausgelesen werden MSB, MB und LSB. Danach werden diese verrechnet 
(MSB,MB) und multipliziert mit 0.03125 für das LSB. Jede Variabel ist 
16bit gross (neg. und pos.). Im Anhang ist auch das Datenblatt. Hoffe 
auf Hilfe für das Problem.

Danke im Voraus
1
func read_Temp()
2
    pin_LO(PA14);
3
    SPI_Write(0x44); //Register 1 1Byte
4
    SPI_Write(0xB6); //Temp modus ein boost
5
6
    pause(50);//interne Zeit (ms)
7
8
    SPI_Write(0x10); //DATA Read Reg
9
    TempMSB = SPI_Read(); //Read
10
    TempMB = SPI_Read(); //Read
11
    TempLSB = SPI_Read(); //Read
12
13
    SPI_Write(0x44); //Register 1 1Byte
14
    SPI_Write(0xB4); //Temp modus aus boost
15
    pin_HI(PA14);
16
17
    Temperatur = (TempMSB + TempMB);
18
    Temperatur = Temperatur / 4;
19
endfunc

von Stefan S. (mexakin)


Lesenswert?

Ich habe den oft benutzt, zwar nie die Temperatur verwendet, aber 
trotzdem manchmal ausgelesen, das hat auf jedenfall funktioniert.

Eine Patentlösung hab ich jetzt nicht, aber meistens sind es ja bei 
sowas Kleinigkeiten weswegen es nicht funktioniert.
Vielleicht liest du die falschen bits aus, vielleicht muss der ADS 
anders angesprochen werden. Vielleicht liegen die Ergebnisbits nicht vom 
LSB an , d.. du musst erst noch bits schieben vorm umrechnen.

Ich weiss jetzt nicht wie deine Debug umgebung aussieht, aber mit 
breakpoints und dann step für step, oder oszi am spi, etc sollte das 
recht schnell sichtbar werden ob du probleme in der firmware oder an den 
Signalen selber hast.
Da die sonstigen analogen Signale funktionieren, gehe ich davon aus dein 
Problem ist ausschließlich in der firmware und nicht im ADS selber.

Gutes Gelingen weiterhin wünsche ich.

von Martin S. (Gast)


Lesenswert?

Ausgelesen wird er so wie im Datenblatt angegeben auch die einzelnen 
Kanäle ausgelesen werden können.
Ich muss sozusagen von zwei 8 bit Werten die Ersten 14 bit nehmen von 
MSB an die restlichen 2 bit verschwinden. Danach muss das 2er kompliment 
gemacht werden und +1 gerechnet. macht aber für mich nur sin wen dies 
mit nicht Int gelöst werden kann. Aber mit geteilt durch 4 müsst dies ja 
genau so gehen.

Das ging noch vergessen
Temperatur = (Temperatur * 0.03125);

von Martin S. (Gast)


Lesenswert?

So wie es aussieht konnet ich das Problem lösen. Wen es den Fehler ist 
und es sieht danach aus habe ich zu oft geschoben.
1
    Temperatur = ((TempMSB<<8) + TempMB); //MSB schieben + LSB
2
    Temperatur = Temperatur / 4;          //Für 14bit
3
    Temperatur = Temperatur * 0.03125;    //LSB multiplizieren

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.