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

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

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

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


Вы здесь » Программирование ATMEL в BASCOM. » Исходники » Помогите с запуском LCD 4x20 по i2c


Помогите с запуском LCD 4x20 по i2c

Сообщений 91 страница 120 из 210

91

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

Если у вас один Е, то нужно выбирать 128 (или 64, смотря к какой ножке подключен этот Е). Даже если дисплей 4х-строчный, но с одним Е - это не две половинки, а целый дисплей.

Большое спасибо!
Буду знать.

0

92

Благодаря всем кто тут запускал эту штуку, я сегодня запустил и свою.
'----------------    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

+1

93

Игорь, а с какой библиотекой запустил?

0

94

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

0

95

Странно как то библиотеки работают.
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 что бы индикатор устойчиво работал?

0

96

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

Вопрос, как именно нужно выставлять E1 и E2, R/W что бы индикатор устойчиво работал?


Смотря какой индикатор.

Автор с ником "ignel", по-моему резал дорожки, что-то там китайцы намутили. В итоге все запустилось с такой платкой.

Вызвонить дорожки и подключить согласно схемы, все работает, проверено неоднократно. E2 висит в воздухе.

Почитайте ветку, такая проблема была у "ignel".

0

97

Первое что нужно смотреть это адрес, как выставлены А0 А1 А2.
На моей А0 А1 А2 все привязаны к земле.
Далее на входе SDA SCL нужно поставить резисторы , у меня по 4.7к.
Резисторы должны быть подсоединены на +U(5вольт).
Ща напишу про E1 и E2, R/W.
посмотрю что у меня там на плате

0

98

У меня индикатор вот такой 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)

0

99

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

У меня индикатор вот такой http://www.labkit.ru/userfiles/file/doc … 2K_rus.pdf
На платке уже есть резисторы, все А0 А1 А2 висят в воздухе, плата определяется правильно, "ножками дрыгает".

У меня оказывается тоже такая есть платка, недавно пришла.
Один в один как у тебя.
Сейчас попробую её запустить.

0

100

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

У меня оказывается тоже такая есть платка, недавно пришла.
Один в один как у тебя.
Сейчас попробую её запустить.

  Const Pcf_e2 = 2                                          '
  Const Pcf_e1 = 2                                          '

Вот так у меня запустилось.
Попробуй у себя

0

101

Const Pcf_e2 = 3                                          '
  Const Pcf_e1 = 2                                          '

Можно так :)

0

102

Const Pcf8574_lcd = &H40

0

103

Запускаться и у меня запускается, с библиотекой lcd_pcf8574.lib  работает довольно устойчиво, но если чуть глюкнет, то только по питанию рубить.
С библиотекой lcd_pcf8574_8.lib мигает подсветкой и сыплет мусор, хотя если выдавать меньше 16 символов, то мусора нет, только подсветку трясет.
В общем надо смотреть тайминги, дело похоже в индикаторе, на него обижаются и при обычном соединении, если тайминги не соблюдать глючит, путает адрес и данные.

0

104

Вот такой код у меня работет
'-------------------------------------------------------------------------------
'--------------------   Конфигурация используемого МК   ------------------------
'-------------------------------------------------------------------------------
  $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

0

105

Что то Я не в курю как тут файлы кидать :(

0

106

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

Если тормозной индикатор, то выставьте

или больше.  У поляков видел и 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

0

107

У меня вот такая библиотека $lib "lcd_pcf8574_9.lib"

0

108

У меня надо программно прижимать r/w к земле, иначе не работает.

0

109

Вау! Тема! Спасибо! Ща вкуриваю )

0

110

У кого заработало в железе???

0

111

-NMi- написал(а):

У кого заработало в железе???

Заработало что?
Схема Александра с 8 LCD индикаторами, которая приведена выше на несколько сообщений, или сам индикатор, подключенный по I2C?

0

112

На 328Р НИвкакую. На 2560 и на С++ запросто. Хоть с резЮками, хоть без.

0

113

+
Или напишите, какие современные модули можно соединить по I2C или SPI шине с баскомом, т.е. на какие модули есть готовые библиотеки. Смотрел на али... там Экранчики даже цветные есть, и стоят копейки... Пора уже с букво-цифр переходить на MaxiDоt-ы ))) Спсб!

0

114

-NMi- написал(а):

На 328Р НИвкакую. На 2560 и на С++ запросто. Хоть с резЮками, хоть без.

В конечном итоге, при огромной помощи форумчан и особенно Александра (sasha_1973) индикатор на 328Р успешно завелся.
Из моих граблей: тщательно проверить адрес, на котором сидит индикатор, обязательно подтянуть резюками к плюсу SDA и SCL, проверить RW (у меня правильное положение - посажен на минус).

0

115

Хорошо... есть скомпилированная прошивка в HEX формате под 328Р? Чтоб не колупаццо а попробовать.

0

116

HEX-а сейчас пока нету рядом. На другом компе остались наработки... :(

0

117

Доброго здоровья!

Что за шум, а драки нет?

-NMi- написал(а):

Хорошо... есть скомпилированная прошивка в HEX формате под 328Р? Чтоб не колупаццо а попробовать.


Какое у Вас железо, и что именно Вам надо попробовать?

0

118

Хелло!
Да я вот всё думаю... нафига мне энтот экран кривой на i2c шине? На С++ без проблем хоть на нане, хоть на меге. В баскоме никак вообще. Проц даже импульсы никуда не шлёт в порты, хоть обконфигурируйся.
Дык вот я и смею сказать-то... мож пора на мультидоты цветные переходить? Да ищщо с цифровым интерфейсом, типа i2c или SPI или ещё че посовременнее...? Какие сейчас интерфейсы-то есть? Но чтоб не более 3-4 проводов было (без +- 5 Вольт). Нафига оно мне... спросите вы? Я делаю всякие электронные "затычки". Сломалось ченить сУрьёзное и дорогое... а надо наколхозить, так, наскоряк и побыстрее, чтоб работало, вот и приходится всё енто отлаживать "на коленке" А нафига? Прикрутим дисплей с кнопками в софт и не нужно с собой ноутбуки таскать по полям-горам-лесам. КАроче, есть 100% работающий дисплей под баском... хоть за $40? Любой, чтоб за 1-2 дня софт накропал и вперёд... Плиз.

0

119

Спасибо Вам, мудрый человек!

0

120

нефиг там пин выковыривать, исправьте в либе 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

0


Вы здесь » Программирование ATMEL в BASCOM. » Исходники » Помогите с запуском LCD 4x20 по i2c