Šoreiz, izmantojot mikrokontrolleri (ATmega8), tika izveidota sprieguma līmeņa indikatora elektriskā principiālā shēma. Izmantojot sprieguma dalītāju (R1 un R2) un ACP kanālu, var izmērīt sprieguma vērtību diapazonā no 1 V līdz 10 V (shēma paredzēta 9 V bateriju pārbaudei).
1.1.att. 9 V baterijas sprieguma līmeņa indikatora prototips
1.2.att. 9 V baterijas sprieguma līmeņa indikatora elektriskā principiālā shēma
#define F_CPU 16000000UL
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
void LED1();
void LED2();
void LED3();
void LED4();
void LED5();
void LED6();
void LED7();
void LED8();
void LED9();
void LED10();
void ADC_inicializacija();
unsigned int nolasa_ADC(unsigned int kanals);
int main(void){
unsigned int spriegums=0,ACP_vertiba=0;
DDRB=0x03;
DDRC=0x00;
DDRD=0xFF;
while(1){
ACP_vertiba = nolasa_ADC(5);
spriegums = ACP_vertiba*0.0025*11;
switch (spriegums){
case (1):
LED1();
break;
case (2):
LED1();
LED2();
break;
case (3):
LED1();
LED2();
LED3();
break;
case (4):
LED1();
LED2();
LED3();
LED4();
break;
case (5):
LED1();
LED2();
LED3();
LED4();
LED5();
break;
case (6):
LED1();
LED2();
LED3();
LED4();
LED5();
LED6();
break;
case (7):
LED1();
LED2();
LED3();
LED4();
LED5();
LED6();
LED7();
break;
case (8):
LED1();
LED2();
LED3();
LED4();
LED5();
LED6();
LED7();
LED8();
break;
case (9):
LED1();
LED2();
LED3();
LED4();
LED5();
LED6();
LED7();
LED8();
LED9();
break;
case (10):
LED1();
LED2();
LED3();
LED4();
LED5();
LED6();
LED7();
LED8();
LED9();
LED10();
break;
default:
break;
}
}
return 0;
}
void LED1()
{
PORTD |= (1<<PD0);
_delay_ms(500);
PORTD &= (~(1<<PD0));
}
void LED2()
{
PORTD |= (1<<PD1);
_delay_ms(500);
PORTD &= (~(1<<PD1));
}
void LED3()
{
PORTD |= (1<<PD2);
_delay_ms(500);
PORTD &= (~(1<<PD2));
}
void LED4()
{
PORTD |= (1<<PD3);
_delay_ms(500);
PORTD &= (~(1<<PD3));
}
void LED5()
{
PORTD |= (1<<PD4);
_delay_ms(500);
PORTD &= (~(1<<PD4));
}
void LED6()
{
PORTD |= (1<<PD5);
_delay_ms(500);
PORTD &= (~(1<<PD5));
}
void LED7()
{
PORTD |= (1<<PD6);
_delay_ms(500);
PORTD &= (~(1<<PD6));
}
void LED8()
{
PORTD |= (1<<PD7);
_delay_ms(500);
PORTD &= (~(1<<PD7));
}
void LED9()
{
PORTB |= (1<<PB0);
_delay_ms(500);
PORTB &= (~(1<<PB0));
}
void LED10()
{
PORTB |= (1<<PB1);
_delay_ms(500);
PORTB &= (~(1<<PB1));
}
void ADC_inicializacija()
{
ADMUX |= (1<<REFS1)|(1<<REFS0);
ADMUX &= ~(1<<ADLAR);
ADCSRA = (1<<ADEN)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0);
}
unsigned int nolasa_ADC(unsigned int kanals)
{
unsigned int rezultats;
ADC_inicializacija();
ADMUX |= kanals;
ADCSRA |= (1<<ADSC);
while(!(ADCSRA&(1<<ADSC)));
rezultats = ADC;
ADCSRA |= (1<<ADIF);
return rezultats;
}