Kanalabfrage des ADC ltc1867L - eigenartiges Verhalten?

Gast #2080853
Lesenswert?
• ▲
▼
Hallo,

ich frage über einen MSP430F2618 einen LTC1867L ab. Der ADC verfügt über 
8 AD Kanäle, auslesen lässt sich der ADC über SPI. Das ganze mache ich 
folgendermassen...

Zuerst initialisiere ich die Ansteuerung des SPI, das sollte soweit 
stimmen. Ich habe die Einstellungen auf CPOL = 0 und CPHA = 0 (bei den 
MSPs entspricht CPHA = 0 -> UCCKPH = 1):
1
void init_SPI()
2
{
3
  UCB0CTL1 |= UCSWRST;                      
4
  UCB0CTL0 |= (UCCKPH | UCMSB | UCMST | UCMODE_0 | UCSYNC); 
5
  UCB0CTL1 |= UCSSEL_1;                     
6
  UCB0BR0 = 1;
7
  UCB0BR1 = 0;
8
  UCB0CTL1 &= ~UCSWRST;                     
9
}

Ich lese anschließend mit folgender Funktion alle Kanäle aus, wobei 
"command_vector[8]" die Kommandos zum Auslesen der Kanäle 0-7 enthält. 
Diese sind definitiv korrekt.
1
void read_all_channels()
2
{
3
  u8_t command_vector[8] = {0x84,0xC4,0x94,0xD4,0xA4,0xE4,0xB4,0xF4};
4
  u8_t channel = 0;
5
  u8_t high_byte = 0, low_byte = 0;
6

7
  for (channel=0; channel<=7; channel++)
8
    {
9
      CS_HIGH;                  //Chip Select High
10
      CS_LOW;                   //Chip Select Low
11
      delay(8);                 //conversion time Tconv abwarten
12

13

14
      while(!TX0_COMPLETE);
15
      UCB0TXBUF = ADC1_command_vector[channel]; // TX buffer beschreiben
16
      while (!RX0_COMPLETE);
17
      high_byte = UCB0RXBUF;                    // RX buffer lesen
18
      while(!TX0_COMPLETE);
19
      UCB0TXBUF = 0xFF;                         // TX buffer beschreiben um 2. Byte zu lesen (Wert = don't care)
20
      while (!RX0_COMPLETE);
21
      low_byte = UCB0RXBUF;                     // RX buffer lesen
22

23
      voltages[channel] = ((high_byte << 8) + low_byte);
24
    }
25

26
  return;
27
}

Nach dem Aufrufen der Funktion sind die Werte im Array voltages[] 
allerdings, wider erwarten nicht in der richtigen Reihenfolge. So ist 
der Wert für Channel0 bei voltages[1], der für Channel1 bei voltages[2] 
usw...
Es scheint so, als würde beim ersten Lesevorgang die Werte nicht 
ausgelesen, stattdessen hängen die wohl noch im Speicher des ADCs fest. 
Erst beim 2. Lesen bekommt man diese dann.
Ist das Verhalten bekannt? Hat jemand einen Hinweis für mich, was ich 
falsch machen?

Besten Dank!
Gast #2080859
Lesenswert?
• ▲
▼
Oben war noch ein FEhler, der zweite Codeblock lautet natürlich so hier:
1
void read_all_channels()
2
{
3
  u8_t command_vector[8] = {0x84,0xC4,0x94,0xD4,0xA4,0xE4,0xB4,0xF4};
4
  u8_t channel = 0;
5
  u8_t high_byte = 0, low_byte = 0;
6

7
  for (channel=0; channel<=7; channel++)
8
    {
9
      CS_HIGH;                  //Chip Select High
10
      CS_LOW;                   //Chip Select Low
11
      delay(8);                 //conversion time Tconv abwarten
12

13

14
      while(!TX0_COMPLETE);
15
      UCB0TXBUF = command_vector[channel]; // TX buffer beschreiben
16
      while (!RX0_COMPLETE);
17
      high_byte = UCB0RXBUF;                    // RX buffer lesen
18
      while(!TX0_COMPLETE);
19
      UCB0TXBUF = 0xFF;                         // TX buffer beschreiben um 2. Byte zu lesen (Wert = don't care)
20
      while (!RX0_COMPLETE);
21
      low_byte = UCB0RXBUF;                     // RX buffer lesen
22

23
      voltages[channel] = ((high_byte << 8) + low_byte);
24
    }
25

26
  return;
27
}

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.