Я не понимаю что и в каком формате возвращает Ваша функция. Если unsigned char, то значение после знака Вы не выведете, т.к. скорее всего, она возвращает целое значение температуры.Вот посмотрите код, и скажите где что поменять можно?
CodeVision AVR в вопросах и ответах
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
Re: CodeVision AVR в вопросах и ответах
Да я пока не особо разбираюсь в программировании... Недавно начал только.
Ну так что, вы посмотрели код?
Ну напишу я float temp, но как на LCD то вывести?
Ну так что, вы посмотрели код?
Ну напишу я float temp, но как на LCD то вывести?
Re: CodeVision AVR в вопросах и ответах
Аlex писал(а):Я не понимаю что и в каком формате возвращает Ваша функция. Если unsigned char, то значение после знака Вы не выведете, т.к. скорее всего, она возвращает целое значение температуры.
Вот код программы полностью:
Код: Выделить всё
#include <mega128.h> //библиотека ввода\вывода
#include <delay.h> //библиотека задержки
#asm
.equ __w1_port=0x1B ;PORTA
.equ __w1_bit=3
#endasm
#asm
.equ __lcd_port=0x12 ;PORTD
#endasm
#include <lcd.h>
#include <lcd.h> //библиотека для LCD
#include <1wire.h> //библиотека работы с 1Wire
#include <ds1820.h>
#include <ds18b20.h> //библиотека для работы с датчиком ds18b20
#include <stdio.h>
#include <stdlib.h>
unsigned char rom_code[8][9]; //масив с адресами найденых датчиков
char lcd_buffer[33]; //масив с данными для экрана
void main(void)
{
unsigned char devices,i,j,k;
//unsigned char k; //переменная в которой количество присоеденённых датчиков, и номер выбранного датчика
float temp;
//unsigned char tem[4]; //переменная для хранения температуры
lcd_init(16); //инициилизация LCD, и говорим что он на 16 символов
devices=w1_search(0xf0,rom_code); //ищим датчики, и записуем их адреса в масив
while(1) //бесконечный цикл, если датчик подключон
{
temp=ds18b20_temperature(&rom_code[i][0]); //читаем температуру с выбранного датчика
if (temp>1000){ //если датчик выдаёт больше 1000
temp=4096-temp; //отнимаем от данных 4096
temp=-temp; //и ставим знак "минус"
}
sprintf(lcd_buffer,"t=%e %.1e %2.2e\n",temp);; //записуемв масив для экрана температуру и всё такое
//k=1;
//ftoa(temp,k,tem);
lcd_clear(); //чистим дисплей перед выводом
lcd_puts(lcd_buffer); //выводим масив на LCD
delay_ms(500); //ждём 500мс
};
}
Re: CodeVision AVR в вопросах и ответах
Не мучайте несчастного Алекса, имевшего неосторожность пару раз Вам подсказать. Существует очень эффективный метод "проб и ошибок". Если вы не понимаете, что делаете, и что надо делать, сделайте, наконец, сами. Один раз, другой, третий. Каждый раз смотрите, что изменяется, от чего зависит. Но перед тем, как делать, читать, читать и еще раз читать.Аlex писал(а):Я не понимаю что и в каком формате возвращает Ваша функция. Если unsigned char, то значение после знака Вы не выведете, т.к. скорее всего, она возвращает целое значение температуры.
Вам же сразу готовый код подавай. Половина здесь присутствующих вам этот код напишет за несколько минут. И все будет работать. Но вот беда, вам захочется идти дальше. А ничего не поняв из этого простейшего примера вы снова будете просить людей сделать за вас?
С уважением,
Виктор.
Виктор.
- unalex
- Мучитель микросхем
- Сообщения: 424
- Зарегистрирован: Сб авг 25, 2007 22:02:05
- Откуда: Германия, Viernheim
Re: CodeVision AVR в вопросах и ответах
Aid1992 писал(а):Ну напишу я float temp, но как на LCD то вывести?
как все нормальные люди выводят
Код: Выделить всё
float temp;
printf ("temp= %4.2f", temp, " градусов\n");Коктейль "Рекурсивный": 20% спирта, 30% воды, 50% коктейля "Рекурсивный"...
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
Скорее наоборот, я мучаю человекаНе мучайте несчастного Алекса
А сделать просто. Выкинуть из головы мысли о встроенных недобиблиотеках, открыть даташит на датчик, написать нормальный код с его опросом и всё это "хозяйство" вывести на дисплей. После того, как он разберётся с датчиком и поймёт как с ним работать и что в нём лежит, способ вывода данных на дисплей придёт в голову сам по себе.
Re: CodeVision AVR в вопросах и ответах
Хоть убейте, но не понимаю как по нормальному сделать вывод температуры с датчика DS18B20 с двумя или хотя бы с одним знаком после запятой.
Вы все хотите чтобы я сам понял, но я сегодня весь день просидел, так и не понял ничего.
Вот выкладываю проект в CodeVisionAVR и проект в Proteus.
Настоятельно прошу посмотреть, и сказать что не так!
Вы все хотите чтобы я сам понял, но я сегодня весь день просидел, так и не понял ничего.
Вот выкладываю проект в CodeVisionAVR и проект в Proteus.
Настоятельно прошу посмотреть, и сказать что не так!
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
То, что функция ds18b20_temperature, по всей видимости, возвращает целое значение температуры. Из этих данных Вы никак не добудите данные с десятыми. Понимаете ?сказать что не так
Re: CodeVision AVR в вопросах и ответах
А как по другому то опросить датчик то? DS18B20 ведь опрашивают именно так temp=ds18b20_temperature(&rom_code[i][0]).
А DS18S20 так: temp=ds18b20_temperature_10(&rom_code[i][0]).
А DS18S20 так: temp=ds18b20_temperature_10(&rom_code[i][0]).
Re: CodeVision AVR в вопросах и ответах
Если переменной temp выставить тип float, тогда вывод на LCD как запишется?
Просто я как только не писал сегодня, на дисплей выходит что то типа 2f... Вы мне говорили что то там в компиляторе включить чтобы отображались числа после запятой...
Просто я как только не писал сегодня, на дисплей выходит что то типа 2f... Вы мне говорили что то там в компиляторе включить чтобы отображались числа после запятой...
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
Я уже писал парой постов выше как это сделать, повторяться не хочется.А как по другому то опросить датчик то?
Я не знаю, делается ли это в CV и как, поищите в настройках поддержку float для printf. Но это Вам не поможет - смотрите мой предыдущий пост.Вы мне говорили что то там в компиляторе включить чтобы отображались числа после запятой...
- Apparatchik
- Держит паяльник хвостом
- Сообщения: 908
- Зарегистрирован: Вс май 23, 2010 13:55:42
- Откуда: Украина, Александрия
Re: CodeVision AVR в вопросах и ответах
Сначала присвойте "руками" значение своей переменной temp = 12.3; и добейтесь правильного отображения и только потом "воюйте" с чтением температуры.
«И всё-таки она вертится!»
Re: CodeVision AVR в вопросах и ответах
Настоятельно прошу... Да еще с восклицательным знаком! Почти как требование. Может, в консерватории что-то подправить?Aid1992 писал(а):Настоятельно прошу посмотреть, и сказать что не так!
PS Позвольте поинтересоваться, что вас подтолкнуло на столь сложную для вас тему? Вы светодиодом мрыгали? А по прерыванию? А кнопку опрашивали? А по прерыванию?
С уважением,
Виктор.
Виктор.
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
ЗЫ: Народ, перестаньте цитировать предыдущие сообщения (особенно создавать многоэтажные цитаты), меня завалил жалобами доблестные участники форума и я замучился править ваши посты
Будьте любезны... Это просьба...
- Apparatchik
- Держит паяльник хвостом
- Сообщения: 908
- Зарегистрирован: Вс май 23, 2010 13:55:42
- Откуда: Украина, Александрия
Re: CodeVision AVR в вопросах и ответах
Aid1992 писал(а):А как по другому то опросить датчик то?
Чтоб не заморачиватся с "float" температуру лучше читать в сотых долях градуса в 16 битную знаковую переменную, но для этого придется самому писать. Функции "встроенные" в CVAVR далеко не самые лучшие.
«И всё-таки она вертится!»
Re: CodeVision AVR в вопросах и ответах
Разобрался.
- Apparatchik
- Держит паяльник хвостом
- Сообщения: 908
- Зарегистрирован: Вс май 23, 2010 13:55:42
- Откуда: Украина, Александрия
Re: CodeVision AVR в вопросах и ответах
Aid1992 писал(а):Разобрался.
И это все? Интересно же
«И всё-таки она вертится!»
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
И в чём была проблема, не просветите ? Обычно, после решений проблем, принято выкладывать решения...
Re: CodeVision AVR в вопросах и ответах
Аlex писал(а):И в чём была проблема, не просветите ? Обычно, после решений проблем, принято выкладывать решения...
float temp;
temp=ds18b20_temperature(&rom_code[i][0]);
sprintf(lcd_buffer,"t%u=%.2f\xdfC",++i,temp);
- unalex
- Мучитель микросхем
- Сообщения: 424
- Зарегистрирован: Сб авг 25, 2007 22:02:05
- Откуда: Германия, Viernheim
Re: CodeVision AVR в вопросах и ответах
проект взят отсюда
http://mega-avr.ucoz.ru/publ/ds18b20_connect_atmega8535/1-1-0-15
там же описаны варианты вывода на дисплей числа дробной частью
http://mega-avr.ucoz.ru/publ/ds18b20_connect_atmega8535/1-1-0-15
там же описаны варианты вывода на дисплей числа дробной частью
Коктейль "Рекурсивный": 20% спирта, 30% воды, 50% коктейля "Рекурсивный"...