BASIC4MCU | 질문게시판 | ADC 전압을 UART로 표현하는 법을 모르겠습니다.
페이지 정보
작성자 악어 작성일2020-12-02 20:02 조회12,172회 댓글5건본문
타이머를 통해서 adc 전압을 받고 그전압 받은것을 uart로 표현하려고 하는데 어렵습니다.. 혹시 도와 주실수 있나요 ..
#include <mega128.h>
#include <delay.h>
typedef unsigned char u_char;
u_char cnt=0;
const u_char seg_pat[10]= {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f};
unsigned int i;
int ad_val;
void ADC();
void AD_disp(int);
void Putch(char);
void main(void)
{
// 포트 초기화
DDRB = 0xF0; // 포트 C 출력 설정
DDRD = 0xF0;
DDRG = 0x0F;
TIMSK=0x02;
TCCR0=0x0F;
OCR0=155;
TCNT0=0x0;
EIMSK = 0b00010000; // 외부 인터럽트4 enable
EICRB = 0b00000010; // 외부 인터럽트4 rising edge
ADMUX = 0x06; // ADC6 단극성 입력 선택
ADCSRA = 0x87;
UCSR0A=0x0;
UCSR0B=0b00001000;
UCSR0C=0b00000110;
UBRR0H=0;
UBRR0L=103;
SREG |= 0x80; // 전역 인터럽트 enable set
while(1){
}
}
interrupt [TIM0_COMP] void timer_comp0(void)
{
if(cnt++>99){
ADC();
cnt=0;
}
}
interrupt [EXT_INT4] void external_int4(void)
{
SREG &= 0x7F; // All Interrupt disable
AD_disp();
data= AD_disp();
Putch(char data);
SREG |= 0x80; // All Interrupt enable
}
void AD_disp(int val) {
float fval;
int ival, buf;
u_char N100, N10, N1;
fval = (float)val * 5.0 / 1024.0; // 전압 값으로 변환
ival = (int)(fval * 100.0 + 0.5); // 반올림 후 정수화, (소수 둘째자리까지)
N100 = ival / 100; // 정수부 추출
buf = ival % 100;
N10 = buf / 10; // 소수 첫째 자리 추출
N1 = buf % 10; // 소수 둘째 자리 추출
}
void ADC(void) {
ADCSRA = 0xC7; // ADEN=1, ADSC = 1 변환 시작
while((ADCSRA & 0x10) == 0); // ADIF=1이 될 때까지
ad_val = (int)ADCL + ((int)ADCH << 8); // A/D 변환값 읽기
}
void Putch(char data) // 한 바이트 송신
{
while((UCSR0A & 0x20) == 0x0); // 송신 버퍼가 비어지면 UDRE0 = 1 이 될 때까지 대기 ,전송 준비가 되었는지 확인하는 것
UDR0 = data; // 데이터 전송
}
댓글 5
조회수 12,172master님의 댓글
master 작성일어느 곳에서 받아서 어떻게 표시 하려고 하나요?
악어님의 댓글
악어 작성일
전역변수에 배열을 만들어서 인터럽트에 그 전역변수 배열을 불러 ADC값을 넣고 그것을 UART로 출력하려고하는데
Error: C:\Temp\a.c(58): a value of type 'const void' can't be assigned to an entity of type 'u_char'이런 문구가 되면서 안되네요 ..
master님의 댓글
master 작성일
typedef unsigned char u_char; 이 잘 안되면 #define문장으로 변경해보세요
#define u_char unsigned char
master님의 댓글
master 작성일
위 댓글의 문제가 아닌 아래 문장에 문제가 있는지도 모르겠군요
const u_char seg_pat[10]= {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f};
flash u_char seg_pat[10]= {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f}; // const 대신 flash로 변경해보세요
master님의 댓글
master 작성일
오류를 클릭하면 문제가 있는 라인으로 커서가 이동합니다.
어느 문장에서 오류가 있는지 바로 알 수가 있죠 ( 때로는 커서의 윗 라인에 문제가 있기도 합니다.)