Страница 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 во втором разряде :(
Подскажите куда копать, пожалуйста.

Забыл написать... На железе пока не порверял :oops: - только в Протеусе - учусь еще программы пересобирать/писать/редактировать :oops:

Re: проблема с программой термометра.

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