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.