Автор Тема: Работа с ЖКИ  (Прочитано 16850 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн lgedmitry

  • Старожил
  • *****
  • Сообщений: 4621
  • Репутация: 30
  • Сергей, Рыбинск
  • Поблагодарили: +701
Работа с ЖКИ
« : 02 Октября 2013, 21:30:30 »
0
Сегодня-таки научился буквы писАть.
Надо сказать, готового рецепта в инете накопать не смог.
Пришлось помучиться.

Вот что получилось: (Извините, но у Вас нет доступа в Галерею)

Выкладываю листинг, вдруг кому полезно будет:
*
 * lcd_servo1.asm
 *
 *  Created: 30.09.2013 19:18:45
 *   Author: se
 */

.macro del //задержка
 
ldi bebe,@2  //0,0,1-0.6338us
ldi meme,@1  //0,1,0-0.16ms
ldi kuku,@0  //1,0,0-40.96ms
subi bebe,1
sbci meme,0
sbci kuku,0
brcc pc-3
.endmacro

.macro lcdcom //отправка команды в ЛСД
cbi portc,rs
ldi bebe,@0
out portd,bebe
sbi portc,e
del 0,0,3
cbi portc,e
del 0,0,60
.endmacro

.macro lcddata //отправка данных в ЛСД
sbi portc,rs
ldi bebe,@0
out portd,bebe
sbi portc,e
del 0,0,3
cbi portc,e
del 0,0,60
.endmacro

.macro initlcd
//настраиваем порты Д-на вывод данных. С4 и С5 на вывод е и rs соответственно
ldi bebe,255
out ddrd,bebe
out portd,bebe
in bebe,ddrc
sbr bebe,((1<<rs)|(1<<e))
out ddrc,bebe
sbi portc,rs
sbi portc,e
del 0,200,0

lcdcom 0b00111000 //8бит шина 2строки 5*8 пикселов в знаке
lcdcom 0b00001100
//забиваем символы в знакогенератор
lcdcom 0b01000000
// Б
lcddata 0b00011110
lcddata 0b00001001
lcddata 0b00001000
lcddata 0b00001110
lcddata 0b00001001
lcddata 0b00001001
lcddata 0b00010111
lcddata 0b00000000
// Е
lcddata 0b00011110
lcddata 0b00001001
lcddata 0b00001000
lcddata 0b00001100
lcddata 0b00001010
lcddata 0b00001000
lcddata 0b00010111
lcddata 0b00000000
// Р
lcddata 0b00011110
lcddata 0b00001001
lcddata 0b00001001
lcddata 0b00001101
lcddata 0b00001011
lcddata 0b00001000
lcddata 0b00010100
lcddata 0b00000000
// Н
lcddata 0b00011010
lcddata 0b00001001
lcddata 0b00001001
lcddata 0b00001101
lcddata 0b00001011
lcddata 0b00001001
lcddata 0b00010001
lcddata 0b00000000
// Д
lcddata 0b00011110
lcddata 0b00001001
lcddata 0b00001001
lcddata 0b00001001
lcddata 0b00001101
lcddata 0b00001011
lcddata 0b00010001
lcddata 0b00000000
// Й
lcddata 0b00011010
lcddata 0b00001000
lcddata 0b00001001
lcddata 0b00001011
lcddata 0b00001101
lcddata 0b00001001
lcddata 0b00010001
lcddata 0b00000000
// -
lcddata 0b00000000
lcddata 0b00000000
lcddata 0b00000000
lcddata 0b00011110
lcddata 0b00000001
lcddata 0b00000000
lcddata 0b00000000
lcddata 0b00000000

lcdcom 0b00000001
del 0,17,255
lcdcom 0b00000110
.endmacro

.equ rs=5
.equ e=4
.def bebe=r16
.def meme=r17
.def kuku=r18
.org 0
rjmp start

start:
initlcd


lcdcom 0b00000001
del 0,10,0
lcddata 'n'
lcddata 'u'
lcddata 'c'
lcddata 'l'
lcddata 'o'
lcddata 'n'
lcddata 0x20
lcddata '-'
lcdcom 0b11000110
lcddata 6
lcddata 0x20
lcddata 0
lcddata 1
lcddata 2
lcddata 1
lcddata 3
lcddata 4
lcddata 1
lcddata 5
loop:
rjmp loop
« Последнее редактирование: 02 Октября 2013, 21:38:17 от kotofey »

Оффлайн Catcatcat

  • Хороший знакомый
  • **
  • Сообщений: 78
  • Репутация: 1
  • Геннадий, Днипро
  • Поблагодарили: +1
    • Catcatcat electronics
Re: Работа с ЖКИ
« Ответ #1 : 02 Октября 2013, 22:38:27 »
0
вот мой вариант работы с HD44780 или KS0066U, на Си.
http://catcatcat.d-lan.dp.ua/skachat/biblioteki/biblioteka-dlya-rabotyi-s-lcd-indikatorami-na-drayvere-hd44780-ili-ks0066u/

Библиотека состоит из 5 функций которые облегчают вывод на индикаторы любых сообщений. Библиотека корректно выводить как латинские так и русские символы, очень удобна для формирования строковых сообщений.

InitLCD ()  - функция начальной инициализации дисплея. Необходимо использовать один раз в начале программы.

ClearLCD () – очистка индикатора. Когда необходимо полностью очистить индикатор.

CursorLCD (unsigned char stroka,unsigned char stolbec), где stroka – номер строки 0-3, stolbec – 0-40. В функции нет проверки привязки к типу индикатора, по этому необходимо корректно вводить номер столбца и номер строки. Используем эту функцию, когда необходимо установить курсор для вывода сообщения с определенной позиции индикатора. Пример, CursorLCD(0,5); – вывод в самую верхнюю строку с 6 знакоместа.

StringLCD (const unsigned char *str); – вывод строки текста в положение курсора, длина текста не должна превышать 255 символов. Хотя для вывода на индикатор необходимо учитывать его длину. Необходимо понимать, что драйвер HD44780 представляет собой управления до 40 знакомест, а в зависимости от того как производитель подключил драйвер к ЖКИ матрице и сколько он таких драйверов использует в дисплее, то превышение длины строки может в одном варианте привести к потере информации, в другом, то что конец строки появиться на третей или четвертой строке дисплея.

Пример,StringLCD(“Привет мир ILLISSI!!”);



SendLCDdata (unsigned char data, unsigned char rs); – загрузка в индикатор команды или данных для вывода на индикатор. Где data - код символа или команда, rs - 0 команда, 1 – данные. Предназначена когда необходимо вывести какой-то определенный (не печатный) символ из таблицы кодировки или команду. Пример, SendLCDdata (0xEF,1); – выводит на дисплей символ градус, SendLCDdata (0b00001111,0); – команда – дисплей включен/курсор включен/мигание курсора включено.

Оффлайн lgedmitry

  • Старожил
  • *****
  • Сообщений: 4621
  • Репутация: 30
  • Сергей, Рыбинск
  • Поблагодарили: +701
Re: Работа с ЖКИ
« Ответ #2 : 02 Октября 2013, 22:56:15 »
0
Catcatcat, Ген, завтра попробую твой вывод строк поглядеть  поближе. Темка интересная :v:

Оффлайн Catcatcat

  • Хороший знакомый
  • **
  • Сообщений: 78
  • Репутация: 1
  • Геннадий, Днипро
  • Поблагодарили: +1
    • Catcatcat electronics
Re: Работа с ЖКИ
« Ответ #3 : 03 Октября 2013, 07:56:16 »
0
Если будут непонятки спрашивай помогу.

Оффлайн xar

  • Старожил
  • *****
  • Сообщений: 5224
  • Репутация: 16
  • Ренат
  • Поблагодарили: +271
Re: Работа с ЖКИ
« Ответ #4 : 03 Октября 2013, 09:56:24 »
0
lgedmitry, Шрифт прикольный )

Оффлайн lgedmitry

  • Старожил
  • *****
  • Сообщений: 4621
  • Репутация: 30
  • Сергей, Рыбинск
  • Поблагодарили: +701
Re: Работа с ЖКИ
« Ответ #5 : 03 Октября 2013, 10:42:47 »
0
xar, когда-то давно  я на ротной стенгазете буковки плакатным пером выписывал. А тепрь и руки не те, да и противная буква "М" никак в слове "ГРОМК." не выходит: либо на М не похоже,  либо стилистика нарушается.
Могет кто другое слово знает, чтоб вместо "ГРОМК." написать можно было? ;-[

и добавил...
кажись, придумал! Надо написать: "УРОВЕНЬ". И буквы все нормальные, и сокращать не придётся :yah:
« Последнее редактирование: 03 Октября 2013, 12:55:04 от lgedmitry »

Оффлайн xar

  • Старожил
  • *****
  • Сообщений: 5224
  • Репутация: 16
  • Ренат
  • Поблагодарили: +271
Re: Работа с ЖКИ
« Ответ #6 : 03 Октября 2013, 17:52:13 »
0
И буквы все нормальные, и сокращать не придётся
и по олдовому :v:

Оффлайн blindman

  • Старожил
  • *****
  • Сообщений: 798
  • Репутация: 13
  • Андрей
  • Поблагодарили: +18
Re: Работа с ЖКИ
« Ответ #7 : 03 Октября 2013, 19:38:34 »
0
А можно я немного поумничаю ?  ;-[

Родной атмеловский ассемблер делает метки в макросах локальными, поэтому вполне можно писать так
.macro del //задержка
ldi bebe,@2  //0,0,1-0.6338us
ldi meme,@1  //0,1,0-0.16ms
ldi kuku,@0  //1,0,0-40.96ms
loop:
subi bebe,1
sbci meme,0
sbci kuku,0
brcc loop
.endmacro

Куда понятнее чем brcc pc-3

Правда с гнутым ассемблером такое не прокатывает, если сделать метку loop внутри макроса, то она будет размножена при каждой подстановке, и получим кучу ошибок. там надо использовать другой синтаксис для локальных меток:

.macro del d1 d2 d3
ldi bebe,\d3  //0,0,1-0.6338us
ldi meme,\d2  //0,1,0-0.16ms
ldi kuku,\d1 //1,0,0-40.96ms
1:
subi bebe,1
sbci meme,0
sbci kuku,0
brcc 1b
.endmacro

Но все же del, lcdcom и lcddata лучше оформить в виде подпрограмм, а не макросов. А то память может очень быстро закончиться.

Оффлайн Catcatcat

  • Хороший знакомый
  • **
  • Сообщений: 78
  • Репутация: 1
  • Геннадий, Днипро
  • Поблагодарили: +1
    • Catcatcat electronics
Re: Работа с ЖКИ
« Ответ #8 : 03 Октября 2013, 19:52:16 »
0
Я на ассемблере лет 8 сидел, и все никак не решался на Си перейти, а когда перешел, забыл ассемблер, как страшный сон. Как на Си все легко :yah:. Думаю новичкам надо с Си начинать. Хотя знание ассемблера обалденно помогает. Иногда читаешь на форумах, народ задает такие нелепые вопросы, что понимаешь Си немного отрывает от сути железа. Но зато перейти с одной модели контроллера на другою нет никаких проблем. И плюсов программирования на Си больше, главное время разработки значительно снижается.

Оффлайн hippo64

  • Читаю форум
  • *****
  • Сообщений: 7135
  • Репутация: 72
  • Владимир
  • Поблагодарили: +5153
Re: Работа с ЖКИ
« Ответ #9 : 03 Октября 2013, 20:44:46 »
0
А мне как вдолбили за мк и ассемблер, так никак и не решусь для них на сях писать

Оффлайн lgedmitry

  • Старожил
  • *****
  • Сообщений: 4621
  • Репутация: 30
  • Сергей, Рыбинск
  • Поблагодарили: +701
Re: Работа с ЖКИ
« Ответ #10 : 03 Октября 2013, 20:48:12 »
0
Но все же del, lcdcom и lcddata лучше оформить в виде подпрограмм, а не макросов. А то память может очень быстро закончиться.
Андрей, вот именно этим сейчас и занимаюсь. ;)
Только в этой связи у меня следующая какашка вылезла: имею (на данный момент): один файл основной и 2 файла с подпрограммами.
Пишу в основном файле, в месте, где тушки подпрограмм должны быть: ".include d:\ и тд. и тп..." А противный компиллятор матерится, мол я вызываю подпрограммы, каких нету. Не хочет он, отчего-то открыть вложенные файлы и поискать там нужные подпрограммы. Как это победить?
Боюсь, если просто ".include d:\ и тд. и тп..." всунуть в начало программы, то и подпрограммы вместо конца в начале окажутся, чего совсем бы не хотелось.

А так всё с подпрограммами заработало, когда я просто текст из тех двух файлов в основной скопипастил. Только мне такой подход не очень импонирует. Ибо, когда подпрограмм будет раз в 5 больше - я в этом файле заблужусь. :wall:

Оффлайн Catcatcat

  • Хороший знакомый
  • **
  • Сообщений: 78
  • Репутация: 1
  • Геннадий, Днипро
  • Поблагодарили: +1
    • Catcatcat electronics
Re: Работа с ЖКИ
« Ответ #11 : 04 Октября 2013, 15:17:46 »
0
ну насколько я понимаю

если такое написание:
#include <libpic30.h>  - для файлов располагающих в каталогах по умолчанию. типа компилятор сам знает куда лесть и где искать.
если такое...
#include "graphic.h" - эти файлы должны находиться в рабочей папке вместе с главным файлом программы (main).

Оффлайн lgedmitry

  • Старожил
  • *****
  • Сообщений: 4621
  • Репутация: 30
  • Сергей, Рыбинск
  • Поблагодарили: +701
Re: Работа с ЖКИ
« Ответ #12 : 04 Октября 2013, 16:03:37 »
0
. Думаю новичкам надо с Си начинать.
Уже тоже начинаю так думать.  :-X

Оффлайн technic

  • Наш человек
  • ****
  • Сообщений: 348
  • Репутация: 0
  • Андрей, Вильнюс
  • Поблагодарили: +7
Re: Работа с ЖКИ
« Ответ #13 : 04 Октября 2013, 16:33:28 »
0
Я начинал с ассемблера. Потом на C перешел. Но случаются рецедивы, когда какую-нибудь функцийку на ассемблере дорисовываю, когда хочется, чтобы код работал так, как я написал, а не как компилятор наоптимизировал...

Оффлайн lgedmitry

  • Старожил
  • *****
  • Сообщений: 4621
  • Репутация: 30
  • Сергей, Рыбинск
  • Поблагодарили: +701
Re: Работа с ЖКИ
« Ответ #14 : 09 Октября 2013, 22:02:56 »
0
Первый опыт с Сями
VID 20131009 224801

Во-первых, надо на 8-ми проводное подключение ЖК перейти - должно быть быстрее, а то мне такая скорость не очень что-то.
А может ещё и ассемблерную вставку сделать. Потому, как не знаю, как можно по-быстрому в Си поделить на 2 с остатком. В ассемблере - проще простого. А тут-сдвинуть вправо легко, а вот где я carry возьму потом  :d_know:

Оффлайн Catcatcat

  • Хороший знакомый
  • **
  • Сообщений: 78
  • Репутация: 1
  • Геннадий, Днипро
  • Поблагодарили: +1
    • Catcatcat electronics
Re: Работа с ЖКИ
« Ответ #15 : 09 Октября 2013, 22:17:39 »
0
Не заморачивайся, в Си то же сдвиг есть  ;D 8 проводная много ножек занимает, а так одним портом (8 битным) можешь полностью управиться с управлением.

Оффлайн blindman

  • Старожил
  • *****
  • Сообщений: 798
  • Репутация: 13
  • Андрей
  • Поблагодарили: +18
Re: Работа с ЖКИ
« Ответ #16 : 10 Октября 2013, 02:51:15 »
0
а то мне такая скорость не очень что-то
Да нормальная скорость. Я вижу обычную инерционность ЖКИ, от которой никуда не деться. Можно попробовать ее чуть уменьшить регулировкой контрастности .
сдвинуть вправо легко, а вот где я carry возьму потом
У ты бери не потом, а заранее : (x & 1)

Оффлайн khvilon

  • Старожил
  • *****
  • Сообщений: 1698
  • Репутация: 16
  • женя, дер.кожухово, обращаться на ты
  • Поблагодарили: +146
Re: Работа с ЖКИ
« Ответ #17 : 10 Октября 2013, 03:38:45 »
0
У ты бери не потом, а заранее : (x & 1)
или в более общем случае
x % y;
или в частном
x % 2;

Оффлайн Catcatcat

  • Хороший знакомый
  • **
  • Сообщений: 78
  • Репутация: 1
  • Геннадий, Днипро
  • Поблагодарили: +1
    • Catcatcat electronics
Re: Работа с ЖКИ
« Ответ #18 : 10 Октября 2013, 09:47:58 »
0
Цитировать (выделенное)
Я вижу обычную инерционность ЖКИ
подтверждаю, ЖКИ такого типа - очень инерционные, поэтому супер пупер скорости вывода индикации не получиться. Это не ОЛЭД на которых можно хоть кино смотреть ;D

A library OLED driver SEPS114A
« Последнее редактирование: 10 Октября 2013, 10:01:03 от Catcatcat »

Оффлайн lgedmitry

  • Старожил
  • *****
  • Сообщений: 4621
  • Репутация: 30
  • Сергей, Рыбинск
  • Поблагодарили: +701
Re: Работа с ЖКИ
« Ответ #19 : 29 Октября 2013, 09:27:03 »
0
VID 20131029 105910

Кажись доделал.
Щелчков нет. По рецепту одесского камрада Лёши (aleyer), победил задержкой в 2мсек между включением "новых" реле и выключением "старых".
Дольше пришлось возится с детектированием помех индикатором уровня. Победил лишь питанием реле и атмеги от разных БП. Пришлось малость испортить безупречную девственность рисунка печатки. Там изначально всё на одной земле сидело ???
Думаю, в усе условия всёж-таки попроще будут. Там это всё на выходе будет висеть, а не на входе. И не будет длиннющих проводков.

 

Похожие темы

  Тема / Автор Ответов Последний ответ
10 Ответов
12448 Просмотров
Последний ответ 28 Июня 2012, 17:35:57
от tim
81 Ответов
83944 Просмотров
Последний ответ 10 Июля 2016, 21:46:23
от hippo64
9 Ответов
12248 Просмотров
Последний ответ 19 Февраля 2013, 06:52:36
от WolfTheGrey
31 Ответов
31835 Просмотров
Последний ответ 24 Марта 2016, 19:16:19
от xar
4 Ответов
6165 Просмотров
Последний ответ 14 Сентября 2017, 10:12:43
от Станислав