www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ADC Atmega8 AVR-GCC und STK500


Autor: Claudio H. (Firma: BLS-Electronics) (hedie)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Ich benutze folgenden Code um den ADC des Atmega 8 welcher mit 8 MHz 
getaktet ist anzusteuern....
uint16_t ReadChannel(uint8_t mux){
  uint8_t i;
  uint16_t result;
 
  ADMUX = mux;                      // Kanal waehlen
  ADMUX |= (0<<REFS1) | (1<<REFS0); // interne Referenzspannung nutzen
 
  ADCSRA = (1<<ADEN) | (1<<ADPS2) | (1<<ADPS1) | (1<<ADPS0);    // Frequenzvorteiler 
                               // setzen auf 8 (1) und ADC aktivieren (1)
 
  /* 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) ) {
     ;     // auf Abschluss der Konvertierung warten 
  }
  result = ADCW;  // ADCW muss einmal gelesen werden,
                  // sonst wird Ergebnis der nächsten Wandlung
                  // nicht übernommen.
 
  /* Eigentliche Messung - Mittelwert aus 4 aufeinanderfolgenden Wandlungen */
  result = 0; 
  for( i=0; i<4; i++ )
  {
    ADCSRA |= (1<<ADSC);            // eine Wandlung "single conversion"
    while ( ADCSRA & (1<<ADSC) ) {
      ;   // auf Abschluss der Konvertierung warten
    }
    result += ADCW;        // Wandlungsergebnisse aufaddieren
  }
  ADCSRA &= ~(1<<ADEN);             // ADC deaktivieren (2)
 
  result /= 4;                     // Summe durch vier teilen = arithm. Mittelwert
 
  return result;
}

Ausgegeben wird das ganze auf einem Display:
int main(void){

        lcd_init();
  uint16_t adcval;
  
  
 while(1)
    { 
  float a;
  adcval = ReadChannel(0);
  set_cursor(0,1);
  lcd_string("ADC0:   ");
  set_cursor(0,2);
  lcd_string("        ");
  set_cursor(0,2);
  send_int(adcval);
  delay(); // ca 0.5 sekunden
    }
}

das ist meine send_int
void send_int(float zahl){
       char Buffer[20];  //umwandlung von Dezimal in ASCII
       itoa(zahl, Buffer, 10 ); 
     
       lcd_string(Buffer);
    }

Das problem ist nun, das zwar ein wert korrekt angezeigt wird
jedoch der wert selbst nicht korrekt ist.

Wenn ich zb. den Pin PC0 an GND hänge dann steht ein wert zwischen 930 
und 980 auf dem Display

dieser verändert sich dauernd, egal was ich an den Pin anschliesse....

Wo steckt hier der fehler?

Danke schonmal

Autor: Claudio H. (Firma: BLS-Electronics) (hedie)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich hab das problem gefunden!!!!!!!!!!!!!!!!!!!!!!!

Aus irgend einem Grund, ist der Pin PC0 auf dem STK500 nicht mit dem
Mikrocontroller Pin Verbunden.

Schliesst man direkt eine spannung an den PC0 Pin, so wandelt er 
einwandfrei!

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

>Aus irgend einem Grund, ist der Pin PC0 auf dem STK500 nicht mit dem
>Mikrocontroller Pin Verbunden.

Bist dusicher, das du den richtigen Sockel benutzt-> Grün?

MfG Spess

Autor: Claudio H. (Firma: BLS-Electronics) (hedie)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oppps

da hat sich wohl ein fehler eingschelichen :D

Danke... er war auf dem weisse

nun sind alle Probleme verschwunden... Danke!

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.