mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Atmega 8P - Probleme mit ADC Wandlung (fester Wert)


Autor: Bastian A. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo liebe Forumsmitglieder,

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

Hier erstmal mein Programm :
PORTB = 0x00;
PORTC = 0x00; 
PORTD = 0x00;
//DDRA = 0x00;
DDRB = 0x0C;
DDRC = 0x00;
DDRD = 0x03;

.
.
.

uint16_t ReadChannel(uint8_t mux)
{
  uint16_t result;

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

  ADMUX = mux;          // Kanal waehlen
  //ADMUX |= (1<<REFS1) | (1<<REFS0);  // interne Referenzspannung nutzen
 
  /* nach Aktivieren des ADC wird ein "Dummy-Readout" empfohlen, man liest
  also einen Wert und verwirft diesen, um den ADC "warmlaufen zu lassen" */
  ADCSRA |= (1<<ADSC);        // eine ADC-Wandlung 
  while ( ADCSRA & (1<<ADSC) ) {;}
  result = ADC;  
  /* Eigentliche Messung - Mittelwert aus 5 Wandlungen */
  result = 0; 
  for (i=0; i<5; i++)
  {
  ADCSRA |= (1<<ADSC);    // eine Wandlung "single conversion"
  while ( ADCSRA & (1<<ADSC) ) {;}
  result = result + ADC;
  }
  result = result / 5;
  ADCSRA &= ~(1<<ADEN);  
  return result;
}
.
.
.

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

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.

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> 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?

Autor: Bastian A. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sorry Schreibfehler im Eifer des Gefechts ;)
Ist ein Atmega 8.



Ohja, sorry ein sehr dummer Fehler :(
Aref ist min. 2V :(

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Übrigens ist für solche Schwellwert-Erfassungen der Analog-Komparator 
eigentlich die bessere Wahl, vorausgesetzt, der Schwellwert an sich ist 
konstant.

Autor: Stephan Henning (stephan-)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

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.