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

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

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

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


Вы здесь » Программирование ATMEL в BASCOM. » Примеры применения в среде Баском » ! Вывод информации на LCD по шине I2c (2 ножки МК) через PCF8574x !


! Вывод информации на LCD по шине I2c (2 ножки МК) через PCF8574x !

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

1

Благодаря пользователю этого форума Сергею Шилову (ник "Mrshilov"), удалось решить проблему вывода информации на символьный LCD с контроллером (HD44780).

Он исправил, а по сути переписал заново, якобы рабочую библиотеку выложенную - здесь (запустить её, так и не удалось). Если вдруг у кого получится, выложите рабочий вариант.

Огромное ему СПАСИБО, от меня лично и думаю от других тоже!

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

Если найдёте ошибки, обязательно напишите, исправлю!

Тема будет наполняться постепенно, так, что наберитесь терпения!


Исходник, 1 LCD, задействован TIMER0, в качестве помехи выводу на LCD

'-------------------------------------------------------------------------------
'--------------------   Конфигурация используемого МК   ------------------------
'-------------------------------------------------------------------------------
  $regfile = "m8def.dat"
  $crystal = 8000000
  $hwstack = 40
  $swstack = 16
  $framesize = 32
'-------------------------------------------------------------------------------
'------------------------   Подключаемые библиотеки   --------------------------
'-------------------------------------------------------------------------------
  $lib "lcd_pcf8574_8.lib"
'-------------------------------------------------------------------------------
'------------------------   Настройка таймера TIMER0  --------------------------
'-------------------------------------------------------------------------------
'   Config Timer0 = Timer , Prescale = 1024 , Clear Timer = 0
'   Config Timer0 = Timer , Prescale = 256 , Clear Timer = 0
'   Config Timer0 = Timer , Prescale = 64 , Clear Timer = 0
'   Config Timer0 = Timer , Prescale = 8 , Clear Timer = 0
   Config Timer0 = Timer , Prescale = 1 , Clear Timer = 0
'-------------------------------------------------------------------------------
'---------------   Настройка дополнительного делителя таймера   ----------------
'-------------------------------------------------------------------------------
  Const Значение_регистра_tcnt0_timer0 = 254       ' Значение регистра TCNT0
  Tcnt0 = Значение_регистра_tcnt0_timer0       ' Настройка дополнительного делителя таймера
'-------------------------------------------------------------------------------
'-----------   Подпрограмма выполняемая после прерывания TIMER0   --------------
'-------------------------------------------------------------------------------
  On Timer0 Обработка_прерывания_timer0       ' Переход на подпрограмму после каждого прерывания TIMER0
  Config Portb.0 = Output
'-------------------------------------------------------------------------------

  Dim _lcd_e As Byte
  Dim _backlight As Byte

'-------------------------------------------------------------------------------
'-----------------------   Конфигурация шины I2c   -----------------------------
'-------------------------------------------------------------------------------
  Config Scl = Portc.5       ' Конфигурим I2c Scl
  Config Sda = Portc.4       ' Конфигурим I2c Sda
  Config I2cdelay = 2       ' частота I2c = частота МК / I2cdelay  (работает в железе до 800кГц)
'-------------------------------------------------------------------------------
'-----------------------   Инициализация шины I2c   ----------------------------
'-------------------------------------------------------------------------------
  I2cinit
  Waitms 10
'-------------------------------------------------------------------------------
'---------------------   Конфигурация используемого LCD   ----------------------
'-------------------------------------------------------------------------------
  Config Lcd = 20 * 4
'-------------------------------------------------------------------------------
'---------------------   Адресация PCF8574 или PCF8574A   ----------------------
'-------------------------------------------------------------------------------
  Const Pcf8574_lcd = &H7E       ' Адрес 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
  Const Pcf_bl = 1
  Const Pcf_e2 = 2
  Const Pcf_e1 = 3
'-------------------
  Const Pcf_d4 = 4
  Const Pcf_d5 = 5
  Const Pcf_d6 = 6
  Const Pcf_d7 = 7
'-------------------
  _lcd_e = 192      ' 64=E2 (3 & 4 stering) 128=E1 (1 & 2 string) 192=E1+E2 (all 4 strings)
  _backlight = 0    'initial Backlight state
'-------------------------------------------------------------------------------
'-----------------   Чистим индикатор   ----------------------------------------
'-------------------------------------------------------------------------------
  Initlcd
  Waitms 10
'-------------------------------------------------------------------------------
'-----------    Подпрограмма вывода русского текста на LCD HD44780   -----------
'-------------------------------------------------------------------------------
  Declare Sub Lcd_print(byval Копия_lcd_print As String)       ' Подпрограмма вывода русского текста на LCD HD44780
'-------------------------------------------------------------------------------
  Dim Длина As Integer , Цикл_lcd_print As Integer
  Dim Код_символа As Byte , Код_символа_lcd As Byte
  Dim Символ_lcd As String * 1 , Символ As String * 1 , Вывод_на_lcd As String * 20
'-------------------------------------------------------------------------------
  Dim Строка_lcd As Byte , Курсор_lcd As Byte , Цикл_lcd As Byte
  Dim Буфер_lcd As String * 20
'-------------------------------------------------------------------------------
'-------------------------------------------------------------------------------
'------------------------   Запускаем прерывания   -----------------------------
'-------------------------------------------------------------------------------
  Enable Timer0
  Enable Interrupts
'-------------------------------------------------------------------------------

  Do : Nop

    Строка_lcd = 1 : Курсор_lcd = 1
    Lcd_print "Вывод русскоязычного"

    Строка_lcd = 2 : Курсор_lcd = 1
    Lcd_print "     сообщения      "

    Строка_lcd = 3 : Курсор_lcd = 1
    Lcd_print "компилятором  Bascom"

    Строка_lcd = 4 : Курсор_lcd = 1
    Lcd_print "в эмуляторе  Протеус"

    Waitms 200

    Cls

    Waitms 100

    Строка_lcd = 1 : Курсор_lcd = 1
    Lcd_print "АаБбВвГгДдЕеЁёЖжЗзИи"

    Строка_lcd = 2 : Курсор_lcd = 1
    Lcd_print "ЙйКкЛлМмНнОоПпРрСсТт"

    Строка_lcd = 3 : Курсор_lcd = 1
    Lcd_print "УуФфХхЦцЧчШшЩщЪъЫыЬь"

    Строка_lcd = 4 : Курсор_lcd = 1
    Lcd_print "ЭэЮюЯя 0123456789 !?"

    Waitms 100

    Cls

    Waitms 100

    Toggle _backlight

  Loop
End
'-------------------------------------------------------------------------------
'*******************************************************************************
'*****************   Подпрограмма обработки прерывания TIMER0   ****************
'*****************          происходит каждые 2,048 ms          ****************
'*******************************************************************************
'-------------------------------------------------------------------------------
  Обработка_прерывания_timer0:
'-------------------------------------------------------------------------------

    Toggle Portb.0

'-------------------------------------------------------------------------------
' Делитель TIMER0 = 1000/(1000000/1024/(256-254))=1000/(976,5625/2) = 2,048 ms
'-------------------------------------------------------------------------------

'    Tcnt0 = Значение_регистра_tcnt0_timer0

'-------------------------------------------------------------------------------
  Return
'-------------------------------------------------------------------------------
'*******************************************************************************
'-------------------------------------------------------------------------------
'-------------------------------------------------------------------------------
'*******************************************************************************
'-------------------------------------------------------------------------------
'-----------    Подпрограмма вывода русского текста на LCD HD44780   -----------
'-------------------------------------------------------------------------------
  Sub Lcd_print(byval Копия_lcd_print As String * 20)
'-------------------------------------------------------------------------------

    Длина = Len(копия_lcd_print) : If Длина = 0 Then Exit Sub

    Вывод_на_lcd = ""

    For Цикл_lcd_print = 1 To Длина
      Символ = Mid(копия_lcd_print , Цикл_lcd_print , 1)
      Код_символа = Asc(символ)
      Код_символа_lcd = Lookup(код_символа , Cp1251_to_lcd_hd44780)
      Символ_lcd = Chr(код_символа_lcd)
      Вывод_на_lcd = Вывод_на_lcd + Символ_lcd
    Next Цикл_lcd_print

    Locate Строка_lcd , Курсор_lcd
    Lcd Вывод_на_lcd

'-------------------------------------------------------------------------------
  End Sub
'-------------------------------------------------------------------------------
'*******************************************************************************
'-------------------------------------------------------------------------------
'**********************************************************************************************************************
'************                                                                                             *************
'************       Таблица для перекодировки из символов Cp1251 в символы знакосинтезирующего LCD        *************
'************                                                                                             *************
'**********************************************************************************************************************
'----------------------------------------------------------------------------------------------------------------------
  Cp1251_to_lcd_hd44780:
'----------------------------------------------------------------------------------------------------------------------
'**********************************************************************************************************************
'----------------------------------------------------------------------------------------------------------------------
'-----------------------------------------    первые 128 знаков    ----------------------------------------------------
'----------------------------------------------------------------------------------------------------------------------
    Data &H00 , &H01 , &H02 , &H03 , &H04 , &H05 , &H06 , &H07 , &H08 , &H09 , &H0A , &H0B , &H0C , &H0D , &H0E , &H0F
    Data &H10 , &H11 , &H12 , &H13 , &H14 , &H15 , &H16 , &H17 , &H18 , &H19 , &H1A , &H1B , &H1C , &H1D , &H1E , &H1F
    Data &H20 , &H21 , &H22 , &H23 , &H24 , &H25 , &H26 , &H27 , &H28 , &H29 , &H2A , &H2B , &H2C , &H2D , &H2E , &H2F
    Data &H30 , &H31 , &H32 , &H33 , &H34 , &H35 , &H36 , &H37 , &H38 , &H39 , &H3A , &H3B , &H3C , &H3D , &H3E , &H3F
    Data &H40 , &H41 , &H42 , &H43 , &H44 , &H45 , &H46 , &H47 , &H48 , &H49 , &H4A , &H4B , &H4C , &H4D , &H4E , &H4F
    Data &H50 , &H51 , &H52 , &H53 , &H54 , &H55 , &H56 , &H57 , &H58 , &H59 , &H5A , &H5B , &H20 , &H5D , &H5E , &H5F
    Data &H60 , &H61 , &H62 , &H63 , &H64 , &H65 , &H66 , &H67 , &H68 , &H69 , &H6A , &H6B , &H6C , &H6D , &H6E , &H6F
    Data &H70 , &H71 , &H72 , &H73 , &H74 , &H75 , &H76 , &H77 , &H78 , &H79 , &H7A , &H5B , &H20 , &H5D , &HE9 , &H7F
'----------------------------------------------------------------------------------------------------------------------
'-----------------------------------------    вторые 128 знаков    ----------------------------------------------------
'----------------------------------------------------------------------------------------------------------------------
    Data &H20 , &H20 , &H20 , &H20 , &H20 , &H20 , &H20 , &H20 , &H20 , &H20 , &H20 , &H20 , &H20 , &H20 , &H20 , &H20
    Data &H20 , &H20 , &H20 , &H20 , &H20 , &H20 , &H20 , &H20 , &H20 , &H20 , &H20 , &H20 , &H20 , &H20 , &H20 , &H20
    Data &HCB , &H20 , &H49 , &H69 , &H04 , &H20 , &HFE , &HEF , &HA2 , &HCC , &H00 , &HC9 , &H20 , &H20 , &H20 , &H02
    Data &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &HB5 , &H4E , &H00 , &H00 , &H00 , &H00 , &H00 , &H00
    Data &H41 , &HA0 , &H42 , &HA1 , &HE0 , &H45 , &HA3 , &HA4 , &HA5 , &HA6 , &H4B , &HA7 , &H4D , &H48 , &H4F , &HA8
    Data &H50 , &H43 , &H54 , &HA9 , &HAA , &H58 , &HE1 , &HAB , &HAC , &HE2 , &HAD , &HAE , &H62 , &HAF , &HB0 , &HB1
    Data &H61 , &HB2 , &HB3 , &HB4 , &HE3 , &H65 , &HB6 , &HB7 , &HB8 , &HB9 , &HBA , &HBB , &HBC , &HBD , &H6F , &HBE
    Data &H70 , &H63 , &HBF , &H79 , &HE4 , &H78 , &HE5 , &HC0 , &HC1 , &HE6 , &HC2 , &HC3 , &HC4 , &HC5 , &HC6 , &HC7
'----------------------------------------------------------------------------------------------------------------------
'**********************************************************************************************************************
'----------------------------------------------------------------------------------------------------------------------

Эмуляция в "Протеус", исходник, библиотека "Bascom" для вывода через PCF8574 (выводы назначаются в исходнике) - скачать

http://s5.uploads.ru/t/Fqp4S.jpg


Atmega8 и 2 LCD через 2 PCF8574x

Эмуляция в "Протеус" - скачать

http://s5.uploads.ru/t/6TyeM.jpg


Atmega8 и 4 LCD через 4 PCF8574x

Эмуляция в "Протеус" - скачать
http://s4.uploads.ru/t/Vhr36.jpg


Atmega8 и 8 LCD через 8 PCF8574x

Эмуляция в "Протеус" - скачать
http://s4.uploads.ru/t/bo8Aw.jpg


Attiny85 и 8 LCD через 8 PCF8574x

Эмуляция в "Протеус" - скачать
http://s4.uploads.ru/t/JkiaT.jpg


http://s5.uploads.ru/t/6AyTF.jpg

Отредактировано sasha_1973 (2013-12-28 22:33:03)

+3

2

1 вариант китайской платки 

Библиотеки писал Сергей Шилов (ник "Mrshilov")

http://se.uploads.ru/t/aZKlJ.png

Фотки

http://se.uploads.ru/t/hVnQY.jpg http://se.uploads.ru/t/rEkHh.jpg
http://se.uploads.ru/t/7bvFp.jpg http://se.uploads.ru/t/gGEJe.jpg
http://se.uploads.ru/t/865nm.jpg http://se.uploads.ru/t/gJZm5.jpg
http://se.uploads.ru/t/4F5RB.jpg http://se.uploads.ru/t/ODAdg.jpg
http://se.uploads.ru/t/RIX3l.jpg


Симуляция (Протеус 7.10) + исходники (обычный (Bascom 2.0.7.1) + мульти i2c (Bascom 2.0.7.8) + библиотеки для Bascom  -  скачать


0

3

2 вариант китайской платки

Библиотеки писал Сергей Шилов (ник "Mrshilov")

http://se.uploads.ru/t/b59gq.png

Фотки

http://se.uploads.ru/t/oB1uW.jpg http://se.uploads.ru/t/N6ngw.jpg
http://se.uploads.ru/t/XGNKM.jpg http://se.uploads.ru/t/wAx0H.jpg


Симуляция (Протеус 7.10) + исходник (Bascom 2.0.7.1) + библиотеки для Bascom  -  скачать

+2

4

Работа с LCD WH4004A-TMI-CT (кириллица зашита в знакогенератор, 2 чипа, 4 строки, 40 символов в строке, используются E1 и Е2) через PCF8574

Симуляция (Протеус 7.10) + исходник (Bascom 2.0.7.1) + документация + фото   -  скачать

Огромное СПАСИБО!

Mrshilov

Skull


http://s3.uploads.ru/t/rJ3bf.jpg http://s3.uploads.ru/t/UMLDT.jpg

+3

5

Atmega328P + LCD WH4004A + 8 разрядов 7-seg LED + через 3 шт., PCF8574


Симуляция (Протеус 7.10) + исходник (Bascom 2.0.7.1) + полная документация на LCD + фото + видео  -  скачать


http://s7.uploads.ru/t/Fihkm.jpg http://s2.uploads.ru/t/RYapx.jpg

+3

6

Антикризисный исходник.

Понадобился символьный LCD с кириллицей, потопал в лавку и !!!!!!!!!  ПРОЗРЕЛ, ценник в районе 15...20 $.

Китайский аналог, правда без русского на борту = 3.15$  вот подтверждение

+

платка с PCF8574 - 0.72$

Русский язык на китайских LCD  -  скачать

Перекодировка на лету, осуществляется для следующих символов - АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЫЬЭЮЯ

http://se.uploads.ru/t/5hm1V.jpg http://s4.uploads.ru/t/dGB80.jpg

+2

7

В Bascom 2.0.7.7 не могу скомпелирлвать - выскакивают ошибки. А так все отлично.

0

8

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

В Bascom 2.0.7.7 не могу скомпелирлвать

Версия для Bascom 2.0.7.004  -  скачать

0

9

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

Версия для Bascom 2.0.7.004

Спасибо, теперь все хорошо.

0

10

....

Atmega8 + 2 LCD через 2 x PCF8574 

Симуляция (Протеус 7.10) + исходник (Bascom 2.0.7.1) + библиотека  -  скачать

http://s6.uploads.ru/t/Dk3LR.jpg

+2


Вы здесь » Программирование ATMEL в BASCOM. » Примеры применения в среде Баском » ! Вывод информации на LCD по шине I2c (2 ножки МК) через PCF8574x !