roboforum.ru

Технический форум по робототехнике.
Текущее время: 21 май 2025, 18:12

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 3 ] 
Автор Сообщение
 Заголовок сообщения: Поможите новичку разобраться.
СообщениеДобавлено: 09 апр 2012, 17:33 
Не в сети

Зарегистрирован: 09 апр 2012, 17:19
Сообщения: 36
Всем привет и заранее спасибо.
Собрал проект "Термометр к ПК через COM порт" на atmega 8535
Вот код
#include <io.h>
#asm
.equ __w1_port=0x12;PORTD
.equ __w1_bit=4
#endasm
#include <1wire.h>
#include <delay.h>
#include <ds18b20.h>
#include <stdio.h>
void main(void)

{
float temp;

// USART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: Off
// USART Transmitter: On
// USART Mode: Asynchronous
// USART Baud rate: 4800 (Double Speed Mode)
UCSRA=0x02;
UCSRB=0x08;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x6C;

w1_init();

while (1)
{
temp=ds18b20_temperature(0);
if(temp>1000)
{ temp=4096-temp;
temp=-temp;
}
printf("Temp=%d\n\r",temp);

};
}
в терминале показывает температуру 15360 или -9999 или другую чушь.
Подскажите В чем дело?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Поможите новичку разобраться.
СообщениеДобавлено: 09 апр 2012, 18:36 
Не в сети

Зарегистрирован: 27 авг 2008, 10:45
Сообщения: 1981
Откуда: Харьков
прог. языки: С/С++
Что написано - то и показывает :)
Код:
printf("Temp=%d\n\r",temp);
- тут принтф ожидает целое, а получает флоат - берет от него два младших байта (а может старших - не важно) и интерпретирует их как целое. Приведи тип к int если достаточно целых градусов, или пиши %f (предварительно убедившись, что принтф его поддерживает).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Поможите новичку разобраться.
СообщениеДобавлено: 10 апр 2012, 13:03 
Не в сети

Зарегистрирован: 09 апр 2012, 17:19
Сообщения: 36
привожу тип и к int и float
все равно корректную температуру не выдает
#include <io.h>
#asm
.equ __w1_port=0x12;PORTD
.equ __w1_bit=4
#endasm
#include <1wire.h>
#include <delay.h>
#include <ds18b20.h>
#include <stdio.h>
void main(void)
{
int temp;

// USART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: Off
// USART Transmitter: On
// USART Mode: Asynchronous
// USART Baud rate
UCSRA=0x02;
UCSRB=0x08;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x67;
w1_init();
printf("Start PC Termometr\r");
while (1)
{
temp=ds18b20_temperature(0);
if(temp>1000)
{ temp=4096-temp;
temp=-temp;
}
printf("Temp=%i\xf8C",temp);
delay_ms(1000);
printf("\n\r");
};
}


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 3 ] 

Часовой пояс: UTC + 4 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
phpBB SEO