Например TDA7294

Форум РадиоКот • Просмотр темы - Работа с ЖКИ на контроллере HD44780 и его аналогах
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Пн авг 11, 2025 10:20:48

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 2431 ]     ... , , , 36, , , ...  
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
СообщениеДобавлено: Пт авг 26, 2011 15:19:55 
Мучитель микросхем
Аватар пользователя

Зарегистрирован: Вс янв 11, 2009 09:29:08
Сообщений: 492
Откуда: Ярославль
Рейтинг сообщения: 0
код со cxem.net попробовать можно, он под мегу8 с частотой 1 МГц, только нужно соблюдать указанную в листинге распиновку. И там безо всяких регистров. Компилятор - CodeVisionAVR C, в другом не будет компилироваться.

_________________
Мои верные друзья - АМD и AVR
LM317 - атцтой, LM2576ADJ - форева! :)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
СообщениеДобавлено: Пт авг 26, 2011 17:00:48 
Открыл глаза

Зарегистрирован: Чт янв 31, 2008 15:51:25
Сообщений: 44
Откуда: прим. край
Рейтинг сообщения: 0
а можно это как-то с этой схемой увязать? http://p-45.narod.ru/files/sch_v3.pdf собрана в железе, и к сожалению очень проблематично будет из неё что-то выковырять (блок индикатора имею в виду)... как бы программно сделать так, что на ножку атмеги сигнал завёл и в виде циферок получил...наверное всё-таки делить приедятся, это проще чем с неудобным кварцем работать... интересно к561ИЕ16 на 4Мгц потянет?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
СообщениеДобавлено: Пт авг 26, 2011 23:30:35 
Мучитель микросхем
Аватар пользователя

Зарегистрирован: Вс янв 11, 2009 09:29:08
Сообщений: 492
Откуда: Ярославль
Рейтинг сообщения: 0
что-то я не понял... схема собрана? Значит, индикатор есть, и он подключен к процессору? Значит, единственное, чего нет - это входа счетчика?
Частота должна приходить на 11 ногу. А она в схеме используется как выход для управления индикатором... А на порту С есть свободные ноги. Придется переназначить линию cs_lcd другой ноге и перекомпилировать весь код. Тогда можно будет добавить в код процедуры подсчета импульсов.

_________________
Мои верные друзья - АМD и AVR
LM317 - атцтой, LM2576ADJ - форева! :)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
СообщениеДобавлено: Сб авг 27, 2011 09:26:26 
Открыл глаза

Зарегистрирован: Чт янв 31, 2008 15:51:25
Сообщений: 44
Откуда: прим. край
Рейтинг сообщения: 0
да, все собрано, нужен только вход и программа которая будет всем этим управлять.
CodeVisionAVR скачал себе, осталось понять, как там чего переназначить.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
СообщениеДобавлено: Сб авг 27, 2011 18:02:45 
Мучитель микросхем
Аватар пользователя

Зарегистрирован: Вс янв 11, 2009 09:29:08
Сообщений: 492
Откуда: Ярославль
Рейтинг сообщения: 0
я так понимаю, у тебя уже есть прошивка, раз он работает.
Надо смотреть ее исходники, на чем они написаны, и плясать от этого. А процедура вывода на дисплей в прошивке есть точно.

_________________
Мои верные друзья - АМD и AVR
LM317 - атцтой, LM2576ADJ - форева! :)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
СообщениеДобавлено: Ср авг 31, 2011 21:46:54 
Родился

Зарегистрирован: Вс ноя 21, 2010 14:20:56
Сообщений: 4
Рейтинг сообщения: 0
Ситуацию с инициализацией HD44780 можно охарактеризовать словами: «Всем хорош LCD c HD44780, но только чуть-чуть не инициализируется» (напоминает «Всем хороша невеста, но вот чуть-чуть беременна от неизвестного»). Я был в тоске: имею 3 (три) даташита с тремя типами инициализации, несколько скачанных вариантов программ инициализации с программами в Протеус и ничего не идет у меня в компе, ничего не могу приспособить.
Сейчас вот нашел, что не одинок.
ibiza11 на стр.11 этого форума
« Цитата дословно и побуквенно:\Думал на подпрограммы вывода, но как бы я их не упрощал, как бы не увеличивал задержки, результата это не принесло. Следование в точности даташиту тоже результатов не принесло (даташит в моем посте выше). В итоге нашел на давно забытой флешке свою (!!! охренеть) старую программу с инициализацией ЖКИ. Подставил команды оттуда и О, ЧУДО! Свершилось! тут же начало все работать!!! даже с моими подпрограммами вывода (в которых вы не разобрались).
вот собственно команды:
Код:
;7-отключен
;6-выбор регистра
;5-чтение/запись
;4-строб
;3-DB7
;2-DB6
;1-DB5
;0-DB4
.db 0b00000011,0b00000011
.db 0b00000011,0b00000010
.db 0b00000010,0b00001000
.db 0b00000000,0b00001000
.db 0b00000000,0b00000110
.db 0b00000000,0b00001100
.db 0b00000000,0b00001100
.db 0b00000000,0b00000001 »

Замучился проверять. Может кто и подскажет : «А стоит ли проверять?»


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
СообщениеДобавлено: Ср авг 31, 2011 22:27:08 
Мучитель микросхем
Аватар пользователя

Зарегистрирован: Вс янв 11, 2009 09:29:08
Сообщений: 492
Откуда: Ярославль
Рейтинг сообщения: 0
не идет в симуляторе или в железе?
да, я на той же страничке упоминал одну деталь в даташите на дисплейчег, из-за которой он не запускается...

_________________
Мои верные друзья - АМD и AVR
LM317 - атцтой, LM2576ADJ - форева! :)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
СообщениеДобавлено: Чт сен 01, 2011 15:10:37 
Родился

Зарегистрирован: Вс ноя 21, 2010 14:20:56
Сообщений: 4
Рейтинг сообщения: 0
Да ничего не получается, ни в натуре, ни в протеусе. Слепил несколько своих вариантов, впустую. Подумал, решил, что если в Протеус пройдет, то в натуре будет полегче.
Нахожу
http://radioelektr.ru/podklyutchenie-lc ... omment-255
в нем есть работающая исходники и модель протеуса. Воспроизвел. Пробую – не работает. Отправил знакомому, тот ответил, что очень просто, мол нужно переместить немного землю. Пробую – бесполезно. Наверное он пошутил.

Нахожу другой проект. Вычленяю из него только МК и ЛСД. В Протеусе работает –инициализирует. Можете проверить.
В прикреплении-это проект model_ds18b20 (+исходник и файл HEX).
ПЕРЕРАБАТЫВАЮ его на Atmega48 -в прикреплении-это проект model_48-1 (+исходник и файл HEX). Проект работает в протеусе. Можете проверить.

Но у меня готова печатная плата, где линии данных и линии управления на разных портах, в прикреплении – это проект model_48-1 (+исходник и файл HEX). Проект не работает в протеусе. Всего-навсего переключил только две линии управления на другой порт.
И НЕ РАБОТАЕТ. В LCD-48-2.asm можно увидеть следы моей деятельности и отличия от LCD-DS48.asm. Много NOP в двух местах (оставил)-попытка ввести задержки.
Помогите, пожалуйста, если сможете.


Вложения:
Комментарий к файлу: прикреплено 3 проект в протеусе и исходники
1111.rar [44.85 KiB]
Скачиваний: 221
Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
СообщениеДобавлено: Чт сен 01, 2011 15:35:01 
Друг Кота
Аватар пользователя

Карма: 82
Рейтинг сообщений: 1030
Зарегистрирован: Сб апр 02, 2011 12:40:46
Сообщений: 4779
Откуда: Минск
Рейтинг сообщения: 0
Вот пример, который работает с как угодно разбросанными по любым портам линиями LCD:

Код:
//----------

//модуль поддержки LCD 2x16

//----------

#include <Main.h>
#include <Lcd.h>

//---------- Используемые модулем аппаратные ресурсы: ----------

//Модуль LCD используется в 4-битном режиме.
//Чтение данных из модля не используется, сигнал W заземлен.
//Управляющие сигналы: LCD_E, LCD_RS, LCD_D4, LCD_D5, LCD_D6, LCD_D7.
//Для включения подсветки используется порт BKL, активный уровень - высокий.

//Используется функция Delay_ms и макрос Delay_us.

//---------- Таблица пользовательских символов LCD: ----------

__flash char UsrChr[]= { 0x0C,0x12,0x12,0x0C,0x00,0x00,0x00,0x00,   //° (0x00)
                         0x04,0x04,0x1F,0x04,0x04,0x00,0x1F,0x00,   //± (0x01)
                         0x10,0x10,0x10,0x1E,0x11,0x11,0x1E,0x00,   //Ь (0x02)
                         0x15,0x11,0x13,0x15,0x19,0x11,0x11,0x00,   //Й (0x03)
                         0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,   //  (0x04)
                         0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,   //  (0x05)
                         0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,   //  (0x06)
                         0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }; //  (0x07)

//---------- Таблица перекодировки русских букв: ----------

__flash char CharsR[]= { 0x41,0xA0,0x42,0xA1,0xE0,0x45,0xA3,0xA4,
                         0xA5,0x03,0x4B,0xA7,0x4D,0x48,0x4F,0xA8,
                         0x50,0x43,0x54,0xA9,0xAA,0x58,0xE1,0xAB,
                         0xAC,0xE2,0xAD,0xAE,0x02,0xAF,0xB0,0xB1,
                         0x61,0xB2,0xB3,0xB4,0xE3,0x65,0xB6,0xB7,
                         0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0x6F,0xBE,
                         0x70,0x63,0xBF,0x79,0xE4,0x78,0xE5,0xC0,
                         0xC1,0xE6,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7 };

//----------

void LCD_Wr(char d);     //запись байта в LCD
void LCD_Wr4(char d);    //запись ниббла в LCD
void LCD_WrCmd(char d);  //запись команды в LCD
void LCD_WrData(char d); //запись данных LCD
void LCD_UsrChr(void);   //загрузка символов пользователя

//---------- Инициализация LCD: ----------

void LCD_Init(void)
{
  Delay_ms(15);
  LCD_WrCmd(0x30);
  Delay_ms(5);        //delay >4.1 mS
  LCD_WrCmd(0x30);
  Delay_us(100);      //delay >100 uS
  LCD_WrCmd(0x30);
  Delay_ms(5);        //delay >4.1 mS
  LCD_WrCmd(0x20);    //FUNCTION SET (8 bit)
  Delay_ms(15);
  LCD_WrCmd(0x28);    //FUNCTION SET (4 bit)
  Delay_ms(15);
  LCD_WrCmd(0x0C);    //DISPLAY ON
  Delay_ms(15);
  LCD_WrCmd(0x06);    //ENTRY MODE SET
  Delay_ms(15);
  LCD_Clear();        //CLEAR
  Delay_ms(15);
  LCD_UsrChr();       //загрузка символов пользователя
}

//---------- Загрузка LCD CGRAM: ----------

//UsrChr - таблица символов: 8 байт на символ x 8 символов
//Матрица точек 5x8: BYTE1 D4 D3 D2 D1 D0
//                   BYTE2 D4 D3 D2 D1 D0
//                   ...
//                   BYTE8 D4 D3 D2 D1 D0

void LCD_UsrChr(void)
{
  LCD_WrCmd(0x40);    //установка нулевого адреса CGRAM
  for(char i = 0; i < 64; i++)
    LCD_WrData(UsrChr[i]); //загрузка CGRAM
}

//---------- Очистка LCD: ----------

void LCD_Clear(void)
{
  LCD_WrCmd(0x01);    //DISPLAY CLEAR
  Delay_ms(5);        //delay >1.64mS
}
//---------- Включение/выключение подсветки LCD: ----------

void LCD_Backlight(bool on)
{
  if(on) Port_BKL_1;
  else Port_BKL_0;
}

//---------- Запись команды в LCD: ----------

void LCD_WrCmd(char d)
{
  Port_LCD_RS_0;      //RS <- 0
  LCD_Wr(d);          //write byte to LCD
}

//---------- Запись данных в LCD: ----------

void LCD_WrData(char d)
{
  Port_LCD_RS_1;      //RS <- 1
  LCD_Wr(d);          //write byte to LCD
}

//---------- Запись байта в LCD: ----------

void LCD_Wr(char d)
{
  LCD_Wr4(d);
  Delay_us(10);
  LCD_Wr4(__swap_nibbles(d));
  Delay_us(50);
}

//---------- Запись ниббла в LCD: ----------

void LCD_Wr4(char d)
{
  (d & 0x10)? Port_LCD_D4_1 : Port_LCD_D4_0;
  (d & 0x20)? Port_LCD_D5_1 : Port_LCD_D5_0;
  (d & 0x40)? Port_LCD_D6_1 : Port_LCD_D6_0;
  (d & 0x80)? Port_LCD_D7_1 : Port_LCD_D7_0;
  Port_LCD_E_1;       //E <- 1
  Delay_us(2);        //delay 2 uS
  Port_LCD_E_0;       //E <- 0
}

//---------- Установка позиции на LCD: ----------

//line = 1..2
//pos = 1..16

void LCD_Pos(char line, char pos)
{
  pos = pos - 1;
  pos = pos | 0x80;
  if(line > 1)
    pos = pos | 0x40;
  LCD_WrCmd(pos);
}

//----------

void LCD_CurOff(void)
{
  LCD_WrCmd(0x0C);
}

//----------

void LCD_CurOn(void)
{
  LCD_WrCmd(0x0E); //0x01 - мигание знакоместа, 0x02 - курсор on
}

//---------- Cдвиг курсора влево: ----------

void LCD_CurLeft(void)
{
  LCD_WrCmd(0x10);
}

//---------- Вывод символа на LCD: ----------

void LCD_Char(char ch)
{
  if(ch == 0x10) { LCD_Clear(); return; }         //ch = 0x10 - LCD clear
  if(ch == 0x0D) { LCD_Pos(2, 1); return; }       //ch = 0x0D - перевод строки
  if(ch == '°') {LCD_WrData(0x00); return; }      //ch = '°'
   else if(ch < 0xC0) LCD_WrData(ch);             //ch < 0xC0 - english
     else { ch -= 0xC0; LCD_WrData(CharsR[ch]); } //ch >= 0xC0 - russian
}

//---------- Вывод null-terminated string на LCD: ----------

void LCD_Str(char __flash *s)
{
  char __flash *i;
  for(i = s; *i; i++)
    LCD_Char(*i);
}

//---------- Вывод текста меню на LCD: ----------

void LCD_Menu(char __flash *s)
{
  char __flash *i;
  LCD_Clear();         //очистка дисплея
  LCD_Pos(1, 1);       //установка позиции
  for(i = s; *i; i++)
  {
    if(i == s + 16)
      LCD_Pos(2, 1);
    LCD_Char(*i);      //вывод 16-ти символов
  }
}

//---------- Вывод беззнакового числа 0..9999 на LCD: ----------

void LCD_UInt9999(int n)
{
  char d, ch = ' ';
  d = n / 1000;
  if(d)
    ch = d + 0x30;
  LCD_Char(ch);
  n = n % 1000;
  d = n / 100;
  if(ch != ' ' || d)
    ch = d + 0x30;
  LCD_Char(ch);
  n = n % 100;
  d = n / 10;
  if(ch != ' ' || d)
    ch = d + 0x30;
  LCD_Char(ch);
  n = n % 10;
  LCD_Char(n + 0x30);
}


//----------

main.h:

#define LCD_D5   (1 << PC2) //OX - линия данных LCD D5
#define LCD_D4   (1 << PC3) //OX - линия данных LCD D4
#define LCD_D7   (1 << PC4) //OX - линия данных LCD D7
#define LCD_D6   (1 << PC5) //OX - линия данных LCD D6

#define Port_LCD_D7_0 (PORTC &= ~LCD_D7)
#define Port_LCD_D7_1 (PORTC |= LCD_D7)
#define Port_LCD_D6_0 (PORTC &= ~LCD_D6)
#define Port_LCD_D6_1 (PORTC |= LCD_D6)
#define Port_LCD_D5_0 (PORTC &= ~LCD_D5)
#define Port_LCD_D5_1 (PORTC |= LCD_D5)
#define Port_LCD_D4_0 (PORTC &= ~LCD_D4)
#define Port_LCD_D4_1 (PORTC |= LCD_D4)

#define LCD_E    (1 << PD0) //OL - линия E LCD
#define LCD_RS   (1 << PD1) //OL - линия RS LCD

#define Port_LCD_E_0  (PORTD &= ~LCD_E)
#define Port_LCD_E_1  (PORTD |= LCD_E)
#define Port_LCD_RS_0 (PORTD &= ~LCD_RS)
#define Port_LCD_RS_1 (PORTD |= LCD_RS)



Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
СообщениеДобавлено: Пт сен 02, 2011 09:39:52 
Мучитель микросхем
Аватар пользователя

Зарегистрирован: Вс янв 11, 2009 09:29:08
Сообщений: 492
Откуда: Ярославль
Рейтинг сообщения: 0
sedoi писал(а):
Да ничего не получается, ни в натуре, ни в протеусе. Слепил несколько своих вариантов, впустую.
Помогите, пожалуйста, если сможете.


Проверил ваши проекты (у меня протеус 7.7 sp2). Оба работают. На экранчик выдается "Temp=pp , 'C"
В железе не проверял :)
Да, и пришлось поменять компилятор. Source->Add/Remove source files->Code generation tool, стояло "none", поставил "AVRASM2".

_________________
Мои верные друзья - АМD и AVR
LM317 - атцтой, LM2576ADJ - форева! :)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
СообщениеДобавлено: Пт сен 02, 2011 11:55:03 
Вымогатель припоя

Зарегистрирован: Вт ноя 02, 2010 17:46:37
Сообщений: 574
Рейтинг сообщения: 0
ааа не бейте меня сильно :) .Где первый вывод у WH1602A-NGG-CT ?
что-то я в этом даташите нечего понять не могу столько тут накрутили размеров
слева направо ?
Изображение


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
СообщениеДобавлено: Пт сен 02, 2011 22:46:05 
Друг Кота
Аватар пользователя

Карма: 82
Рейтинг сообщений: 1030
Зарегистрирован: Сб апр 02, 2011 12:40:46
Сообщений: 4779
Откуда: Минск
Рейтинг сообщения: 0
Дык левее вывода 16. С выводами 1 и 2 у ЖКИ извечная проблема. GND и VCC могут располагаться с точностью до наоборот.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
СообщениеДобавлено: Сб сен 03, 2011 12:04:59 
Родился

Зарегистрирован: Сб сен 03, 2011 11:56:42
Сообщений: 4
Рейтинг сообщения: 0
Всем привет!
Уже несколько дней тчетно мучаю свой Winstar WH2002L на базе ks0066u.

Запитываю свой девайс и питание заходит в экран, соответственно загорается подсветка и хорошо контрастно первая строчка дисплея. Сразу скажу все ножки шлейфов обзванивал, всё подключено верно без разрывов в том числе и к девайсу. При попытке так называемой инициализации, либо ничего не происходит, либо контраст тускнеет и загоряются чёрным все знакоместа.

Вот код собственноручно писанный:
Код:
                     /* * * * * * * * * * * * *
                      * ДИРЕКТИВЫ ПРОЦЕССОРА  *
                      * * * * * * * * * * * * */

#define F_CPU 8000000UL   /*Частота процессора*/
#include <avr/io.h>            /*Библиотека ввода-вывода*/


                     /* * * * * * * * * * * * * * * * *
                      * ИНИЦИАЛИЗАЦИЯ ПОРТОВ ATMega16 *
                      * * * * * * * * * * * * * * * * */

void IO_Init (void)
{
   MCUCSR |= 0b10000000; /*Отключение интерфейса отладки JTAG*/
   MCUCSR |= 0b10000000; /*на линиях С2-С5 порта С*/

   DDRA = 0b11111111; /*Порт A*/
   PORTA = 0b00000000;

   DDRB = 0b11111111; /*Порт B*/
   PORTB = 0b00000000;

   DDRC = 0b00000011; /*Порт C*/
   PORTC = 0b11111100;

   DDRD = 0b00000000; /*Порт D*/
   PORTD = 0b11111111;
}


                     /* * * * * * * * * * *
                      * ИНИЦИАЛИЗАЦИЯ LCD *
                      * * * * * * * * * * */
void LCD_Init (void)     
{
   Pause(100);
   LCD_Command(0b00100000); /*Число строк и включение дисплея*/
   LCD_Command(0b00100000);
   LCD_Command(0b11000000);
   Pause(50);
   LCD_Command(0b00000000); /*Включение и курсоры*/
   LCD_Command(0b11000000);
   Pause(50);
   LCD_Command(0b00000000); /*Очистка дисплея*/
   LCD_Command(0b00010000);
   Pause(50);
   LCD_Command(0b00000000); /*Смещение курсора и экрана*/
   LCD_Command(0b01100000);
}


                     /* * * * * * * * * * * * *
                      * ПЕРЕДАЧА КОМАНД В LCD *
                      * * * * * * * * * * * * */

void LCD_Command (unsigned char Command)                  
{
asm("cli");
   PORTB &= 0b11111110;                  /*Установка RS=0 (Команда)*/

   PORTB &= 0b10000111;                  /*Очистка линий данных*/
   PORTB |= (Command >> 1) & 0b01111000; /*Передача старшей тетрады данных*/
   PORTB |= 0b00000010;                  /*Установка взводящего сигнала E=1*/
   asm("nop");                           /*Пауза в один цикл процессора для стабилизации*/
   PORTB &= 0b11111101;                  /*Установка исполняющего сигнала E=0*/
   
   asm("nop");                           /*Пауза в один цикл процессора для стабилизации*/
   
   PORTB &= 0b10000111;                  /*Очистка линий данных*/
   PORTB |= (Command << 3) & 0b01111000; /*Передача младшей тетрады данных*/
   PORTB |= 0b00000010;                  /*Установка взводящего сигнала E=1*/
   asm("nop");                           /*Пауза в один цикл процессора для стабилизации*/
   PORTB &= 0b11111101;                  /*Установка исполняющего сигнала E=0*/

   PORTB |= 0b01111000;                  /*Возврат линии данных в высокий уровень (1)*/
asm("sei");
}


                     /* * * * * * * * * * * * *
                      * ПЕРЕДАЧА ДАННЫХ В LCD *
                      * * * * * * * * * * * * */

void LCD_Data (unsigned char Command)                  
{
asm("cli");
   PORTB |= 0b00000001;                  /*Установка RS=0 (Команда)*/

   PORTB &= 0b10000111;                  /*Очистка линий данных*/
   PORTB |= (Command >> 1) & 0b01111000; /*Передача старшей тетрады данных*/
   PORTB |= 0b00000010;                  /*Установка взводящего сигнала E=1*/
   asm("nop");                           /*Пауза в один цикл процессора для стабилизации*/
   PORTB &= 0b11111101;                  /*Установка исполняющего сигнала E=0*/
   
   asm("nop");                           /*Пауза в один цикл процессора для стабилизации*/
   
   PORTB &= 0b10000111;                  /*Очистка линий данных*/
   PORTB |= (Command << 3) & 0b01111000; /*Передача младшей тетрады данных*/
   PORTB |= 0b00000010;                  /*Установка взводящего сигнала E=1*/
   asm("nop");                           /*Пауза в один цикл процессора для стабилизации*/
   PORTB &= 0b11111101;                  /*Установка исполняющего сигнала E=0*/

   PORTB |= 0b01111000;                  /*Возврат линии данных в высокий уровень (1)*/
asm("sei");
}
 
                     /* * * * * * * * * * * *
                      * СТАРТОВАЯ ПРОГРАММА *
                      * * * * * * * * * * * */

int main (void)
{
   
   IO_Init();      /*Инициализация портов*/
   LCD_Init();     /*Инициализация LCD*/
   while(1)        /*Бесконечный цикл-обработчик*/
   {
      Pause(10);
      if( PORTC & 0b00000001 ){PORTC &= 0b11111110;}else{PORTC |= 0b00000001;}
      LCD_Command(0b00000001); //Команда очистки ЖКИ
   }
   return 1;
}

/*Программа задержки*/
void Pause (unsigned int Interval)            
{   /*Множитель +26* на каждый мегагерц процессора*/
   unsigned int i; //декларация переменной для программы задержки
   for (i=0;i<(Interval*208+1);i++){asm("nop");}; //Основной цикл программы задержки
}

                     /* * * * * * * * * * * * *
                      * ПЕРЕОТРИСОВКА НА LCD  *
                      * * * * * * * * * * * * */
void LCD_Draw()
{
   if( PIND & 0b01111111 )
   {
      /*Показываем на экране текст страницы выбранной*/
   }else{
      LCD_Command(0b00000001); //Команда очистки ЖКИ
      LCD_Data('O');
      LCD_Data('S');
      LCD_Data('T');
      LCD_Data('R');
      LCD_Data('O');
   }
}


И собственно следом вопрос, имеет ли принципеальное значение на какой порт посажен экран и на какие ножки. К примеру у меня экран посажен на порт Б следующим образом:

PB0 - RS
PB1 - E
PB2 - E2 (Для больших дисплеев типа Winstar WH4004, в данный момент не используется)
PB3 - Линия № 4 Дисплея
PB4 - Линия № 5 Дисплея
PB5 - Линия № 6 Дисплея
PB6 - Линия № 7 Дисплея
PB7 - Здесь висит звуковая пищалка которая в проге пикает при нажатии клавиш.

Может на этом порте нужно чтото отключить (какойто режим, чтото наподобие JTAG для порта С), который мешает работать ножкам?
Вот фотка как загорается экран целиком:
Изображение
Это она же только в полном размере 14Мегапикселей: http://dc132.file.qip.ru/download/-v4CRCEi/P1010437.JPG?tsid=20110903-051643-92c455ef


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
СообщениеДобавлено: Вс сен 04, 2011 07:06:55 
Поставщик валерьянки для Кота

Карма: 16
Рейтинг сообщений: 329
Зарегистрирован: Вт ноя 27, 2007 11:32:06
Сообщений: 2222
Откуда: Tashkent
Рейтинг сообщения: 0
Меня очень насторожила вот эта запись:
Код:
asm("nop");                           /*Пауза в один цикл процессора для стабилизации*/

Обычно для контроллеров 44780 требуется задержка как минимум 1 мкс, а у вас же тактовая частота 8МГц.
upd: И посмотрите в ассемблерном листинге что генерируется в задержке. Некоторые компиляторы могут выбрасывать некчемные с их точки зрения циклы. Вобще для этой цели лучше использовать таймеры.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
СообщениеДобавлено: Пн сен 05, 2011 03:36:16 
Встал на лапы
Аватар пользователя

Зарегистрирован: Вт авг 19, 2008 14:48:19
Сообщений: 86
Откуда: Харьков
Рейтинг сообщения: 0
У меня сегодня с таким индикатором(16X2) прикол был. У меня их 2шт 1 точно работает второй тоже должен. Подключаю к меге 8 , включаю вижу что-то типа *==^_//Д\\";%<>? долго мучился, 100 раз проверял правильность подключения проводов и наличие контакта, отсутствие КЗ бред выводит и хоть убейся. Подключил второй , включаю вижу "Hello world!" как и было задумано. Кто подскажет в чем может быть причина? Может потому что я + и - первый раз перепутал и чот в первом индикаторе подгорело?

_________________
Муррр.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
СообщениеДобавлено: Пн сен 05, 2011 08:25:01 
Опытный кот

Карма: 3
Рейтинг сообщений: -47
Зарегистрирован: Пт авг 12, 2011 09:14:27
Сообщений: 833
Откуда: Млечный путь/Земля/РФ/Екатеринбург
Рейтинг сообщения: -1
Cricket2107 писал(а):
У меня сегодня с таким индикатором(16X2) прикол был. У меня их 2шт 1 точно работает второй тоже должен. Подключаю к меге 8 , включаю вижу что-то типа *==^_//Д\\";%<>? долго мучился, 100 раз проверял правильность подключения проводов и наличие контакта, отсутствие КЗ бред выводит и хоть убейся. Подключил второй , включаю вижу "Hello world!" как и было задумано. Кто подскажет в чем может быть причина? Может потому что я + и - первый раз перепутал и чот в первом индикаторе подгорело?

Тайминги выдерживаешь?
У меня на двух индентичных заработало когда тайминги снизил(увеличил задержки).

_________________
Разработал:
-BLDC
-ФУОЗ/МПСЗ
-SMART BMS
-ECU/EDC на STM32F4(43%)+CPLD(57%)
-Моноинжектор на ATSAMD20G16
-контроллер эффектов для RGB LED ленты
-умные часы/обратный счет/секундомер
-устройство измерения емкости АКБ


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
СообщениеДобавлено: Пн сен 05, 2011 08:47:30 
Опытный кот

Карма: 3
Рейтинг сообщений: -47
Зарегистрирован: Пт авг 12, 2011 09:14:27
Сообщений: 833
Откуда: Млечный путь/Земля/РФ/Екатеринбург
Рейтинг сообщения: -1
Franz писал(а):

Может на этом порте нужно чтото отключить (какойто режим, чтото наподобие JTAG для порта С), который мешает работать ножкам?
Вот фотка как загорается экран целиком:
Изображение
Это она же только в полном размере 14Мегапикселей: http://dc132.file.qip.ru/download/-v4CRCEi/P1010437.JPG?tsid=20110903-051643-92c455ef

Яркость покрути, при неинициализированном жки должна только верхняя строчка светится(еле еле).
При инициализации на две строки - еле еле две строчки
Код:
//  DDRX_SIG |= (1<<RW)|(1<<RS)|(1<<EN);
  PORT_SIG->ODR |= (1<<RW_LCD)|(1<<RS_LCD)|(1<<EN_LCD);
  ClearBit(PORT_SIG, RW_LCD);
  delay_ms(40);
 
#ifdef HD44780 
  LCD_WriteComInit(0x30);
  delay_ms(10);
  LCD_WriteComInit(0x30);
  delay_ms(2);
  LCD_WriteComInit(0x30);
#endif

_________________
Разработал:
-BLDC
-ФУОЗ/МПСЗ
-SMART BMS
-ECU/EDC на STM32F4(43%)+CPLD(57%)
-Моноинжектор на ATSAMD20G16
-контроллер эффектов для RGB LED ленты
-умные часы/обратный счет/секундомер
-устройство измерения емкости АКБ


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
СообщениеДобавлено: Пн сен 05, 2011 14:22:07 
Встал на лапы
Аватар пользователя

Зарегистрирован: Вт авг 19, 2008 14:48:19
Сообщений: 86
Откуда: Харьков
Рейтинг сообщения: 0
pcb писал(а):
Cricket2107 писал(а):
У меня сегодня с таким индикатором(16X2) прикол был. У меня их 2шт 1 точно работает второй тоже должен. Подключаю к меге 8 , включаю вижу что-то типа *==^_//Д\\";%<>? долго мучился, 100 раз проверял правильность подключения проводов и наличие контакта, отсутствие КЗ бред выводит и хоть убейся. Подключил второй , включаю вижу "Hello world!" как и было задумано. Кто подскажет в чем может быть причина? Может потому что я + и - первый раз перепутал и чот в первом индикаторе подгорело?

Тайминги выдерживаешь?
У меня на двух индентичных заработало когда тайминги снизил(увеличил задержки).


Все разобрался! Этому индикатору нужно минимум 1,5 сек задержки иначе выводит бред.

_________________
Муррр.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
СообщениеДобавлено: Пн сен 05, 2011 16:58:43 
Мучитель микросхем
Аватар пользователя

Зарегистрирован: Вс янв 11, 2009 09:29:08
Сообщений: 492
Откуда: Ярославль
Рейтинг сообщения: 0
полторы секунды?? :o Фигасе тормоз! :)))

_________________
Мои верные друзья - АМD и AVR
LM317 - атцтой, LM2576ADJ - форева! :)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
СообщениеДобавлено: Пн сен 05, 2011 17:17:16 
Встал на лапы
Аватар пользователя

Зарегистрирован: Вт авг 19, 2008 14:48:19
Сообщений: 86
Откуда: Харьков
Рейтинг сообщения: 0
nictrace писал(а):
полторы секунды?? :o Фигасе тормоз! :)))

пробовал 1 сек но тогда выводит 1 раз норм второй раз бред вообщем это он какой-то реально дурканутый. Нормальному ведь и 0,5 сек хватит вполне верно?

_________________
Муррр.


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 2431 ]     ... , , , 36, , , ...  

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y