|
Spannungswert von ADC0 auf LCD ausgeben

Wir wissen schon, daß die Analog-Digital-Wandler unseres Atmega die
Werte 0..1023 ausgeben können.
Wollen wir eine Spannung messen und auf dem LCD darstellen, z.B. 0..5V,
müssen wir erstens die Referenzspannungen der ADC (AREF) auf 5V setzen
(das ist schon so auf unserem LCD-Board). Als nächstes müssen die Werte
0..1023 auf 0..5V heruntergerechnet werden. Damit wir auch Zehntel und
Hundertstel Volt
sehen, müssen wir trickreich vorgehen.
Schau Dir mal diese Rechnerei mit den Integer-Zahlen an!
Hier der Code, den Du im Code-Ordner ganz unten auf dieser Seite
findest:
#include <avr/io.h>
#include <stdio.h>
#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=0, vorkomma, nachkomma;
char messwertstring[20];
DDRB |= _BV(PB0); PORTB
&= ~_BV(PB0); // PB0 ist Status-LED Ausgang
lcd_init();
lcd_clear();
set_cursor (12, 1); lcd_string ("Volt");
while (1) {
x=4.8876*MESSWERT(0);
vorkomma=x/1000;
nachkomma=x-(vorkomma*1000);
nachkomma=nachkomma/10;
set_cursor (12, 2); lcd_string ("
. ");
sprintf(messwertstring, "%d",
vorkomma);
set_cursor (12, 2);
lcd_string (messwertstring);
sprintf(messwertstring, "%d",
nachkomma);
set_cursor (14, 2); if
(nachkomma<10) lcd_string ("0");
lcd_string (messwertstring);
_delay_ms(255);
}
return(0);
}
Du könntest mit z.B. einem
10K-Poti an 5V und GND mit Schleifer auf ADC0 die Spannungen
"durchleiern".
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.
|