-         

Ergebnis 1 bis 5 von 5

Thema: "Bandbreite" der AD-Konvertierung sehr gering und

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    05.08.2005
    Beiträge
    61

    "Bandbreite" der AD-Konvertierung sehr gering und

    Anzeige

    Hallo,

    ich habe an meinem ATMega169 der mit 5V betrieben wird ein
    Analogeingang der zwischen 3 und 5 Volt schwankt. Diesen will
    ich messen. Mit meinem Code unten schwanken die 16bit Werte
    aber immer nur sehr wenig im gesamten Messbereich, so dass
    die Auswertung nur sehr ungenau wird. Außerdem werden die
    16bit Werte größer, wenn die Spannung kleiner wird, das verstehe
    ich auch nicht.

    Wenn ich den Teiler von 64 auf 32 stelle ändert das komischwerweise
    auch nichts...

    Code:
    uint16_t readADC(uint8_t channel) {
    	uint16_t result = 0;
    	
    	// init ADC, set to 64
    	ADCSRA = (1<<ADEN) | (1<<ADPS2) | (1<<ADPS1);
    
    	// channel of the multiplexer
    	ADMUX = channel;
    	
    	// external referencevoltage  (AVCC 5.0 V)
    	ADMUX &= ~(1<<REFS1);	
    	ADMUX |= (1<<REFS0);
    	
    	// open ADC
    	ADCSRA |= (1<<ADSC);
    	
    	// dummy readout
    	while(ADCSRA & (1<<ADSC));
    	
    	// convert analog value
    	ADCSRA |= (1<<ADSC);
    		
    	// wait for result
    	while(ADCSRA & (1<<ADSC));
    	
    	// read value
    	result = ADCW;
    		
    	// ADC close
    	ADCSRA &= ~(1<<ADEN);
    	
    	return result;
    }
    DANKE für Hilfe!

    Gruß
    RICOLA

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    21.10.2005
    Ort
    Erde
    Alter
    50
    Beiträge
    1.195
    AVCC entkoppelt (LC-Glied, s. Datenblatt)? Steht genug Strom für die Referenz zur Verfügung (die hat eine Impedanz von 32kOhm)?

    Ist der VRef pin mit 100n nach GND gelegt (s. Datenblatt)?

    Musst Du "ADCClose" durchführen? Wie verhält sich die Messung (mehrere hintereinander), wenn Du den ADC enabled lässt?

  3. #3
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    26.11.2006
    Ort
    Hamburg
    Alter
    25
    Beiträge
    384
    Hi,

    hast du beim ATMega169 nicht auch zwei Register für das Ergebniss? Beim Atmega8 muss man das so schreiben:

    Code:
    result = ADCL + (ADCH << 8);
    wobei ADCL und ADCH dei beiden Ergebnis register sind.

    mfg
    Erik

  4. #4
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.183
    Nein, muss man nicht, es funktioniert ein result = ADC; Der Compiler macht das richtig, auch in der richtigen Reihenfolge.
    Grüsse Hubert
    ____________

    Meine Projekte findet ihr auf schorsch.at

  5. #5
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    26.11.2006
    Ort
    Hamburg
    Alter
    25
    Beiträge
    384
    Nagut man lernt halt immer noch dazu...

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •