- Labornetzteil AliExpress         
Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 18 von 18

Thema: Temperatursenor abfragen atmega16 avrstudio

  1. #11
    Neuer Benutzer Öfters hier
    Registriert seit
    09.05.2009
    Beiträge
    7
    Anzeige

    LiFePo4 Akku selber bauen - Video
    Mein großes Problem ist wie ich das Programm mäßig machen soll und wie ich den temperturfühler an meinen analogen eingang anschliessen soll

  2. #12
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.220
    Mein Problem ist das ich deine Voraussetzungen nicht kenne, also die vorhandene Schaltung, und dir daher auch nichts sagen kann.
    Grüsse Hubert
    ____________

    Meine Projekte findet ihr auf schorsch.at

  3. #13
    Erfahrener Benutzer Robotik Einstein Avatar von wkrug
    Registriert seit
    17.08.2006
    Ort
    Dietfurt
    Beiträge
    2.214
    Also...
    dein LM235 ist ein Temperatursensor der für die normale Funktion einen Strom von etwa 1mA erhalten soll.

    Er erhöht die Spannung um 10mV für jedes Grad Temperaturerhöhung.
    Am Sensor fällt bei 25°C eine Spannung von 2,982V ab.
    Wenn Du den Sensor an einer Spannung von +5V betreiben willst, solltest Du also einen Vorwiderstand von ca. 2,2kOhm einbauen.
    Das sollte dann bis zu Temperaturen von ca. 100°C reichen.
    Die Toleranzen und sonstigen Beschaltungsmöglichkeiten findest Du im Datenblatt.
    Durch den doch relativ kleinen Vorwiderstand wegen der geringen Spannung schwankt der Strom allerdings ziemlich stark. Was zu Messfehlern führt.
    Eine Konstantstromquelle wäre da besser.

    Dein ATMEL Controller:

    Dein A/D Wandler kann mit der 5V Betriebsspannung als Referenz arbeiten. Mit der internen Referenz, oftmals 2,56V. Oder er funktioniert mit einer extern zugeführten Referenzspannung.
    Die Taktrate für den A/D Wandler stell ich, bei 10Bit Auflösung, immer so auf 120kHz ein.
    Achte darauf die AVCC Spannung über eine 10µH Drossel und einen 100nF Kondensator von der Spannungsversorgung zu entkoppeln ( Steht auch so im ATMEL Datenblatt ).
    Ich würde empfehlen die interne Referenzspannung von 2,56V zu verwenden, allerdings muß dann die Ausgangsspannung des Temperatursensors über einen Spannungsteiler geführt und der AREF Pin des Controllers mit einem 100nF Kondensator beschaltet werden.
    1:1 bis 1:1,5 sollte dafür gut passen ( 10kOhm / 12kOhm ).
    Direkt an den A/D Wandler Eingang würde ich mir noch einen 10nF Kondensator gönnen.

    Den Nullabgleich und die Steilheitskalibrierung kannst Du in Software machen, da würd ich mir zusätzliche Hardware sparen.

    Softwaretechnisch wird der A/D Wandler initialisiert und dann eine A/D Wandlung angestoßen.
    Man wartet darauf, das die Wandlung beendet ist und liest die Werteregister des A/D Wandlers aus.

    Nun werden die A/D Werte mit den Korrektur- und Umrechnungsfaktoren verrechnet, damit da eine Temperatur dabei rauskommt.

    Was möchtest Du noch wissen ? - Fertigen Quellcode in Assembler hab ich nicht !
    Hubert.G hat schon recht.
    Du solltest deine Anfragen schon etwas gezielter stellen, sonst tut man sich schwer mit antworten.

  4. #14
    Super Anwort von wkrug!
    Dieser Hubert.G möchte einen Record aufstellen, hat doch schon
    über 3200 Beiträge. =D>

    Gruss

    Amin

  5. #15
    Neuer Benutzer Öfters hier
    Registriert seit
    09.05.2009
    Beiträge
    7
    Habe jetzt alles so gemacht und der Temperaturfühler gibt mir eine Spannung von ca. 2 V aber es stehen im ADCH und ADCL register immer lauter einser er messt gar nicht könnt ihr mir bitte nochmals helfen?

  6. #16
    Erfahrener Benutzer Robotik Einstein Avatar von wkrug
    Registriert seit
    17.08.2006
    Ort
    Dietfurt
    Beiträge
    2.214
    Hast Du auch gewartet, bis die Wandlung fertig war?
    Bit 4 im ADCSRA Register muß 1 sein.

    Lauter 1er sind an und für sich schon ein Fehler, da der Controller ja nur 10Bit Auflösung hat.
    Also dürften im H-Register eigentlich nur die letzten Beiden Bits gesetzt sein.

    Welche Spannung misst Du am AREF Pin ? und welche am AVCC ?

    In CodeVision sieht so eine Routine so aus:

    Code:
    // Read the AD conversion result
    unsigned int read_adc(unsigned char adc_input)
    {
    ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
    // Delay needed for the stabilization of the ADC input voltage
    delay_us(10);
    // Start the AD conversion
    ADCSRA|=0x40;
    // Wait for the AD conversion to complete
    while ((ADCSRA & 0x10)==0);
    ADCSRA|=0x10;
    return ADCW;
    }
    
    ......
    
    /* Temperaturen berechnen */
        li_temp1=read_adc(2);
        if(li_temp1==1023)                                  /* Offenen Eingänge abfangen */
            {
            li_temp1=0;
            }
        else
            {
            #asm ("CLI");
            li_temp1=((li_temp1-si_tempzero[0])*290)/si_tempfakt[0];
            #asm ("SEI");
            };
        
        li_temp2=read_adc(3);
        if(li_temp2==1023)                                   /* Offenen Eingänge abfangen */
            {
            li_temp2=0;
            }
        else
            {
            #asm ("CLI");
            li_temp2=((li_temp2-si_tempzero[1])*290)/si_tempfakt[1];
            #asm ("SEI");
            }
    ...........
    
    // ADC initialization
    // ADC Clock frequency: 1000,000 kHz
    // ADC Voltage Reference: internal 2,56V
    ADMUX=ADC_VREF_TYPE & 0xff;
    ADCSRA=0x83;

  7. #17
    Neuer Benutzer Öfters hier
    Registriert seit
    09.05.2009
    Beiträge
    7
    Erst mal Danke für die Antworten

    Habe es jetzt hin bekommen wenn ich den Temperaturfühler in ca. 10Grad warmes Wasser gebe zeigt er mir 990 an wenn ich ihn in 90 Grad warmes Wasser gebe 995 was kann ich da machen damit er mir bei 10 Grad 100 anzeigt und bei 90 z.b 1000 habe einen 1k Widerstand an den Tempfühler angelötet.
    Arbeite mit eine 2,56 V internen Referenzspannung
    Bitte um rasche Hilfe

  8. #18
    Erfahrener Benutzer Robotik Einstein Avatar von wkrug
    Registriert seit
    17.08.2006
    Ort
    Dietfurt
    Beiträge
    2.214
    ca. 10Grad warmes Wasser gebe zeigt er mir 990 an wenn ich ihn in 90 Grad warmes Wasser gebe 995
    Zuerst mal... stimmen die Werte ?
    Bei einem Spannungsteiler 1:1 würden deine Werte einer Temperaturerhöhung von 2,5°C entsprechen.
    990=2,475V.
    995=2,4875V.
    Unterschied 0,0125V * 2 = 0,025V bei 10mV/°K entspräche das 2,5°K.

    Ansonsten ist dein Wandlerergebnis in ein Formel zu packen.

    Temperatur = ((A/D Wandlerwert - Wandlerwert bei 0°C) * Korrekturfaktor)/100

    Durch die anschließende Teilung durch 100 kannst Du mit int Variablen, also Ganzzahlen rechnen.

    Rein Rechnerisch sollte bei 0°C ein Wandlerwert von 547 ausgegeben werden.
    Bei 100°C wären es 747.
    Setzt man das in der Formel um, würde sie lauten:

    Temperatur = ((A/D Wandlerwert - 547)*500)/100

    Das Ergebnis wären dann 1/10 °C.
    Allerdings ist die Auflösung dabei nur 0,5°C.
    Das ist aber durch die Auflösung (10 Bit ) des A/D Wandlers bedingt.
    ( Setz in die Formel mal eine beliebigen A/D Wandlerwert ein und berechne dann noch mal für den vorherigen Wandlerwert + 1 )

    Wär trotzdem mal schön, wenn Du einen Schaltplan und Voltmeter! Messwerte posten könntest, sonst ist das hier ein übles Fischen im trüben.

Seite 2 von 2 ErsteErste 12

Berechtigungen

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

LiFePO4 Speicher Test