sasha_1973, я что то уже запутался, какой именно архив, по предыдущей ссылке где "2 вариант"? Там несколько иные названия библиотек
Блин дисплейчик OLED 128x64 на SSD1306 гараздо проще в освоении, но и очень хочется и 1602 по I2C победить
Помогите с запуском LCD 4x20 по i2c
Сообщений 181 страница 210 из 220
Поделиться1812017-07-21 22:06:10
Поделиться1822017-07-21 22:10:40
какой именно архив, по предыдущей ссылке где "2 вариант"? Там несколько иные названия библиотек
В этом сообщении ссылка
Поделиться1832017-07-21 22:21:45
sasha_1973, тот архив я качал, библиотеки видел но там несколько иные названия библиотек, там lcd_HD44780_pcf8574.lib и multi_i2c_lcd_HD44780_pcf8574.lib , а интересовался я этой lcd_pcf8574.lib пост 20, 22 этой ветки
Поделиться1842017-07-21 22:24:16
а интересовался я этой lcd_pcf8574.lib пост 20, 22 этой ветки
Зачем Вам устаревшие варианты ?
В крайнем случае, переименуйте так, как Вам нравится.
Отредактировано sasha_1973 (2017-07-21 22:25:20)
Поделиться1852017-07-21 22:29:02
Зачем Вам устаревшие варианты ?
Да я с целью попробовать, хоть что бы на нем отобразилось, хоть "Hello World", а пока только получается зажигать и тушить подсветку 
Понял, значит она мне не нужна
Поделиться1862017-07-21 22:51:51
sasha_1973
Решение остается одно выпаять штырек RW и на дисплее соединить его с VSS ?
Поделиться1872017-07-22 00:03:27
Решение остается одно выпаять штырек RW и на дисплее соединить его с VSS ?
Код выложил выше (проверял с ардуино). Штырьки не выпаивал. Все работает.
Поделиться1882017-07-22 05:17:21
Да я с целью попробовать, хоть что бы на нем отобразилось, хоть "Hello World", а пока только получается зажигать и тушить подсветку
Скиньте свой исходник, сюда или на mail. И на всякий случай макро-фотку платки с двух сторон.
Поделиться1892017-07-22 09:28:12
Код выложил выше (проверял с ардуино). Штырьки не выпаивал. Все работает.
Значит что то у меня не то....
И на всякий случай макро-фотку платки с двух сторон.
Платка пока запаяна на LCD
Фотки сделал всего что используется в моем случае на всякий (всё из Китая)



Вдруг критично, все модули покупались по отдельности, у разных продавцов в разное время, платка руками припаивалась к LCD, после пайки мультиметром прозвонил контакты, вроде ок всё
Ну а это как сказать мозг, мега 32Л, кварц на 16 мГц, в фьюзах стоит тактирование от внешнего кварца, питание 5В

По коду, у меня как сказать своего нет, пробую примеры которые размещены тут.
Правлю камень, тактовую частоту и пины SDA SCL согласно распиновки меги 32Л, SDA - PORTC.1, SCL - PORTC.0
Вот код залитый сейчас в МК
$Regfile="m32def.dat"
$Crystal=16000000
$hwstack=40
$swstack=16
$framesize=32
$baud = 19200
'Config Sda = Portc.1 ' Конфигурация вывода Sda
'Config Scl = Portc.0 ' Конфигурация вывода Scl
$lib "i2c_twi.lbx" ' die "echte" TWI benutzen
'------------------------------------------------------------------------------
' Definition von HW-Ressourcen
'------------------------------------------------------------------------------
Sda_port Alias Portc.1 'Definition der I2C-Ports
Scl_port Alias Portc.0
Config Sda = Sda_port
Config Scl = Scl_port
'Config Portd.7 = Output
'Led Alias Portd.7
'------------------------------------------------------------------------------
' Definition von SW-Ressourcen
'------------------------------------------------------------------------------
'Const Addr_lcd_pcf_r = &h41
Const Addr_lcd_pcf_w = &H4E ' &H4E 'Adresse des PCF8574
Dim Lcd_beleuchtung As Bit
Set Lcd_beleuchtung 'LCD_Beleuchtung einschalten
'Reset Lcd_beleuchtung 'LCD_Beleuchtung ausschalten
Dim I As Byte 'Zдhler-Variable
Dim Lcd_port As Byte 'Definition des LCDs am PCF8574
Lcd_port_rs Alias Lcd_port.0 'Display-Pin RS an Port.0
Lcd_port_rw Alias Lcd_port.1 'Display-Pin R/W an Port.1
Lcd_port_e Alias Lcd_port.2 'Display-Pin E an Port.2
Lcd_port_bel Alias Lcd_port.3 'Beleuchtung an Port.3
Lcd_port_db4 Alias Lcd_port.4 'Display-Pin DB4 an Port.4
Lcd_port_db5 Alias Lcd_port.5 'Display-Pin DB5 an Port.5
Lcd_port_db6 Alias Lcd_port.6 'Display-Pin DB6 an Port.6
Lcd_port_db7 Alias Lcd_port.7 'Display-Pin DB7 an Port.7
'------------------------------------------------------------------------------
' Definition von Subs / Prototyping
'------------------------------------------------------------------------------
Declare Sub Lcd_write(byval Text As String ) 'Die Funktion zum Schreiben von Text auf das Display
'------------------------------------------------------------------------------
' Programm - Initialisierungen
'------------------------------------------------------------------------------
'I2C-Initialisierungen
I2cinit
Config Twi = 100000 ' Taktfrequenz 100 kBaud
Twcr = &B00000100 ' nur TWEN setzen
Twsr = 0 ' Status und Prescaler Register
Twbr = 152 ' Bit Rate Register, 72 = 100kHz 152 = 50kHz(0 bis 255)
Config I2cdelay = 40
'Initialisierung des LCD
Gosub Lcd_init
'Testaufrufe
Call Lcd_write( "TEST")
Gosub Lcd_gotoline_2
Call Lcd_write( "blub")
Gosub Lcd_gotoline_1
Call Lcd_write( "blubblub")
Wait 2
Gosub Lcd_cls
'------------------------------------------------------------------------------
' Programm - Hauptschleife
'------------------------------------------------------------------------------
Do
!rCall Lcd_cls
Gosub Lcd_gotoline_1
Call Lcd_write( "1234")
Gosub Lcd_gotoline_2
Call Lcd_write( "аўгµ5678")
Waitms 1000
' Toggle Led
Loop
'------------------------------------------------------------------------------
' Subroutinen
'------------------------------------------------------------------------------
Sub Lcd_write(byval Text As String)
Dim Lcd_char As String * 1
Dim Lcd_char_val As Byte
'starte Ьbertragung
I2cstart
I2cwbyte Addr_lcd_pcf_w
Set Lcd_port_rs
For I = 1 To Len(text)
Lcd_char = Mid(text , I , 1)
Lcd_char_val = Asc(lcd_char)
Lcd_port_db7 = Lcd_char_val.7
Lcd_port_db6 = Lcd_char_val.6
Lcd_port_db5 = Lcd_char_val.5
Lcd_port_db4 = Lcd_char_val.4
I2cwbyte Lcd_port
Gosub Lcd_pulse_e
Lcd_port_db7 = Lcd_char_val.3
Lcd_port_db6 = Lcd_char_val.2
Lcd_port_db5 = Lcd_char_val.1
Lcd_port_db4 = Lcd_char_val.0
I2cwbyte Lcd_port
Gosub Lcd_pulse_e
Next
Reset Lcd_port_db7
Reset Lcd_port_db6
Reset Lcd_port_db5
Reset Lcd_port_db4
Reset Lcd_port_rs
I2cstop
End Sub
'------------------------------------------------------------------------------
' LCD-GOSubs
'------------------------------------------------------------------------------
Lcd_init:
I2cstart ' START-Sequenz senden
I2cwbyte Addr_lcd_pcf_w 'Adresse vom PCF
Lcd_port = 0
I2cwbyte Lcd_port 'alles lцschen
'8-Bit setzen, 3 mal DB4 und 5 mit nachfolgendem E-Pulse
Set Lcd_port_db4
Set Lcd_port_db5
For I = 1 To 3
I2cwbyte Lcd_port
Gosub Lcd_pulse_e
Next I
Reset Lcd_port_db4
Reset Lcd_port_db5
'4-Bit Datamode setzen, DB5
Set Lcd_port_db5
I2cwbyte Lcd_port
Gosub Lcd_pulse_e
Reset Lcd_port_db5
'4-Bit Data transfer setzen, DB5, danach DB7
Set Lcd_port_db5
I2cwbyte Lcd_port
Gosub Lcd_pulse_e
Reset Lcd_port_db5
Set Lcd_port_db7
I2cwbyte Lcd_port
Gosub Lcd_pulse_e
Reset Lcd_port_db7
'Display und Cursor anschalten, 0-Polse, dann DB6 und DB7
I2cwbyte Lcd_port
Gosub Lcd_pulse_e
Set Lcd_port_db6
Set Lcd_port_db7
I2cwbyte Lcd_port
Gosub Lcd_pulse_e
Reset Lcd_port_db6
Reset Lcd_port_db7
'CLS, DB4
I2cwbyte Lcd_port
Gosub Lcd_pulse_e
Set Lcd_port_db4
I2cwbyte Lcd_port
Gosub Lcd_pulse_e
Reset Lcd_port_db4
'cursor setzen, DB5 und DB6
I2cwbyte Lcd_port
Gosub Lcd_pulse_e
Set Lcd_port_db5
Set Lcd_port_db6
I2cwbyte Lcd_port
Gosub Lcd_pulse_e
Reset Lcd_port_db5
Reset Lcd_port_db6
'Beleuchtung ausschalten
Lcd_port_bel = Lcd_beleuchtung
I2cwbyte Lcd_port
I2cstop
Return
Lcd_pulse_e:
Set Lcd_port_e
I2cwbyte Lcd_port
Reset Lcd_port_e
I2cwbyte Lcd_port
Return
Lcd_gotoline_1:
I2cstart
I2cwbyte Addr_lcd_pcf_w
I2cwbyte Lcd_port
Gosub Lcd_pulse_e
Set Lcd_port_db5
I2cwbyte Lcd_port
Gosub Lcd_pulse_e
Reset Lcd_port_db5
I2cstop
Return
Lcd_gotoline_2:
I2cstart
I2cwbyte Addr_lcd_pcf_w
Set Lcd_port_db7
Set Lcd_port_db6
I2cwbyte Lcd_port
Gosub Lcd_pulse_e
Reset Lcd_port_db7
Reset Lcd_port_db6
I2cwbyte Lcd_port
Gosub Lcd_pulse_e
I2cstop
Return
Lcd_cls:
I2cstart
I2cwbyte Addr_lcd_pcf_w
I2cwbyte Lcd_port
Gosub Lcd_pulse_e
Set Lcd_port_db4
I2cwbyte Lcd_port
Gosub Lcd_pulse_e
I2cstop
Return
EndОтредактировано artur (2017-07-22 09:48:33)
Поделиться1902017-07-22 10:34:30
Только подключил
'-------------------- Конфигурация используемого МК ------------------------
$regfile = "m328pdef.dat"
$crystal = 8000000
$framesize = 128
$hwstack = 128
$swstack = 128'------------------------ Настройка таймера ----------------------------------
Const Const_доп_делитель_timer2 = 131Config Timer2 = Timer , Prescale = 64 , Clear Timer = 0 ' PRESCALE= 1|8|64|256|1024
On Timer2 Обработка_прерывания_timer2 Nosave ' Подпрограмма для обработки прерывания
Stop Timer2
Timer2 = Const_доп_делитель_timer2 ' Закидываем значение дополнительного делителя в TIMER2Const Const_счетчик_timer2 = 1000
Dim Const_счетчик_timer2_low As Byte : Const_счетчик_timer2_low = Low(const_счетчик_timer2)
Dim Const_счетчик_timer2_high As Byte : Const_счетчик_timer2_high = High(const_счетчик_timer2)Dim Счетчик_timer2 As Word
Dim Флаг_прерывание_timer2 As ByteDim Время_работы_часы As Byte
Dim Время_работы_минуты As Byte
Dim Время_работы_секунды As ByteDim Время_работы_str As String * 8 : Время_работы_str = " 0:00:00"
Dim Время_работы_часы_str As String * 2 : Время_работы_часы_str = " 0"
Dim Время_работы_минуты_str As String * 2 : Время_работы_минуты_str = "00"
Dim Время_работы_секунды_str As String * 2 : Время_работы_секунды_str = "00"'------------------------ Подключаемые библиотеки --------------------------
$lib "lcd_HD44780_pcf8574.lib"'----------------------- Конфигурация шины I2c -----------------------------
Config Scl = Portc.5 ' Конфигурация I2c Scl
Config Sda = Portc.4 ' Конфигурация I2c Sda
Config I2cdelay = 20 ' Частота I2c = частота МК / I2cdelay (работает в железе начиная с 20, меньше работает через раз)
I2cinit
Waitms 50 ' Инициализируем шину I2c, ждемConst Const_буфер_lcd = 16
Config Lcd = 20 * 4'----------------------- Дополнительные_символы--------------------------------
Deflcdchar 1 , 12 , 18 , 18 , 12 , 32 , 32 , 32 , 32 'значек градуса'-------------------- Переменные для работы библиотеки ---------------------
Dim _backlight As Byte : _backlight = 1 ' Переменная для управления подсветкой
Dim _lcd_e As Byte : _lcd_e = 192 ' !!! Не трогать, не будет работать !!!'------------------ Переменная для адресации PCF8574х ----------------------
Const Pcf8574_lcd = &H4E ' Адрес PCF8574A первого LCD'------------------------------------------------------------------
'| | PCF8574,PCF8574N, PCF8575 | PCF8574A, PCF8574AP |
'|-------------|----------------------------|----------------------|
'| A0 A1 A2 | Write | Read | Write | Read |
'|-------------|-------------|--------------|-----------|----------|
'| 0 0 0 | &H40 | &H41 | &H70 | &H71 |
'| 1 0 0 | &H42 | &H43 | &H72 | &H73 |
'| 0 1 0 | &H44 | &H45 | &H74 | &H75 |
'| 1 1 0 | &H46 | &H47 | &H76 | &H77 |
'| 0 0 1 | &H48 | &H49 | &H78 | &H79 |
'| 1 0 1 | &H4A | &H4B | &H7A | &H7B |
'| 0 1 1 | &H4C | &H4D | &H7C | &H7D |
'| 1 1 1 | &H4E | &H4F | &H7E | &H7F |
'------------------------------------------------------------------'---------------- Конфигурация выводов PCF8574x ----------------------------
Const Pcf_rs = 0 ' RS
Const Pcf_bl = 3 ' Подсветка
Const Pcf_e2 = 2 ' Е
Const Pcf_e1 = 1 ' Висит в воздухе
'------------------------------------
Const Pcf_d4 = 4 ' D4
Const Pcf_d5 = 5 ' D5
Const Pcf_d6 = 6 ' D6
Const Pcf_d7 = 7 ' D7Initlcd ' Обязательно инициализируем LCD
Cursor Off ' Выключаем курсор
Cls ' Чистим экран, на всякий случай, можно не делать
Waitms 100Declare Sub Print_lcd(byval Copy_строка_lcd As Byte , Byval Copy_знакоместо_lcd As Byte , Byval Copy_буфер_lcd As String * 20)
Dim Флаг_обновить_lcd As Byte
Dim Буфер_lcd_1_строка_str As String * Const_буфер_lcd
Dim Буфер_lcd_2_строка_str As String * Const_буфер_lcd
Dim Буфер_lcd_3_строка_str As String * Const_буфер_lcd
Dim Буфер_lcd_4_строка_str As String * Const_буфер_lcd'-------------------------------------------------------------------------------
'\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\
' З А П У С К И П Р Е Д В А Р И Т Е Л Ь Н Ы Е Н А С Т Р О Й К И
'\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\
Dim Val_long As Long
Dim Val_long_str As String * 10'\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\
'-------------- Разрешаем работу необходимых прерываний ----------------------
Enable Timer2 : Start Timer2
'------------ Разрешаем работу всех включенных прерываний --------------------
' Enable Interrupts
'###############################################################################
' "!#$%&'( )*+,-./:;<=>?@`_°{|}~¦[\]"
' "1234567890"
' "AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz"
' "АаБбВвГгДдЕеЁёЖжЗзИиЙйКлЛлМмНнОоПпРрСсТтУуФфХхЦцЧчШшЩщЪъЫыЬьЭэЮюЯя"' Г Л А В Н Ы Й Ц И К Л
Главный_цикл:
'###############################################################################'Print_lcd 1 , 1 , "12345678901234567890"
Print_lcd 1 , 1 , "!#$%&'()*+,-./:;<=>?"
Print_lcd 2 , 1 , "AaBbCcDdEeFfGgHhIiJj"
Print_lcd 3 , 1 , "KkLlMmNnOoPpQqRrSsTt"
Print_lcd 4 , 1 , "UuVvWwXxYyZz 0123456"Wait 1
ClsPrint_lcd 1 , 1 , "АаБбВвГгДдЕеЁёЖжЗзИи"
Print_lcd 2 , 1 , "ЙйКлЛлМмНнОоПпРрСсТт"
Print_lcd 3 , 1 , "УуФфХхЦцЧчШшЩщЪъЫыЬь"
Print_lcd 4 , 1 , "ЭэЮюЯя 0123456789"Wait 1
Cls' If Флаг_прерывание_timer2 <> 0 Then
' Gosub Время_работы
' Флаг_прерывание_timer2 = 0
' Флаг_обновить_lcd = 1
' Goto Главный_цикл
' End If' Буфер_lcd_1_строка_str = Время_работы_str
' Буфер_lcd_2_строка_str = Val_long_str
' Locate 1 , 1
' Lcd Буфер_lcd_1_строка_str
' Locate 2 , 1
' Lcd Буфер_lcd_2_строка_str' Incr Val_long
' Val_long_str = Str(val_long)
' Val_long_str = Format(val_long_str , " 0")Waitms 100
'===============================================================================
Goto Главный_цикл
End
'===============================================================================
' П О Д К Л Ю Ч Е Н И Е Р А Б О Ч И Х М О Д У Л Е Й
'==============================================================================='===============================================================================
Обработка_прерывания_timer2: ' Время обработки прерывания 55 тактов + 8 тактов вход + 5 тактов выход
'-------------------------------------------------------------------------------
'Т.к. будем использовать логические операции, !!! ОБЯЗАТЕЛЬНО сохраняем SREG !!!
!push R16
!in R16 , sreg
!push R16
!push R26
!push R27!lds R26 , {Счетчик_timer2}
!lds R27 , {Счетчик_timer2 + 1}
!ADIW R26 , 1!lds R16 , {Const_счетчик_timer2_low}
!cp R26 , R16
!lds R16 , {Const_счетчик_timer2_high}
!cpc R27 , R16
!breq Прошла_секунда
!rjmp Выход_прерывания_timer2Прошла_секунда:
!clr R26
!clr R27
!ldi R16 , 1
!sts {Флаг_прерывание_timer2} , R16Выход_прерывания_timer2:
!sts {Счетчик_timer2} , R26
!sts {Счетчик_timer2 + 1} , R27!ldi R16 , Const_доп_делитель_timer2
!out tcnt2 , R16'Восстанавливаем ранее сохранённые регистры и SREG
!pop R27
!pop R26
!pop R16
!out sreg , R16
!pop R16
!reti
'-------------------------------------------------------------------------------
Return
'==============================================================================='===============================================================================
Время_работы:
'-------------------------------------------------------------------------------
Incr Время_работы_секунды
If Время_работы_секунды > 59 Then
Время_работы_секунды = 0
Incr Время_работы_минуты
Время_работы_минуты_str = Str(время_работы_минуты)
If Время_работы_минуты < 10 Then Время_работы_минуты_str = "0" + Время_работы_минуты_str
If Время_работы_минуты > 59 Then
Время_работы_минуты = 0
Incr Время_работы_часы
If Время_работы_часы > 23 Then
Время_работы_часы = 0
End If ' If Время_работы_часы > 23 Then
Время_работы_часы_str = Str(время_работы_часы)
If Время_работы_часы < 10 Then Время_работы_часы_str = " " + Время_работы_часы_str
End If ' If Время_работы_минуты > 59 Then
End If ' If Время_работы_секунды > 59 Then
Время_работы_секунды_str = Str(время_работы_секунды)
If Время_работы_секунды < 10 Then Время_работы_секунды_str = "0" + Время_работы_секунды_strВремя_работы_str = Время_работы_часы_str + ":" + Время_работы_минуты_str + ":" + Время_работы_секунды_str
'-------------------------------------------------------------------------------
Return
'==============================================================================='===============================================================================
' Подпрограмма вывода русского текста на LCD HD44780
'===============================================================================
Sub Print_lcd(byval Copy_строка_lcd As Byte , Byval Copy_знакоместо_lcd As Byte , Byval Copy_буфер_lcd As String * 45)
'-------------------------------------------------------------------------------
Loadadr Copy_буфер_lcd , X ' Узнаём адрес выводимой строки!ldi ZL , Low(Русские_символы * 2) ' Узнаём адрес таблицы
!ldi ZH , High(Русские_символы * 2) ' Узнаём адрес таблицы
!mov R20 , R30 ' Сохраняем адрес таблицы
!mov R21 , R31 ' Сохраняем адрес таблицыСледующий_символ:
!ld R16 , X+ ' Забираем символы из выводимой строки по порядку
!cpi R16 , 0 ' Если "0"
!Breq Выход_из_перекодировки ' Перебрали все символы выводимой строки, идём печатать на LCD!cpi R16 , 168 ' Если меньше чем "Ё"; "ё"; "°"
!BRLO Lcd_print_2 ' Переход на следующий символ из строки!cpi R16 , 168 ' Проверяем "Ё"
!BREQ Забираем_ё_большое ' Переход на метку, что-бы забрать код символа!cpi R16 , 184 ' Проверяем "ё"
!BREQ Забираем_ё_маленькое ' Переход на метку, что-бы забрать код символа!cpi R16 , 176 ' Проверяем "°"
!BREQ Забираем_знак_градуса ' Переход на метку, что-бы забрать код символаLcd_print_0:
!cpi R16 , 192 ' Если меньше кириллицы
!BRLO Lcd_print_2 ' Переход на следующий символ из строки!SUBI R16 , 192 ' Вычитание константы
!add R30 , R16 ' Высчитываем номер символа в таблице
!clr R16
!adc R31 , R16
!lpm R16 , Z ' Берем код символа знакогенератора LCD из таблицы (смотреть внизу исходника)Lcd_print_1:
!st -X , R16 ' Обновляем символ в строке
!inc R26 ' Следующий символLcd_print_2:
!mov R30 , R20 ' Забираем ранее сохранённый адрес таблицы с кодами знакогенератора LCD hd44780
!mov R31 , R21 ' Забираем ранее сохранённый адрес таблицы с кодами знакогенератора LCD hd44780rjmp Следующий_символ ' Топаем за следующим символом
'---------------------
Забираем_ё_большое:
!ldi R16 , &HA2
!rjmp Lcd_print_1Забираем_ё_маленькое:
!ldi R16 , &HB5
!rjmp Lcd_print_1Забираем_знак_градуса:
!ldi R16 , &HEF
!rjmp Lcd_print_1
'---------------------Выход_из_перекодировки:
'Непосредственный вывод текста на LCD
Locate Copy_строка_lcd , Copy_знакоместо_lcd
Lcd Copy_буфер_lcd ' Непосредственный вывод текста на LCDВыход_из_print_lcd:
'-------------------------------------------------------------------------------
End Sub
'==============================================================================='===============================================================================
Русские_символы:
'-------------------------------------------------------------------------------
' "А" "Б" "В" "Г" "Д" "Е" "Ж" "З" "И" "Й"
Data &H41 , &HA0 , &H42 , &HA1 , &HE0 , &H45 , &HA3 , &HA4 , &HA5 , &HA6
' "К" "Л" "М" "Н" "О" "П" "Р" "С" "Т" "У"
Data &H4B , &HA7 , &H4D , &H48 , &H4F , &HA8 , &H50 , &H43 , &H54 , &HA9
' "Ф" "Х" "Ц" "Ч" "Ш" "Щ" "Ъ" "Ы" "Ь" "Э"
Data &HAA , &H58 , &HE1 , &HAB , &HAC , &HE2 , &HAD , &HAE , &H62 , &HAF
' "Ю" "Я" "а" "б" "в" "г" "д" "е" "ж" "з"
Data &HB0 , &HB1 , &H61 , &HB2 , &HB3 , &HB4 , &HE3 , &H65 , &HB6 , &HB7
' "и" "й" "к" "л" "м" "н" "о" "п" "р" "с"
Data &HB8 , &HA6 , &HBA , &HBB , &HBC , &HBD , &H6F , &HBE , &H70 , &H63
' "т" "у" "ф" "х" "ц" "ч" "ш" "щ" "ъ" "ы"
Data &HBF , &H79 , &HE4 , &H78 , &HE5 , &HC0 , &HC1 , &HE6 , &HC2 , &HC3
' "ь" "э" "ю" "я" "Ё" "ё" "°"
Data &HC4 , &HC5 , &HC6 , &HC7 , &HA2 , &HB5 , &HEF
'===============================================================================
Поделиться1912017-07-22 10:37:06
Обратите внимание на строчку:
Config I2cdelay = 20 ' Частота I2c = частота МК / I2cdelay (работает в железе начиная с 20, меньше работает через раз)
при частоте МК 16 Мгц, поставьте больше задержку, например 40
Поделиться1922017-07-22 12:00:51
Код:$hwstack=40 $swstack=16 $framesize=32
Поставьте по 100 для теста как в моем коде.
Поделиться1932017-07-22 13:17:38
Обратите внимание на строчку:
Config I2cdelay = 20 ' Частота I2c = частота МК / I2cdelay (работает в железе начиная с 20, меньше работает через раз)
при частоте МК 16 Мгц, поставьте больше задержку, например 40
Попробовал, результат тот же, просто горит подсветка дисплея, нажатие на ресет приводит к кратковременному однократному морганию подсветки
Поставьте по 100 для теста как в моем коде.
Попробовал, результат тот же, разница только в момент заливки прошивки подсветка тухнет потом вновь загорается, реакция на ресете та же, кратковременно моргание.
В обоих случаях на дисплее не было ни одного символа 
Поделиться1942017-07-22 14:15:08
При подаче питания в верхней строке есть "квадратики"?
Поделиться1952017-07-22 14:26:50
Вообще нет ничего. Только кратковременное моргание подсветки при нажатии ресета.
Поделиться1962017-07-22 14:51:07
А в Протеусе работает ?
Поделиться1972017-07-22 14:52:23
sasha_1973
Я что то с протеусом ещё не сталкивался
Поделиться1982017-07-22 14:53:54
И что Вам мешает взять его на абордаж ?
Поделиться1992017-07-22 14:54:47
Не знаю, можно попробовать, может и разберусь, пошел качать
Поделиться2002017-07-22 15:06:00
В этом архиве есть симуляция
меняете мегу на свою, подключаете в свойствах свой исходник и вперед
Отредактировано sasha_1973 (2017-07-22 15:07:08)
Поделиться2022017-07-22 15:14:21
sasha_1973
Спасибо, пока ставится, далее буду разбираться
Поделиться2032017-07-22 15:14:57
Вообще нет ничего.
Переменный резистор на плате крутили? Нужно крутить до тех пор пока на экране что не появится. Если не поможет, то есть вероятность что дисплей нерабочий.
Поделиться2042017-07-22 15:19:25
Пётр
Прямоугольные блоки чуть просвечивают, но ради чистоты эксперимента добавлю ещё контрастности
Поделиться2052017-07-22 15:44:19
Друзья извините!!!
Мой косяк, дело в контрастности, в подстроичнике на плате, прямоугольничьки прослеживались, думал и так достаточная контрастность.
blubblubblub работает однозначно, остальные тоже проверю, так ради интереса
Поделиться2062017-07-22 18:35:36
Тупой наверное вопрос
Вывожу строку на дисплей и хочу что бы справа от надписи Тест было значение переменной Т, вместо точки с запятой пробовал просто запятую, результат тот же
Gosub Lcd_gotoline_1 Call Lcd_write( "Test"; T)
Но при компиляции ругается
variable not dimensioned [ "Test"; T] in file .....
Переменная обозвана ранее Dim T As Byte
А вывод происходит вызовом Lcd_write который может вывести только строку
Sub Lcd_write(byval Text As String)
Отредактировано artur (2017-07-22 23:04:43)
Поделиться2072017-07-22 23:13:55
Как понимаю для вывода через Lcd_write надо как то тип Byte в String преобразовать?
Получилось в бинарном виде выводить
Gosub Lcd_gotoline_1
Call Lcd_write(bin(T))
Но это несколько не то, хотелось бы десятеричное представление видеть на LCD
Или как то саму процедуру Lcd_write поправить?
Sub Lcd_write(byval Text As String)
Dim Lcd_char As String * 1
Dim Lcd_char_val As Byte
'starte ?bertragung
I2cstart
I2cwbyte Addr_lcd_pcf_w
Set Lcd_port_rs
For I = 1 To Len(text)
Lcd_char = Mid(text , I , 1)
Lcd_char_val = Asc(lcd_char)
Lcd_port_db7 = Lcd_char_val.7
Lcd_port_db6 = Lcd_char_val.6
Lcd_port_db5 = Lcd_char_val.5
Lcd_port_db4 = Lcd_char_val.4
I2cwbyte Lcd_port
Gosub Lcd_pulse_e
Lcd_port_db7 = Lcd_char_val.3
Lcd_port_db6 = Lcd_char_val.2
Lcd_port_db5 = Lcd_char_val.1
Lcd_port_db4 = Lcd_char_val.0
I2cwbyte Lcd_port
Gosub Lcd_pulse_e
Next
Reset Lcd_port_db7
Reset Lcd_port_db6
Reset Lcd_port_db5
Reset Lcd_port_db4
Reset Lcd_port_rs
I2cstop
End SubПоделиться2082017-07-23 05:10:18
Call Lcd_write( "Test"; T)
dim t as byte
dim t_str as string*3
dim 1_line_str as string*20
dim 2_line_str as string*20
dim 3_line_str as string*20
dim 4_line_str as string*20
t_str = str(t) 'делаем строковую переменную
t_str = format(t_str," 0") 'убираем незначащие нули
1_line_str = "Test " + t_str 'собираем строку выводимую на lcd
Call Lcd_write( 1_line_str) 'выводим строку на lcd
Чем Вам библиотека не пришлась ко двору ? Наверное смутила выпайка контакта.
Отредактировано sasha_1973 (2017-07-23 05:23:54)
Поделиться2092017-07-23 07:50:59
sasha_1973
Спасибо большое.
Чем Вам библиотека не пришлась ко двору ? Наверное смутила выпайка контакта.
Почему не пришлась
я попробовал и код с ней, если я ничего не перепутал то и без выпайки контакта работает, по крайней мере какая то информация выводилась на экран. Но я ещё не остановился на выборе библиотеки и кода, я как бы хочу с практической стороны разобраться, хоть в общих чертах, этот код на первый взгляд показался проще (я как бы новичок в этом деле, да и больше по паскалю и делфям, а бейсик был давно да и только в рамках ZXSrectrum и Корвета и как сказать в небольших количествах), но я и тот обязательно попробую, но сначала в этом научусь выводить переменные.
Поделиться2102017-07-23 09:05:27
sasha_1973, всё получилось, спасибо.
Очередной психрометр
но по шине I2C
sasha_1973, Пётр огромное вам спасибо за терпение и помощь!
Ну а я продолжу разбираться с I2C и дисплейчиком 1602

