Analoges Messgerät mit LCD



Wie wäre es, einen analogen Messwert auf dem LCD auszugeben?



Unser Atmega8 besitzt 6 Analog-Digital-Wandler (ADC0 bis ADC5).
Zu diesen Wandlern gehören auch die Eingänge ADCC und AREF (Referenzspannung). Diese habe ich auf dem Board auf 5V gelegt.

Legt man nun eine zu messende Spannung von 0V bis 5V an z.B. ADC0, gibt dieser ADC0 uns dafür die Werte 0 bis1023 aus (max 1023, denn es stehen 10 bit Speicherplatz zur Verfügung).

Ich habe die Hilfsdatei messen.h geschrieben, um einfach an den am ADC0 liegenden Wert heranzukommen. Sie wird einfach in unser Programm mit eingebunden. An den Wert von ADC0 kommst Du dann heran mit dem Aufruf der Funktion MESSWERT(0).



Wir benutzen also unser LCD-Board und programmieren es mit folgendem Code (ganz unten auf der Seite gibt's den Code-Ordner):


#include <avr/io.h>
#include <stdio.h> //darin befindet sich sprintf()
#include <inttypes.h>

#define F_CPU 1000000 // CPU-Frequenz in Hz
#include <util/delay.h>

#include "messen.h"
#include "lcd-routines.h"
 
int main(void){
   
    int x;
    char messwertstring[20];
     
        DDRB |= _BV(PB0); PORTB=0;  // PB0 ist Status-LED Ausgang
   
    lcd_init();
    lcd_clear();
   
    set_cursor(1, 1); lcd_string("Wert von ADC0:");
   
    while(1){
       
        x=MESSWERT(0); //hier kommen die Werte 0..1023 an - siehe "messen.h"
       
        sprintf(messwertstring, "%d", x); // Wandelt x nach String - das LCD kann nur Strings!       
        set_cursor(1, 2); lcd_string("     ");
        set_cursor(1, 2);lcd_string(messwertstring);
       
        _delay_ms(255);
    }
 
    return(0);
}




Wenn Du ADC0 mit einem Draht an 5V verbindest, erhältst Du den Wert 1023.
Wenn Du ADC0 mit einem Draht an 0V (also GND) verbindest, erhältst Du den Wert 0.
Wenn Du ADC0 mit nichts verbindest, erhältst Du irgendeinen (wackelnden) Zwischenwert.


Die LCD-Routinen habe ich übrigens aus einem Tutorial von Christian Schifferle und Martin Thomas, das auf www.mikrocontroller.net veröffentlicht ist - einer empfehlenswerten Mikrocontroller-Web-Seite.

Hier der Code-Ordner.