mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Kanalabfrage des ADC ltc1867L - eigenartiges Verhalten?


Autor: MaWe (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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):
void init_SPI()
{
  UCB0CTL1 |= UCSWRST;                      
  UCB0CTL0 |= (UCCKPH | UCMSB | UCMST | UCMODE_0 | UCSYNC); 
  UCB0CTL1 |= UCSSEL_1;                     
  UCB0BR0 = 1;
  UCB0BR1 = 0;
  UCB0CTL1 &= ~UCSWRST;                     
}

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.
void read_all_channels()
{
  u8_t command_vector[8] = {0x84,0xC4,0x94,0xD4,0xA4,0xE4,0xB4,0xF4};
  u8_t channel = 0;
  u8_t high_byte = 0, low_byte = 0;

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


      while(!TX0_COMPLETE);
      UCB0TXBUF = ADC1_command_vector[channel]; // TX buffer beschreiben
      while (!RX0_COMPLETE);
      high_byte = UCB0RXBUF;                    // RX buffer lesen
      while(!TX0_COMPLETE);
      UCB0TXBUF = 0xFF;                         // TX buffer beschreiben um 2. Byte zu lesen (Wert = don't care)
      while (!RX0_COMPLETE);
      low_byte = UCB0RXBUF;                     // RX buffer lesen

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

  return;
}

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!

Autor: MaWe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oben war noch ein FEhler, der zweite Codeblock lautet natürlich so hier:
void read_all_channels()
{
  u8_t command_vector[8] = {0x84,0xC4,0x94,0xD4,0xA4,0xE4,0xB4,0xF4};
  u8_t channel = 0;
  u8_t high_byte = 0, low_byte = 0;

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


      while(!TX0_COMPLETE);
      UCB0TXBUF = command_vector[channel]; // TX buffer beschreiben
      while (!RX0_COMPLETE);
      high_byte = UCB0RXBUF;                    // RX buffer lesen
      while(!TX0_COMPLETE);
      UCB0TXBUF = 0xFF;                         // TX buffer beschreiben um 2. Byte zu lesen (Wert = don't care)
      while (!RX0_COMPLETE);
      low_byte = UCB0RXBUF;                     // RX buffer lesen

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

  return;
}

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.