-
        

Ergebnis 1 bis 3 von 3

Thema: Atmega16 / 16 Mhz / ADC Code beispiel

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    23.10.2007
    Ort
    Aalen
    Alter
    33
    Beiträge
    24

    Atmega16 / 16 Mhz / ADC Code beispiel

    Anzeige

    Hallo,

    Ich versuche mich gerade an der Programmierung mit dem Beispielcode für den Atmel ADC.

    Ich möchte von ADC6 (PA6) den Wert meines Temperatur Sensors (KTY81) einlesen.

    Mein Atmel läuft mit Externer ACC von +5V, mit 16 Mhz. Nun hab ich den Teilungsfaktor 32 Eingestellt, sowie auch die Referenzspannung auf ACC eingestellt, stimmt das in etwa?

    Code:
    uint16_t ReadChannel(uint8_t mux)
    {
      uint8_t i;
      uint16_t result;
     
      ADMUX = mux;                      // Kanal waehlen
      ADMUX |= (1<<REFS0); // interne Referenzspannung nutzen
     
      ADCSRA = (1<<ADEN) | (1<<ADPS2) | (1<<ADPS0);    // Frequenzvorteiler 
      								// Setzen auf 32!
                                   // 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;
    }
    Nun meine Frage, kann ich dann mit ReadChannel(6) meinen ADC6 auslesen?

    Danke für eure Antworten.

  2. #2
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.183
    Ja, sollte so funktionieren.
    Es ist aber nicht notwendig den ADC zu deaktivieren, damit ersparst du dir auch die weiteren Dummy Messungen.
    Bei single conversion läuft er ohnehin nur ein mal.
    Grüsse Hubert
    ____________

    Meine Projekte findet ihr auf schorsch.at

  3. #3
    Ja, warum so kompliziert? Versuchs mal mit dem Code, den du unter
    http://www.electronicsplanet.ch/mikr...16ADCindex.htm

    findest

Berechtigungen

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