Mehrere ADC Kanäle simultan messen

Gast #1933273
Lesenswert?
• ▲
▼
Hallo, ich ahbe folgendes Problem:

Für mein DUO-LED Fahrradlicht betreibe ich zwei Step-Down Wandler für 
bis zu 1A und um das Tastverhältnis der PWMs zu regeln, möchte ich die 
Ströme über zwei 0,5Ohm Shunts gegen Masse mit 10-facher Verstärkung 
messen. Wenn ich einen einzelnen Kanal betreibe, funtkioniert die 
Schaltung. Wenn ich einen anderen betreibe auch, aber beide zusammen mit 
der Batterie Überwachung verfälscht das Ergebnis der Messung um den 
gefühlten faktor 10 nach unten.

Hier meine Interrupt Routine:

SIGNAL(SIG_ADC)
{
  if(ADC_COUNT)
    ADC_TMP+=(ADC<<1);

  ADC_COUNT++;

  if(ADC_COUNT>1)
  {
    switch(ADC_CHANNEL)
    {
    case(0):                  // BATTERY
      UBAT=ADC_TMP;
      ADC_CHANNEL=1;
      ADMUX|= 0b01001001;            // AREF/right/2-CH amp./10*ADC1->0
    break;

    case(1):                  // NEAR LED
      I1=ADC_TMP;
      if((I_SET>I1) && (OCR1A>400)){
        OCR1A--;}
      else if((I_SET<I1) && (OCR1A<1022)){
        OCR1A++;}
      ADC_CHANNEL=2;
      ADMUX|= 0b01001101;            // AREF/right/2-CH amp./10*ADC3->2
    break;

    case(2):                  // FAR LED
      I2=ADC_TMP;
      if((I_SET>I2) && (OCR1B>400)){
        REDOFF
        GREENON
        OCR1B--;}
      else if((I_SET<I2) && (OCR1B<1022)){
        REDON
        GREENOFF
        OCR1B++;}
      ADC_CHANNEL=0;
      ADMUX|= 0b01000111;            // AREF/right/8 unipol./ADC7
    break;
    }
    ADC_COUNT=0;
    ADC_TMP=0;
  }

  ADCSRA|= (1<<ADSC);                //start next Conversion*/
}

Ich verzweifle an diesem Fehler, vielleicht kann mir ja jemand einen 
heißen Tipp geben, was man beachten muss um mehrere Kanäle quasi 
parallel zu messen.

mfg Sönke
Angehängte Dateien:
Gast #1933314
Lesenswert?
• ▲
▼
Hallo

ich kenne mich mit ATMEL nicht aus. Aber bei den PIC's gilt, dass man 
beim Umschalten von einem Kanal auf einen anderen erst mal ein bisschen 
warten muss, damit sich die Multiplexer-Eingangs-Kapazität auf den neuen 
Spannungswert aufgeladen hat. Das ist bei ATMEL vermutlich genauso. Also 
studier nochmal das datenblatt, ob da nicht auch so eine Wartezeit 
vorgesehen ist, denn nach so einem Fehler sieht es für mich aus.

Gruß
Gerhard
Gast #1933348
Lesenswert?
• ▲
▼
Hier ist Dein Fehler:
1
ADMUX|= 0b01001001;            // AREF/right/2-CH amp./10*ADC1->0
2
...
3
ADMUX|= 0b01001101;            // AREF/right/2-CH amp./10*ADC3->2
4
...
5
ADMUX|= 0b01000111;            // AREF/right/8 unipol./ADC7
Du darfst nicht verodern, nach 3 Durchgängen ist ein sich nicht mehr 
ändernder Zustand erreicht.

Außerdem ist Deine Bitschreibweise unübersichtlich.
Gast #1933976
Lesenswert?
• ▲
▼
DAAANNKEEE!!

Ich hatte zunächst immer nur die Bits getoggelt,aber weil der Ausdruck 
zu lang war habe ich die Binärzahlen eingesetzt und das |= vergessen. 
Irgendwann sihet man es einfach nicht mehr, auch wenn ich wusste, dass 
es an diesem Befehl liegen muss.

VIELEN DANK!!!
Im endeffekt hat er von ADC3 nach 2 mit 200 facher auflösung gegen 5V 
gemessen. Daher auch der um den Faktor 20 kleinere Strom...

mfg Sönke

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.