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.
|