CodeVision AVR в вопросах и ответах

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение Аlex »

Вот посмотрите код, и скажите где что поменять можно?
Я не понимаю что и в каком формате возвращает Ваша функция. Если unsigned char, то значение после знака Вы не выведете, т.к. скорее всего, она возвращает целое значение температуры.
Аватара пользователя
Aid1992
Встал на лапы
Сообщения: 140
Зарегистрирован: Вс ноя 11, 2012 14:13:02

Re: CodeVision AVR в вопросах и ответах

Сообщение Aid1992 »

Да я пока не особо разбираюсь в программировании... Недавно начал только.
Ну так что, вы посмотрели код?
Ну напишу я float temp, но как на LCD то вывести?
Аватара пользователя
Aid1992
Встал на лапы
Сообщения: 140
Зарегистрирован: Вс ноя 11, 2012 14:13:02

Re: CodeVision AVR в вопросах и ответах

Сообщение Aid1992 »

А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мс
      };
}
ut1wpr
Вымогатель припоя
Сообщения: 581
Зарегистрирован: Ср янв 05, 2011 10:03:18

Re: CodeVision AVR в вопросах и ответах

Сообщение ut1wpr »

Аlex писал(а):Я не понимаю что и в каком формате возвращает Ваша функция. Если unsigned char, то значение после знака Вы не выведете, т.к. скорее всего, она возвращает целое значение температуры.
Не мучайте несчастного Алекса, имевшего неосторожность пару раз Вам подсказать. Существует очень эффективный метод "проб и ошибок". Если вы не понимаете, что делаете, и что надо делать, сделайте, наконец, сами. Один раз, другой, третий. Каждый раз смотрите, что изменяется, от чего зависит. Но перед тем, как делать, читать, читать и еще раз читать.
Вам же сразу готовый код подавай. Половина здесь присутствующих вам этот код напишет за несколько минут. И все будет работать. Но вот беда, вам захочется идти дальше. А ничего не поняв из этого простейшего примера вы снова будете просить людей сделать за вас?
С уважением,
Виктор.
Аватара пользователя
unalex
Мучитель микросхем
Сообщения: 424
Зарегистрирован: Сб авг 25, 2007 22:02:05
Откуда: Германия, Viernheim

Re: CodeVision AVR в вопросах и ответах

Сообщение unalex »

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 в вопросах и ответах

Сообщение Аlex »

Не мучайте несчастного Алекса
Скорее наоборот, я мучаю человека :) А всё ради того, чтобы он сам понял что он хочет от нас и , всё таки, задал нормальный вопрос, за место "Как сделать ?". Уровень его с первого-же поста очевиден - копипаст и тупик при желании что-то изменить.
А сделать просто. Выкинуть из головы мысли о встроенных недобиблиотеках, открыть даташит на датчик, написать нормальный код с его опросом и всё это "хозяйство" вывести на дисплей. После того, как он разберётся с датчиком и поймёт как с ним работать и что в нём лежит, способ вывода данных на дисплей придёт в голову сам по себе.
Аватара пользователя
Aid1992
Встал на лапы
Сообщения: 140
Зарегистрирован: Вс ноя 11, 2012 14:13:02

Re: CodeVision AVR в вопросах и ответах

Сообщение Aid1992 »

Хоть убейте, но не понимаю как по нормальному сделать вывод температуры с датчика DS18B20 с двумя или хотя бы с одним знаком после запятой.
Вы все хотите чтобы я сам понял, но я сегодня весь день просидел, так и не понял ничего. :(

Вот выкладываю проект в CodeVisionAVR и проект в Proteus.
Настоятельно прошу посмотреть, и сказать что не так!
thermo.zip
(128.38 КБ) 155 скачиваний
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение Аlex »

сказать что не так
То, что функция ds18b20_temperature, по всей видимости, возвращает целое значение температуры. Из этих данных Вы никак не добудите данные с десятыми. Понимаете ?
Аватара пользователя
Aid1992
Встал на лапы
Сообщения: 140
Зарегистрирован: Вс ноя 11, 2012 14:13:02

Re: CodeVision AVR в вопросах и ответах

Сообщение Aid1992 »

А как по другому то опросить датчик то? DS18B20 ведь опрашивают именно так temp=ds18b20_temperature(&rom_code[i][0]).
А DS18S20 так: temp=ds18b20_temperature_10(&rom_code[i][0]).
Аватара пользователя
Aid1992
Встал на лапы
Сообщения: 140
Зарегистрирован: Вс ноя 11, 2012 14:13:02

Re: CodeVision AVR в вопросах и ответах

Сообщение Aid1992 »

Если переменной temp выставить тип float, тогда вывод на LCD как запишется?
Просто я как только не писал сегодня, на дисплей выходит что то типа 2f... Вы мне говорили что то там в компиляторе включить чтобы отображались числа после запятой...
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение Аlex »

А как по другому то опросить датчик то?
Я уже писал парой постов выше как это сделать, повторяться не хочется.

Вы мне говорили что то там в компиляторе включить чтобы отображались числа после запятой...
Я не знаю, делается ли это в CV и как, поищите в настройках поддержку float для printf. Но это Вам не поможет - смотрите мой предыдущий пост.
Аватара пользователя
Apparatchik
Держит паяльник хвостом
Сообщения: 908
Зарегистрирован: Вс май 23, 2010 13:55:42
Откуда: Украина, Александрия

Re: CodeVision AVR в вопросах и ответах

Сообщение Apparatchik »

Сначала присвойте "руками" значение своей переменной temp = 12.3; и добейтесь правильного отображения и только потом "воюйте" с чтением температуры.
«И всё-таки она вертится!»
ut1wpr
Вымогатель припоя
Сообщения: 581
Зарегистрирован: Ср янв 05, 2011 10:03:18

Re: CodeVision AVR в вопросах и ответах

Сообщение ut1wpr »

Aid1992 писал(а):Настоятельно прошу посмотреть, и сказать что не так!
thermo.zip
Настоятельно прошу... Да еще с восклицательным знаком! Почти как требование. Может, в консерватории что-то подправить? :) Убивать вас никто не будет, вы приговорены к пожизненному изучению предмета! :)
PS Позвольте поинтересоваться, что вас подтолкнуло на столь сложную для вас тему? Вы светодиодом мрыгали? А по прерыванию? А кнопку опрашивали? А по прерыванию?
С уважением,
Виктор.
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение Аlex »

ЗЫ: Народ, перестаньте цитировать предыдущие сообщения (особенно создавать многоэтажные цитаты), меня завалил жалобами доблестные участники форума и я замучился править ваши посты :) Будьте любезны... Это просьба...
Аватара пользователя
Apparatchik
Держит паяльник хвостом
Сообщения: 908
Зарегистрирован: Вс май 23, 2010 13:55:42
Откуда: Украина, Александрия

Re: CodeVision AVR в вопросах и ответах

Сообщение Apparatchik »

Aid1992 писал(а):А как по другому то опросить датчик то?


Чтоб не заморачиватся с "float" температуру лучше читать в сотых долях градуса в 16 битную знаковую переменную, но для этого придется самому писать. Функции "встроенные" в CVAVR далеко не самые лучшие.
«И всё-таки она вертится!»
Аватара пользователя
Aid1992
Встал на лапы
Сообщения: 140
Зарегистрирован: Вс ноя 11, 2012 14:13:02

Re: CodeVision AVR в вопросах и ответах

Сообщение Aid1992 »

Разобрался.
Аватара пользователя
Apparatchik
Держит паяльник хвостом
Сообщения: 908
Зарегистрирован: Вс май 23, 2010 13:55:42
Откуда: Украина, Александрия

Re: CodeVision AVR в вопросах и ответах

Сообщение Apparatchik »

Aid1992 писал(а):Разобрался.

И это все? Интересно же :)
«И всё-таки она вертится!»
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение Аlex »

И в чём была проблема, не просветите ? Обычно, после решений проблем, принято выкладывать решения...
Аватара пользователя
Aid1992
Встал на лапы
Сообщения: 140
Зарегистрирован: Вс ноя 11, 2012 14:13:02

Re: CodeVision AVR в вопросах и ответах

Сообщение Aid1992 »

А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 в вопросах и ответах

Сообщение unalex »

проект взят отсюда
http://mega-avr.ucoz.ru/publ/ds18b20_connect_atmega8535/1-1-0-15

там же описаны варианты вывода на дисплей числа дробной частью
Коктейль "Рекурсивный": 20% спирта, 30% воды, 50% коктейля "Рекурсивный"...
Ответить

Вернуться в «AVR»