Forum: Mikrocontroller und Digitale Elektronik Temperatumessung und Anzeige auf LCD mit AT Mega32


von bobby (Gast)


Lesenswert?

Hallo zusammen,

bin dabei einen "Temperaturmesser" mit dem AT Mega 32 und dem Pollin 
Board zu realisieren um einfach mal die Grundfunktionen wie AD-Wandler 
LCD Display usw. etwas besser kennen zu lernen.

Später will ich auch noch ein PWM Signal abhänig von der Temperatur 
steuern und mir so ne Art lüftersteuerung bauen und somit alle Wichtigen 
Funktionen des AT Mega 32 mal auszutesten.

Da ich selber eher noch wenig erfahrung mit yc habe und mich bislang aus 
blinkende LED´s und den bau eingener PWM Signale (mit hilfe der delay 
Funktion) beschränkt habe werde ich bei dem nächsten Schritt wohl etwas 
Hilfe gebrauchen.

Habe den AD Wandler bislang mit Hilfe des gcc Tutorials und der 
anpassung des Codes auf den AT Mega 32 in gang gebracht. Da ich aber 
nicht eis ob dieser auch geht, da ich ja nicht sehen kann was der yc in 
der variablen für die Temperatur ablegt brächte ich mal tipps wie ich am 
besten weitermachen soll.

Hab mir schon überlegt den Wert über die RS 232 Schnittstelle auszugeben 
aber das wär wieder ne größere Baustelle und hat auch mit dem Tutorial 
nicht funktioniert..

Wie wird der Wert vom AD Wandler in die Variable gespeichert wenn ich 
jetzt z.B 1V als ergebnis bekomme?
Habe versucht ne LED An oder auszuschalten wenn der Wert der Variablen 
<1 V ist, also keine Spg anliegt, was aber nicht funzt..

Mein Code:

HIER OBEN IST DER CODE DES AD WANDLERS AUS DEM TUTORIAL ANGEPASST AN 
ATMEGA 32

#include <avr/io.h>
#include <stdio.h>
#include <stdint.h>
#define F_CPU 1000000UL
#include <util/delay.h>                         /* bei alter avr-libc: 
#include <avr/delay.h> */



 int ReadChannel(int mux)
{
  int i;
  int result;

  ADMUX = mux;     // Kanal waehlen
  ADMUX |= (1<<REFS1) | (1<<REFS0); // interne Referenzspannung nutzen

  ADCSRA = (1<<ADEN) | (1<<ADPS1) | (1<<ADPS0);  // Frequenzvorteiler
            // 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;


 }


int main (void) {
int adcval;

  while(1){
  DDRD= (1<<DDD5) | (1<<DDD6)| (1<<DDD7); // Pin D 5 und 6 und 7   nd 
Ausgänge, rest Eingänge

    if( PIND & (1<<PIND2)) {

    adcval = ReadChannel(0);

          PORTD |= (1<<PD6); //Versuch ne LED an zu bekommen, geht aber 
net,diese stelle wird irgendwie net erreicht

  _delay_ms(200);}

    if(adcval < 1 ) {

    PORTD |= (1<<PD5);
    }

          else{
                PORTD =0x00;
                }


return 0;
}}

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Welchen Temperatursensor benutzt du, wenn du dafür AD-Wandlung brauchst?

Ich habe bisher eher Projekte (Bsp. unten) gesehen, bei den ein 
Temperatursensor-IC bereits ein Digitalsignal ausgibt und wo das IC über 
einen Bus z.B. über I2C (TWO) oder 1-Wire an den µC 
angeschlossen wird.

*Thermometer with Atmel AVR and Dallas DS1821*
von Stefan Heesch
http://www.heesch.net/(S(miinrc55dpyljt45xkhyuh45))/ds1821.aspx

von bobby (Gast)


Lesenswert?

wie gesagt geht es mir nicht primär um das Projekt "Temperaturmessung" 
sondern darum mit dem At Mega 32 umgehen zu können, dazu au der AD 
wandler.

Werd irgend einen NTC oder PTC verwenden, die genauigkeit is eigentlich 
erstmal nebensache, es soll sich halt bei ändernder temp(Spg) irgendwas 
tun, sprich Display anzeige oder PWM änderung oder so ähnlich..

Bin leider no net wirklich weitergekommen mit meinem Problemchen...

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.