BASIC4MCU | 8051/PIC | DT-516 강좌 | DT516-160.c CDS 조도센서 읽기
페이지 정보
작성자 키트 작성일2017-08-24 11:01 조회2,258회 댓글0건첨부파일
본문
이 소스를 가지고 체크를 하겠습니다.
저항은 1%를 사용 하였고(위 사진과는 다르지만)
CDS는 GL5516으로 10 LUX에서 5~10K옴 입니다. ( 비교적 저항 값이 낮은 센서입니다. )
밝을 때의 ADC 값입니다.
밝을 때에는 CDS 저항값이 줄어들어서 ADC 변환 값이 작습니다.
절연 테이프를 붙이고 측정 했습니다.
519 이므로 2.5V 정도...즉 CDS 저항 값이 10K 정도입니다.
완전히 암흑을 못 만들어서 발생 하는 문제입니다.
절연테이프가 약간 빛이 새기도 하고
더큰 문제는 CDS 아래서도 기판을 투과 하는 빛의 영향을 많이 받습니다.
아랫쪽 주변까지 대충 막고나서야 비로서 많이 어두워졌고 912까지 값이 올라갔습니다.
(밤에는 더욱 어둡겠지만..)
저항과 CDS 연결 모양입니다.
납땜도 점점 귀찮아지는..ㅡ.ㅡ;;;
값이 어느정도 잘 나오는 것 같아서 특별히 소스코드는 손댈 것이 없습니다.
밝기에 따라서 적당히 값을 처리 해주거나 ADC 값을 직접 체크 하면 되지만
위 상태에서 백분율로 만든다면
최고 밝기~최저밝기는 123~912 이므로
//-------------------------------------------------------------
// 82G516 E/V BOARD ( DT-516 )
//-------------------------------------------------------------
// XTAL : 22.1184Hz
//-------------------------------------------------------------
// filename: DT516-160.c
// CDS 조도센서 읽기//-------------------------------------------------------------
#include
//
#include "DT516-main.h"
//
U_C pwm[16]={100};
U_I count=0;
//
U_C adc_cnt=0;
U_I adc_sum=0;
//
void ADC_Interrupt(void) interrupt 9{ // ADC_Interrupt:
adc_sum+=((ADCH<<8) + ADCL);
if(++adc_cnt>=64){adc_cnt=0; count=adc_sum/64; adc_sum=0;
if(count<123)count=123;
if(count>912)count=912;
count-=123; // 결과는 0~789가 됩니다.
count=(int)((float)count/7.89); // 결과는 0~100이 됩니다.
}
ADCTL=0xE8;
}
//
void Timer_0_Interrupt(void) interrupt 1{ // 7200Hz주기
P4=0xFF; // FND OFF
switch(FND_CNT){
case 0: P0=Seg_Data[count/1000]; FND_COM1=0; break;
case 1: P0=Seg_Data[(count/100)%10]; FND_COM2=0; break;
case 2: P0=Seg_Data[(count/ 10)%10]; FND_COM3=0; break;
case 3: P0=Seg_Data[count%10]; FND_COM4=0; break;
}
if(++FND_CNT>3)FND_CNT=0;
//
if(delay_buf){ if(--delay_buf==0)delay_flg=1; }
}
//
//
void main(){
AUXR=(AUXR|0x40); P1=0xFF; P1M0=0xFF; P1M1=0; //P1.ch Hi-impedance input//ADCH=상위(BIT9,8) ADCL=하위
ADCTL=0xE8; AUXIE=2; // ADC0 인터럽트 이네이블
TMOD=2; ET0=1; TR0=1;
EA=1;
while(1){}
}
//-------------------------------------------------------------
count=(int)((float)count/7.89); // 결과는 0~100이 됩니다.
연산 결과가 밝을때 0이고 어두울때 100입니다.
밝기에 비례 하도록 바꾸려면
coun=100-coun; // 밝을때 100, 어두울때 0이 됩니다. 부분에 넣어주세요
댓글 0
조회수 2,258등록된 댓글이 없습니다.