-         

Ergebnis 1 bis 4 von 4

Thema: ADC am RN-Control: komische Werte

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    13.05.2008
    Beiträge
    38

    ADC am RN-Control: komische Werte

    Anzeige

    Hio!

    Da ich bisher keine Lösung für mein Problem mit dem LM75A Temperatursensor gefunden habe und ich langsam davon ausgehe, dass dieser kaputt ist, habe ich mir heute einen Analogen Temperatursensor gekauft.
    Den ADC vom atmega32 angeschlossen und per RS232 mir mal ein paar Werte angesehen. Leider machen diese auch keinen Sinn!

    Ich nutze Vcc = 5V vom RN-Board und habe 1kOhm Widerstand zwischen geschaltet. Der Sensor soll 450µA bis 5mA aushalten. Des Weiteren soll er bei 25°C 2.98V. (siehe alles: http://www.datasheetcatalog.org/data...onics/2158.pdf ).
    Nun wird mir auf der Konsole ausgegeben: 1111101110 = 1006 (dez)
    Bei 5V und 10Bits gilt ja: 5V/1023 = 4.88mV => 1006 ~ 4.9V !
    Der Wert ist natürlich deutlich zu viel...

    Nutzt das RN-Control eine andere Referenzspannung oder wie kommt dieser Wert zustande?
    Und an welcher Stelle sollte ich für optimale Ergebnisse den AD-Wandler zwischenschalten? Ich denke mal direkt vor dem Sensor oder?

    Hier der Code den ich nutze:
    Code:
    void ADC_Init(void) {
     
      uint16_t result;
     
    //  ADMUX = (0<<REFS1) | (1<<REFS0);      // AVcc als Referenz benutzen
      ADMUX = (1<<REFS1) | (1<<REFS0);      // interne Referenzspannung nutzen
      ADCSRA = (1<<ADPS1) | (1<<ADPS0);     // Frequenzvorteiler
      ADCSRA |= (1<<ADEN);                  // ADC aktivieren
     
      /* 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
      /* ADCW muss einmal gelesen werden, sonst wird Ergebnis der nächsten
         Wandlung nicht übernommen. */
      result = ADCW;
    }
    
    
    uint16_t ADC_Read( uint8_t channel )
    {
      // Kanal waehlen, ohne andere Bits zu beeinflußen
      ADMUX = (ADMUX & ~(0x1F)) | (channel & 0x1F);
      ADCSRA |= (1<<ADSC);            // eine Wandlung "single conversion"
      while (ADCSRA & (1<<ADSC) ) {}  // auf Abschluss der Konvertierung warten
      return ADCW;                    // ADC auslesen und zurückgeben
    }
    //...
    int main(void){
        uint16_t temp;
        char s[20];
        ADC_Init();
        init_USART();
    
        sendUSART("Hallo Welt!!");
        while(1) {
            temp = ADC_Read(0);
            itoa(temp,s,2);
            sendUSART(s);
            sendUSART("===\n");
    
            sleep_ms(2000);
        }
    }
    Gruß
    Pille

  2. #2
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.186
    Dazu solltest du dir die Schaltung des RN-Board ansehen.
    AREF, Internal Vref turned off einstellen.
    Grüsse Hubert
    ____________

    Meine Projekte findet ihr auf schorsch.at

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    13.05.2008
    Beiträge
    38
    Hio,

    hat ein wenig gedauert, bis ich wieder daran arbeiten konnte, aber trotz AREF auf turned off hat es nicht funktioniert.
    Ich habe mir gerade mal das Beispielrogramm zum RN-Control im Wiki angesehen und daraus folgenden BASCOM-Code entnommen:
    Code:
    $regfile = "m32def.dat"
    $crystal = 16000000                                     
    $baud = 9600
    Config Adc = Single , Prescaler = Auto
    
    Dim Volt As Single
    Dim W As Word
    Const Ref = 5 / 1023
    
    Do
       Start Adc
       W = Getadc(1)
       Volt = W * Ref
       Volt = Volt * 5.2941
       Print "Spannung: " ; Volt ; "V"
       Waitms 2000
    Loop
    Nur hier wird über die Konsole generellt 26.xxxx Volt angezeigt! Ein doch arg hoher Wert.Komischerweise wird dieser Wert auch angezeigt, wenn ich den AD-Converter an eine einfache Lastschaltung(also 5V an einem Widerstand) anschließe.

    Da scheint wohl eher ein systematisch Fehler zu sein, aber ich finde keinen >_<

    Gruß
    Pille

  4. #4
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.186
    Auf dem Board ist Aref auf 2,5V gelegt. Wenn die Spannung am ADC-Eingang höher als die 2,5V ist, wird immer der Maximalwert angezeigt.
    So gesehen sind die 26.xxxxV nach deiner Rechnung schon relaistisch.
    Wenn du 5V über einen Widerstand an den ADC-Eingang legst, sind dort trotzdem 5V. Du musst einen Spannungsteiler machen.
    Ob in deinem BASCOM-Programm ein Fehler ist, kann ich nicht sagen.
    Grüsse Hubert
    ____________

    Meine Projekte findet ihr auf schorsch.at

Ähnliche Themen

  1. komische L-Werte in Ultraschall Funktion für ASURO
    Von Darthmina123 im Forum Software, Algorithmen und KI
    Antworten: 2
    Letzter Beitrag: 22.10.2010, 08:45
  2. ADS830 liefert komische werte
    Von robodriver im Forum Elektronik
    Antworten: 2
    Letzter Beitrag: 05.09.2007, 19:20
  3. Bascom UART Interrupt liefert komische Werte
    Von Majus im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 1
    Letzter Beitrag: 14.06.2007, 08:26
  4. Rn-Minicintrol komische AD Werte
    Von Rohbotiker im Forum Schaltungen und Boards der Projektseite Mikrocontroller-Elektronik.de
    Antworten: 2
    Letzter Beitrag: 03.06.2007, 11:52
  5. C-Control - Analoge Ports liefern merkwürdige Werte
    Von Bernie19 im Forum Controller- und Roboterboards von Conrad.de
    Antworten: 3
    Letzter Beitrag: 08.09.2005, 12:56

Berechtigungen

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