Свежие обсуждения
Микроконтроллеры

I2C + PIC + CСS + Prоteus= Проблема?

1 5

У меня проблема, как и всегда

Пытаюсь подключить внешнюю флэш-память по интерфейсу I2C к PIC16F877A. Моделирую в Протеусе и получаю неработоспособную конструкцию.
Проковырялся выходные с этим делом, но так и не смог понять, в чем проблема.
Пытаюсь писать в память последовательностью команд:
i2c_start();
i2c_write(0xA0);// Адрес устройства
i2c_write(0xA0); // Адрес ячейки
i2c_write(0xA0); // Данные для записи
i2c_stop();

но по логам, память принимает вместо 3х байт 0xA0 три разные байта: 0xA0, 0x00, 0x68.

Пробовал второй и третий байт принимать 0x00, но тогда память принимает: 0x00 и 0x40.
Аналогично и при чтении: с первым байтом нормально, остальные не совпадают (по логам память отправляет 0х40 а МК принимает 0x1F).
i2c_start(); // Старт
i2c_write(0xA0);// Адрес устройства
i2c_write(0); // Адрес ячейки
i2c_start(); // Restart
i2c_write(0xa1); // адрес устройства
SI_buffer=i2c_read(); // Чтение
i2c_stop();

Директива компилятора имеет следующий вид:
#use i2c(Master,Slow,sda=PIN_C4,scl=PIN_C3)
Если я добавляю команду аппаратного i2c, то у меня программа зависает на строчке i2c_start(); (т.е. циклически крутится на ней).
Пробовал менять скорость, но это тоже ничего положительного не принесло.

Тут как назло, упала локалка и в интернете сидел через DialUp. Много не нашел, но кругом для чтения и записи используется похожая последовательность команд. Пробовал также встроенную функцию чтения/записи во внешнюю память (READ_EXT_EEPROM), но результат аналогичный.
Сегодня пробовал на работе. Результат точно такой же.
Буду рад любым советам!
.....
Посмотрел осциллограмму отправки команды на запись. Насколько я понял, МК все правильно передает:

3 байта 0xA0. Глючная модель памяти? Я пробовал 24aa00 и 24aa256 (планирую поставить в реальную железку) - результат одинаковый.
.....
Просмотрел осциллограмму при чтении. Память посылала 0х68, по осциллограмме виже 0x51 а МК записал в буфер 0xDF (???)

......
Попробовал вставить задержки между отдельными командами i2c. Пробовал от 5 до 50 мкс. Ответ от памяти меняется, но не совпадает с тем, что она посылает и что МК принимает

 

Могу ошибаться, но вроде бы на Казусе была такая трабла, Добрая Тень посоветовал
очищать память (как не помню), но вроде помогло...

 

Спасибо за наводку. Нашел упоминание про то, что с шиной i2c в Протеусе возникают проблемы. Прийдется отлаживать на реальном устройстве

 

Я вот тоже думаю, что в реальном железе не будет особых проблем и смело с него начинать лучше. По крайней мере я, никогда ранее не использовавший DS1307, буквально, почти через полчаса(время написания и редактирования участка кода для нее и записи в МК) получил реальный результат на уже собранной схеме.

 

Пытался моделировать в Протеусе работу с DS1307. С каждым циклом принимаются разные данные. Чаще всего 0xFF. Но иногда и правильные значения
Теперь жду момента, чтобы съездить на радиорынок за DS1307 и 24aa512.

 

Сергей К: Пытался моделировать в Протеусе работу с DS1307. С каждым циклом принимаются разные данные Странно у меня DS1307 работает без проблем (см.скрин), правда код писал на аsme. С I2C памятью работать не получилось, списал на глюки протеуса.

PS. В протеусе есть монитор шины I2C "I2C Debugger", попробуйте подключить и сравнить его показания с данными в МК и RTC?

 

Скрин...

 

AlexAlcoa: В протеусе есть монитор шины I2C "I2C Debugger",
я выше приводил диаграммы. МК выдает правильные команды, но неправильно принимает их как память, так и сам МК. Причем, во время приема, код ответа от памяти изменялся, при изменении интервалов пауз между отдельными байтами.
P.S. Версия протеуса у нас совпадает. Тоько у меня подтягивающие резисторы по 10 кОм. Попробую снизить до 4.7кОм... хотя врядли...

 

Сергей К: Пытался моделировать в Протеусе работу с DS1307. С каждым циклом принимаются разные данные. Чаще всего 0xFF. Но иногда и правильные значения

Значит и сразу видно, что неправильно моделируется шина I2C здесь. У меня вот стоял раньше Протеус, но к сожалению, после апдейта компа и переустановки ОС - его сейчас нет. Но вот возник такой вопрос - а какой у Вас процессор на компе? Есть кое-какие предположения из-за чего тут возможно неправильно работает.

 

Попробуйте, у себя, мой проект с DS1307, должен работать

158943.rar