노출계란 물건은 센서로 빛의 양을 측정하여 카메라의 조리개값과 셔터 스피드를 측정 및 산출해주는 물건입니다.
소스나 회로를 구할 길이 없어 전부 스스로 설계하고 프로그램 했습니다.
센서로 들어오는 아날로그 신호를 ATmega8535 칩 안에서 디지털 신호로 컨버팅하여 값을 처리하였는데 이 A/D 컨버팅과정과 결과 값을 튜닝하는 과정이 가장 어려웠습니다.
원래 값을 좀 더 정확하게 잡으려면 '수치 해석법'을 이용하여야 하지만 이 과목을 공부하지 않은 관계로 근사값으로 방정식을 세웠습니다.
시행착오도 많았지만 보람된 작업이었습니다.
방식은 셔터 우선 방식과 조리개 우선식 어느쪽으로 할까 고민하다 조리개 우선식으로 제작했습니다.
소스 코드 일부(저작권을 위해 극히 일부만 적어둡니다.)
void main(void)
{
// I/O setting
DDRA = 0xfd; // PA1 : ADC
DDRB = 0xff; // 7Seg.
DDRC = 0xff; // LED
PORTA = 0x00; // 7Seg. place
PORTB = 0x00; // 7Seg. No.
// ADC setting
ADMUX = 0x21; // ADC1 8bit resolution, Use external AREF
ADCSRA = 0x87; // Allow ADC, prescaler 128
// timer setting
TCCR0 = 0x03; // prescaler : 64
TCNT0 = 0xff; // 1ms
TIMSK = 0x01; // Allow timer0 overflow interrupt
// external interrupt setting
MCUCR = 0x0a; // INT0 : falling edge
// INT1 : falling edge
GICR = 0xc0; // INT0,INT1 : interrupt enable
#asm("SEI");
while(1)
{
if(adc_stop == 0)
{
PORTC = 0xff;
delay_ms(32);
PORTC = 0x7f;
delay_ms(32);
}
else if(adc_stop == 1)
{
PORTC = 0x7f;
}
if(shutter_speed2 == 1)
{
PORTC = 0xff;
delay_ms(8);
PORTC = 0x7f;
delay_ms(8);
}
}
}
댓글 없음:
댓글 쓰기