Не удаётся запустить простейшую программу I2C

Поклонники продукции Microchip Technology Inc тусуются тут.
Ответить
Аватара пользователя
efimius
Первый раз сказал Мяу!
Сообщения: 24
Зарегистрирован: Вт апр 30, 2013 13:04:47

Не удаётся запустить простейшую программу I2C

Сообщение efimius »

Доброго времени суток.
Стоит задача связать 18F26J50 через шину I2C c ЖКД типа 1602. Компайлер микроС 5.61. Для согласования применяется PCF8574. Симуляция ведётся В Протеусе 7.К сожалению на форуме не смог найти подобный топик.
С самого начала дело не заладилось и я решил упростить задачу-заменить ЖКД на восьмёрку светодиодов,подключённых к выходам PCF8574,благо это по сути-защёлка.Программа простая- вывести на светодиоды комбинацию101010.
Вот неработающая программа:

Код: Выделить всё

//HS,HS-USB * 4MHz,no PLL*


void main() {

   ANCON0 = 0b11111111;          //Config all analog to digital
   ANCON1 = 0b00011111;          //Config all analog to digital

   SSP1CON1.B5=1;                //Set MSSP1 enable bit
   SSP1CON1.B3 =1; //--------\
   SSP1CON1.B2 =0; //         \__ //I2C Master mode,SSPM<0:3>- 1000
   SSP1CON1.B1 =0; //         /
   SSP1CON1.B0 =0; //--------/
TRISB=1;
PORTB=1;
  I2C1_Init(100000);         // initialize I2C communication
  I2C1_Start();              // I2C start signal
  I2C1_Wr(0x27);             // send byte via I2C  (PCF8574 address)
  I2C1_Wr(0xAA);             // send data (LEDs-10101010 combination on)
  I2C1_Stop();               //I2C stop signal


Буду рад любой посильной помощи, с пониманием приму любую ругань.
-=Vovka=-
Опытный кот
Сообщения: 844
Зарегистрирован: Пн апр 11, 2011 10:08:52

Re: Не удаётся запустить простейшую программу I2C

Сообщение -=Vovka=- »

Не знаю, лично я бы не использовал I2C для управления таким индикатором....
Ну да ладно, если хочется, то нужно начать вот с этого: http://www.gaw.ru/html.cgi/txt/ic/Philips/interfaces/iic/pcf8574.htm
А вообще схему в студию!
Аватара пользователя
efimius
Первый раз сказал Мяу!
Сообщения: 24
Зарегистрирован: Вт апр 30, 2013 13:04:47

Re: Не удаётся запустить простейшую программу I2C

Сообщение efimius »

http://img.radiokot.ru/files/87529/medium/a0ojf2k0i.jpg

-=Vovka=- писал(а):Не знаю, лично я бы не использовал I2C для управления таким индикатором....
Ну да ладно, если хочется, то нужно начать вот с этого: http://www.gaw.ru/html.cgi/txt/ic/Philips/interfaces/iic/pcf8574.htm
А вообще схему в студию!

Понимаю Ваш скепсис,но не я выбирал этот малоножечный девайс ,кроме того,сильно надеюсь на встроенную в микроС библиотеку для ЖКД. Её нужно будет просто передавать в виде нибблов,но это потом,сейчас просто оживить передачу. Подозреваю,что по невежеству,не установил какой-нибудь регистр,хотя,вроде с даташитом 18F26J50 ознакомился.
Последний раз редактировалось AlekseyEnergo Вт мар 04, 2014 12:32:23, всего редактировалось 1 раз.
Причина: Нарушение пункта 2.2 правил форума. Подредактировал. Предупредил!!
Аватара пользователя
uldemir
Друг Кота
Сообщения: 7357
Зарегистрирован: Пт авг 28, 2009 21:34:30
Откуда: 845-й км.

Re: Не удаётся запустить простейшую программу I2C

Сообщение uldemir »

Не знаю нюансов используемой вами библиотеки, но попробуйте вместо

Код: Выделить всё

I2C1_Wr(0x27);             // send byte via I2C  (PCF8574 address)
посылать 0x4E для записи и 0x4F для чтения. Я-т сам пишу себе функции, чтобы разбираться только со своими глюками.
-=Vovka=-
Опытный кот
Сообщения: 844
Зарегистрирован: Пн апр 11, 2011 10:08:52

Re: Не удаётся запустить простейшую программу I2C

Сообщение -=Vovka=- »

efimius писал(а):
-=Vovka=- писал(а):Не знаю, лично я бы не использовал I2C для управления таким индикатором....
Ну да ладно, если хочется, то нужно начать вот с этого: http://www.gaw.ru/html.cgi/txt/ic/Philips/interfaces/iic/pcf8574.htm
А вообще схему в студию!

Понимаю Ваш скепсис,но не я выбирал этот малоножечный девайс ,кроме того,сильно надеюсь на встроенную в микроС библиотеку для ЖКД. Её нужно будет просто передавать в виде нибблов,но это потом,сейчас просто оживить передачу. Подозреваю,что по невежеству,не установил какой-нибудь регистр,хотя,вроде с даташитом 18F26J50 ознакомился.

Значит как бы я в этом случае поступил:
1. Удалил микроС - в свое время он меня сильно подвел, когда проект был практически готов, а компилятор (с лекарством) начал бред какой-то генерить... Сейчас с 18-серией работаю на MCC18.
2. Помигать светодиодом - убедившись, что правильно работает МК и на заявленной частоте.
3. Скачай даташит (ссылку я давал) на PCF8574 и посмотри на стр.9 какую адресацию там показывают

Кое-что нашел:
http://jt5.ru/examples/oled-i2c/
http://bascomavr.3bb.ru/viewtopic.php?id=964
http://www.shelezyakin.ru/?p=1101

Если мало, то вот: http://bit.ly/1i26pXi :)))
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Не удаётся запустить простейшую программу I2C

Сообщение Аlex »

К вышесказанному хочу добавить :
4. Выкинуть протеус в мусорку и проверять только на железе !
-=Vovka=-
Опытный кот
Сообщения: 844
Зарегистрирован: Пн апр 11, 2011 10:08:52

Re: Не удаётся запустить простейшую программу I2C

Сообщение -=Vovka=- »

Согласен! Лично я никогда протеусом не пользовался, а проверял в железе.
Конечно если нужно было что-то отладить и это возможно, то пользовался Visual C++, а потом переносил в проект для МК
Последний раз редактировалось AlekseyEnergo Вт мар 04, 2014 12:34:19, всего редактировалось 1 раз.
Причина: Нарушение пункта 2.7 правил форума. Подредактировал. Предупредил!!
lawr
Встал на лапы
Сообщения: 120
Зарегистрирован: Чт фев 16, 2012 15:22:06

Re: Не удаётся запустить простейшую программу I2C

Сообщение lawr »

Чтобы шина I2C работала, приемник должен отправлять ведущему acknowledge bit, а кто же вам его в шпротеусе отправит? Как выход - при симуляции формируйте его передачу искусственно, добавив оное в отлаживаемую программу, естественно, выбрасывая потом из программы для реального устройства
Аватара пользователя
efimius
Первый раз сказал Мяу!
Сообщения: 24
Зарегистрирован: Вт апр 30, 2013 13:04:47

Re: Не удаётся запустить простейшую программу I2C

Сообщение efimius »

Спасибо uldemiru , в точку. Правда,поздновато,успел сам найти ошибку. В Протеусе адрес задается в пределах 0Х40 - 0Х4F, но адреса PCF8574 (A0-A2)-это старшие биты младшего полубайта адреса,а младший бит - это запись\чтение R/!W. В моём случае - должен быть "0",т.к. я только записываю. Кстати,в даташите на реальный (не протеусовский) PCF8574 даётся область адресов 0Х20-0Х27.
Следовательно в вышепомещённой программе следует поменять адрес PCF8574 с 0Х27 на 0Х4Е и светодиоды зажгутся! На микроС и в Протеусе!Спасибо всем за помощь,теперь буду приссоединять ЖКИ вместо светодиодов. :write:
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Re: Не удаётся запустить простейшую программу I2C

Сообщение dosikus »

efimius писал(а):Кстати,в даташите на реальный (не протеусовский) PCF8574 даётся область адресов 0Х20-0Х27.

Типичная ошибка нуба , рассматривать адрес без признака R/W .
По спецификации шины I2C, адрес 7 бит дополняется до 8 бит признаком R/W .
Дык что и в реале и в Протеусе передается 0x4E для записи и 0x4F для чтения .
Научитесь сначала читать документацию ...

lawr, а ты так уверен ?
Аватара пользователя
efimius
Первый раз сказал Мяу!
Сообщения: 24
Зарегистрирован: Вт апр 30, 2013 13:04:47

Re: Не удаётся запустить простейшую программу I2C

Сообщение efimius »

Что ещё сбило с толку,что в реале у меня китайская платка с PCF8574 вот такая
http://www.ebay.com/itm/281234403721?ssPageName=STRK:MEWNX:IT&_trksid=p3984.m1497.l2648
и написано:
I2C Address: 0X20~0X27 (the original address is 0X20,you can change it yourself)
Supply voltage: 5V
the backlight and contrast is adjusted by potentiometer
Come with 2 IIC interface, which can be connected by Dupont Line or IIC dedicated cable
I2C Address: 0x27 (I2C Address: 0X20~0X27 (the original address is 0X27,you can change it yourself)


Согласен,нужно читать внимательней документацию. :facepalm:
Последний раз редактировалось AlekseyEnergo Вт мар 04, 2014 12:34:53, всего редактировалось 1 раз.
Причина: Нарушение пункта 2.7 правил форума. Подредактировал. Предупредил!!
Ответить

Вернуться в «PIC»