Страница 1 из 1
проблема с программой термометра.
Добавлено: Вс фев 20, 2011 13:50:05
stenkodv
В архиве модель в протеусе и проект cvavr не могу разобраться в чём проблема, не выводится температура на дисплей.
Re: проблема с программой термометра.
Добавлено: Вс фев 20, 2011 14:11:47
zhu4er
У тебя нету вот этой строчки:
#asm ("sei");
которая должна стоять после вот этого:
SFIOR=0x00;
Потом попробуй выводить посимвольно на дисплей с помощью вот этой процедуры:
lcd_putchar();
Надеюсь у тебя есть книга "Code Vision AVR пособие для начинающих" Лебедев М.Б. Если нет, то возми
тут или
тут
Re: проблема с программой термометра.
Добавлено: Вс фев 20, 2011 16:31:32
Аlex
У тебя нету вот этой строчки:
#asm ("sei");
Интересно, а зачем она нужна, можете растолковать ?
Re: проблема с программой термометра.
Добавлено: Вс фев 20, 2011 17:55:25
DARKMAVR
#asm("sei") // Разрешить ГЛОБАЛЬНО все прерывания
Re: проблема с программой термометра.
Добавлено: Вс фев 20, 2011 18:07:21
ChipKiller
#asm("sei") // Разрешить ГЛОБАЛЬНО все прерывания
stenkodv писал(а):В архиве модель в протеусе и проект cvavr не могу разобраться в чём проблема, не выводится температура на дисплей.
.. самое "забавное" то, что стандартная библиотека cvavr работает с DS18b20 именно при выключенных
#asm("cli") прерываниях

Re: проблема с программой термометра.
Добавлено: Вс фев 20, 2011 18:39:40
stenkodv
Да по моему не причём тут #asm ("sei"); я вместо while(devices>0) поставил просто while(1) в результате на lcd появилось -9999.65527, куда теперь копать?
Re: проблема с программой термометра.
Добавлено: Вс фев 20, 2011 18:50:04
ChipKiller
в результате на lcd появилось -9999.65527, куда теперь копать?
... перевести
это -9999.65527 в температуру

Re: проблема с программой термометра.
Добавлено: Вс фев 20, 2011 19:00:07
Danko
Код: Выделить всё
w1_init();
// Determine the number of DS1820 devices
// connected to the 1 Wire bus
ds1820_devices=w1_search(0xf0,ds1820_rom_codes);
// LCD module initialization
lcd_init(16);
while(ds1820_devices>0) //бесконечный цикл, если датчик подключон
{
temp=ds18b20_temperature(0); //читаем температуру
if (temp>1000){ //если датчик выдаёт больше 1000
temp=4096-temp; //отнимаем от данных 4096
temp=-temp; //и ставим знак "минус"
}
sprintf(lcd_buf,"t=%i.%u\xdfC",temp,temp%10); //записуемв масив для экрана температуру и всё такое
lcd_clear(); //чистим дисплей перед выводом
lcd_puts(lcd_buf); //выводим масив на LCD
delay_ms(500); //ждём 500мс
};
}
Все работает. Врет правда как сивый мерен.
Да еще у Вас в Протеусе фузы на какую частоту выставлены?
P.S.
Вопрос: почему мне жутко не нравится эта строка?
temp=ds18b20_temperature(0); //читаем температуру
Re: проблема с программой термометра.
Добавлено: Вс фев 20, 2011 21:07:46
stenkodv
Danko писал(а):
Да еще у Вас в Протеусе фузы на какую частоту выставлены?
Спасибо, если честно я не думал что в протеусе это важно. раньше ни когда не ставил и всё работало.
Re: проблема с программой термометра.
Добавлено: Сб фев 26, 2011 00:13:10
vetalbox
Да не обидится на меня топик стартер, за то, что задам вопрос здесь.
За основу проекта взял проект Danko "Термометр меньше не бывает". Бывает, на Tiny24 и 2ух разрядном семисегментнике
Собрал прошивку, но где-то косяк с индикацией - температуры от -19 до -12 не корректно отображаются - исчезает сегмент g во втором разряде
Подскажите куда копать, пожалуйста.
Забыл написать... На железе пока не порверял

- только в Протеусе - учусь еще программы пересобирать/писать/редактировать

Re: проблема с программой термометра.
Добавлено: Пн фев 28, 2011 19:17:47
vetalbox
Нашел косяк!
Не учел, что в данном МК PORTB.3 - это альтернативная функция RESET'a, активируемая программированием фьюза RSTDISBL. Правда, это делает невозможным дальнейшее программирование МК через простейший прогамматор на LPT-порт
