-         

Ergebnis 1 bis 5 von 5

Thema: AD Wandlung mit ATMega8

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    23.05.2007
    Alter
    38
    Beiträge
    14

    AD Wandlung mit ATMega8

    Anzeige

    Hallo zusammen !

    Bin relativer "C" Frischling und bräuchte Hilfe bei einer AD Wandlung.
    Ich möchte an Portpin C0 eine Spannung zwischen 0 und cirka 3 Volt in den Prozessor geben, wandeln und diese dann auf dem Display ausgeben.

    Kann mir jemand evtl. mit einem Quellcode dazu dienen ?

    Oder ein paar Tips/Hilfen geben ?

    Danke Euch allen !!!

    Gruss Andy

  2. #2
    Erfahrener Benutzer Roboter Genie Avatar von robocat
    Registriert seit
    18.07.2006
    Beiträge
    935
    Code:
    ADCSRA=(1<<ADSC)| // start conversion
                    (1<<ADEN)|  // enable converter
                    (1<<ADFR)|  // free running (kontinuierliche wandlungen)
                    (1<<ADPS2)| // prescaler bit2
                    (1<<ADPS1)| // prescaler bit1 (siehe datenblatt, S.208, hier clk/64)
                    (1<<ADIE); // interrupt enable, nur notwendig, wenn du eine ISR hast
    als referenzspannung der wandlung wird die spannung an Aref genommen, als eingang C0. deshalb muss man ADMUX hier nicht setzen.

    (1<<ADIE) kann evtl. weg, dann liegt dennoch das ergebnis der wandlung in ADCH (high byte) und ADCL (low byte).

    mit ADMUX=(1<<ADLAR); hast du das ergebnis left adjusted, also liegt in ADCH ein wert von 0-255 (bei Vmess=Vref). damit hast du ohne bitschubserei eine 8bit wandlung, wenn du ADCL einfach vernachlässigst.

    lies das datenblatt. der AD-wandler teil ist nicht schwierig.

    gruesse

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    16.05.2006
    Beiträge
    23
    Zitat Zitat von robocat
    als referenzspannung der wandlung wird die spannung an Aref genommen, als eingang C0. deshalb muss man ADMUX hier nicht setzen.
    Hi, möchte hier gern näher drauf eingehn:
    Habe -zugegeben- die fertige Funktion aus dem Forum kopiert, möchte allerdings 5V als Referenzspannung verwenden. Hab also den Code etwas verändert und bei ADMUX |= (1<<REFS1) | (1<<REFS0); das 1<<REFS1) rausgenommen. Schaut dann so aus:

    Code:
    uint16_t ReadChannel(uint8_t channel) 
    {
    		uint8_t i;
    		uint16_t result = 0;
    
    		ADCSRA = (1<<ADEN) | (1<<ADPS2) | (1<<ADPS1) | (1<<ADFR);	// enable converter | prescaler bit2 | prescaler bit1 | kontinuierliche wandlungen
    		ADMUX = channel;											// Kanal des Multiplexers waehlen
    		ADMUX |= (1<<REFS0);										// Referenzspannung 5 V
    		ADCSRA |= (1<<ADSC);										// Dummyreadout
    		while(ADCSRA & (1<<ADSC));
    		result = ADCW;										
    		result = 0; 												
    		for(i=0; i<3; i++) 											// 3x auslesen
    		{
    			ADCSRA |= (1<<ADSC);							
    			while(ADCSRA & (1<<ADSC));						
    			result += ADCW;
    		}
    		ADCSRA &= ~(1<<ADEN);										// ADC wieder deaktivieren
    		result /= 3;												// Durchschnittswert ausrechnen.									
    		return result;
    }
    Ist das denn so weit richtig??


    Zweite Frage:
    Im Funktionsaufruf habe ich als Parameter lediglich eine 0 übergeben. Reicht das aus um den AD Pin PC0 dafür auszuwählen?

    danke schon mal im Voraus,

    Franz

  4. #4
    Erfahrener Benutzer Roboter Genie Avatar von robocat
    Registriert seit
    18.07.2006
    Beiträge
    935
    sieht gut aus. REFS0 ist "AVCC with external capacitor at AREF pin". es wird also deine betriebsspannung, die an AVcc anliegt, als referenz hergenommen. beim atmega8 ist es zumindest so, im zweifelsfall räumt ein blick ins datenblatt alle klarheiten aus
    zweite frage: ja, das passt so.

    kurz gesagt seh ich grade nichts, warum es so nicht gehen sollte.

    gruesse und viel erfolg

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    16.05.2006
    Beiträge
    23
    Danke fürs Drüberschaun!

    Bin begeistert wie schnell man in diesem Forum kompetente Antworten bekommt!

    danke,

    franz

Berechtigungen

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