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