안녕하세요. 실제로 ADC를 이용해여 조도센서의 값을 측정해보겠습니다.
위의 사이트에 레지스터 설명이 있습니다.
조도센서로부터 값을 읽어서 컴퓨터 시리얼모니터로 볼 것입니다.
조도센서는 저항으로써 밝기에 따라 값이 변합니다. 밝으면 저항이 작아지고 어두우면 저항이 올라갑니다.
그림과 처럼 연결해줍니다. 전압분배법칙에 의해서 CDS의 값이 커지면(어두워지면) 전압이 커지게됩니다.(큰값이 감지됩니다.)
실제로 연결한 모습입니다.
연속변환모드를 사용했습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | #include <avr/io.h> #include <util/delay.h> #include <avr/interrupt.h> #include "usart.h" #define F_CPU 16000000UL volatile char BUFF[100]; volatile unsigned char flag; void adc_init() { DDRF=0x00; ADCSRA=0xe7; //1110 0111 ADMUX=0x40; } int main(void) { usart_init(); adc_init(); int i; while(1) { i=ADC; sprintf(BUFF,"wowon.tistory.com : %d \n",i); USART0_str(BUFF); _delay_ms(1000); } } | cs |
usart.h
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | extern volatile unsigned char flag; ISR(USART0_RX_vect) { flag=UDR0; } void usart_init() { UCSR0A=0x00; UCSR0B=0x98; UCSR0C=0x06; UBRR0H=0; UBRR0L=103; SREG=0x80; } void USART0_Transmit( char data ) { while(!(UCSR0A&0x20)); UDR0 = data; } void USART0_str( char *str) { while( *str ) USART0_Transmit(*str++); } |
'아트메가 > 이론' 카테고리의 다른 글
아트메가128 타이머/카운터0 overflow interrupt사용하기 (4) | 2017.09.21 |
---|---|
아트메가128 타이머/카운터란? (0) | 2017.08.06 |
아트메가128 usart통신하기(3) 컴퓨터 (1) | 2017.07.03 |
아트메가128 usart통신하기(2) 블루투스 (13) | 2017.07.03 |
아트메가128 usart통신하기(1) (1) | 2017.07.03 |