월 화 수 ...
3일 걸렸다...
12월 28일 29일 30일 힘들었다!!
저항과 CDS 를 거꾸로 달 필요는 없아 왜냐하면 이것은 회로 자체가 아니기때문에
코딩으로써 바꿔주면 된다!!
완료 소스는 2가지다
개별인터럽트 사용한 소스와 인터럽트를 사용안한 소스 ,
주의할점은 인터럽트를 사용하지 않으면 저장된 값을 초기화 시켜줘야 꼬이지 않는 다는 것이다.
인터럽트 사용안한 코딩이다.
#include <mega128.h>
#include <delay.h>
void main(void){
int ADC_I;
DDRB=0xFF; PORTB=0xff;
DDRF = 0xFE;
ADMUX=0x00;
while(1){
ADCSRA=0xC7;
while((ADCSRA&0x10)==0);
ADC_I=ADCW;
if(ADC_I>500){PORTB=0x00; // LED에 ON
ADCW=0x00; }
else PORTB=0xff; // LED에 OFF
}
}
그리고 다음은 인터럽트 사용한 코딩이다..
#include <mega128.h>
#include <delay.h>
float ADC_F;
int ADC_I;
interrupt [ADC_INT] void adc_isr(void){
ADC_I=ADCW;
ADC_F=(float)ADC_I*5.0/1024.0;
if(ADC_F>2.2)PORTB=0x00;
else PORTB=0xFF;
}
void main(void){
DDRB=0xFF;
DDRF=0xFE;
ADMUX=0x00; ADCSRA=0xA7;
ADCSRA|=0x08 ; ADCSRA|=0x40 ;
#asm("sei")
while(1){}
}
그리고 인터럽트를 사용안하고 딜레이를 줘서 ADCW 값을 받는 코딩은
#include <mega128.h>
#include <delay.h>
float ADC_F;
int ADC_I;
void main(void){
DDRB=0xFF;
ADMUX=0x00; ADCSRA=0xE7;
// #asm("sei")
while(1){
delay_ms(10);
ADC_I=ADCW;
ADC_F=(float)ADC_I*5.0/1023.0;
if(ADC_F>2.2)PORTB=0x00;
else PORTB=0xFF;
}
}
이것이다.
저 중간값을 구하는 식은 다음과 같다.
avr 은 10비트 ADC 이고 0~ 1023 까지의 값이 나온다..
그럼 그 중간값을 써주는것이다..
그 중간값이 2.5 볼트 정도 될것이다 5볼트라면
계산 식은
5v * 600/1023 = 2.9v 나오는 식과 같다 중간값이 아닌 600 으로 줬을때 2.9 볼트 사이로 왔다갔다 한다는 것이다...
CDS 조도센서 끝!!!!!! 키키키
이것을 알려준곳은 어느 한 까페이다...
거기도 홍보좀 해보자
http://cafe.naver.com/circuitsmanual
이곳이다 많이 들어가세요!!
'Study > 유비쿼터스' 카테고리의 다른 글
| LHi878센서 (1) | 2010/01/02 |
|---|---|
| LHI-878 재시도 (0) | 2009/12/30 |
| 조도센서 CDS 완료!! (0) | 2009/12/30 |
| 조도센서 (CDS) 사용하는 방법 (0) | 2009/12/30 |
| 오늘 조도센서 atmega128 ADC 이용 실험 (0) | 2009/12/29 |
| ADC 를 사용하는데 어려움이 많다. (0) | 2009/12/29 |


