#include "lcd_4.h"
#include "printf.h"
#include <AVR/io.h>
#include <AVR/interrupt.h>
#include <util/delay.h>
#include <AVR/../string.h>
#include <AVR/../stdlib.h>
float ads=0;
unsigned adi=0;
unsigned adso=0;
int adson=0;
unsigned adio=0;
int adion=0;
int i =0;
int x =0;
int z =0;
int y =0;
int m =10.0;
int so=0;
int xs=34.1;
int main(void)
{
lcd_init();
_delay_ms(100);
lcd_pos(0,0);
printf(" Abschlussarbeit ");
lcd_pos(1,0);
printf(" GLNG 2012 ");
_delay_ms (2000);
lcd_pos(0,0);
printf(" ");
lcd_pos(1,0);
printf(" ");
while (1)
{ //Spannung
ADMUX = 0b00000000; //ADC5 (für den anfang da dort das Poti auf der Megacard ist - dann ADC0)
ADCSRA= (1<<ADEN)|(1<<ADPS1)|(1<<ADPS0); //ADEN - ADC einschalten; ADPS0-2 Prescaler 128 => 93kHz
SFIOR = (0<<ADTS2)|(0<<ADTS1)|(0<<ADTS0); //für FREE RUNNING MODE alles 0
ADCSRA|= (1<<ADSC);
i=0;
ads = 0;
while (i<m)
{
while (ADCSRA & (1<<ADSC))
{
}
ads = ads + ADCW;
i++;
}
ads = ads / m;
adso = ads / xs;
adson=ads/xs*100; //umrechnung für Nachkommastellen
if (adson >= 4000)
{ adson = adson - 1000;
}
if (adson >= 3000)
{ adson = adson - 1000;
}
if (adson >= 2000)
{ adson = adson - 1000;
}
if (adson >= 1000)
{ adson = adson - 1000;
}
if (adson >= 900)
{ adson = adson - 100;
}
if (adson >= 800)
{ adson = adson - 100;
}
if (adson >= 800)
{ adson = adson - 100;
}
if (adson >= 700)
{ adson = adson - 100;
}
if (adson >= 600)
{ adson = adson - 100;
}
if (adson >= 500)
{ adson = adson - 100;
}
if (adson >= 400)
{ adson = adson - 100;
}
if (adson >= 300)
{ adson = adson - 100;
}
if (adson >= 200)
{ adson = adson - 100;
}
if (adson >= 100)
{ adson = adson - 100;
}
if (adson <100)
{ z=7;
}if (adson <10)
{ z=8;
lcd_pos(0,7);
printf("0");
}
if (adso <10)
{
so = 5;
lcd_pos(0,4);
printf(" ");
}else
{
so = 4;
}
lcd_pos(0,0); // Spannung schreiben
printf("U =");
lcd_pos(0,so);
printf("%d.",adso);
lcd_pos(0,z);
printf("%d V",adson);
//___________________________________________________________________________________________________________
//Strom
ADMUX = 0b00000001; //ADC5 (für den anfang da dort das Poti auf der Megacard ist - dann ADC1)
ADCSRA= (1<<ADEN)|(1<<ADPS1)|(1<<ADPS0); //ADEN - ADC einschalten; ADPS0-2 Prescaler 128 => 93kHz
SFIOR = (0<<ADTS2)|(0<<ADTS1)|(0<<ADTS0); //für FREE RUNNING MODE alles 0
ADCSRA|= (1<<ADSC);
i=0;
adi=0;
while (i<m)
{
while (ADCSRA & (1<<ADSC)) //warten bis AD Wandlung fertig
{
}
adi = adi + ADCW;
i++;
}
adi = adi/m; //Wert auf Variable schreiben
adio = adi/368.5;
adion = adi/368.5*100;
// lcd_pos(0,15);
// printf("%d",adi)
if (adion >= 300)
{ adion = adion - 100;
}
if (adion >= 200)
{ adion = adion - 100;
}
if (adion >= 100)
{ adion = adion - 100;
}
// lcd_pos(1,15);
// printf("%d",adion);
if (adion <100)
{ y=7;
}if (adion <10)
{ y=8;
lcd_pos(1,7);
printf("0");
}
lcd_pos(1,0); // Spannung schreiben
printf("I = %d.",adio);
lcd_pos(1,y);
printf("%d A",adion);
if (adi > 700)
{
lcd_pos(1,15);
printf("I MAX");
}
if (adi < 650)
{
lcd_pos(1,15);
printf(" ");
}
if (ads > 1000)
{
lcd_pos(0,15);
printf("U MAX");
}
if (ads < 950)
{
lcd_pos(0,15);
printf(" ");
}
_delay_ms(800);
}
}