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

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

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

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


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


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

Сообщений 151 страница 180 из 210

151

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

Немного не в тему, но...
Предположим МК связан по i2c с устройствами: память, термометр, барометр, гигрометр, экран, часы, МК.
Попробуйте поразмыслить к чему в этой связке приведет периодически появляющаяся ошибка шины i2c, пусть даже МК ее обработает и продолжит выполнение кода. И ответьте на вопрос - чего будут стоить данные с ошибками (или неполные данные) если это коммерческий проект.


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

0

152

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

У меня версия конечно не последняя (этого года), но то, что стоит, в себе не содержит код 1 в 1. Возможно в новых версиях эту проблему устранили.


Можно кусок либы вашей версии баскома???

0

153

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

Если количество ошибок превысит некий предел или данные от устройства будут ошибочны постоянно - бьём тревогу.


... и отзываем всю серию)))

и как спорить с такой мудростью...?

Предлагаю на этом закончить - мы попросту теряем время.

0

154

вынужден вернуться к теме халявы

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

Для I2C Master отдельная лицензия не нужна. Библиотека распространяется в составе дистрибутива, в т. ч. в демо версии. I2C Slave это отдельная тема и к этой отношения не имеет.


не обратил внимание на самое главное:
если вдумчиво почитать, то можно увидеть вот что

statement    = No SOURCE code from the library may be distributed in any form
statement    = Of course this does not applie for the COMPILED code when you have a BASCOM-AVR license
statement    = Based on ATMEL application note

в демо эта библиотека сомнительна!!!

Отредактировано coder (2017-03-21 23:08:11)

0

155

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

Можно кусок либы

какой кусок - это как-то не конструктивно
давайте тестовый код, который я могу собрать вам и сюда выложить hex

0

156

Да мне то он зачем? Мне самому не трудно его скомпилировать.
Речь шла про аппаратные глюки и неспособность стандартной библиотеки баском правильно их отработать.

0

157

Вам же выше объяснили, что проблема кроется в корявости версии баскома, которую вы используете.
Если вас эта проблема так интересует, то решение я выше предложил (чтобы подтвердить или опровергнуть версию с "версиями").

зы: мне то лично ЭТО всё фиолетово, т.к. таких проблем не встречал и разбираться нет желания, хотел легким нахрапом помочь. Если уж у -NMi- "Да мне то он зачем", то вообще непонятно зачем ЭТУ тему каждый раз поднимать.

0

158

Сделайте мне исходник для 328Р  16 мГц тактовкой + DS3231 + LCD I2C (h4e), чтобы дисплей показывал время, дату и температуру по железному I2C. Сам лично проверю на глюки.

0

159

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

Сделайте мне исходник


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

давайте тестовый код, который я могу собрать вам и сюда выложить hex

0

160

ХаРашО! А такой кусок кода есть в ОРИГИНАЛЬНОМ баскоме в библиотеке?

_i2c_stop:
.OBJ E944
* out twcr,r20
_i2c_stop_1:
* In r20,twcr
* Sbrc r20,twsto
Rjmp _i2c_stop_1
.OBJ 9508

0

161

Из крайней версии

comment   = BASCOM-AVR TWI master library
libversion   = 2.0.7.9
date         = 12 Okt 2007
statement    = No SOURCE code from the library may be distributed in any form
statement    = Of course this does not applie for the COMPILED code when you have a BASCOM-AVR license
statement    = Based on ATMEL application note
history      = This lib can replace the i2c.lib when your chip has TWI(M8,M128 etc)
history      = removed interrupt bit as there is no ISR in this lib that services the interrupt
history      = NOTE that no PULL UP is required for the TWI
history      = i2cinit DDR set before pull up
history      = 2077, 1 Nov 2013, changed i2cstop to wait for twsto instead of twint

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

history      = 2079, 3 Dec 2015, after a call to i2cstart the ERR is set when error and the i2csend/i2creceive return

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

history      =       in order to prevent writing/reading wrong data. i2cstop has a timeout in case of a bus error   

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Отредактировано sasha_1973 (2017-03-23 04:59:01)

0

162

Вот! Уже конструктив пошёл! Хорошо!
Так, теперь вопросы по лицензии...
1 - В демо версии ЭТО всё компилируется правильно и все библиотеки доступны для компиляции или нет?
2 - Если "подсунуть" версии 277 либу с 279 скомпилирует?

0

163

Всем доброго времени суток!
Что то нигде не могу найти адреса и значения A0 A1 A2 для PCF8574T, никто не подскажет где посмотреть?
Тоже хочу подружить LCD 1602 по I2C с atmega
На PCF8574 и PCF8574A - нашел, всю ветку вроде внимательно перечитал, на PCF8574T - не нашел
Ну или адрес скажет, платка на PCF8574T из Китая, А0 А1 А2 все разомкнуты
Заранее благодарен.

Отредактировано artur (2017-07-21 13:30:41)

0

164

Тут есть все адреса для PCF8574A/AP/T/AT.

+1

165

max
Спасибо

:)
Что то я не нашел с индексом Т

http://habaroved.net/_fr/2/s1377832.jpg

Есть без индекса и с индексом А, адреса для индекса Т я там не нашел

Отредактировано artur (2017-07-21 14:57:34)

0

166

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

Что то нигде не могу найти адреса и значения A0 A1 A2 для PCF8574T, никто не подскажет где посмотреть?

Вопрос остается актуальным

0

167

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

Вопрос остается актуальным

http://s0.uploads.ru/t/GicbL.png

0

168

max, я не о распиновке, а о адресах для шины I2C, по какому адресу мне к PCF8574T обращаться, или какой адрес она имеет при разомкнутых перемычках А0 А1 А2

Пункт 7.1.1 Address map интересует касательно PCF8574T (в нем рассмотрены только PCF8574 и PCF8574А)

Отредактировано artur (2017-07-21 16:12:58)

0

169

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

Вопрос остается актуальным

Заливаете в МК это и собственно смотрите адреса записи и чтения.

+1

170

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

Заливаете в МК это и собственно смотрите адреса записи и чтения.

Спасибо, сейчас попробую

0

171

Может PCF8574=PCF8574T,а PCF8574A= PCF8574AT?

0

172

Sergik07
Сейчас узнаем :)

0

173

Попробуйте комбинации &H4E / &H4F и &H7E / &H7F.

Рабочий код.

Код:
$regfile = "M328pdef.dat"                         'es handelt sich um einen ATmega8
$crystal = 16000000                               'der eingebaute RC-Oszillator lдuft mit 16 Mhz
$hwstack = 100                                    'im Speicher werden fьr den Hardware-Stack 100 Byte reserviert
$swstack = 100                                    'im Speicher werden fьr den Software-Stack 100 Byte reserviert
$framesize = 100                                  'im Speicher werden fьr den Frame 100 Byte reserviert
$baud = 19200

'------------------------------------------------------------------------------
' Definition von Libraries
'------------------------------------------------------------------------------
$lib "i2c_twi.lbx"                                ' die "echte" TWI benutzen



'------------------------------------------------------------------------------
' Definition von HW-Ressourcen
'------------------------------------------------------------------------------

Sda_port Alias Portc.4                            'Definition der I2C-Ports
Scl_port Alias Portc.5

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 = &H7E ' &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

+1

174

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

Заливаете в МК это и собственно смотрите адреса записи и чтения.

Залил, в терминале читабельны только английские буквы и цифры, что русскими - иероглифы. (что то у меня видать с кодировкой)
У меня правда 32 мега, но я порты поменял в конфиге SDA и SCL согласно распиновке 32 меги, ну и верхушку соответствующую
$Regfile="m32def.dat"
$Crystal=16000000
$hwstack=40
$swstack=16
$framesize=32
Думаю дело не в этом, думаю проще будет переписать в коде русский язык на транслит, сейчас попробую

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

Попробуйте комбинации &H4E / &H4F и &H7E / &H7F.
Рабочий код.

Спасибо, попробую после сканера, сканер только доковыряю :)

Отредактировано artur (2017-07-21 19:43:35)

0

175

Перевод русского на английский не помог, так же иероглифы но другие, да и бог с ними, основное более менее понятно.
Результат в терминале:

Код:
Usart 38400
Сканер устройств на шине i2c

 PCF8574; PCF8574N; PCF8575; MCP23008; MCP23016; (A0=1; A1=1; A2=1)
 Адрес чтения: bin = &B_01001111;  hex = &H4F;  dec = 79
 Адрес записи: bin = &B_01001110;  hex = &H4E;  dec = 78



Все подключенные устройства найдены


Забавно.... ничего не понял.... из терминала в буфер скопировал иероглифы в буфер обмена, вставил на форум, все красиво и по русски :)

Я так понимаю нужные мне адреса это &H4F и &H4E

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

Попробуйте комбинации &H4E / &H4F

Вы абсолютно правы. Ещё раз спасибо!

Отредактировано artur (2017-07-21 20:03:32)

0

176

Пётр

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

Рабочий код.

Что то код не пошел, поправил его под 32 мегу, поменял адрес на &H4E, откомпилировал, залил в МК - просто горит подсветка, ресет нажимаю, очень быстрое однократное моргание прослеживается во время нажатия и опять просто подсветка горит

0

177

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

Пётр

Что то код не пошел, поправил его под 32 мегу, поменял адрес на &H4E, откомпилировал, залил в МК - просто горит подсветка, ресет нажимаю, очень быстрое однократное моргание прослеживается во время нажатия и опять просто подсветка горит

Здесь смотрели ?

0

178

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

Здесь смотрели ?

Спасибо.
Платка очень похожа на второй вариант, выпаиваем штырек RW а контакт дисплея под ним кидаем на GND платки, правильно я понял?

0

179

Прошу прощения за назойливость, ещё вопросик появился.
Тут в ветке упоминалась библиотека lcd_pcf8574.lib, а где можно её найти, гугл что не помогает мне в этом.

0

180

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

Прошу прощения за назойливость, ещё вопросик появился.
Тут в ветке упоминалась библиотека lcd_pcf8574.lib, а где можно её найти, гугл что не помогает мне в этом.


Вы же скачали архив, там есть всё, что нужно !

На русском языке написано "Библиотека Bascom".

Отредактировано sasha_1973 (2017-07-21 21:51:09)

0


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