2019년 1월 20일 일요일

실험레포트실험레포트자료 마이크로프로세서 atmega32 ADC 레포트

실험레포트실험레포트자료 마이크로프로세서 atmega32 ADC 레포트
[실험레포트][실험레포트자료] 마이크로프로세서 atmega32 ADC 레포트.hwp


본문
마이크로프로세서
응용 및 실험
<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를 사용한다.

하고 싶은 말
좀 더 업그레이드하여 자료를 보완하여,
과제물을 꼼꼼하게 정성을 들어 작성했습니다.

위 자료 요약정리 잘되어 있으니 잘 참고하시어
학업에 나날이 발전이 있기를 기원합니다 ^^
구입자 분의 앞날에 항상 무궁한 발전과 행복과 행운이 깃들기를 홧팅

키워드
비트, 데이터, 통신, 단위, 설정, 변환값

댓글 없음:

댓글 쓰기