Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Вопрос по I2C
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Схемотехника
aanbor
и скажите пжл как должно быть. Связь PIC -> LC2408BT, сверху SCL, внизу SDA. Передаются идентификатор и направление передачи 0b10100000. Так вот в даташите вроде написано, что на каждый принятый байт микросхема LC24 должна отвечать ACK низкого уровня, чего в данном случае не наблюдается. WP на земле, питание 3 В, поменял микросхему, результат такой же. Как должен выглядеть ACK?
mrKirill
Нижнего импульса по середине шкалы - быть не должно, а так у Вас NACK, вместо ACK.
aanbor
Хотел вставить рисунок схемы, чегой-то не получилось sad.gif, вложил в файл. Может у меня в схеме подключения ошибка, почему не выставляется ACK? Все по даташиту делаю, микросхему менял, но не работает...
mrKirill
A0, A1, A2 у Вас точно на GND соединены?
Попробуйте по другим адресам постучаться.
aanbor
Так А0,А1,А2 -Not Connected, поэтому оставил их висячими, в корпусе SOT-23 их вообще нет.
ILYAUL
QUOTE (aanbor @ Sep 12 2011, 15:13) *
Так А0,А1,А2 -Not Connected, поэтому оставил их висячими, в корпусе SOT-23 их вообще нет.

Вы сами то какой корпус используете? Если не SOT-23 на GND их

И Вы ничего неперепутали с картинкой- это скорее чтение из памяти , а не запись
Сергей Борщ
QUOTE (ILYAUL @ Sep 12 2011, 14:25) *
Если не SOT-23 на GND их
Да не используются они ни в одном корпусе. Эти биты используются для адресации внутри одного кристалла.
Нажмите для просмотра прикрепленного файла
aanbor: показывайте код, в диаграмме проблем не видно.
ILYAUL
QUOTE (Сергей Борщ @ Sep 12 2011, 15:50) *
Да не используются они ни в одном корпусе. Эти биты используются для адресации внутри одного кристалла.

Видел я DS, но не люблю висящие сигналы - к тому же это DS не запрещает
aanbor
Цитата(ILYAUL @ Sep 12 2011, 20:25) *
Вы сами то какой корпус используете? Если не SOT-23 на GND их

Корпус SOIC, пробовал с GND, результат тот же.


Цитата(Сергей Борщ @ Sep 12 2011, 20:50) *
aanbor: показывайте код, в диаграмме проблем не видно.

I2C_Init();
while(1) // тестовый цикл
{
Flash_WR(0x0101,0x55);
Nop(); // здесь ставлю breakpoint
}

void I2C_Init(void) //инит I2C
{
I2C2CONbits.I2CEN=1; //включение модуля
I2C2CONbits.I2CSIDL=0; //модуль работает в IDLE режиме
I2C2CONbits.ACKEN=1; //ACK используется
I2C2BRG=200; //100 кГц
// I2C2BRG=0x030; //400 кГц
}
//-----------------------------------------------------------------------------------------------------------------------
void I2C_Start(void) //I2C старт
{
I2C2CONbits.SEN=1; //запуск старта
while(I2C2CONbits.SEN); //ожидание завершения
}
//-----------------------------------------------------------------------------------------------------------------------
void I2C_Stop(void) //I2C стоп
{
I2C2CONbits.PEN=1; //запуск стопа
while(I2C2CONbits.PEN); //ожидание завершения
}

//-----------------------------------------------------------------------------------------------------------------------
void I2C_Wait(void) //ожидание завершения передачи
{
while(I2C2STATbits.TRSTAT); //ожидание завершения передачи
}
//-----------------------------------------------------------------------------------------------------------------------
void Flash_WR(unsigned short Adr,unsigned char Dan) //запись в память
{
I2C_Start(); //I2C старт
I2C2TRN=0b10100000; //идентификатор и направление передачи
I2C_Wait(); //ожидание завершения передачи
I2C2TRN=Adr >> 8; //старшая часть адреса
I2C_Wait(); //ожидание завершения передачи
I2C2TRN=Adr & 0x00FF; //младшая часть адреса
I2C_Wait(); //ожидание завершения передачи
I2C2TRN=Dan; //данные
I2C_Wait(); //ожидание завершения передачи
I2C_Stop(); //I2C стоп

DelayMs(6); //время на запись
}

PIC32MX795F512L, Compiler C32
mrKirill
Цитата(ILYAUL @ Sep 12 2011, 17:25) *
И Вы ничего неперепутали с картинкой- это скорее чтение из памяти , а не запись

Ой ли, по-моему это Вы перепутали, чего это у Вас на картинке W/R стал 9ым битом, а ACK - 10ым?
ILYAUL
QUOTE (mrKirill @ Sep 13 2011, 06:06) *
Ой ли, по-моему это Вы перепутали, чего это у Вас на картинке W/R стал 9ым битом, а ACK - 10ым?

Э...э, да Ваша правда , не правильно посчитал. Тогда точно - NACK
Сергей Борщ
QUOTE (aanbor @ Sep 12 2011, 15:45) *
PIC32MX795F512L, Compiler C32
Ой, это не ко мне. Было предположение, что вы реализуете I2C "ногодрыжеством", а там есть одна распространенная ошибка. Здесь же контроллер обязан настраивать ноги в режим открытого стока.
Будем делать новые предположения.
Попробуйте увеличить время установки и удержания стартового условия Thd:sta и Tsu:sta (в даташите на микрочиповскую 24LC08B указано 600нс, но для большинства остальных 4/4.7мкс). И что за микросхема LC2408BT? Гугля такой не знает... Возможно у нее какие-то еще ограничения на времянку.
ILYAUL
QUOTE (Сергей Борщ @ Sep 13 2011, 11:17) *
И что за микросхема LC2408BT? Гугля такой не знает... Возможно у нее какие-то еще ограничения на времянку.

Я тоже мучился , потом понял 24LC08BT , там на его фото правильный PN есть
aanbor
Цитата(Сергей Борщ @ Sep 13 2011, 17:17) *
Будем делать новые предположения.
Попробуйте увеличить время установки и удержания стартового условия Thd:sta и Tsu:sta (в даташите на микрочиповскую 24LC08B указано 600нс, но для большинства остальных 4/4.7мкс). И что за микросхема LC2408BT?

Извините, ошибся малость, 24LC08BT конечно.
Попробовал фирменный example, так там у них SCK идет вообще на 25 кГц, однако ж ACK не появился. А так в общем перебрал все варианты, в т.ч. поигрался с питанием, даже не знаю что делать, буду искать другие микросхемы.
aanbor
Да, так и оказалось, выдрал со старого телефона-АОН 24lc04b аж 1994 г. выпуска и - вот оно, счастье - заработало, пишет и читает!
А что получается у меня - паленые микросхемы? Хотя кто будет возиться-ловчить с копеечными чипами, да и покупал в уважаемой фирме, в общем ситуация непонятная... Спасибо всем принявшим участие.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.