-
        

Ergebnis 1 bis 2 von 2

Thema: ADC mit 5V Referenzspannung

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    20.06.2007
    Beiträge
    8

    ADC mit 5V Referenzspannung

    Anzeige

    Hi,
    irgendwie verstehe ich das mit dem AD-Wandler auf dem 1.4 RN-board (AT32mega) nicht so ganz.

    Also ich will eine Spannung von 0.4V bis 2.7V (Sharp Entfernungssensor) messen.
    Mein Code:
    Code:
    uint16_t adcwert(uint8_t kanal)
    {
    	uint8_t i;
    	uint16_t wert = 0; //Variable für Ergebnis deklarieren
    
    	ADCSRA = (1<<ADEN)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0);	//ADEN aktiviert überhaupt erst den internen ADC-Wandler, ADPS2 bis ADPS0 stellen den verwendeten Prescaler ein, denn die Wandlerfrequenz muss immer zwischen 50 und 200 kHz liegen! Der Prescaler muss bei 16MHz also zwischen 80 und 320 eingestellt werden, als einzige Möglichkeit bleibt hier 128 (=alle auf 1).   
    
    	ADMUX = kanal;
    	//ADMUX = (1<<REFS1)|(1<<REFS0); //Einstellen der Referenzspannung auf "extern", also REFS1 und REFS0 auf "0" - daher auskommentierte Zeile
    	
    	ADCSRA |= (1<<ADSC);	//nach Aktivierung des ADC wird ein "Dummy-Readout" empfohlen, man liest also einen Wert und verwirft diesen, um den ADC "warmlaufen zu lassen"      
        while(ADCSRA & (1<<ADSC)) {} //auf Abschluss der Konvertierung warten
    	wert = ADCW;	//ADCW muss einmal gelesen werden, sonst wird Ergebnis der nächsten Wandlung nicht übernommen.
     
    	/* Eigentliche Messung - Mittelwert aus 4 aufeinanderfolgenden Wandlungen */
    	wert = 0; 
    	for(i=0; i<4; i++)
    	{
    		ADCSRA |= (1<<ADSC); 	//eine Wandlung "single conversion" starten
    		while(ADCSRA & (1<<ADSC)) {} 	//auf Abschluss der Konvertierung warten
    		wert = wert + ADCW;	 //Wandlungsergebnisse aufaddieren
        }
    	
    	ADCSRA &= ~(1<<ADEN);	//ADC deaktivieren
     
    	wert = wert/4;		//Durchschnittswert bilden
     
    	return wert;
    }
    Nun bekomme ich damit aber falsche Werte raus (z.b. bei eigt. 2,7V bekomme ich 670). Denk mal ich hab das mit der Referenzspannung falsch. Hab schon unter:http://www.roboternetz.de/wissen/ind...28Avr%29#ADMUX geschaut aber bin daraus nicht so schlau geworden.

    Ich brauch ja eigentlich eine Referenzspannung von 5Volt?! Wie mach ich das. Ist VCC 5Volt?

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Alter
    48
    Beiträge
    2.731
    Hallo,

    beim RN-Control ist ein Jumper UREF, mit dem kann man entweder 5V (gesteckt) oder ca. 2,5V (offen) an AREF anliegen lassen.

    Wenn die Referenz 5V ist, kommt es doch mit 670 recht gut hin bei 2,7 V oder !
    5V am ADC-Eingang ergibt dann den max. Wert von 1023.

    Der Code schaut so auf die schnelle recht brauchbar aus


    Noch was: Wegen der Beschaltung auf den RN-Control kann man die internen Spannungen bzw. AVCC nicht verwenden, denn dazu dürfte nur ein Kondensator aussen an AREF sein, und keine Spannung anliegen !

Berechtigungen

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