Forum: Mikrocontroller und Digitale Elektronik ADC-Auslesen - unterschiedliche Laufzeit?


von Fritz Box (Gast)


Angehängte Dateien:

Lesenswert?

Morgen zusammen!

Ich habe eine Frage zu meinem Programm.
Ich lese hier testweise eigentlich nur einen LTC2420 (20Bit-ADC) aus, 
sonst macht das Programm grad nichts.

Jedoch ist die Laufzeit jedesmal unterschiedlich. Wie kann das sein, 
bzw. woher kommt das? Ich kann mir das nicht erklären. Ich habe mal ein 
Bild vom Oszi angehängt, sowie den entsprechenden Code.

Und nochwas - ist es OK, wenn ein ADC gut 150-160ms für eine Wandlung 
braucht?

Bin für jede Antwort dankbar!

Hauptprogramm:
1
while (1)
2
{
3
   test = get_pressure_adc_value ();
4
   test *= -1;                             // Nur zum debuggen
5
}

ADC-Wert lesen:
1
int32_t get_pressure_adc_value (void)
2
{  
3
   uint8_t repeat;
4
   int32_t adc_result = 0;
5
6
   ADC_ENABLE;                             // Chip-Select auf 'low'
7
  
8
   while (ADC_CONV_IN_PROG)                // Warten, dass Wandlung fertig
9
   {}
10
11
   LED_OUT |= LED_1;                       // <- HIER TEST-LED AN
12
13
   for (repeat = 0; repeat < 3; repeat++)  // 3 Bytes empfangen
14
   {
15
      IFG2 &= ~UCB0RXIFG;                  // RX-IFG loeschen
16
      UCB0TXBUF = 0x00;                    // Daten senden, um zu empfangen
17
      while (!(IFG2 & UCB0RXIFG)) {}       // Auf empf. Zeichen warten
18
      adc_result |= (uint8_t) UCB0RXBUF;   // Daten in Variable speichern
19
    
20
      if (repeat < 2)                      // 2 Bit-Shifts ausfuehren
21
      {
22
         adc_result = (adc_result << 8);   // Bit-Shift um 1 Byte
23
      }
24
   }
25
26
   LED_OUT &= ~LED_1;                      // <- HIER TEST-LED AUS
27
28
   ADC_DISABLE;                            // CS auf 'high'
29
30
   return adc_result;                      // Ergebnis zurueckgeben
31
}

von Fritz Box (Gast)


Lesenswert?

VERGESST ES!!!!!!!

Ich bin so dumm! Ich hatte die LED noch von einem vorigen Test mit einem 
Timer in Verwendung- man bin ich dumm². Der Timer hat mir also immer 
dazwischen gemurkst.

Nun sind es immer 160ms. Trotzdem - solang für eine Wandlung?

von Stefan B. (stefan) Benutzerseite


Lesenswert?

LTC2420
http://cds.linear.com/docs/Datasheet/2420f.pdf

> Und nochwas - ist es OK, wenn ein ADC gut 150-160ms für eine Wandlung
> braucht?

Die conversion time in Tabelle Timing Characteristics sieht schon nach 
dieser Größe aus, wenn du mit 20-Bit und ohne externen Oszillator 
arbeitest.

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.