سلام و سال نو همه دوستان مبارک
یک برنامه ای با میکرو و ADC آن نوشتم که میخوام وقتی vB1 کمتر از 3.20 ولت شد رله روشن و اگر بیشتر از 3.20 بود یک ال ای دی سبز روشن شود الان برنامه جوواب میده اما مشکل اینجاست که وقتی VB1 به 3.20 و کمی بالاتر و یا پایین تر آن قرار دارد رله مرتب قطع و وصل میشه ، برای رفع این مشکل چکار کنم ؟
یک برنامه ای با میکرو و ADC آن نوشتم که میخوام وقتی vB1 کمتر از 3.20 ولت شد رله روشن و اگر بیشتر از 3.20 بود یک ال ای دی سبز روشن شود الان برنامه جوواب میده اما مشکل اینجاست که وقتی VB1 به 3.20 و کمی بالاتر و یا پایین تر آن قرار دارد رله مرتب قطع و وصل میشه ، برای رفع این مشکل چکار کنم ؟
#include <mega8.h>
#include <delay.h>
#define ADC_VREF_TYPE 0x00
float vB1=0;
unsigned int read_adc(unsigned char adc_input)
{
ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
delay_us(10);
ADCSRA|=0x40;
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCW;
}
void read_voltage()
{
vB1=read_adc(3);
vB1=(vB1*5)/1024;
}
void main(void)
{
PORTD.0=0; //Relay off
DDRB.1=1;
DDRD.0=1;
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0x81;
while (1)
{
read_voltage();
if(vB1<=3.20)
{
PORTD.0=1; //Relay on
}
if(vB1>3.22 && vB1<=3.70)
{
PORTB.1=1; //green led on
delay_ms(250);
PORTB.1=0; //green led off
delay_ms(250);
}
else
{
PORTB.1=0; // Green led
PORTD.0=0; //Relay off
}
}
}
دیدگاه