ATMega1281 und ADC (Spannungseinbruch)

Gast #1529802
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:
1
// Messwert erfassen
2
uint16_t adc_mess(uint8_t channel)
3
{
4
  uint8_t i;
5
  uint16_t u16Messwert;
6
  
7
  // ADC einschalten und Prescaler auf 111 (125 kHz)
8
  PRR0 &= ~(1 << PRADC);
9
  ADCSRA = (1 << ADEN) | (1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0);
10

11
  // Externe Referenzspannung und Ergebnis rechtsbündig / low byte first
12
  switch (channel)
13
  {
14
  case 0:   // 1.Kanal
15
    ADMUX = 0x00;
16
    break;
17
  case 1:   // 2.Kanal
18
    ADMUX = 0x01;
19
    break;
20
  case 2:   // 3.Kanal
21
    ADMUX = 0x02;
22
    break;
23
  case 3:   // 4.Kanal
24
    ADMUX = 0x03;
25
    break;
26
  default:
27
    ADCSRA &= ~(1<<ADEN);
28
    PRR0 |= (1 << PRADC);
29
    return 0;
30
  }
31

32
 
33
  // Dummy-Messung
34
  ADCSRA |= (1<<ADSC);
35
  while ( ADCSRA & (1<<ADSC) ) 
36
  {;}
37
  u16Messwert = ADCW;        // Register auslesen
38
  u16Messwert = 0;        // Messwert verwerfen 
39
  
40
  // Messung starten
41
  for(i = 0; i < ANZAHL_MESSUNGEN; ++i)
42
  {
43
      ADCSRA |= (1<<ADSC);
44
      while ( ADCSRA & (1<<ADSC) ) 
45
    {;}
46
    u16Messwert += ADC;      // Ergebnisse addieren  
47
  }
48
  // ADC ausschalten
49
  ADCSRA &= ~(1<<ADEN);
50
  PRR0 |= (1 << PRADC);
51
 
52
   // Mittelwert aus den Messungen
53
  u16Messwert /= i;
54
 
55
  return u16Messwert;
56
}
Gast
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
Gast
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.
Angehängte Dateien:
Gast
>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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 16 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.