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