mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ATMega1281 und ADC (Spannungseinbruch)


Autor: Sebastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

ich hab ein Problem mit dem ADC des ATMega1281:

ich will mit den freien ADC-Eingängen die Versorgungsspannungen auf dem 
Board überwachen. Das sind 12V, 3.3V und -5V. Referenzspannung ist 
4.096V.
Bei 3.3V (3. Kanal) und -5V (4.Kanal) funktioniert die Messung ohne 
Probleme.
Nur bei 12V (2. Kanal) misst er immer 0;
Die 12V werden über einen 30K und 10K Spannungsteiler auf 3V gebracht 
und dann zum ADC. Da bricht die Spannung auf ca. -0.5V ein. Wenn ich den 
Pin des ATMega anhebe stimmen die 3V wieder.
Der ATMega wurde schon getauscht, hat aber keine Besserung gebracht.

Hoffe ihr wisst abhilfe.
Sebastian

Der Code:
// Messwert erfassen
uint16_t adc_mess(uint8_t channel)
{
  uint8_t i;
  uint16_t u16Messwert;
  
  // ADC einschalten und Prescaler auf 111 (125 kHz)
  PRR0 &= ~(1 << PRADC);
  ADCSRA = (1 << ADEN) | (1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0);

  // Externe Referenzspannung und Ergebnis rechtsbündig / low byte first
  switch (channel)
  {
  case 0:   // 1.Kanal
    ADMUX = 0x00;
    break;
  case 1:   // 2.Kanal
    ADMUX = 0x01;
    break;
  case 2:   // 3.Kanal
    ADMUX = 0x02;
    break;
  case 3:   // 4.Kanal
    ADMUX = 0x03;
    break;
  default:
    ADCSRA &= ~(1<<ADEN);
    PRR0 |= (1 << PRADC);
    return 0;
  }

 
  // Dummy-Messung
  ADCSRA |= (1<<ADSC);
  while ( ADCSRA & (1<<ADSC) ) 
  {;}
  u16Messwert = ADCW;        // Register auslesen
  u16Messwert = 0;        // Messwert verwerfen 
  
  // Messung starten
  for(i = 0; i < ANZAHL_MESSUNGEN; ++i)
  {
      ADCSRA |= (1<<ADSC);
      while ( ADCSRA & (1<<ADSC) ) 
    {;}
    u16Messwert += ADC;      // Ergebnisse addieren  
  }
  // ADC ausschalten
  ADCSRA &= ~(1<<ADEN);
  PRR0 |= (1 << PRADC);
 
   // Mittelwert aus den Messungen
  u16Messwert /= i;
 
  return u16Messwert;
}


Autor: Marius Wensing (mw1987)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie zum Teufel misst du denn bitte -5 V richtig? Gib mal Schaltplan!

Dir ist schon klar, dass der AVR-ADC keine negativen Spannungen messen 
kann.

MfG
Marius

Autor: Spezi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

normal kann an einem Controller, der nur eine (positive) 
Versorgungsspannung hat, keine negative Pin-Spannung auftreten. Das 
führt zu der schon gestellten Frage, wie du die -5V denn misst (die 
einzige negative Spannung, die erwähnt wird).
Vielleicht klemmst du zum Test die -5V ab und prüfst die 12V-Messung ...

Und noch etwas zur ADC-Routine: es ist unsinnig, bei jedem 
Wandlungsvorgang den ADC ein- und nach der Wandlung wieder 
auszuschalten. Dadurch verschenkt man unnötig Rechenzeit durch die 
"Dummy-Messung". Das Einschalten des ADC (und nur das Einschalten!) 
sowie das Anstossen der Dummy-Messung braucht nur einmal in einer 
ADC-Init-Routine passieren. Dann muss man in der Mess-Routine nur noch 
den Kanal wählen, den Wandler starten und auf das Ergebnis warten.
Ein Abschalten des ADC ist in der Regel nicht erforderlich.

MfG

Autor: Sebastian (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Die -5V messe ich mittels Spannungsteiler. Bei -5V kommen 2V raus, das 
passt auch.

Ich Schalte den ADC wieder aus, da die Schaltung mittels Akku läuft und 
es auf Rechenzeit nicht ankommt. Eine Messung alle 100ms.

Autor: Michael U. (amiga)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

der zugehörige ADC-Pin ist auch wirklich Eingang?
Deine Beschreibung klingt so, als ob er als Ausgang programmiert ist.

Gruß aus Berlin
Michael

Autor: Sebastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich hab jetzt nochmal extra DDRF mit 0 belegt und der Eingang schwankt 
jetzt zwischen -0.5 und etwa 2V.

Autor: Sebastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
weiß keiner woran das liegen kann?

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Ich hab jetzt nochmal extra DDRF mit 0 belegt und der Eingang schwankt
>jetzt zwischen -0.5 und etwa 2V.

>weiß keiner woran das liegen kann?

Ich würde sagen der Pin floatet. Nicht angeschlossen.
Mit dem Spannungsteiler der da dran hängen soll kann
die Spannung gar nicht negativ werden.

Autor: Sebastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
es muss irgendwas mit dem ATmega sein. Kann ich den falsch 
konfigurieren?
Wenn ich den Pin vom Pad trenne, passt die Spannung am Spannungsteiler.

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.