Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: PIC24FJ и I2C1
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Все остальные микроконтроллеры > PIC
Diz
После инициализации модуля и посылки старта (SEN=1) сразу же приходит bus collision (BCL).
Ситуация описана в errata, но шаманство оттуда (опустить SDA и SCL перед включением модуля)
не помогает. Перевешивать EEPROM на второй модуль I2C очень нежелательно.

Может, кто-то нибудь поборол и мне не придется дергать ногами вручную ?
Ilya_A
Цитата(Diz @ Mar 25 2008, 04:53) *
После инициализации модуля и посылки старта (SEN=1) сразу же приходит bus collision (BCL).
Ситуация описана в errata, но шаманство оттуда (опустить SDA и SCL перед включением модуля)
не помогает. Перевешивать EEPROM на второй модуль I2C очень нежелательно.

Может, кто-то нибудь поборол и мне не придется дергать ногами вручную ?


C таким пока не встречался, но как раз развожу платку под PIC24FJ64GA004. Учел вашу ошибку, уже перекинул ноги на второй порт, большое вам спасибо smile.gif
ANV
Цитата(Diz @ Mar 24 2008, 22:53) *
После инициализации модуля и посылки старта (SEN=1) сразу же приходит bus collision (BCL).
Ситуация описана в errata, но шаманство оттуда (опустить SDA и SCL перед включением модуля)
не помогает. Перевешивать EEPROM на второй модуль I2C очень нежелательно.

Может, кто-то нибудь поборол и мне не придется дергать ногами вручную ?


Посмотрите сдесь
http://forum.microchip.com/tm.aspx?m=271183
Diz
Спасибо, посмотрел. Нормального решения нет - кроме использования внешних костылей
для дерганья SDA. Я в итоге прицепил софтовый i2c (и настройка выходов в режим с открытым стоком оказалась очень кстати).
ANV
Цитата(Diz @ Apr 4 2008, 01:10) *
Спасибо, посмотрел. Нормального решения нет - кроме использования внешних костылей
для дерганья SDA. Я в итоге прицепил софтовый i2c (и настройка выходов в режим с открытым стоком оказалась очень кстати).


Так вроде не надо ничего дергать (хотя я мог и просмотреть, мельком посмотрел). Там ниже labegf писал:
Цитата
After many tests, I discovered that the following initialization works. But, I just got it using a 10K pull-up resistors in the data and clock wires. The previous 4K7 were resulting in any unexpected behavior that I'm not able to explain.


void DrvI2C__Init (void)
{
TRISBbits.TRISB9= 0; //PB9 is output (SDA pin)
LATBbits.LATB9 = 0;
Nop();
I2C1BRG = 39;
I2C1CON = 0xD200; //Enable While PB9 is low
I2C1ADD=0;
I2C1MSK=0;
}


два внешних резистора ...
Diz
В новой эррате написано, что этот маневр будет работать только иногда, рекомендуют
дергать пином снаружи. Видимо, в случае высокоомных резисторов SDA поднимается
достаточное время, чтобы логика только что включенного i2c распознала смену уровня.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.