Администрация форума не несёт ответственности за достоверность информации и оставляет за собой право редактировать или в особых случаях даже удалять посты без предупреждения. Спасибо за понимание.

Программирование ATMEL в BASCOM.

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.



LCD 40*4

Сообщений 1 страница 20 из 20

1

Здравствуйте!
Имеется LCD 40*4 (Winstar 4006A), Atmega8 и две программы:

$regfile = "m8def.dat"
$crystal = 4000000
$baud = 9600
Dim ___lcdno As Byte
Config Lcd = 40 * 4
Config Lcdpin = Pin , Rs = Portb.0 , E = Portb.2 , E2 = Portb.3
Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.5
Config Lcdpin = Pin , Db6 = Portb.6 , Db7 = Portb.7
___lcdno = 0
Initlcd
Cls
Cursor Off
___lcdno = 1
Initlcd
Cls
Cursor Off
___lcdno = 0
Locate 1 , 1
Lcd "1"
Locate 2 , 1
Lcd "2"
___lcdno = 1
Locate 1 , 1
Lcd "3"
Locate 2 , 1
Lcd "4"
End

и второй вариант

$regfile = "m8def.dat"
$crystal = 4000000
$lib "lcd4e2.lbx"
Config Lcdpin = Pin , Rs = Portb.0 , E = Portb.2 , E2 = Portb.3
Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.5
Config Lcdpin = Pin , Db6 = Portb.6 , Db7 = Portb.7
Config Lcd = 40 * 4
Dim ___lcde As Byte
Cursor Off

Main:
___lcde = 0
Locate 1 , 1
Lcd "1"
Locate 2 , 1
Lcd "2"
Cursor Off
___lcde = 1
Locate 1 , 1
Lcd "3"
Locate 2 , 1
Lcd "4"
Cursor Off
End

Но и в первом и во втором вариантах происходит следующее:
- цифры 1 и 3 находятся там где им положено быть: 1(3) ряд-1 место
- а вот цифры 2 и 3 оказываются в позициях 2-25 и 4-25 вместо требуемых 2-1 и 4-1.

Как вернуть "блудных" на их место?

0

2

Cursor off              ' Отключаем курсор
Locate 1 , 1           'Отображение начинается с  1 строки с 1 знакоместа
Lcd "1"                 'Отображаем 1
Locate 2 , 1           'Отображение начинается с  2 строки с 1 знакоместа
Lcd "2"                  ' Отображаем 2
Locate 3 , 1            'Отображение начинается с  3 строки с 1 знакоместа
Lcd "3"                  ' Отображаем 3
Locate 4 , 1          'Отображение начинается с  4 строки с 1 знакоместа
Lcd "4"

Config Lcdpin = Pin , Rs = Portb.0 , E = Portb.2 , E2 = Portb.3
Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.5
Config Lcdpin = Pin , Db6 = Portb.6 , Db7 = Portb.7
Config Lcd = 40 * 4                                                '- 4 строки по 40 знакомест
Библиотеку $lib "lcd4e2.lbx" можно не использовать если прописаны ноги в программе.У меня например не отображались значения на Winstar 8x2 из-за библиотеки.

Dim ___lcde As Byte "объявляем переменную типа байт
Тут она меняется с 0 по 1
___lcde = 0
___lcde = 1 но не отображается это зачем?

Отредактировано Hard (2015-06-14 19:23:38)

0

3

http://sh.uploads.ru/t/Ya3q9.jpg

Твой дисплей... нужно точно указывать координаты на отображение

Отредактировано Hard (2015-06-14 20:21:53)

0

4

Похоже, эти грабли будут повторяться... ;)

Код:
$Regfile="m8def.dat"
$Crystal=1000000
$hwstack=64
$swstack=64
$framesize=64

'$lib "lcd4e2.lbx"

Config Lcd = 40 * 4
Config Lcdpin = Pin , Rs =  Portb.0 , E = Portb.2 , E2 = Portb.3
Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.5
Config Lcdpin = Pin , Db6 = Portb.6 , Db7 = Portb.7
Cursor Off

Locate 1, 1
Lcd "Bóoã"
Waitms 100

Locate 2, 1
Lcd "¸½äop¼a常"
Waitms 100

Locate 3, 1
Lcd "³ »Æ²o¹"
Waitms 100

Locate 4, 1
Lcd "c¿poºe"

End

В результате:
http://s7.uploads.ru/t/mFJ3h.jpg

Что опять не так ?!  :O
Подключения в Протеусе правильные, проверено.

Такое ощущение, что модель глючная...
Отдельно Е1 и Е2 работают, но вывод идет в верхней или в нижней половинке.
Вместе - только в верхней, да еще и позиции не совпадают с программой, но всегда одинаково.

Голову уже сломал...  :dontknow:

0

5

Nord написал(а):

Config Lcd = 40 * 4

Должно быть.

Код:
Config Lcd = 40x4

+1

6

Nord написал(а):

Что опять не так ?!  
Подключения в Протеусе правильные, проверено.
Такое ощущение, что модель глючная...
Отдельно Е1 и Е2 работают, но вывод идет в верхней или в нижней половинке.
Вместе - только в верхней, да еще и позиции не совпадают с программой, но всегда одинаково.

Попробуйте так

+1

7

sasha_1973 написал(а):

Попробуйте так

Думал про этот вариант.
Оставил "на сладкое" ;) , хочется избавиться от граблей при обычном включении... ;)

0

8

Пётр написал(а):

Nord написал(а):Config Lcd = 40 * 4Должно быть.Код:Config Lcd = 40x4

Так-то да, но всегда работало с "*", на всех практически листингах написание такое же, поэтому на данном месте не акцентировался.
Сенкс, попробуем исправиться... ;)

0

9

Как вариант, но я бы сделал через PCF8574.

+1

10

sasha_1973 написал(а):

Как вариант, но я бы сделал через PCF8574.

Спасибо, вечером попробую.

Все равно - I2C - "на сладкое"... ;)

0

11

Пётр написал(а):

Nord написал(а):Config Lcd = 40 * 4Должно быть.Код:Config Lcd = 40x4

На "х" при компиляции выдает ошибку.
Кстати, даже в онлайн справке написано "*"...

0

12

Небольшой отчет по пройденным шагам...

При использовании библиотеки подключение дисплея к МК можно не описывать, что, собственно не открытие...
Обязательно наличие ___lcde = 0 (или =1) - переключает верх/низ...

Код:
$Regfile="m8def.dat"
$Crystal=1000000
$hwstack=64
$swstack=64
$framesize=64

$lib "lcd4e2.lbx"

Dim ___lcde As Byte

Config Lcd = 40 * 4
'Config Lcdpin = Pin , Rs =  Portb.0 , E = Portb.2 , E2 = Portb.3
'Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.5
'Config Lcdpin = Pin , Db6 = Portb.6 , Db7 = Portb.7

'Config Lcdbus = 4
'InitLcd
Cursor Off
'___lcde = 0 : Initlcd : Cls ' initialize each chip and clear display
'___lcde = 1 : Initlcd : Cls

___lcde = 0

Locate 1 , 1
Lcd "Bóoã********************"
Waitms 500

___lcde = 0
'Home
Locate 2 , 1
Lcd "¸½äop¼a常"
Waitms 500

___lcde = 1

'Home
Locate 1 , 1
Lcd "³ »Æ²o¹"
Waitms 500

___lcde = 1
'Home
Locate 2 , 1
Lcd "c¿poºe"

End

Результат...
Начало второй строки упорно идет с 25 позиции...
Будем пробовать дальше... ;)
I2C - на сладкое ! ;)  Опробовано - работает...
http://sh.uploads.ru/t/SVtHN.jpg

0

13

Все !  Победил, благодаря стараниям sasha_1973 !
Александр - спасибо !

В скрипте дисплея "родные" строки были изменены на выделенные (из проекта Александра)...

{MODDLL=LCDALPHA}
{MODFILE=LCDX2}
{NUMCOLS=40}
{NUMROWS=4}
{CLOCK=250kHz}
{ROW1=80-A7}
{ROW2=C0-E7}
{ROW3=80-A7}
{ROW4=C0-E7}

{PACKAGE=CONN-DIL16}
{TRACE=1}

Без $lib "lcd4e2.lbx, с прямым указанием подключения дисплея к МК строки и позиции "гуляют"...

Код:
$Regfile="m8def.dat"
$Crystal=1000000
$hwstack=64
$swstack=64
$framesize=64

$lib "lcd4e2.lbx"
Dim ___lcde As Byte

Config Lcd = 40 * 4

Cursor Off

___lcde = 0

Locate 1 , 1            ' Позиция 1 * 1
Lcd "BГіoг"
Waitms 500
Locate 2 , 10          ' Позиция 2 * 10
Lcd "ёЅдopјaеёё"
Waitms 500

___lcde = 1

Locate 1 , 20          ' Позиция 3 * 20
Lcd "і »ЖІo№"
Waitms 500

Locate 2 , 30          ' Позиция 4 * 30
Lcd "cїpoєe"

End

http://s4.uploads.ru/t/5gdSE.jpg

0

14

Nord написал(а):

На "х" при компиляции выдает ошибку.
Кстати, даже в онлайн справке написано "*"...

Справка http://avrhelp.mcselec.com/config_lcd.htm

The type of LCD display used. This can be :

40x4,16x1, 16x2, 16x4, 16x4, 20x2, 20x4, 16x1a or 20x4A.
Default 16x2 is assumed.

В прмиерах тоже x.
Так о какой онлайн справке идет речь?

0

15

Пётр написал(а):

Справка http://avrhelp.mcselec.com/config_lcd.htmThe type of LCD display used. This can be :
            40x4,16x1, 16x2, 16x4, 16x4, 20x2, 20x4, 16x1a or 20x4A.Default 16x2 is assumed.В прмиерах тоже x.Так о какой онлайн справке идет речь?

Оттуда же, из примера ..\BASCOM Language Reference\LCD Commands\LCD...

Код:
Dim A As Byte
Config Lcd = 16 * 2

И как тут быть ? ;)

Не буду спорить, возможно, вы более правы, но "х" - выдает ошибку при компиляции, а с "*" - все работает:
http://sd.uploads.ru/t/ptcdE.jpg

Отредактировано Nord (2017-02-10 20:07:24)

0

16

Вы писали 16x2 или 16 x 2?
Должно быть слитно.

0

17

Пётр написал(а):

Вы писали 16x2 или 16 x 2?Должно быть слитно.

С пробелами, т.к. честно говоря, не придавал этому значения.
Там же (из вашей ссылки) ниже:
'other options are 16 * 4 and 20 * 4, 20 * 2 , 16 * 1a
'When you dont include this option 16 * 2 is assumed
'16 * 1a is intended for 16 character displays with split addresses over 2 lines

Вот из предложенной мне "выручалочки" Александра:

Код:
'-----------------------   Êîíôèãóðàöèÿ øèíû I2c   -----------------------------
  Config Scl = Portc.5       ' Êîíôèãóðàöèÿ I2c Scl
  Config Sda = Portc.4       ' Êîíôèãóðàöèÿ I2c Sda
  Config I2cdelay = 15       '20       ' ×àñòîòà I2c = ÷àñòîòà ÌÊ / I2cdelay  (ðàáîòàåò â æåëåçå äî 800êÃö)
  I2cinit
  Waitms 50       ' Èíèöèàëèçèðóåì øèíó I2c, æäåì

  [b]Config Lcd = 40 * 4[/b]

Для меня он здесь не меньший авторитет, чем вы...
Давайте остановимся на таком варианте написания: 16х2 или 16 * 2 ;)

Работает же... ;)

0

18

Марк (разработчик баскома) для вас авторитет? Вот что он пишет http://www.mcselec.com/index2.php?optio … 3244#73244

0

19

Пётр написал(а):

Марк (разработчик баскома) для вас авторитет? Вот что он пишет http://www.mcselec.com/index2.php?optio … 3244#73244

Все понял, исправлюсь...  :blush:

0

20

Попробовал вчера погонять дисплей 40х4 "с нуля"...
Опять те же грабли...
После замены строк в скрипте - работает, как положено.

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

0