Страница 68 из 123
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
Добавлено: Пн ноя 04, 2013 15:44:10
Ghost in shell
Как с помощью функции lcd_putch(); (из библиотеки уважаемого Alex)вывести однозначное десятичное число?
Если пробую lcd_putch(5); выводится невесть что...
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
Добавлено: Пн ноя 04, 2013 15:48:07
Аlex
lcd_putch выводит символ с ASCII-кодом, который передаём в функцию.
Чтобы вывести число, нужно его преобразовать в строку (массив символов) и выводить по-символьно, либо с помощью
lcd_puts (что тоже самое).
Если оно у Вас не больше 9-ти, то можно так:
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
Добавлено: Чт ноя 14, 2013 21:56:40
goldskif
А кто-нибудь сталкивался с таким:
ЖКИ на базе GDM1601a (аналог HD44780) отображает только 8 символов на экране. Из 16. Дальше - пусто.
---
Сам себе отвечу.
Указал в коде
Config Lcd = 16 * 1
а надо было
Config Lcd = 16 * 1a
----
Нее.. все равно глюк вылезает. ((
Когда нужно писать на экране
Time:00:59 - минуты упорно не хотят отображаться
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
Добавлено: Пт ноя 15, 2013 18:13:54
*Trigger*
А Вы знаете, что дисплей в 16 символов и 1 строку - это 8*2, у которого строки друг за другом. Если просто так в него писать (как в одну строку), то символы после восьмого не отобразятся. Процедура записи состоит из двух частей. Сначала левую половину пишем, потом правую.
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
Добавлено: Пт ноя 15, 2013 20:06:02
goldskif
Я понял в чем глюк был. Когда я просто пишу:
Lcd " Длинное слово ", то И протеус, и железка отображают его правильно.
А вот когда указывал место через:
Locate 1 , 6
Lcd Minut
То протеус отображал правильно, а железка обрезала все после 8 символа.
Команда Locate по разному понимается Протеусом и железкой.
Видимо, железка считает, что если есть 1 строка, то должна быть и 2.
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
Добавлено: Сб ноя 16, 2013 14:09:02
nirq
Не "понял, в чём глюк", а пытаешься угадать правильную последовательность нажимания кнопок.
Набираем в интернете название дисплея, открываем первую попавшуюся сссылку, рассматриваем картинку с словами "Display character address code: Display position / DDRAM address".
Не помогло.
В том же самом интернете набираем "lcd.pdf 44780 ктц мк" (это не выводится из каких-либо рассуждений, просто магические символы), получаем документ с надписью "КТЦ-МК".
Там всё даже по-русски, но... многабукв ни о чём, а кнопки-то какие нажимать? Чтоб железка не считала строки через Locate? Глюк же! И протеус!
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
Добавлено: Чт дек 05, 2013 21:37:37
triest
А как на индикатор данные расчетов вывести (из регистра)?
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
Добавлено: Пт дек 06, 2013 11:29:21
Gudd-Head
Преобразовать число из регистра в цифры, например в двоично-десятичном формате.
Далее смотрим таблицу символов 44780 — откуда начинаются цифры (30h) и к цифре прибавляем этот адрес. Всё, печатаем очередную цифру.
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
Добавлено: Чт дек 12, 2013 23:07:24
pioneer1234
Добрый вечер уважаемые коты.
Помогите советом, подарили символьный ЖКИ 4*20 подключил его к LTP а он не хочет нормально работать,
третья строка практически не показывает а четвертая не показывает первые три символа.
Подскажите что с пациентом

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
Добавлено: Чт дек 12, 2013 23:48:03
vitalik_1984
Пациент скорее мертв, чем жив. Очень похоже на ситуацию, когда резиновые шлейфы не прилегают как положено...
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
Добавлено: Пт дек 13, 2013 00:29:42
pioneer1234
vitalik_1984 писал(а):Пациент скорее мертв, чем жив. Очень похоже на ситуацию, когда резиновые шлейфы не прилегают как положено...
А такое кто нибудь пробовал лечить? А то жалко как то...
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
Добавлено: Пт дек 13, 2013 00:46:20
nirq
Разбираешь, собираешь. Без гарантии. Дела на полчаса с перекурами, конструкция на уровне табуретки по сложности. Разрешение нужно? Я разрешаю.
Или пользуешься как есть. Нижние две строки можно закрыть картонкой, чтоб не смущали. Для отладочных целей вообще без разницы.
У меня "чиненный" уже года три как живёт.
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
Добавлено: Пт дек 13, 2013 18:28:08
Ghost in shell
Полтергейст какой-то: выводятся только первые 2 символа. Если убрать команды на их вывод, выводятся символы на 3 и 4 месте. А чтобы все сразу?
Спойлер
// MK pic16f72
// работа с LCD
#include <pic.h>
#include "lcd.h"
//------------------------------------------------------------------
__CONFIG (XT & WDTDIS & PWRTDIS & BOREN & UNPROTECT); // биты конфигурации программатора
//--------------------------------------------------------------------
volatile unsigned char cnt_pause = 0;
//--------------------------------------------------------------------
void interrupt isr(void) // обработчик прерываний
{
if (T0IF && T0IE) // ветка опроса флага прерывания по переполнению TMR0
{
T0IF = 0; // сброс флага прерывания по переполнению TMR0
TMR0+= 6; // предзагрузка TMR0
T0IE = 1; // 1/0 разрешение/запрет прерывания по переполнению TMR0
if(cnt_pause==1) cnt_pause--;
} // конец ППОП TMR0
}
//------------------------------------------------------------------
void podgot (void) // настройки
{
ADCON1 = 0b111; // отключение АЦП
TRISA = 0b111111; // (0/1 - выход/вход, нумерация битов в регистре справо-налево)
TRISB = 0b00000000; // (0/1 - выход/вход, нумерация битов в регистре справо-налево)
TRISC = 0b00000000; // (0/1 - выход/вход, нумерация битов в регистре справо-налево)
RBPU = 0; // подтягивающие R порта В (0-вкл, 1-выкл) бит регистра OPTION
// Начало настройки TMR0 ---------------------------------------------------
T0CS = 0; // bit 5 TMR0 Выбор источника сигнала 0 - Fosc/4 (внутренний); 1 - подача на T0CKI
T0SE = 0; // bit 4 TMR0 Выбор фронта приращения TMR0 при внешнем тактовом сигнале (0-передний фронт)
PSA = 0; // bit 3 Выбор включения предделителя: 0 - перед TMR0, 1 - перед WDT
PS2 = 0; // bit 2 Настройка предделителя
PS1 = 0; // bit 1 Настройка предделителя
PS0 = 1; // bit 0 Настройка предделителя
T0IE = 1; // 1/0 разрешение/запрет прерывания по переполнению TMR0
T0IF = 0;
// Конец настройки TMR0 ---------------------------------------------------
GIE = 1; // разрешены все немаскированные прерывания
}
void pause100 (void)
{
while(cnt_pause) continue; // если cnt_pause не равен 0, продолжение цикла.
cnt_pause=100;
}
// конец объявления функций, используемые в файле----------------------------------------------------------------------------------
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void main ()
{
unsigned char cnt_ch=0;
unsigned char val=0;
podgot(); //настройки
lcd_init(); // инициализация дисплея
lcd_clear(); // очистка дисплея
//
for(;;)
{
lcd_gotoxy(0,0);
val=0;
lcd_putch(val + '0');
pause100(); //---------------------
lcd_gotoxy(0,1);
val=4;
lcd_putch(val + '0');
pause100(); //---------------------
lcd_gotoxy(0,2);
val=8;
lcd_putch(val + '0');
pause100(); //---------------------
lcd_gotoxy(0,3);
val=0;
lcd_putch(val + '0');
pause100(); //---------------------
}
}// end main
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
Добавлено: Пт дек 13, 2013 18:35:31
Аlex
Попробуйте lcd_gotoxy поставить только один раз (на координаты 0,0). Незачем его тыкать перед каждым выводом символа - курсор сам передвинится на следующее знакоместо.
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
Добавлено: Пт дек 13, 2013 19:14:14
Ghost in shell
Увы, не помогает: выводятся только первых 2 знака.
Убрал функцию pause100() - без изменений.
P.S. Мне этих символов выводить и выводить. Вот эскиз интерфейса терморегулятора
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
Добавлено: Сб дек 14, 2013 01:44:59
vitalik_1984
как то так можно упростить этот код
Код: Выделить всё
{ char val[]={0,8,4,0};
char i;
lcd_gotoxy(0,0);
for (i=0;i<4;i++) {
lcd_putch(val[i]+'0');
pause100();
};
}
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
Добавлено: Сб дек 14, 2013 07:35:26
Ghost in shell
vitalik_1984
Спасибо за идею, но числа-то будут получаться с АЦП. Т.е. одно за одним, от младших разрядов к старшим. Громоздко получается...
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
Добавлено: Сб дек 14, 2013 21:07:34
vitalik_1984
Так можно вообще то в обратную сторону листать for(i=4;i<0;i– – )

либо воспользоваться стандартными функциями вывода sprintf () например...
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
Добавлено: Чт дек 19, 2013 21:49:18
Ghost in shell
Решил полностью изменить алоритм вывода: попробовал вывести содержимое массива. И опять выводятся только 2 первых символа!
Спойлер
// MK pic16f72
// работа с LCD
#include <pic.h>
#include "lcd.h"
//------------------------------------------------------------------
__CONFIG (XT & WDTDIS & PWRTDIS & BOREN & UNPROTECT); // биты конфигурации программатора
//--------------------------------------------------------------------
const char hello_str[]="Hello !!!";
volatile unsigned char cnt_pause=0;
//--------------------------------------------------------------------
void interrupt isr(void) // обработчик прерываний
{
if (T0IF && T0IE) // ветка опроса флага прерывания по переполнению TMR0
{
T0IF = 0; // сброс флага прерывания по переполнению TMR0
TMR0+= 6; // предзагрузка TMR0
T0IE = 1; // 1/0 разрешение/запрет прерывания по переполнению TMR0
if(cnt_pause==1) cnt_pause--;
} // конец ППОП TMR0
}
//------------------------------------------------------------------
void podgot (void) // настройки
{
ADCON1 = 0b111; // отключение АЦП
TRISA = 0b111111; // (0/1 - выход/вход, нумерация битов в регистре справо-налево)
TRISB = 0b00000000; // (0/1 - выход/вход, нумерация битов в регистре справо-налево)
TRISC = 0b00000000; // (0/1 - выход/вход, нумерация битов в регистре справо-налево)
RBPU = 0; // подтягивающие R порта В (0-вкл, 1-выкл) бит регистра OPTION
// Начало настройки TMR0 ---------------------------------------------------
T0CS = 0; // bit 5 TMR0 Выбор источника сигнала 0 - Fosc/4 (внутренний); 1 - подача на T0CKI
T0SE = 0; // bit 4 TMR0 Выбор фронта приращения TMR0 при внешнем тактовом сигнале (0-передний фронт)
PSA = 0; // bit 3 Выбор включения предделителя: 0 - перед TMR0, 1 - перед WDT
PS2 = 0; // bit 2 Настройка предделителя
PS1 = 0; // bit 1 Настройка предделителя
PS0 = 1; // bit 0 Настройка предделителя
T0IE = 1; // 1/0 разрешение/запрет прерывания по переполнению TMR0
T0IF = 0;
// Конец настройки TMR0 ---------------------------------------------------
GIE = 1; // разрешены все немаскированные прерывания
}
void pause100 (void)
{
while(cnt_pause) continue; // если cnt_pause не равен 0, продолжение цикла.
cnt_pause=100;
}
// конец объявления функций, используемые в файле----------------------------------------------------------------------------------
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void main ()
{
unsigned char cnt_ch=0;
podgot(); //настройки
lcd_init(); // инициализация дисплея
lcd_clear(); // очистка дисплея
lcd_gotoxy(0,0);
//
for(;;)
{
while(hello_str[cnt_ch])
{
lcd_putch(hello_str[cnt_ch++]);
while(cnt_pause) continue;
cnt_pause=100;
}
}
}// end main
передвинул курсор на другую позицию - без изменений.
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
Добавлено: Чт дек 19, 2013 22:18:38
Alexeyslav
Отладчик что показывает?