mikrocontroller.net

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


Autor: bobby (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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;
}}

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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)...

Autor: bobby (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.