본문 마이크로프로세서 응용 및 실험 <ADC & UART> 제출일자 : 분반 : 학번 : 성명 : 1. 설계과제의 목표 및 제한조건 제목 : 통신을 이용한 시간설정 기능이 있는 간이 시계 ●시간(0~59초)을 PC화면에 통신을 이용하여 표시 ●제한조건 - 준비물 : 가변저항(1개), 마이컴, 직렬통신선, LED 5개 - 입력전압 범위 : 0 ~ 5V - 마이컴은 A/D 값을읽어 소수점 앞자리 숫자에 해당하는 LED수를 점등 - 시간 설정 모드는 진입 및 해제 조건 : s 입력이 있을 때마다 적용 - 아날로그 입력 전압값에 따라 단위 초 설정위치 변경 아날로그 전압값 > 2.5V : 10초 단위 값 변경 아날로그 전압값 < 2.5V : 초 단위 값 변경 변경값은 PC로부터 받은 1자리 수로 함 10초 단위 값이 "6"이상이면 이전 값 유지 2. 서론 - ADC - ADC란? 아날로그 신호를 디지털 신호로 바꾸는 변환기. 관련 레지스터 1) ADMUX(ADC Multiplexer Select) Bit 7 : 6 - Reference Selection Bits Bit 5 - ADLAR 여기서 우리는 ADCH를 사용하기 위해서 ADLAR를 1로 설정해주었다. 2) ADCSRA (ADC Control and Status Register) - ADEN - ADC Enable - ADSC : ADC Start Conversion - ADATE : ADC Auto Trigger Enable - ADIF : ADC Interrupt Flag - ADIE : ADC Interrupt Enable - ADPS2~0 : ADC Prescaler Select Bit - USART - USART 직렬통신 하나의 데이터 선을 이용하여 한번에 1비트씩 데이터를 전송하는 방법. 원거리 통신에 주로 이용 시작 비트 : 데이터 전송 시작을 알려줌("1") 데이터 비트 : 전달하고자 하는 정보를 담은 비트로 5~9비트 정지 비트 : 데이터 전송 끝을 알리는 비트(1 or 2bit) 패리티 비트 : 데이터의 유효성 체크 비트(1bit) 통신속도 결정 우리는 9600bps를 사용하기 위하여 URBB = 103 으로 설정하였다. 관련 레지스터 1) UCSRA RXC : USART Receive Complete TXC : USART Transmit Complete UDRE : USART Data Register Empty FE : Frame Error DOR : Data OverRun UPE : Parity Error U2X : Double the USART Transmission Speed MPCM : Multi-Processor Communication Mode 2) UCSRB RXCIE : RX Complete Interrupt Enable TXCIE : TX Complete Interrupt Enable UDRIE : USART Data Register Empty Interrupt Enable RXEN : Receiver Enable TXEN : Transmitter Enable UCSZ2 : Character Size RXB8 : Receive Data Bit 8 TXB8 : Transmit Data Bit 8 3) UCSRC Bit7 : Reserved Bit UMSEL : 동기모드(1) or 비동기모드(0) UPM1~0 : Parity Mode USBS : Stop Bit Select UCS1~0 : Character Size UCPOL : Clock Polarity ASCII 코드 미국 표준 정보 교환 코드. 7비트의 이진수 조합으로 총 128개의 부호를 표현할 수 있다. 3. 본론 회로도 코드 입력 및 설명 #include <avr/io.h> #include <avr/interrupt.h> volatile unsigned char adc_result=0, led = 0x00,0x01,0x03,0x07,0x0f,0x1f ; volatile unsigned char usart_count, led_count, c,c1,c2, timer_count; unsigned char receive; void initialize_adc(void); unsigned char RX1_Byte(void); void TX1_Byte(unsigned char data); void USART_Init(unsigned int baud); SIGNAL(SIG_USART_RECV) receive = UDR; if (receive s) usart_count++; if(usart_count%2 1) TX1_Byte(c2+48); TX1_Byte(c1+48); TX1_Byte(\r); if(usart_count%2 1) if(adc_result>128) if((receive>=48)&&(receive<=53)) TX1_Byte(receive); TX1_Byte(c1+48); TX1_Byte(\r); c2=receive-48; c=c2*10+c1; else if(adc_result<=128) if((receive>=48)&&(receive<=57)) TX1_Byte(c2+48); TX1_Byte(receive); TX1_Byte(\r); c1 = receive-48; c=c2*10+c1; SIGNAL(SIG_ADC) adc_result = ADCH; //ADC 변환값 save SIGNAL(SIG_OVERFLOW0) if(usart_count%2 0) timer_count ; if(!timer_count) timer_count=100; c++; c1=c%10; c2=c/10; if(c 60) c=0; TX1_Byte(c2+48); TX1_Byte(c1+48); TX1_Byte(\r); TCNT0 = 100; int main(void) DDRB = 0x1f; initialize_adc(); timer_count=100; USART_Init(103); //9600 do led_count = adc_result/51; PORTB = led led_count ; while(1); void initialize_adc(void) ADMUX = 0x66; // ADLAR = 1 / ADCSRA = 0xef; // TIMSK = 0x01; //Timer/Counter0 overflow interrupt enable TCNT0 = 100; //(0xff - x + 1) = 15.625 TCCR0 = 0x4d; //fast PWM, clk1024 sei(); void TX1_Byte(unsigned char data) while(!(UCSRA & 0x20)); //wait for empty transmit buffer(UDRE) UDR = data; //put data into buffer, send the data unsigned char RX1_Byte(void) //receive a character by USART1 while(!(UCSRA & 0x80)); //data received (RXC1) return UDR; void USART_Init(unsigned int baud) UBRRH = (unsigned char)(baud >> 8); UBRRL = (unsigned char)baud; UCSRA = 0x00; //asynchronous normal mode UCSRB = 0x98; //Rx complete Interrupt Enable/Rx(Bit4)/Tx(Bit3) enable UCSRC = 0x86; //no parity, 1 stop, 8 data 만약 s 입력을 받으면 usart_count값이 1씩 커지게 하고 만약 usart_count값이 홀수이면 해당 값이 더 이상 증가하지 않고 멈추게 설정한다. 멈춘 상태에서 ADC의 변환값이 128초과, 즉 2.5V초과일 때 0~5까지의 입력값을 십의 자리수에 넣는다. ADC변환값이 128이하, 즉 2.5V 이하일 때 0~9의 값을 일의 자리수에 넣는다. adc_result의 변수에 ADC변환값을 저장한다. 여기서 ADC변환값을 ADCH를 사용한다. 하고 싶은 말 좀 더 업그레이드하여 자료를 보완하여, 과제물을 꼼꼼하게 정성을 들어 작성했습니다. 위 자료 요약정리 잘되어 있으니 잘 참고하시어 학업에 나날이 발전이 있기를 기원합니다 ^^ 구입자 분의 앞날에 항상 무궁한 발전과 행복과 행운이 깃들기를 홧팅 키워드 비트, 데이터, 통신, 단위, 설정, 변환값 |
2019년 1월 20일 일요일
실험레포트실험레포트자료 마이크로프로세서 atmega32 ADC 레포트
실험레포트실험레포트자료 마이크로프로세서 atmega32 ADC 레포트
피드 구독하기:
댓글 (Atom)
댓글 없음:
댓글 쓰기