Работа с ЖКИ на контроллере HD44780 и его аналогах

Дисплеи, датчики и прочие функциональные узлы, управляемые МК.
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение vitalik_1984 »

Ну как то так.
Изображение
Вообще желательно, чтобы силовая часть была разведена широкими дорожками. И как можно ближе к микросхемам чтобы стояли керамические кондеры. Но это уже в тему Вопросы по питанию.
Аватара пользователя
Ghost in shell
Держит паяльник хвостом
Сообщения: 931
Зарегистрирован: Пн июн 15, 2009 06:01:38
Откуда: USSR

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение Ghost in shell »

Доброго времени суток!
Тяжко осилить 61 страницу на 95% ненужной информации, поэтому прошу сильно не ругать за оффтоп.
Работаю с PIC на С с помощью HI-TECH компилятора. Насколько я понял, для работы с LCD либо нужна библиотека, либо самописные функции. В комплект библиотек компилятора входит lcd.h. Но по ее функциям документации нет. Их можно как-то выяснить? Потому что искать библиотеку под компилятор...
Кот гуляет сам по себе, но вблизи холодильника.
Аватара пользователя
urry
Сверлит текстолит когтями
Сообщения: 1262
Зарегистрирован: Пн дек 08, 2008 10:58:48
Откуда: Винница
Контактная информация:

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение urry »

Для любимого хайтека в самплах есть библиотека, которая работает на всех 44780 дисплеях.
Ты не поверишь - на всех, которые мне встречались до этого времени.
Последний раз редактировалось urry Пн мар 25, 2013 08:56:39, всего редактировалось 1 раз.
Аватара пользователя
Ghost in shell
Держит паяльник хвостом
Сообщения: 931
Зарегистрирован: Пн июн 15, 2009 06:01:38
Откуда: USSR

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение Ghost in shell »

Аватар, как аватар... Даже без анимации.
Я насчет функций беспокоюсь, как они в библиотеке называются?
У меня есть хелп по микроС, там написано:
Lcd_Config - Инициализирует порт (port) для работы LCD с заданным распределением разрядов по назначению. Аргументы RS, EN, WR, D7 .. D4 должны быть комбинацией значений 0–7 (например: 3,6,0,7,2,1,4).
Lcd_Init - Инициализирует порт (port) для работы с LCD со стандартным
Lcd_Out - Выводит text на LCD в заданную строку и позицию (аргументы row и col). В качестве аргумента text могут использоваться как строковые переменные, так и литералы
Lcd_Out_Cp - Выводит text на LCD с текущей позиции курсора. В качестве аргумента text могут использоваться как строковые переменные, так и литералы.
Lcd_Chr - Выводит символ character на LCD в заданную строку и позицию (аргументы row и col). В качестве аргумента character может быть использована как переменная, так и литерал.
Lcd_Chr_Cp - Выводит символ character на LCD в текущую строку и позицию. В качестве аргумента character может быть использована как переменная, так и литерал.
Lcd_Cmd - Посылает команду command в LCD. В качестве аргумента можно передавать предопределенные константы. Полный список команд приведен ниже.
Попробую - не бомба, взрыва не будет от ошибки.
Кот гуляет сам по себе, но вблизи холодильника.
Аватара пользователя
urry
Сверлит текстолит когтями
Сообщения: 1262
Зарегистрирован: Пн дек 08, 2008 10:58:48
Откуда: Винница
Контактная информация:

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение urry »

мы точно говорим об одном и том же ?
C:\Program Files\HI-TECH Software\PICC\std\9.60\samples\LCDemo

lcd.h
=======

extern void lcd_write(unsigned char);

/* Clear and home the LCD */

extern void lcd_clear(void);

/* write a string of characters to the LCD */

extern void lcd_puts(const char * s);

/* Go to the specified position */

extern void lcd_goto(unsigned char pos);

/* intialize the LCD - call before anything else */

extern void lcd_init(void);

extern void lcd_putch(char);
===============

зы
ничего особо умного в инициализации - выводе на дисплей нет - по шиту несложно написать самостоятельно - просто хайтековцы умудрились вывести задержки при инициализации такие, которые удовлетворяют большинство как hd, так и ks - мне не встречались такие, которые бы не заводились от этих стандартных функций. А так - даташит читать нужно, да...
Аватара пользователя
Ghost in shell
Держит паяльник хвостом
Сообщения: 931
Зарегистрирован: Пн июн 15, 2009 06:01:38
Откуда: USSR

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение Ghost in shell »

urry да, об этом.
Бибилиотека подключается по-моему так

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

#include <lcd.h>

Можно примеры использования функций? С комментариями, пожалуйста.
Особенно мне интересна работа в 4-битном режиме и произвольное назначение линий порта на RS, E, DB4, DB5, DB6 и DB7.
Кот гуляет сам по себе, но вблизи холодильника.
scrappy
Встал на лапы
Сообщения: 139
Зарегистрирован: Сб май 23, 2009 16:30:23
Откуда: Санкт-Петербург
Контактная информация:

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение scrappy »

Добрый день=)
В продолжении вот этой темы
viewtopic.php?f=24&t=34407
напомню, до сих пор лежат без дела два ваккумнолюминисцентных дисплея, 20 знаков 2 строки.
даташит на дисплей
http://yadi.sk/d/0xaHTm7B3wlTF

дисплей подключается только по 8-битной шине, причем интерфейс INTEL-8080, имеется Outpit сигнал BUSY.
так же имеются пины под названием WR\ SEL\

То-есть на сколько я понял, в отличии от HD44780, где режим команд и режим данных четко разделяются, тут комманды и данные идут одним потоком. только команды имеют свои адреса...

вот, я думаю, нет ли уже готовой библиотеки на С?
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20091
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение Gudd-Head »

Товарищи, обязательно ли проверять Busy Flag в 4-х битном режиме после печати каждого символа?
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
pelia
Родился
Сообщения: 18
Зарегистрирован: Ср мар 06, 2013 01:24:25
Откуда: Ukraine
Контактная информация:

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение pelia »

я - не проверяю, и ножка RW у меня на земле
Dmitrich_163
Родился
Сообщения: 5
Зарегистрирован: Пт апр 12, 2013 21:54:42

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение Dmitrich_163 »

Залил в Atmega8 прошивку из примеров CodeVisionAVR, теперь дисплей кроме "Hello World" ничего не показывает, помогите разобраться новичку.
Исходный код.

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

#ifndef _LCD_INCLUDED_ 
#define _LCD_INCLUDED_

#pragma used+

void _lcd_ready(void);
void _lcd_write_data(unsigned char data);
// write a byte to the LCD character generator or display RAM
void lcd_write_byte(unsigned char addr, unsigned char data);
// read a byte from the LCD character generator or display RAM
unsigned char lcd_read_byte(unsigned char addr);
// set the LCD display positiоn x=0..39 y=0..3
void lcd_gotoxy(unsigned char x, unsigned char y);

// clear the LCD
void lcd_clear(void);
void lcd_putchar(char c);
// write the string str located in SRAM to the LCD
void lcd_puts(char *str);
// write the string str located in FLASH to the LCD
void lcd_putsf(char flash *str);
// initialize the LCD controller
unsigned char lcd_init(unsigned char lcd_columns);
// writes a control byte to the LCD
void lcd_control (unsigned char control);

#pragma used-
#pragma library lcd.lib

#endif
pelia
Родился
Сообщения: 18
Зарегистрирован: Ср мар 06, 2013 01:24:25
Откуда: Ukraine
Контактная информация:

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение pelia »

Сама программа должна выглядеть приблизительно так:

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

/*
.Проект: Простой термометр для дома с двумя датчиками ds18b20
.Автор:Гаркуша Антон
.E-mail:gam-raingers@mail.ru
.Дата:29.06.2008
.Проект: Простой термометр для дома с двумя датчиками ds18b20 на дисплее 16х1 и одновременным показанием двух датчиков V1.16.1
.Rebuild by Pelia
.E-mail:pelia@smtp.ru
.Дата:15.03.2013
.При программировании посредством PonyProg поставить SPIEN=1, SUT0=1. Остальные снять! Внешний кварц=10MHz
*/
#define F_CPU 1000000L // Pelia дописал внешний кварц 10МГц
#include<avr/io.h>
#include<util/delay.h>
#include<avr/interrupt.h>
#include <stdbool.h>
#define RS PB0
#define E  PB1

unsigned char i=0,j=0,z=0;
unsigned char was_conflict=0; //Признак наличия конфликта битов
unsigned char temperature=0;  //Значение t в целых числах
int grand_temperature=0; //Значение t со знаком,полученное от датчика(16 бит)
unsigned char des_temperature=0; //Значение t в десятых долях
unsigned char cifra=0; //Вспомогательная переменная для индикации t
unsigned char znak=0;  //Знак температуры: 0 - "+";1 - "-"
unsigned char precense_ds18b20=0; //Признак присутствия датчика
unsigned char buffer[16]={'P','e','l','i','a','@','s','m','t','p','.','r','u',' ',' ',' '}; //Pelia было 8 знаков
unsigned char ROM1[8]={0,0,0,0,0,0,0,0};
unsigned char ROM2[8]={0,0,0,0,0,0,0,0};
bool get_for_two=false;
//======================
void send_command(unsigned char command);
void send_data(unsigned char data);
void ini_LCD(void);
void nosig(void);
void LCD_pause(void);
unsigned char show_cifra(unsigned char i);
void reset_ds1820(void);
void send_ds1820_command(unsigned char command);
void receive_ds1820(void);
unsigned char create_des(void);
void search_ds1820_ROM(void);
void send_ROM_ds1820(unsigned char ROM);
void send_E1(void);
void send_E2(void);
void send_0(void);
void send_1(void);
void zapros_bita(void);


int main(void)
{
DDRB=0xFF;
DDRD=0x00;           // Шина изначально свободна
PORTD=0x20;
TIMSK=0x80;
SREG=0x80;
TCNT1=0x48E5;
sei();
ini_LCD();
TCCR1B=0x04;

while(1)
{
if(z==0) ////Pelia дописал: для получения двух значений
 {
 z=1;
 }
 else
 {
 z=0;
 }
//Получение от датчиков значений температуры
 search_ds1820_ROM(); //получение кода для 1-го
 search_ds1820_ROM(); //получение кода для 2-го
 reset_ds1820();
 send_ds1820_command(0x55);  //Адресация ROM
 send_ROM_ds1820(z);
 send_ds1820_command(0x44);  //Команда измерения t

  for(j=0;j<80;j++)          //Временная пауза 800 мс
    {   _delay_loop_2(25000);    }

 reset_ds1820();
 send_ds1820_command(0x55);  //Адресация ROM
 send_ROM_ds1820(z);
 send_ds1820_command(0xBE);
 receive_ds1820();
 
    
}
};

Процедуры - вырезаны для экономии места...
Dmitrich_163
Родился
Сообщения: 5
Зарегистрирован: Пт апр 12, 2013 21:54:42

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение Dmitrich_163 »

Спасибо, поробывал, но все тоже самое. Я подозреваю что в энергонезависимую память дисплея записал фразу "Hello World". Пытаюсь вывести другие слова но ничего не получается, постоянно горит "Hello World".
Как очистить памят дисплея???
Аватара пользователя
ibiza11
Поставщик валерьянки для Кота
Сообщения: 1900
Зарегистрирован: Сб фев 21, 2009 13:11:40
Откуда: Москва

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение ibiza11 »

Там нет энергонезависимой памяти, которую можно было бы прошить в обычном режиме.
Для вывода используется ОЗУ, которое очищается после отключения питания. А также в составе команд инициализации содержится команда очистки дисплея.
Вы привели не весь исходник, а только часть с описаниями функций.
Ставим плюсы: )
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение vitalik_1984 »

Dmitrich_163 писал(а):Спасибо, поробОвал, но все тоже самое. Я подозреваю что в энергонезависимую память дисплея записал фразу "Hello World". Пытаюсь вывести другие слова но ничего не получается, постоянно горит "Hello World".
Как очистить памят дисплея???

Подозреваю что у вас из-за ошибки не компилируется новый код и вы просто видите старую прошивку.
Dmitrich_163
Родился
Сообщения: 5
Зарегистрирован: Пт апр 12, 2013 21:54:42

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение Dmitrich_163 »

Спасибо, разобрался, действительно программа новая не прописывалась и я видел старую прошивку... :?
Бар-Барсик
Нашел транзистор. Понюхал.
Сообщения: 155
Зарегистрирован: Вс июн 27, 2010 17:24:13

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение Бар-Барсик »

Написал программу для atmega16 и WH0802. использовал три разные готовые библиотеки. в протеусе на лсд 2х16 всё прекрасно работает. Зашиваю в реальный мк - WH0802 ничего не отображает. пробовал 4 и 8 битный режим, три разных библиотеки. я так понял что ST7066IC и HD44780 аналоги. В чём может быть проблема, Дисплею настала крышка или проблема в коде? ломаю голову 4 дня.
Вложения
mega16_LCD - копия.rar
(29.36 КБ) 170 скачиваний
hidro.rar
(14.85 КБ) 143 скачивания
uk8amk
Поставщик валерьянки для Кота
Сообщения: 2222
Зарегистрирован: Вт ноя 27, 2007 11:32:06
Откуда: Tashkent

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение uk8amk »

При включении без МК дисплей квадратики показывает?
Контрастность покрутить пробовали?
akl
Друг Кота
Сообщения: 4444
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение akl »

JTAG отключить fuse-битом JTAGEN не забыли?
Бар-Барсик
Нашел транзистор. Понюхал.
Сообщения: 155
Зарегистрирован: Вс июн 27, 2010 17:24:13

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение Бар-Барсик »

Спасибо большое, проблема была в JTAG
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение Alexeyslav »

обязательно ли проверять Busy Flag в 4-х битном режиме после печати каждого символа?

Вообще - обязательно. Но если у тебя есть уверенность что дисплей точно успеет выполнить команду перед тем как ты пошлешь ему другую - можно не проверять. Обычно такая гарантия дается если вставить жесткую задержку в коде после передачи в дисплей каждой команды.
Ответить

Вернуться в «Периферия»