зависает прошивка при выводе на LCD!

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
Нашел транзистор. Понюхал.
Аватара пользователя
Сообщения: 167
Зарегистрирован: Ср ноя 04, 2009 18:00:56
Откуда: Алтайский край

Сообщение ssvd »

привет!
есть программа, вообще то стандартная, но если выводить на LCD текст, то программа зависает! Если за комментировать вывод на дисплей, то все нормально работает! где я неправ?
проц atmega8

Код: Выделить всё

 lcd_init(16);
    while (1){
        __beep(100);        
        devices=w1_search(0xf0,rom_codes);
        if (devices==0){
            lcd_gotoxy(0,0);
            lcd_putsf("Init. device");
            if (ds18b20_init(&rom_codes[i][0],25,35,DS18B20_9BIT_RES)){
                lcd_gotoxy(0,1);
                lcd_putsf("                ");
                lcd_puts(i+'='+&rom_codes[i][0]);
                delay_ms(1000);                
            } else {
                lcd_gotoxy(0,1);
                lcd_putsf("ERROR");
            }
        }
        else{
            while(1){
                temp=ds18b20_temperature(&rom_codes[0][0]);
                sprintf(lcd_buffer,"Temp in=%i.%u\xdfC",temp,temp%1);
//                lcd_gotoxy(0,0);
//                lcd_putsf("                ");
//                lcd_gotoxy(0,0);
//                lcd_puts(lcd_buffer);
                delay_ms(1000);                
                    
                temp=ds18b20_temperature(&rom_codes[1][0]);
                sprintf(lcd_buffer,"Temp out=%i.%u\xdfC",temp,temp%1);
//                lcd_gotoxy(0,1);
//                lcd_putsf("                ");
//                lcd_gotoxy(0,1);
//                lcd_puts(lcd_buffer);
                delay_ms(1000);                
                __beep(50);        
            }       
        };
Контактная информация:
Реклама
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1287
Зарегистрирован: Пн окт 13, 2008 11:45:54
Откуда: РФ, Крым, г.Бахчисарай

Сообщение Danko »

Если Вы хотите отделить целую часть от дробной и соответственно отделить дробную от целой
обычно делают так:
sprintf(lcd_buffer,"Temp out=%i.%u\xdfC",temp/10,temp%10);

temp/10 - деление на 10 без остатка

temp%10 - остаток от деления на 10
Первое, что привлекает в программировании, объяснить просто: ты говоришь компьютеру что то сделать, и он это делает. Безошибочно. Всегда. Без возражений.
---------------------
Линус Торвальдс. "Just for fun. Рассказ нечаянного революционера"
Контактная информация:
Реклама
Держит паяльник хвостом
Аватара пользователя
Сообщения: 993
Зарегистрирован: Пн сен 18, 2006 11:16:05
Откуда: Тула

Сообщение Neekeetos »

ssvd писал(а):привет!
есть программа, вообще то стандартная, но если выводить на LCD текст, то программа зависает! Если за комментировать вывод на дисплей, то все нормально работает! где я неправ?
проц atmega8

Код: Выделить всё

 lcd_init(16);
Могу предположить что неправильно подключен LCD, конкретно его R/W вход. Драйвер экрана может ждать выполнения команды, соотв проверять флаг busy.
Контактная информация:
Нашел транзистор. Понюхал.
Сообщения: 155
Зарегистрирован: Вт авг 19, 2008 23:39:59
Откуда: г.Смоленск

Сообщение Saadov »

А что за странная запись

Код: Выделить всё

lcd_puts(i+'='+&rom_codes[i][0]);
Реклама
Эиком - электронные компоненты и радиодетали
Держит паяльник хвостом
Аватара пользователя
Сообщения: 993
Зарегистрирован: Пн сен 18, 2006 11:16:05
Откуда: Тула

Сообщение Neekeetos »

Saadov писал(а):А что за странная запись

Код: Выделить всё

lcd_puts(i+'='+&rom_codes[i][0]);
похоже человек пытается сложить строки как в бейсике :) , кстати из за этого и зависает скорей всего, указатель неверный
Контактная информация:
Реклама
Нашел транзистор. Понюхал.
Сообщения: 155
Зарегистрирован: Вт авг 19, 2008 23:39:59
Откуда: г.Смоленск

Сообщение Saadov »

Я то понял, а вот автор видно что то напутал))
Исправте и примените функцию присоединения строк, читать по
String Functions в хелпе своего компилятора.

Код: Выделить всё

The string manipulation functions were extended to handle strings located both in SRAM and FLASH memories.


char *strcat(char *str1, char *str2)


      concatenate the string str2 to the end of the string str1.


char *strcatf(char *str1, char flash *str2)


      concatenate the string str2, located in FLASH, to the end of the string str1.


char *strncat(char *str1, char *str2, unsigned char n)


      concatenate maximum n characters of the string str2 to the end of the string str1.
Returns a pointer to the string str1.


char *strncatf(char *str1, char flash *str2, unsigned char n)


      concatenate maximum n characters of the string str2, located in FLASH, to the end of the string str1.
Returns a pointer to the string str1.
Реклама
Нашел транзистор. Понюхал.
Аватара пользователя
Сообщения: 167
Зарегистрирован: Ср ноя 04, 2009 18:00:56
Откуда: Алтайский край

Сообщение ssvd »

Neekeetos писал(а):
Saadov писал(а):А что за странная запись

Код: Выделить всё

lcd_puts(i+'='+&rom_codes[i][0]);
похоже человек пытается сложить строки как в бейсике :) , кстати из за этого и зависает скорей всего, указатель неверный

опа, привычка с паскаля ))))
Контактная информация:
Нашел транзистор. Понюхал.
Аватара пользователя
Сообщения: 167
Зарегистрирован: Ср ноя 04, 2009 18:00:56
Откуда: Алтайский край

Сообщение ssvd »

всем спасибо все как бы работает! НО! все таки подвисает через некоторое время. Берусь за дисплей а он горячий!!! контроллер дисплея тоже горячий! может изза этого зависает? и почему может греться контроллер на дисплее, подаю 5,4 вольта. Дисплей wh1602. В даташите написано что работает MAX 5,3. Изза этого?
Контактная информация:
Нашел транзистор. Понюхал.
Сообщения: 155
Зарегистрирован: Вт авг 19, 2008 23:39:59
Откуда: г.Смоленск

Сообщение Saadov »

Вполне может быть! + еще погрешность прибора которым вы измеряли.
Поставте в цепь питания дисплея диод, подберите такой, чтоб падение напряжения на нем было 0.3-0.5 В. И все будет :beer:
Нашел транзистор. Понюхал.
Аватара пользователя
Сообщения: 167
Зарегистрирован: Ср ноя 04, 2009 18:00:56
Откуда: Алтайский край

Сообщение ssvd »

ok попробую!
Контактная информация:
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»