BASIC4MCU | 질문게시판 | 답변 : 아두이노 소스 avr변환 질문입니다..
페이지 정보
작성자 master 작성일2018-01-16 14:40 조회40,643회 댓글6건본문
12345678910111213141516171819202122 #include <avr/io.h>#include <stdio.h>#define F_CPU 16000000UL // 16 MHz#include <util/delay.h>//char RX1_char(void){ while(!(UCSR1A&0x80)); return UDR1; }void TX1_char(char c){ while(!(UCSR1A&0x20)); UDR1=c; }void TX1_STR(char *s){ while(*s)TX1_char(*s++); }//int read_adc(void){ADCSRA=0xD7; while(!(ADCSRA&0x10)); return ADC;}//int main(void){int val=0; char str[30];UCSR1B=0x18; UBRR1L=8; //115200ADMUX=0x40;while(1){val=read_adc();sprintf(str,"\n\r ADC Data=%d ",val); TX1_STR(str);}}
댓글 6
조회수 40,643묵묵님의 댓글
묵묵 작성일제가 adc값을 잿을때는 값이 500~970정도로 왓다갓다했는데 이소스를 넣고 adc값을 보니 한가지 값으로 일정하게 유지될때도 잇고, 차이가 200정도 간격으로 왓다갈떄도 할때가 잇는데 혹시 왜그런지 알 수 있을까요?
master님의 댓글
master
질문 소스와 별 차이가 안나야 정상 같은데요
//
500~970정도로 왓다갓다 <-- 이 값도 정상 같지는 않습니다.
파형이 전체적으로 2.5V~5V 범위에서 논다는 얘기죠?
master님의 댓글
master
ADMUX=0b01000000; //ADC0번 사용
ADCSRA=0b11000111; // ENABLE & START
while((ADCSRA & 0x10)==0x00); // ADC 변환 대기
ADCSRA=0b10000111; <-- 이 코드에 문제가 있습니다.
return ADC;
//
ADCSRA=0b10000111; <-- 이 코드에 문제가 있습니다.
이 위치에서는 ADC 플래그를 clear 시켜줘야합니다.
ADCSRA = ADCSRA | 0x1; //ADC flag clear
인터럽트 관련 플래그의 clear는 0을 쓰는 것이 아니고 1을 써야지 clear 됩니다.
//
인터럽트 플래그가 clear되지 않으면 변환이 제대로 되지 않습니다.
묵묵님의 댓글
묵묵 작성일
#include <avr/io.h>
#include <stdio.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#define F_CPU 16000000UL // 16 MHz
void Putch0(char data)
{
while(!(UCSR1A & 0x20));
UDR1 = data;
}
char Getch0(void)
{
while(!(UCSR1A & 0x80));
return UDR1;
}
volatile unsigned int adc_result=0;
volatile unsigned int read_adc(void)
{
ADMUX=0b01000000; //ADC0번 사용
ADCSRA=0b11000111; //AD 변환 인터럽트 disable
while((ADCSRA & 0x10)==0x00); //AD변환 레지스터 값 갱신되면 셋
ADCSRA = ADCSRA | 0x1; //ADC flag clear
return ADC;
}
int main(void)
{
UCSR1A = 0x00;
UCSR1B = 0b00011000;
UCSR1C = 0b00000110;
UBRR1H = 0;
UBRR1L = 8; //115200
DDRF = 0x00;
sei();
FILE *fp;
fp = fdevopen(Putch0, Getch0);
while(1)
{
adc_result=read_adc();
printf("\n\r ADC Data=%d ", adc_result);
}
}
혹시 이 소스에 문제가 있나요??
master님의 댓글
master
전체 소스의 동작여부를 질문하시면 안됩니다.
문제가 있는지 없는지는 동작시켜보면 바로 알 수 있는 것 아닌가요?
설마, 다른 사람이 부품을 구입하고 회로를 꾸민 후에 소스를 넣어서 동작체크 해달라고 적은 글은 아니겠죠?
묵묵님의 댓글
묵묵 작성일adc값이 터미널에 뜨긴하는데 값이 불안정한거 같아서 질문 드려 봤습니다. adc핀에 심박센서 말고 가변저항을 통해 실험해봤는데 가변저항 adc값은 정확하게 나옵니다. 센서에 문제가 있는거 같은데 우선 제가 계속 고쳐보도록 하겠습니다. 감사합니다.