Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
25.02.2010, 16:03
|
|
Прописка
Регистрация: 17.11.2007
Сообщений: 112
Сказал спасибо: 19
Сказали Спасибо 14 раз(а) в 9 сообщении(ях)
|
Re: CodeVisionAVR начинающим с нуля
Сообщение от us4ilq
|
us4ilq(сабака)gmail.com
|
CVAVR ушло.
|
|
|
|
25.02.2010, 16:07
|
|
Частый гость
Регистрация: 20.01.2008
Сообщений: 31
Сказал спасибо: 5
Сказали Спасибо 17 раз(а) в 7 сообщении(ях)
|
Re: CodeVisionAVR начинающим с нуля
СПАСИБО
Уже забрал.
|
|
|
|
28.02.2010, 09:01
|
|
Прописка
Регистрация: 17.11.2007
Сообщений: 112
Сказал спасибо: 19
Сказали Спасибо 14 раз(а) в 9 сообщении(ях)
|
Re: CodeVisionAVR начинающим с нуля
avr123-nm-ru, посмотрите плз письмо.
...уже не надо
Последний раз редактировалось ValBag; 04.03.2010 в 14:58.
|
|
|
|
05.03.2010, 12:17
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.04.2009
Сообщений: 5,611
Сказал спасибо: 1,070
Сказали Спасибо 1,273 раз(а) в 884 сообщении(ях)
|
Re: CodeVisionAVR начинающим с нуля
Уважаемые друзья. Нужна небольшая помощь. Используя помощь в CV испытываю девайсы 1-wire. К сожалению не выходит полностью добится использовать все возможности датчика DS18B20. Стаж в програмировании на С у меня небльшой. Порядка месяца, т.ч возникают некоторые трудности.
1. Я откровенно не понял как мне вывести температуру датчика с десятвми долями градуса
Разрядность выставил самую высокую 12. Думаю что накосил с объявлением переменных и собственно с самим выводом printf. Либо надо лезть в файл DS18B20.h или dll там есть одноименный. Короче надо чтобы подсказали в чем фишка.
2. Мне непонятно с какой стороны подойти чтобы посмотреть статус - на какую разрядность включен данный датчик, т.е грубо говоря посмотреть состояние регистров 3-4 где хранятся алармы. И какое они имеют значение. В Протеусе я вижу что EEPROM хранит и изменяет данные которые я туда записываю об алармах. но вот считать их програмно и вывести для контроля я что то не соображу как.
Если мне кто то поможет решить эти вопросы буду благодарен.
На прилагаемом скрине видно что я сумел вывести с датчика
![](https://kazus.ru/forums/attachment.php?attachmentid=5321&stc=1&d=1267775335)
Третий девайс не температурный датчик, я его воткнул для контроля поэтому темп 9999. Это все нормально.
Код прилагаю целиком и вот кусок отвечающий за вывод
Код:
|
for (i=0;i‹devices;i++)
{
temp[i]=ds18b20_temperature(&rom_codes[i][0]);
delay_ms(750);
printf("DEVICE #%-u TEMP Value:", i+1);
//printf("\n\r");
printf("t=%i.%d\xf8C\n\r",temp[i]); |
По поводу развернувшейся дискуссии - полностью поддерживаю, что лучше конечно придерживатся полного написания кода , без особенных библиотек CV. Но ... это на первоначальном этапе нереально ИМХО. Язык С откровенно сложный, даже примеры мало помогают, тк одно и тоже можно написать десятью способами и нет никакой гарантии что все они окажутся правильными - это на взгляд дилетанта
|
|
|
|
05.03.2010, 12:57
|
|
Прописка
Регистрация: 09.08.2006
Сообщений: 198
Сказал спасибо: 14
Сказали Спасибо 27 раз(а) в 20 сообщении(ях)
|
Re: CodeVisionAVR начинающим с нуля
Вы определили массив temp как массив целых 16-бит чисел:
int temp [MAX_DEVICES];//объявлен целочисленный массив для хранения температур
Ну, и что ж тогда удивляться: функция ds18b20_temperature(..) честно выдает число с долями градусов, компилятор честно отбрасывает дробную часть, т.к. результат нужно сохранить в целочисленном массиве.
P.S. Задержка - delay_ms(750); - не нужна, т.к. она уже есть в функции ds18b20_temperature().
|
|
|
|
05.03.2010, 13:30
|
|
Прописка
Регистрация: 09.08.2006
Сообщений: 198
Сказал спасибо: 14
Сказали Спасибо 27 раз(а) в 20 сообщении(ях)
|
Re: CodeVisionAVR начинающим с нуля
Сообщение от nsl2004
|
2. Мне непонятно с какой стороны подойти чтобы посмотреть статус - на какую разрядность включен данный датчик, т.е грубо говоря посмотреть состояние регистров 3-4 где хранятся алармы. И какое они имеют значение.
|
Если Вы читали ДШ на DS18B20, то видели соответствие 9-ти байтовой структуры "stratch pad" с параметрами датчика. Функция ds18b20_temperature((&rom_codes[i][0]); не только возвращает измеренную температуру, но и считывает с датчика остальные 7 байт. Так, что rom_codes[i].temp_high - значение регистра 3, rom_codes[i].temp_low - значение регистра 4 и т.д. - смотрите описание полей в файле заголовка ds18b20.h.
Полезно, помимо прогона приведеннго в help примера, посмотреть файлы .h и .lib соответственно.
|
|
|
|
05.03.2010, 13:51
|
|
Вид на жительство
Регистрация: 07.03.2005
Сообщений: 300
Сказал спасибо: 13
Сказали Спасибо 117 раз(а) в 62 сообщении(ях)
|
Re: CodeVisionAVR начинающим с нуля
А обучение-то где?. Примеры, приемы работы. Одни споры о компиляторах типа - Чем это дерьмо рекламировать, взгляни лучше на…
Так и дальше будет? Или кто то решиться обучать без 99% рекламы, как AVR123.
|
|
|
|
05.03.2010, 14:10
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.04.2009
Сообщений: 5,611
Сказал спасибо: 1,070
Сказали Спасибо 1,273 раз(а) в 884 сообщении(ях)
|
Re: CodeVisionAVR начинающим с нуля
Сообщение от ish0
|
Вы определили массив temp как массив целых 16-бит чисел:
int temp [MAX_DEVICES];//объявлен целочисленный массив для хранения температур
Ну, и что ж тогда удивляться: функция ds18b20_temperature(..) честно выдает число с долями градусов, компилятор честно отбрасывает дробную часть, т.к. результат нужно сохранить в целочисленном массиве.
|
Значит надо заменить объявление переменной на float, double? Меня запутали два регистра, я подумал что один за целую часть второй за дробную. Хотя даташет прочитали не русском и для верности на английском. Но понял совсем наоборот.
Итак объявляю
float temp [MAX_DEVICES];
...
printf("t=%f.%d\xf8C\n\r",temp[i]); - температура перестала определятся и выводится пробел.0
printf("t=%i.%d\xf8C\n\r",temp[i]); - выводит 0.0
Невыходит пока , что то еще не учтено...
|
|
|
|
05.03.2010, 14:28
|
|
Прописка
Регистрация: 09.08.2006
Сообщений: 198
Сказал спасибо: 14
Сказали Спасибо 27 раз(а) в 20 сообщении(ях)
|
Re: CodeVisionAVR начинающим с нуля
Прицепите весь текст программы.
|
|
|
|
05.03.2010, 14:53
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.04.2009
Сообщений: 5,611
Сказал спасибо: 1,070
Сказали Спасибо 1,273 раз(а) в 884 сообщении(ях)
|
Re: CodeVisionAVR начинающим с нуля
Сообщение от ish0
|
Так, что rom_codes[i].temp_high - значение регистра 3, rom_codes[i].temp_low - значение регистра 4 и т.д. - смотрите описание полей в файле заголовка ds18b20.h.
|
Посмотрел - все ясно с полями. Не ясно с конструкцией строк.
Вот это
Код:
|
temp1[i]= rom_codes[i].temp_low
temp[i]=ds18b20_temperature(&rom_codes[i].temp_low);
Error: M:\****\MK8DS18B20\NEWBEZLCD.c(112): the first argument of the '.' operator must be of 'struct' or 'union' type
printf("t=%i.%d\xf8C\n\r",temp_low);
и даже на это printf("t=%i.%d\xf8C\n\r",temp[i][2]); |
и ещё по всякому ругается компилятор. Дальше не идет. Еще десяток вариантов перепробовал неполучилось. Как всетаки правильно?
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 01:44.
|
|