BASIC4MCU | 질문게시판 | 아트메가128 질문있습니다
페이지 정보
작성자 아자아장 작성일2022-12-16 01:10 조회117회 댓글0건본문
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
if(Tim0_cnt == 0)
{
PORTB &= 0b00001111;
PORTC = seg[Num / 1000];
PORTB.4 = 1;
}
else if(Tim0_cnt == 5)
{
PORTB &= 0b00001111;
PORTC = seg[Num % 1000 / 100];
PORTB.5 = 1;
}
else if(Tim0_cnt == 10)
{
PORTB &= 0b00001111;
PORTC = seg[Num % 100 / 10];
PORTB.6 = 1;
}
else if(Tim0_cnt == 15)
{
PORTB &= 0b00001111;
PORTC = seg[Num % 10];
PORTB.7 = 1;
}
if(++Tim0_cnt >= 20)
Tim0_cnt = 0;
TCNT0=0x83;
PWM_Cnt++;
if(PWM_Cnt >=20)
{
PWM_Cnt=0;
PORTD.4=0; }
if (PWM_Cnt >= PWM_Val)
PORTD.4=1;
PWM_Cnt++;
if(PWM_Cnt >=20)
{
PWM_Cnt=0;
PORTD.6=0; }
if (PWM_Cnt >= PWM_Val)
PORTD.6=1;
}
#define ADC_VREF_TYPE 0x40
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 main(void)
{
PORTB=0b11111111;
DDRB=0b11111111;
PORTC=0b11111111;
DDRC=0b11111111;
PORTE=0b00110000;
DDRE=0b00000000;
PORTD=0b01010000;
DDRD=0b01010000;
ASSR=0x00;
TCCR0=0x05;
TCNT0=0x83;
OCR0=0x00;
TIMSK=0x01;
ETIMSK=0x00;
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0x84;
#asm("sei")
while (1)
{
ADC_Val = read_adc(0); // CH0 ADC
//ADC_Val = ADC_Val * 5 / 1023
Num = ADC_Val;
PORTD.4=read_adc(0);
//if(Mode == 1)
{
lig = read_adc(0);
if(lig > 540)
PWM_Val = 1;
else if(lig > 480)
PWM_Val = 5;
else if(lig > 430)
PWM_Val = 10;
else if(lig > 400)
PWM_Val = 20;
ADC_Val = read_adc(1); // CH0 ADC
//ADC_Val = ADC_Val * 5 / 1023
Num = ADC_Val;
PORTD.6=read_adc(1);
//if(Mode == 1)
{
lig = read_adc(1);
if(lig > 1000)
PWM_Val = 20;
else if(lig > 850)
PWM_Val = 15;
else if(lig > 700)
PWM_Val = 10;
else if(lig > 500)
PWM_Val = 0;
};
}
}
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
ADC 두개를 사용해서 센서 값에 따라 led 두개를 각각 밝기 조절을 나타낼려고 하는데
밝기 조절, fnd증감까지 나타냈는데 두개를 합치니 led의 밝기가 최대값에서 멈춰있고
fnd만 센서에 따라 증감하는 상태이데 위에 코드에서 각각 스위치를 어떻게 설정해줘야하는건가요/??
댓글 0
조회수 117등록된 댓글이 없습니다.