Sechs Spannungen auf einem Blick





Reizen wir doch mal alle 6 Analogeingänge (ADC0 bis ADC5) aus und lassen uns ihre Spannungswerte gleichzeitig anzeigen!


Hier der Code, den Du im Code-Ordner ganz unten auf dieser Seite findest:


#include <avr/io.h>
#include <stdio.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();
   
   
    while (1)    {
       
        set_cursor (0, 1);
       
        x=4.8876*MESSWERT(0);
        vorkomma=x/1000;
        nachkomma=x-(vorkomma*1000);
        nachkomma=nachkomma/10;
        sprintf(messwertstring, "%d", vorkomma);
        lcd_string (messwertstring);
        lcd_string (".");
        sprintf(messwertstring, "%d", nachkomma); if (nachkomma<10) lcd_string ("0");
        lcd_string (messwertstring);
        lcd_string ("  ");
               
        x=4.8876*MESSWERT(1);
        vorkomma=x/1000;
        nachkomma=x-(vorkomma*1000);
        nachkomma=nachkomma/10;
        sprintf(messwertstring, "%d", vorkomma);
        lcd_string (messwertstring);
        lcd_string (".");
        sprintf(messwertstring, "%d", nachkomma); if (nachkomma<10) lcd_string ("0");
        lcd_string (messwertstring);
        lcd_string ("  ");
       
        x=4.8876*MESSWERT(2);
        vorkomma=x/1000;
        nachkomma=x-(vorkomma*1000);
        nachkomma=nachkomma/10;
        sprintf(messwertstring, "%d", vorkomma);
        lcd_string (messwertstring);
        lcd_string (".");
        sprintf(messwertstring, "%d", nachkomma); if (nachkomma<10) lcd_string ("0");
        lcd_string (messwertstring);
        lcd_string ("  ");
               
        set_cursor (0, 2);
       
        x=4.8876*MESSWERT(3);
        vorkomma=x/1000;
        nachkomma=x-(vorkomma*1000);
        nachkomma=nachkomma/10;
        sprintf(messwertstring, "%d", vorkomma);
        lcd_string (messwertstring);
        lcd_string (".");
        sprintf(messwertstring, "%d", nachkomma); if (nachkomma<10) lcd_string ("0");
        lcd_string (messwertstring);
        lcd_string ("  ");
               
        x=4.8876*MESSWERT(4);
        vorkomma=x/1000;
        nachkomma=x-(vorkomma*1000);
        nachkomma=nachkomma/10;
        sprintf(messwertstring, "%d", vorkomma);
        lcd_string (messwertstring);
        lcd_string (".");
        sprintf(messwertstring, "%d", nachkomma); if (nachkomma<10) lcd_string ("0");
        lcd_string (messwertstring);
        lcd_string ("  ");
       
        x=4.8876*MESSWERT(5);
        vorkomma=x/1000;
        nachkomma=x-(vorkomma*1000);
        nachkomma=nachkomma/10;
        sprintf(messwertstring, "%d", vorkomma);
        lcd_string (messwertstring);
        lcd_string (".");
        sprintf(messwertstring, "%d", nachkomma); if (nachkomma<10) lcd_string ("0");
        lcd_string (messwertstring);
        lcd_string ("  ");
           
   
        _delay_ms(255);
    }   
 
    return(0);
}





Sicher kann man den Code effektiver (kürzer) schreiben, z. B. indem man Arrays benutzte. Doch so kann man ihn erstmal leichter durchschauen und auch bei Bedarf leichter verändern.


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.