BASIC4MCU | 질문게시판 | 온도센서의 온도값을 출력 문제
페이지 정보
작성자 Linie 작성일2020-12-12 13:52 조회3,831회 댓글2건본문
안녕하세요 온도센서의 온도값을 UART통신으로 하이퍼 터미널을 이용해 CLCD와 모니터에 온도값을 출력하는 코드를 짜보았는데
오류들이 발생하여서 이렇게 질문드립니다.
typedef unsigned char INT8;
typedef unsigned int INT16;
#define F_CPU 1000000UL
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#include “clcd_d8.h”
#include "USART_ch0.h"
#include <stdio.h>
#define ADC_CH 3
#define TMP37 50
#define REF_VOLT 5.0
#define RESOLUTION 1023.0
void port_init(void);
void adc_init(INT8 channel);
volatile INT16 read_adc = 0;
volatile INT8 adc_flag = 0;
ISR (ADC_vect)
{
read_adc = ADCL;
read_adc += (ADCH<<8);
adc_flag = 1;
}
int main (void)
{
volatile float temp_volt = 0.0;
volatile float Temperature = 0.0;
char buffer[64];
char ch, i ;
USART0_Init ( MYUBRR );
_delay_ms(1);
clcd_port_init( );
clcd_init_8bit( );
clcd_str(“ADC Started … “); _delay_ms(100);
port_init( ); // 포트 G LED 회로
adc_init(ADC_CH); // ADC 회로
sei( );
while(1)
{
if(adc_flag == 1)
{
adc_flag = 0;
temp_volt = (float) read_adc*(REF_VOLT/RESOLUTION);
Temperature = temp_volt * (float)TMP37;
PORTG = (INT8) Temperature;
sprintf(buffer, "Temp -> %3.1fC ", Temperature);
clcd_position(0,0); // 온도
clcd_str(buffer);
sprintf (buffer, "ADC:%3d -> %3.2fV", read_adc, temp_volt);
clcd_position(1,0); // ADC 값, 입력전압
clcd_str(buffer);
USART0_Transmit_String(“\n Current Temperature is ”);
}_delay_ms(200);
ADCSRA |= (1<<ADSC); // Start Conversion
}
}
void port_init(void)
{
DDRG = 0xFF;
}
void adc_init(INT8 channel)
{
cli( );
ADMUX = (0<<REFS1) | (1<<REFS0)
| (0<<ADLAR) | channel;
ADCSRA = (1<<ADEN) | (1<<ADSC)
| (0<<ADFR) | (1<<ADIE)
| (1<<ADPS2) | (1<<ADPS1)| (0<<ADPS0);
sei( );
}
어느 부분을 수정해야할지 감이 안잡히네요
댓글 2
조회수 3,831master님의 댓글
master 작성일
오류를 클릭하면 문제가 있는 라인으로 커서가 이동합니다.
무슨 에러인지 추가하세요(에러 메시지 복사가 가능합니다.)
master님의 댓글
master 작성일
typedef unsigned char INT8;
typedef unsigned int INT16;
//
#define F_CPU 1000000UL
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#include "clcd_d8.h"
#include "USART_ch0.h"
#include <stdio.h>
//
INT16 read_adc=0;
//
int main (void){
float volt=0,Temp=0;
char ch,buf[64];
int i;
DDRG=0xFF;
clcd_port_init(); clcd_init_8bit(); clcd_str("ADC Started … ");
_delay_ms(100);
USART0_Init(MYUBRR);
ADMUX=0x43; ADCSRA=0xE7;
sei( );
while(1){
_delay_ms(200);
i=ADC; // avrstudio4 경우에는 i=ADCW;
volt=(float)i*5.0/1023.0;
Temp=volt*50.0;
PORTG=(INT8)Temp;
USART0_Transmit_String("\n Current Temperature is");
sprintf(buf,"Temp -> %3.1fC ",Temp); clcd_position(0,0); clcd_str(buf);
sprintf (buf,"ADC:%3d -> %3.2fV",i,volt); clcd_position(1,0); clcd_str(buf);
}
}
}