Если у вас один Е, то нужно выбирать 128 (или 64, смотря к какой ножке подключен этот Е). Даже если дисплей 4х-строчный, но с одним Е - это не две половинки, а целый дисплей.
Большое спасибо!
Буду знать.
Программирование ATMEL в BASCOM. |
Привет, Гость! Войдите или зарегистрируйтесь.
Вы здесь » Программирование ATMEL в BASCOM. » Дисплеи и индикация » Помогите с запуском LCD 4x20 по i2c
Если у вас один Е, то нужно выбирать 128 (или 64, смотря к какой ножке подключен этот Е). Даже если дисплей 4х-строчный, но с одним Е - это не две половинки, а целый дисплей.
Большое спасибо!
Буду знать.
Благодаря всем кто тут запускал эту штуку, я сегодня запустил и свою.
'---------------- PCF8574x ----------------------------
'-------------------------------------------------------------------------------
Const Pcf_rs = 6 ' RS
Const Pcf_bl = 7 ' Подсветка
Const Pcf_e2 = 5 ' Е
Const Pcf_e1 = 4 '
'-------------------
Const Pcf_d4 = 0 ' D4
Const Pcf_d5 = 1 ' D5
Const Pcf_d6 = 2 ' D6
Const Pcf_d7 = 3 ' D7
Игорь, а с какой библиотекой запустил?
Const Pcf_rs = 6 ' RS
Const Pcf_bl = 7 ' Подсветка
' Посмотри сюда, одинаковые адреса.
' Таким образом у меня включился экран, на RW появился 0 (GND)
' Теперь нет необходимости делать ему перемычку
Const Pcf_e2 = 4
Const Pcf_e1 = 4
'-------------------
Const Pcf_d4 = 0 ' D4
Const Pcf_d5 = 1 ' D5
Const Pcf_d6 = 2 ' D6
Const Pcf_d7 = 3 ' D7
Странно как то библиотеки работают.
lcd_pcf8574.lib работает только по примеру Игоря. С Toggle _out_rw. Toggle _out_e2 мигает светом.
Пример Sasha_1973 информацию выводит, но индикатор хаотично мигает подсветкой, кроме того он может уйти в ступор и тогда выдает всякую грязь.
У меня платки вот такие http://www.ebay.com/itm/310565362720?ss … 1439.l2649 качество хорошее, единственное, что вымораживает это светодиод питания, буду сдувать.
Схема, что у китайца в архиве врет, реальную распиновку буду вызванивать, видимо все дело в управлении ногами E, R/W и подсветкой, пять/резать к ним что то то очень не хочется, надо как то программно управлять из библиотеки сразу правильно режимом. Вопрос, как именно нужно выставлять E1 и E2, R/W что бы индикатор устойчиво работал?
Вопрос, как именно нужно выставлять E1 и E2, R/W что бы индикатор устойчиво работал?
Смотря какой индикатор.
Автор с ником "ignel", по-моему резал дорожки, что-то там китайцы намутили. В итоге все запустилось с такой платкой.
Вызвонить дорожки и подключить согласно схемы, все работает, проверено неоднократно. E2 висит в воздухе.
Почитайте ветку, такая проблема была у "ignel".
Первое что нужно смотреть это адрес, как выставлены А0 А1 А2.
На моей А0 А1 А2 все привязаны к земле.
Далее на входе SDA SCL нужно поставить резисторы , у меня по 4.7к.
Резисторы должны быть подсоединены на +U(5вольт).
Ща напишу про E1 и E2, R/W.
посмотрю что у меня там на плате
У меня индикатор вот такой http://www.labkit.ru/userfiles/file/doc … 2K_rus.pdf
На платке уже есть резисторы, все А0 А1 А2 висят в воздухе, плата определяется правильно, "ножками дрыгает". 
Прозвонил.
Const Pcf_rs = 0
Const Pcf_rw = 1
Const Pcf_e1 = 2
Const Pcf_e2 = 3 - вывод заведен на управление подсветкой
Const Pcf_d4 = 4
Const Pcf_d5 = 5
Const Pcf_d6 = 6
Const Pcf_d7 = 7
Отредактировано IgorL (2013-10-18 16:25:07)
У меня индикатор вот такой http://www.labkit.ru/userfiles/file/doc … 2K_rus.pdf
На платке уже есть резисторы, все А0 А1 А2 висят в воздухе, плата определяется правильно, "ножками дрыгает".
У меня оказывается тоже такая есть платка, недавно пришла.
Один в один как у тебя.
Сейчас попробую её запустить.
У меня оказывается тоже такая есть платка, недавно пришла.
Один в один как у тебя.
Сейчас попробую её запустить.
Const Pcf_e2 = 2 '
Const Pcf_e1 = 2 '
Вот так у меня запустилось.
Попробуй у себя
Const Pcf_e2 = 3 '
Const Pcf_e1 = 2 '
Можно так 
Const Pcf8574_lcd = &H40
Запускаться и у меня запускается, с библиотекой lcd_pcf8574.lib работает довольно устойчиво, но если чуть глюкнет, то только по питанию рубить.
С библиотекой lcd_pcf8574_8.lib мигает подсветкой и сыплет мусор, хотя если выдавать меньше 16 символов, то мусора нет, только подсветку трясет.
В общем надо смотреть тайминги, дело похоже в индикаторе, на него обижаются и при обычном соединении, если тайминги не соблюдать глючит, путает адрес и данные.
Вот такой код у меня работет
'-------------------------------------------------------------------------------
'-------------------- Конфигурация используемого МК ------------------------
'-------------------------------------------------------------------------------
$regfile = "m16def.dat"
$crystal = 8000000
$hwstack = 40
$swstack = 16
$framesize = 32
'-------------------------------------------------------------------------------
'------------------------ Подключаемые библиотеки --------------------------
'-------------------------------------------------------------------------------
$lib "lcd_pcf8574_9.lib"
Dim A_byte As Byte
Dim R As Byte
Dim S As String * 1
Dim B As Byte
Dim Uartprint1 As String * 8
Dim Uartprint2 As String * 8
Dim Uartprint3 As String * 8
Dim Uartprint4 As String * 8
Dim Count As Byte ' счетчик удержания кнопки
Dim I As Byte 'объявляем переменную для циклов
'объявляем подпрограммы
Declare Sub Getline(s As String) 'чтение данных из буфера
Declare Sub Del_buffer() 'очистка буфера
'-------------------------------------------------------------------------------
'----------------------- Конфигурация RS232 ----------------------------------
'-------------------------------------------------------------------------------
Config Portd.6 = Output ' : Set Porta.7
Set Portd.6 ' Установить на прием устройство на RST низкий уровень
Open "comd.0:2400,8,n,1" For Input As #2 'DB1 input
Open "comd.1:2400,8,n,1" For Output As #3 'DB1 output
'-------------------------------------------------------------------------------
'----------------------- Конфигурация INPUT BUTTON----------------------------
'-------------------------------------------------------------------------------
Dim W As Byte 'переменная с номером нажатой кнопки
'кнопки
Config Porta.0 = Input
Config Porta.1 = Input
Config Porta.2 = Input
Config Porta.3 = Input
'-------------------------------------------------------------------------------
'----------------------- Конфигурация OUTPUT RELAY ----------------------------
'-------------------------------------------------------------------------------
Config Porta.4 = Output : Set Porta.4
Config Porta.5 = Output : Set Porta.5
Config Porta.6 = Output : Set Porta.6
Config Porta.7 = Output : Set Porta.7
'-------------------------------------------------------------------------------
'----------------------- Конфигурация OUTPUT LED ----------------------------
'-------------------------------------------------------------------------------
Config Portb.0 = Output 'сюда подключается светодиод индикации
Portb.0 = 1
'-------------------------------------------------------------------------------
'----------------------- Конфигурация ПРЕРЫВАНИЯ ----------------------------
'-------------------------------------------------------------------------------
Config Int0 = Falling 'прерывание по нисходящему фронту
On Int0 Button 'Переход на подпрограмму обработки прерывания Button:
Enable Interrupts 'разрешаем прерывания
Enable Int0
'-------------------------------------------------------------------------------
'----------------------- Конфигурация шины I2c -----------------------------
'-------------------------------------------------------------------------------
Config Scl = Portc.0 'I2C SCL Pin
Config Sda = Portc.1 'I2C SDA Pin
' Config I2cdelay = 2 ' частота I2c = частота МК / I2cdelay (работает в железе до 800кГц)
Config I2cdelay = 1 ' Частота I2c = частота МК / I2cdelay (работает в железе до 800кГц)
'-------------------------------------------------------------------------------
'----------------------- Инициализация шины I2c ----------------------------
'-------------------------------------------------------------------------------
I2cinit : Waitms 10 ' Инициализируем шину I2c, ждем
'-------------------------------------------------------------------------------
'--------------------- Конфигурация используемого LCD ----------------------
'-------------------------------------------------------------------------------
Config Lcd = 16 * 2
'-------------------------------------------------------------------------------
'-------------------- Переменные для работы библиотеки ---------------------
'-------------------------------------------------------------------------------
Dim _backlight As Byte : _backlight = 0 ' Переменная для управления подсветкой
Dim _lcd_e As Byte : _lcd_e = 128 ' !!! Не трогать, не будет работать !!!
'-------------------------------------------------------------------------------
'--------------------- Адресация PCF8574х ----------------------------------
'-------------------------------------------------------------------------------
Const Pcf8574_lcd = &H40 ' Адрес PCF8574
'-------------------------------------------------------------------------------
'------------------------------------------------------------------
'| | 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 = 6 ' RS
'Const Pcf_bl = 7 ' Подсветка
'Const Pcf_e2 = 4 ' Е
'Const Pcf_e1 = 4 ' Висит в воздухе
'-------------------
'Const Pcf_d4 = 0 ' D4
'Const Pcf_d5 = 1 ' D5
'Const Pcf_d6 = 2 ' D6
'Const Pcf_d7 = 3 ' D7
Const Pcf_rs = 0 ' RS
Const Pcf_bl = 1 ' Подсветка
Const Pcf_e2 = 3 ' Е
Const Pcf_e1 = 2 ' Висит в воздухе
'-------------------
Const Pcf_d4 = 4 ' D4
Const Pcf_d5 = 5 ' D5
Const Pcf_d6 = 6 ' D6
Const Pcf_d7 = 7 ' D7
'-------------------------------------------------------------------------------
'----------------- Инициализируем LCD индикатор ----------------------------
'-------------------------------------------------------------------------------
Initlcd ' Обязательно инициализируем LCD
Cursor Off ' Выключаем курсор
Cls ' Чистим экран, на всякий случай, можно не делать
'-------------------------------------------------------------------------------
Dim A As Byte
'*******************************************************************************
'-------------------------------------------------------------------------------
Locate 1 , 1
Lcd "Privet"
Locate 2 , 1
Lcd " Nadym"
Wait 2
Gosub Channel_1
Gosub Channel_2
Gosub Channel_3
Gosub Channel_4
Reset Portd.6 'UART
Wait 2
Print "BUTTON OK!"
Set Portd.6
'-------------------------------------------------------------------------------
'------------------------ Основной цикл программы --------------------------
'-------------------------------------------------------------------------------
Do
' Idle
'----------------------------------------------------
R = Ischarwaiting() 'проверка наличия команды в буфере UART
If R = 1 Then 'если в буфере что-то есть переменной R присвоится значение 1
Getline S 'вытаскиваем содержимое буфера в переменную S
'------------------------ ВКЛЮЧИТЬ ВЫКЛЮЧИТЬ ПОКАНАЛЬНО -----------------------
If S = "A" Then 'если там символ "А"
Gosub Button_channel_1
Gosub Button
Elseif S = "B" Then 'если там символ "В"
Gosub Button_channel_2
Gosub Button
Elseif S = "C" Then 'если там символ "C"
Gosub Button_channel_3
Gosub Button
Elseif S = "D" Then 'если там символ "D"
Gosub Button_channel_4
Gosub Button
'------------------------ ВКЛЮЧИТЬ ВСЕ КАНАЛЫ -------------------------------
Elseif S = "F" Then 'если там символ "F"
For I = 4 To 7 'цикл в 4 шагов
Reset Porta.i
Waitms 300 'немного подождём
Next 'след шаг
Gosub Channel_1
Gosub Channel_2
Gosub Channel_3
Gosub Channel_4
Gosub Button
'------------------------ ВЫКЛЮЧИТЬ ВСЕ КАНАЛЫ -------------------------------
Elseif S = "S" Then 'если там символ "F"
For I = 4 To 7 'цикл в 4 шагов
Set Porta.i
Waitms 300 'немного подождём
Next 'след шаг
Gosub Channel_1
Gosub Channel_2
Gosub Channel_3
Gosub Channel_4
Gosub Button
'------------------------ УЗНАТЬ СОСТОЯНИЕ ВСЕХ КАНАЛОВ -----------------------
Elseif S = "H" Then 'если там символ "H"
Gosub Channel_1
Gosub Channel_2
Gosub Channel_3
Gosub Channel_4
Gosub Button
End If
'---------------------------
Del_buffer 'если в буфере что-то другое очищаем его
End If
Loop '*
End '*
'*******************************************************************************
'***************** Подпрограмма обработки прерывания INT0 ****************
'*******************************************************************************
Button_channel_1:
If Pina.4 = 1 Then 'Проверяем состояние порта
Reset Porta.4
Gosub Lcd_1_on
Uartprint1 = "1 CH ON" 'отошлем сообщение
Else
Gosub Lcd_1_off
Uartprint1 = "1 CH OFF" 'отошлем сообщение
Set Porta.4
End If
' Toggle Porta.4 'Переключатель
Return
'===================
Button_channel_2:
If Pina.5 = 1 Then 'Проверяем состояние порта
Gosub Lcd_2_on
Uartprint2 = "2 CH ON" 'отошлем сообщение
Reset Porta.5
Else
Gosub Lcd_2_off
Uartprint2 = "2 CH OFF" 'отошлем сообщение
Set Porta.5
End If
'Toggle Porta.5 'Переключатель
Return
'====================
Button_channel_3:
If Pina.6 = 1 Then 'Проверяем состояние порта
Gosub Lcd_3_on
Uartprint3 = "3 CH ON" 'отошлем сообщение
Reset Porta.6
Else
Gosub Lcd_3_off
Uartprint3 = "3 CH OFF" 'отошлем сообщение
Set Porta.6
End If
'Toggle Porta.6 'Переключатель
Return
'====================
Button_channel_4:
If Pina.7 = 1 Then 'Проверяем состояние порта
Gosub Lcd_4_on
Uartprint4 = "4 CH ON" 'отошлем сообщение
Reset Porta.7
Else
Gosub Lcd_4_off
Uartprint4 = "4 CH OFF" 'отошлем сообщение
Set Porta.7
End If
'Toggle Porta.7 'Переключатель
Return
'=============================================================================
Channel_1:
If Pina.4 = 0 Then 'Проверяем состояние порта
Uartprint1 = "1 CH ON" 'отошлем сообщение
Gosub Lcd_1_on
Else
Uartprint1 = "1 CH OFF" 'отошлем сообщение
Gosub Lcd_1_off
End If
Return
Channel_2:
If Pina.5 = 0 Then 'Проверяем состояние порта
Uartprint2 = "2 CH ON" 'отошлем сообщение
Gosub Lcd_2_on
Else
Uartprint2 = "2 CH OFF" 'отошлем сообщение
Gosub Lcd_2_off
End If
Return
Channel_3:
If Pina.6 = 0 Then 'Проверяем состояние порта
Uartprint3 = "3 CH ON" 'отошлем сообщение
Gosub Lcd_3_on
Else
Uartprint3 = "3 CH OFF" 'отошлем сообщение
Gosub Lcd_3_off
End If
Return
Channel_4:
If Pina.7 = 0 Then 'Проверяем состояние порта
Uartprint4 = "4 CH ON" 'отошлем сообщение
Gosub Lcd_4_on
Else
Uartprint4 = "4 CH OFF" 'отошлем сообщение
Gosub Lcd_4_off
End If
Return
'==============================================================================
'--------------------- Обработка кнопок по прерыванию -------------------------
'==============================================================================
Button:
Reset Portd.6 'UART
'---------- здесь мы в цикле сканируем все подключенные кнопки ----------------
If Pina.0 = 0 Then
Gosub Button_channel_1
End If
If Pina.1 = 0 Then
Gosub Button_channel_2
End If
If Pina.2 = 0 Then
Gosub Button_channel_3
End If
If Pina.3 = 0 Then
Gosub Button_channel_4
End If
' ----------------------------- мигнем светодиодом ----------------------------
Pulseout Portb , 0 , 2500
'------------------------------------------------------------------------------
' http://www.radiokot.ru/forum/viewtopic. … start=2120
While Pina.0 = 0 ' до тех пор пока кнопка удерживается
Incr Count ' увеличиваем счетчик
Waitms 50 ' задержка
If Count = 20 Then ' если кнопка удерживается 1 секунду
If Pina.4 = 0 Then
If Pina.5 = 1 Then
Gosub Button_channel_2
Waitms 50
End If
If Pina.6 = 1 Then
Gosub Button_channel_3
Waitms 50
End If
If Pina.7 = 1 Then
Gosub Button_channel_4
Waitms 50
End If
End If
If Pina.4 = 1 Then
If Pina.5 = 0 Then
Gosub Button_channel_2
Waitms 50
End If
If Pina.6 = 0 Then
Gosub Button_channel_3
Waitms 50
End If
If Pina.7 = 0 Then
Gosub Button_channel_4
Waitms 50
End If
End If
End If
Wend
'--------------------------- Вывод информации в UART --------------------------
Print Uartprint1
Print Uartprint2
Print Uartprint3
Print Uartprint4
'Print "TEST PORT 6"
Print Chr(13)
Set Portd.6
Waitms 10
Gifr = 64 'сброс флага прерывания
Count = 0
Return
'подпрограмма для разбора сообщения c UART
'=========================================
Sub Getline(s As String)
S = ""
Do
B = Inkey() 'берем символ из буфера в формате ASCII
Select Case B
Case 0 : Exit Do 'если дальше буфер пуст - выходим из цикла
Case 10 : If S <> "" Then Exit Do 'конец строки, значит выходим из цикла
Case Else : If B > 31 Then S = S + Chr(b) 'составляем строку
End Select
Loop
End Sub
'очистка буфера UART
'===================
Sub Del_buffer()
Do
B = Inkey() 'кладем в переменную "В" данные из буфера
Loop Until B = 0 'выходим из цикла когда в переменную попадет 0 (буфер пуст)
End Sub
'------------------------------- LCD 1 ---------------------------------------
Lcd_1_on:
'Cls 'LCD стереть информацию
Locate 1 , 1 'LCD знакоместо 1 ряд 1 знак
Lcd "CH1 ON" 'Lcd показывает код адреса нажатой кнопки
Return
Lcd_1_off:
'Cls 'LCD стереть информацию
Locate 1 , 1 'LCD знакоместо 1 ряд 1 знак
Lcd "CH1 OFF" 'Lcd показывает код адреса нажатой кнопки
Return
'------------------------------- LCD 2 ---------------------------------------
Lcd_2_on:
'Cls 'LCD стереть информацию
Locate 1 , 9 'LCD знакоместо 1 ряд 1 знак
Lcd "CH2 ON" 'Lcd показывает код адреса нажатой кнопки
Return
Lcd_2_off:
'Cls 'LCD стереть информацию
Locate 1 , 9 'LCD знакоместо 1 ряд 1 знак
Lcd "CH2 OFF" 'Lcd показывает код адреса нажатой кнопки
Return
'------------------------------- LCD 3 ---------------------------------------
Lcd_3_on:
'Cls 'LCD стереть информацию
Locate 2 , 1 'LCD знакоместо 1 ряд 1 знак
Lcd "CH3 ON" 'Lcd показывает код адреса нажатой кнопки
Return
Lcd_3_off:
'Cls 'LCD стереть информацию
Locate 2 , 1 'LCD знакоместо 1 ряд 1 знак
Lcd "CH3 OFF" 'Lcd показывает код адреса нажатой кнопки
Return
'------------------------------- LCD 4 ---------------------------------------
Lcd_4_on:
Locate 2 , 9 'LCD знакоместо 1 ряд 1 знак
Lcd "CH4 ON" 'Lcd показывает код адреса нажатой кнопки
Return
Lcd_4_off:
Locate 2 , 9 'LCD знакоместо 1 ряд 1 знак
Lcd "CH4 OFF" 'Lcd показывает код адреса нажатой кнопки
Return
Что то Я не в курю как тут файлы кидать 
Если тормозной индикатор, то выставьте
или больше. У поляков видел и 20. Если ничего не указать, по умолчанию Баском ставит 5.
Да, пока в грубую черную клетку это помогает для библиотеки lcd_pcf8574lib. Для lcd_pcf8574_8.lib не помогает никак, видимо алгоритм обработки E1 в физически единственном экземпляре (только одна ножка) не правильный, или я не понял смысла в константе _lcd_e = 128 ' 64=E2 (3 & 4 stering) 128=E1 (1 & 2 string) 192=E1+E2 (all 4 strings) для моего скромного 1602 индикатора с одной физически Pcf_e
У меня вот такая библиотека $lib "lcd_pcf8574_9.lib"
У меня надо программно прижимать r/w к земле, иначе не работает.
Вау! Тема! Спасибо! Ща вкуриваю )
У кого заработало в железе???
У кого заработало в железе???
Заработало что?
Схема Александра с 8 LCD индикаторами, которая приведена выше на несколько сообщений, или сам индикатор, подключенный по I2C?
На 328Р НИвкакую. На 2560 и на С++ запросто. Хоть с резЮками, хоть без.
+
Или напишите, какие современные модули можно соединить по I2C или SPI шине с баскомом, т.е. на какие модули есть готовые библиотеки. Смотрел на али... там Экранчики даже цветные есть, и стоят копейки... Пора уже с букво-цифр переходить на MaxiDоt-ы ))) Спсб!
На 328Р НИвкакую. На 2560 и на С++ запросто. Хоть с резЮками, хоть без.
В конечном итоге, при огромной помощи форумчан и особенно Александра (sasha_1973) индикатор на 328Р успешно завелся.
Из моих граблей: тщательно проверить адрес, на котором сидит индикатор, обязательно подтянуть резюками к плюсу SDA и SCL, проверить RW (у меня правильное положение - посажен на минус).
Хорошо... есть скомпилированная прошивка в HEX формате под 328Р? Чтоб не колупаццо а попробовать.
HEX-а сейчас пока нету рядом. На другом компе остались наработки... 
Доброго здоровья!
Что за шум, а драки нет?
Хорошо... есть скомпилированная прошивка в HEX формате под 328Р? Чтоб не колупаццо а попробовать.
Какое у Вас железо, и что именно Вам надо попробовать?
Хелло!
Да я вот всё думаю... нафига мне энтот экран кривой на i2c шине? На С++ без проблем хоть на нане, хоть на меге. В баскоме никак вообще. Проц даже импульсы никуда не шлёт в порты, хоть обконфигурируйся.
Дык вот я и смею сказать-то... мож пора на мультидоты цветные переходить? Да ищщо с цифровым интерфейсом, типа i2c или SPI или ещё че посовременнее...? Какие сейчас интерфейсы-то есть? Но чтоб не более 3-4 проводов было (без +- 5 Вольт). Нафига оно мне... спросите вы? Я делаю всякие электронные "затычки". Сломалось ченить сУрьёзное и дорогое... а надо наколхозить, так, наскоряк и побыстрее, чтоб работало, вот и приходится всё енто отлаживать "на коленке" А нафига? Прикрутим дисплей с кнопками в софт и не нужно с собой ноутбуки таскать по полям-горам-лесам. КАроче, есть 100% работающий дисплей под баском... хоть за $40? Любой, чтоб за 1-2 дня софт накропал и вперёд... Плиз.
Спасибо Вам, мудрый человек!
нефиг там пин выковыривать, исправьте в либе 1 строчку и всё!
_Send_to_LCD:
push r25
push r26 ; Register 26 ab auf den Stack
push r27 ; Register 27 ab auf den Stack
mov r25,_temp1
BST r25, 0 ; Bit0 aus _temp1 ins T-Bit
*BLD _temp1, PCF_D4 ; Das T-Bit wird in _temp2 an Position PCD_D4 geschrieben
BST r25, 1 ; Bit1 aus _temp1 ins T-Bit
*BLD _temp1, PCF_D5 ; Das T-Bit wird in _temp2 an Position PCD_D5 geschrieben
BST r25, 2 ; Bit2 aus _temp1 ins T-Bit
*BLD _temp1, PCF_D6 ; Das T-Bit wird in _temp2 an Position PCD_D6 geschrieben
BST r25, 3 ; Bit3 aus _temp1 ins T-Bit
*BLD _temp1, PCF_D7 ; Das T-Bit wird in _temp2 an Position PCD_D7 geschrieben
BST r25, 4 ; Bit4 aus _temp1 ins T-Bit
*BLD _temp1, PCF_RS ; Das T-Bit wird in _temp2 an Position PCD_RS geschrieben
*lds r25,{_backlight} ; read backlight state
bst r25, 0 ; save it state in T register
*bld _temp1, PCF_BL ; copy state to register
set
*BLD _temp1, PCF_E2 ; set E2
clt
*BLD _temp1, PCF_E1 ; RESET E1
clr r25
bst r16, 6
*bld r25, PCF_E2
bst r16, 7
*bld r25, PCF_E1
Вы здесь » Программирование ATMEL в BASCOM. » Дисплеи и индикация » Помогите с запуском LCD 4x20 по i2c