Forum: Mikrocontroller und Digitale Elektronik Auslesen eines ADC (ADS7844)


von chrash (Gast)


Lesenswert?

Hallo !

Ich versuche momentan einen 12Bit-ADC (ADS7844) von TI an einem MSP430 
zum laufen zu bekommen.
Nachdem der ACD ein 8Bit Kontrollwort bekommen hat, nimmt er sich eine 
kleine auszeit für die Wndlung und ist dann bereit die 12Bit über SPI 
rauszuklickern.

Meine Funktion zum Auslesen sieht so aus:
1
uint16_t ADC_Wert(uint8_t Messpunkt)
2
{
3
uint16_t Wert = 0x0000;
4
uint8_t LS8bit = 0x00;
5
uint8_t MS8bit = 0x00;
6
uint8_t l=0x00;
7
8
ADC_SPI_Init();
9
10
//ChipSelect@HIGH
11
ADC_SPI_CS_HIGH;
12
Wait(10);
13
14
ADC_Kanal(Messpunkt);
15
16
//Hier kurz warten , bis der ADC zum senden bereit ist
17
  for(l=0;l<1;l++)
18
  Wait(100);
19
20
//Die MS8bit der Konversion
21
MS8bit = ADC_SPI_Lesen();
22
UART_String("  MS8Bit: ");
23
UART_Calc_Hyperterm(MS8bit,0); 
24
25
//Die LS8bit der Konversion
26
LS8bit = ADC_SPI_Lesen();
27
UART_String("  LS8Bit: ");  
28
UART_Calc_Hyperterm(LS8bit,0); 
29
30
//Nun werden die 2*8bit zu einem 16bit-Wort zusammengesetzt:
31
Wert = (Wert | MS8bit);
32
Wert = (Wert << 8);
33
Wert = (Wert | LS8bit);
34
35
//ChipSelect@LOW
36
ADC_SPI_CS_LOW;
37
38
return Wert;
39
}


Meine Funktion zum lesen über SPI:
1
uint8_t ADC_SPI_Lesen()
2
{
3
uint8_t Dummy=0x00;
4
uint8_t ADC_Byte=0x00;
5
6
ADC_SPI_Init();
7
8
//Dummy senden um 8bit vom ADC zu empfangen:
9
UCB0TXBUF = Dummy;
10
11
//Jetzt werden beim rausschieben des Dummys die Daten reingeholt, der RX-Buffer ist gefüllt.
12
ADC_Byte = UCB0RXBUF;
13
14
return ADC_Byte;
15
}


Leider wird immer nur das LSB gelesen, auch wenn ich die Wartezeit für 
die Konversion erhöhe(hab auch lange Wartezeiten ausprobiert).
Im MSB steht konstant eine 0x07 drin, auch darauf kann ich mir keinen 
Reim machen ...


Kann mir jemand einen Tip geben, was ich falsch gemacht habe?




Vielen Dank schon mal fürs Lesen

Gruß
crash

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

> Kann mir jemand einen Tip geben, was ich falsch gemacht habe?
Falscher SPI-Modus?
Wie sehen die Signale mit dem Oszi aus? Insbesondere ist hier am uC der 
zeitliche Bezug vom SCLK zum MOSI interessant.

von chrash (Gast)


Lesenswert?

Hallo !

Leider hab ich kein Oszi mit dem ich die Signale so genau beobachten 
kann.
Die Werte weiß ich durch die Darstellung in Hyperterm.

Kennt vielleicht jemand eine Quelle für Beispielcode, damit ich diesen 
mal mit meinem vergleichen kann?


Gruß
crash

von chrash (Gast)


Lesenswert?

Hallo Fans!

Ich hab den Fehler jetzt selbst gefunden.
Oder zumindest effektiv umschifft ;)

Eigentlich sollte es ja reichen 2x8Bit zu empfangen, um dann aus den 
16Bit die nötigen 12Bit zu extrahieren.
Das Problem war die Unsinnigkeit dieser 16Bit die ich empfangen habe.
Also habe ich das Byte davor und das Byte danach auch mal angeschaut.
Insgesamt habe ich also 4 Byte über SPI eingelesen. Hiervon sind nicht 
Byte 1 und 2 die relevanten (wie ich zuerst dachte), sondern Byte 2 und 
3!
Byte 1 enthät zwar auch Daten, die sich über die Eingangsspannung am ADC 
verändern, aber die 12Bit von denen im Datenblatt die Rede ist, sind in 
Byte 2 und 3 enthalten, welche man nach dem Senden des Kontrollwortes 
empfangen kann.

Vielleicht hilfts ja irgendjemand irgendwann mal ;)

Liebe Grüße
Crash

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.