/* Sp_Spg1.c */
/* 10.03.2015*/
#include <avr/io.h>
#include <util/delay.h>
unsigned long AD_wert;
int AD_dat,Ziffer,U,U_anzg,Urest;
#define setbit(P,BIT) ((P) |= (1<<(BIT)))
#define clearbit(P,BIT) ((P) &=~(1<<(BIT)))
void Blink_rt_k()
{
setbit(PORTB,PB3);
OCR0B=80;
_delay_ms(150);
clearbit(PORTB,PB3);
OCR0B=0;
_delay_ms(150);
}
void Blink_rt_L()
{
setbit(PORTB,PB3);
OCR0B=80;
_delay_ms(450);
clearbit(PORTB,PB3);
OCR0B=0;
_delay_ms(150);
}
void Tonausgabe()
{
switch(Ziffer)
{
case 0:
Blink_rt_L();// Bezeichnungen in Anlehnung
Blink_rt_L();// an Sparrow-Voltmeter
Blink_rt_L();// mit "LED-Morsezeichen"
Blink_rt_L();
Blink_rt_L();
_delay_ms(300);
break;
case 1:
Blink_rt_k();
Blink_rt_L();
Blink_rt_L();
Blink_rt_L();
Blink_rt_L();
_delay_ms(300);
break;
case 2:
Blink_rt_k();
Blink_rt_k();
Blink_rt_L();
Blink_rt_L();
Blink_rt_L();
_delay_ms(300);
break;
case 3:
Blink_rt_k();
Blink_rt_k();
Blink_rt_k();
Blink_rt_L();
Blink_rt_L();
_delay_ms(300);
break;
case 4:
Blink_rt_k();
Blink_rt_k();
Blink_rt_k();
Blink_rt_k();
Blink_rt_L();
_delay_ms(300);
break;
case 5:
Blink_rt_k();
Blink_rt_k();
Blink_rt_k();
Blink_rt_k();
Blink_rt_k();
_delay_ms(300);
break;
case 6:
Blink_rt_L();
Blink_rt_k();
Blink_rt_k();
Blink_rt_k();
Blink_rt_k();
_delay_ms(300);
break;
case 7:
Blink_rt_L();
Blink_rt_L();
Blink_rt_k();
Blink_rt_k();
Blink_rt_k();
_delay_ms(300);
break;
case 8:
Blink_rt_L();
Blink_rt_L();
Blink_rt_L();
Blink_rt_k();
Blink_rt_k();
_delay_ms(300);
break;
case 9:
Blink_rt_L();
Blink_rt_L();
Blink_rt_L();
Blink_rt_L();
Blink_rt_k();
_delay_ms(300);
break;
default:
break;
}
}
void AD_start()
{
ADCSRA |= (1<<ADSC); // ADC starten
while(ADCSRA & (1<<ADSC));
ADCSRA |=(1<<ADSC);
while(ADCSRA & (1<<ADSC));
}
void Anzeige_bt()
{
AD_dat=ADCH;
Ziffer=AD_dat/100;
Tonausgabe();
U=AD_dat%100;
U_anzg=U/10;
Urest=U%10;
Ziffer=U_anzg;
Tonausgabe();
Ziffer=Urest;
Tonausgabe();
//_delay_ms(300);
//Blink_rt_L(); // Zeichen "D"
//Blink_rt_k(); // fuer "dezimale"
//Blink_rt_k(); // Anzeige eines Bytes
}
int main(void)
{
DDRB=0b00001010; // PORTB.1 und PORTB.3 sind Ausgaenge
ADCSRA =(1<<ADEN)|(1<<ADPS1)|(1<<ADPS0);// Division Fact. 8
ADMUX=(1<<REFS0)|(1<<ADLAR)|(1<<MUX1); //int . Referenz, 8-Bit-Messung
// ADC2 (PB4)
TCCR0A=0b00100011; // PWM b
TCCR0B=0b00000010; // Vorteiler /8
OCR0B=0;
while(1)
{
if(!(PINB &(1<<PB0)))//if 1
{
AD_start();
Anzeige_bt();
} //end if 1
if(!(PINB &(1<<PB2)))//if 2
{
AD_start();
_delay_ms(1000);
AD_wert=ADCH;
AD_wert=AD_wert*43; // wegen 1.1/255=0.0043
AD_wert=AD_wert*11; // Umrechnungsfaktor,
// mithilfe von
// D.-Multimeter ermittelt
if (AD_wert>100000)// if 3
{
Ziffer=AD_wert/100000;
Tonausgabe();
AD_wert=AD_wert-100000;
} // end if 3
Ziffer=AD_wert/10000;
Tonausgabe();
Blink_rt_k();//"Dezimalpunkt"
Blink_rt_L();//
Blink_rt_k();
Blink_rt_L();
Blink_rt_k();
Blink_rt_L();
_delay_ms(300);
AD_wert=AD_wert%10000;
Ziffer=AD_wert/1000;
AD_wert=AD_wert%1000;
Tonausgabe();
Ziffer=AD_wert/100;
Tonausgabe();
Blink_rt_k(); //Zeichen "V"
Blink_rt_k();
Blink_rt_k();
Blink_rt_L();
_delay_ms(300);
Blink_rt_L(); //Zeichen "O"
Blink_rt_L();
Blink_rt_L();
_delay_ms(300);
Blink_rt_k(); //Zeichen "L"
Blink_rt_L();
Blink_rt_k();
Blink_rt_k();
_delay_ms(300);
Blink_rt_L(); //Zeichen "T"
_delay_ms(300);
} // end if 2
} // end while(1)
} // end main