BASIC4MCU | 질문게시판 | ATMEGA 128 코드를 합치려고 하는데 어렵네요
페이지 정보
작성자 고양이33 작성일2022-08-02 12:00 조회6,365회 댓글2건본문
#define F_CPU 16000000L
#include <avr/io.h>
#include <util/delay.h>
void ADC_init()
{
ADMUX |= (1 << REFS0);// AVCC 핀 입력을 기준전압(5V)
ADMUX |= (1 << MUX0 | 1 << MUX1);// PF3을 ADC입력핀으로
//설정, 단일 입력 방식
ADCSRA |= (1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0);//
//분주비 128로 설정
ADCSRA |= (1 << ADEN);// ADC 활성화 (전원 ON)
ADCSRA |= (1 << ADFR);// 프리러닝 모드로 설정
ADCSRA |= (1 << ADSC);// ADC 변환 시작
}
int read_ADC(void)
{
while( ! ( ADCSRA & (1 << ADIF) ) );
return ADC;
}
int main(void)
{
DDRC = 0xFF; // 모든 포트 출력으로 설정.
PORTC = 0x00;
int read;
DDRA = 0xFF;
ADC_init();
while(1)
{
PORTC = 0xFF;
_delay_ms(10000);
PORTC = 0x00;
_delay_ms(10000);
read = read_ADC();
if(read <= 300) PORTA = 0x00;
else PORTA = 0xFF;
}
return 0;
}
조도센서 코드에 C포트에 딜레이 함수를 넣어서
빛 감지- LED 꺼짐
빛 없음-LED켜짐
위에랑 상관없이 계속
C포트 10초 ON
C포트 10초 OFF 이렇게 하고 싶은데
현실은
빛 없음-LED 켜짐
C 포트 10초 ON(이 구간에서 조도센서에 빛을 줘도 딜레이함수(C포트)가 끝나야 LED가 꺼짐)
C 포트 10초 OFF
빛 감지- LED 꺼짐
이렇게 코드를 짰는데 알고리즘이라고 할까요 뭔가 순서가 이상합니다.
딜레이 함수와 조도센서 값을 아예 각각으로 동시진행 할 수 는 없을까요?
댓글 2
조회수 6,365master님의 댓글
master 작성일
#define F_CPU 16000000L
#include <avr/io.h>
#include <util/delay.h>
//
int main(void){
int t=0,val;
DDRA=0xFF;
DDRC=0xFF;
ADMUX=0x43; ADCSRA=0xE7;
while(1){
_delay_ms(1);
if(++t>=10000){ t=0;
PORTC^=0xFF;
}
//
val=ADC;
if(val<=300)PORTA=0; else PORTA=0xFF;
}
return 0;
}
고양이33님의 댓글
고양이33
감사합니다 올려주신 코드로 해결했습ㄴ다!! 좋은 하루 보내세요