BASIC4MCU | 질문게시판 | 비접촉 적외선 온도센서 질문있습니다 ! 코드첨부
페이지 정보
작성자 choi 작성일2020-11-03 11:31 조회3,535회 댓글1건본문
'키트'님이 올려주신 센서 예제코드를 이용하여 avr studio4 와 hyperterminal로 출력을 해보려했는데
온도출력, 주변온도 출력 전부 0.00 만 반복되어서 어느부분이 잘못되었는지 알수있을까요? ㅠㅠ 센서는 dts l300 v2 같은것을 이용하였습니다.
#include <avr/io.h>
#include <util/delay.h>
#include <stdio.h>
#define F_CPU 16000000UL
#define U_C unsigned char
#define U_I unsigned int
#define U_L unsigned long
//==============================================================================================
#define ss_delay _delay_us(15)
#define ck_delay _delay_us(5)
//==============================================================================================
void USART0_Init(long baud)
{
unsigned int ubrr = F_CPU / 8 / baud - 1 + 0.5;
UBRR0H = (unsigned char)(ubrr >> 8);
UBRR0L = (unsigned char)ubrr;
UCSR0A |= (1 << U2X);
UCSR0C = 0b00000110;
UCSR0B = 0b00011000;
}
int USART0_putchar(char c, FILE * stream)
{
if (c == '\n') USART0_putchar('\r', stream);
while (!(UCSR0A & (1 << UDRE)));
UDR0 = c;
return c;
} // 예제코드
int USART0_getchar(FILE * stream)
{
char c;
while (!(UCSR0A & (1 << RXC)));
c = UDR0;
if (c == '\r') USART0_putchar('\n', stream);
USART0_putchar(c, stream);
return c;
} // 예제코드
void SPI_WR(U_C d) {
U_C i;
PORTB &= 0xFE; ss_delay;
for (i = 0; i < 8; i++) {
if (d & (0x80 >> i)) PORTB |= 0x01; else PORTB &= 0xFB;
PORTB &= 0xFD; ck_delay; PORTB |= 0x02; ck_delay;
}
PORTB |= 0x01;
_delay_ms(10);
}
int SPI_RD(void) {
U_C i;
int tp = 0;
PORTB &= 0xFE; ss_delay;
for (i = 0; i < 8; i++) {
PORTB &= 0xFD; ck_delay;
if (PINA & 0x03)tp |= 0x80 >> i;
PORTB |= 0x02; ck_delay;
}
PORTB |= 0x01;
_delay_ms(10);
return tp;
}
int main(void) {
int Target, Ambient;
float f_t, f_a;
PORTB = 3; DDRB = 7; // SS & SCK 초기값 high
FILE usart0 = FDEV_SETUP_STREAM(USART0_putchar, USART0_getchar, _FDEV_SETUP_RW);
stdin = stdout = &usart0;
USART0_Init(19200); //19200일때(default)
while (1) {
SPI_WR(0xA0);
Target = SPI_RD(); //low
Target |= SPI_RD() << 8; //high
f_t = (float)Target;
f_t /= 100.0;
_delay_ms(50);
//
SPI_WR(0xA1);
Ambient = SPI_RD(); //low
Ambient |= SPI_RD() << 8; //high
f_a = (float)Ambient;
f_a /= 100.0;
_delay_ms(500);
printf("Target= %7.2f,Ambient=%7.2f\n", f_t, f_a);
}
}
댓글 1
조회수 3,535master님의 댓글
master 작성일통신 소스의 디버깅은 오실로스코프 같은 장비가 있어야지 수월합니다.