Atmega 8P - Probleme mit ADC Wandlung (fester Wert)

Gast #1228046
Hallo liebe Forumsmitglieder,

ich habe ein kleines Problem und mit der SuFu leider nichts gefunden.

Hier erstmal mein Programm :
1
PORTB = 0x00;
2
PORTC = 0x00; 
3
PORTD = 0x00;
4
//DDRA = 0x00;
5
DDRB = 0x0C;
6
DDRC = 0x00;
7
DDRD = 0x03;
8

9
.
10
.
11
.
12

13
uint16_t ReadChannel(uint8_t mux)
14
{
15
  uint16_t result;
16

17
  ADCSRA = (1<<ADEN) | (1<<ADPS2) |(1<<ADPS1);  // Frequenzvorteiler 
18

19
  ADMUX = mux;          // Kanal waehlen
20
  //ADMUX |= (1<<REFS1) | (1<<REFS0);  // interne Referenzspannung nutzen
21
 
22
  /* nach Aktivieren des ADC wird ein "Dummy-Readout" empfohlen, man liest
23
  also einen Wert und verwirft diesen, um den ADC "warmlaufen zu lassen" */
24
  ADCSRA |= (1<<ADSC);        // eine ADC-Wandlung 
25
  while ( ADCSRA & (1<<ADSC) ) {;}
26
  result = ADC;  
27
  /* Eigentliche Messung - Mittelwert aus 5 Wandlungen */
28
  result = 0; 
29
  for (i=0; i<5; i++)
30
  {
31
  ADCSRA |= (1<<ADSC);    // eine Wandlung "single conversion"
32
  while ( ADCSRA & (1<<ADSC) ) {;}
33
  result = result + ADC;
34
  }
35
  result = result / 5;
36
  ADCSRA &= ~(1<<ADEN);  
37
  return result;
38
}
39
.
40
.
41
.

Das ganze natürlich schön verpackt und in der main aufgerufen über
1
.
2
.
3
.
4
if (ReadChannel(5) == 1023)
5
 {
6
 PORTD &= ~((1<<PD0));
7
 }
8
.
9
.
10
.

Sinn dahinter sollte sein, den Spannungsabfall über einem Widerstand zu 
messen, und daraus rückwirkend den Stromfluss eines Motors bestimmen zu 
können, um diesen bei Überlast ausschalten zu können (Über PortD).
So, nun ist mein Problem, dass, wie schon in aus dem Code ersichtlich, 
er immer den Wert 1023 annimmt (AVcc ist 5V, Aref ist 0,07V, Vin ist 
0,02V).
Ich bin wirklich am verzweifeln, von den Spannungen her dürfte er ja 
netmal die hälfte des Messbereichs ausschöpfen? Kann mir bitte einer 
Weiterhelfen ?

Vielen Dank im Voraus.
#1228056
> Aref ist 0,07V
Wie wäre es denn, erst mal im Datenblatt nachzuschauen, ob es vielleicht 
einen Minimalwert für die externe Referenzspannung gibt? Kleiner Tip: Es 
gibt tatsächlich einen, und der ist erheblich größer als 0,07 V!

BTW:
Einen ATMega8P habe ich auf der ATMEL-Page nicht gefunden. Ist das ein 
Tippfehler?
#1228090
genauso habe ich es auch gemacht.
Komparator und dann den Ausgang an einen Int Eingang des µC.
Warum den µC damit quälen ständig zu messen ? Der hat besseres zu tun.
Beim Komparator einen C am Ausgang nicht vergessen, oder Hysterese 
benutzen.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 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.