Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Эмулятор I2C eeprom на AVR
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
Ivan Kuznetzov
Есть микра NVP2010 в видеокамере, которая грузит настройки из внешней I2c епромки 24c16, дык вот есть идея заменить епромку на AVR в режиме i2c slave и меняя значения байт по указ. адресам в AVR, изменять настройки при старте главной микры. Можно такое организовать? Киньте примером, пожалуйста, если есть...
GDI
На вопрос "Можно ли", отвечу, можно сделать на АВР эмуляцию I2C еепром, примера дать не могу, скажу лишь, что проект был реализован с АтТини12, I2C делался софтово, написано было на асме.

Но у меня есть вопрос, а зачем такой изврат делать? Этот процессор судя по приаттаченному даташиту может управляться по I2C от внешнего контроллера, это и надо использовать. Только думаю, что надо более подробный даташит поискать где описан протокол.
SasaVitebsk
Делал именно такое на меге88. Имитировала 24c01 правда адрес уникальный брал. В памяти находилось время (c DS1307), температура (несколько DS18b20), освещение. Микруха сидела на общей шине с 24с512. В меге88 реализовано с помощью аппаратного TWI. На ведущих контроллерах и совтовая и аппаратная реализация.
На самой шине - был непрерывный поток информации (от 24с512). Обращение к 88 - 2 раза в минуту. Скорость 100 кбит. На си.

Работаеет крайне устойчиво. За пару лет не заметил сбоев. Правда аппаратно должно быть всё тип топ. Например при неверном значении резисторов подтягивающих - могут появляться сбои и неустойчивая работа.
Deka
Согласен с GDI. Недавно бадался с I2C на тини2313. Бодался на асме. Победил таки - сделал слэйв. Почти. Ещё немного доработать и будет работать. Использовал USI тиньки.
Ivan Kuznetzov
В том-то и дело, что это единственный ДШ с описанием регистров, сегодня, кстати уже успел поиграться с программированием ячеек 24c16 - поигрался с кучей настроек картинки (негатив, позитив, гамма, цветность, контрастность и еще куча).
В описании на микру нигде не нашел, как перевести ее в I2C Slave (а хотелось бы, тогда все упрощается)

SasaVitebsk можете поделиться кодом, пожалуйста?
GDI
Можно обратиться к производителю с просьбой об даташите. На документах с сайта производителя нарисован опциональный 8бит контроллер на шине I2C. Да и в вашем описании написано что интерфей ЕЕПРОМ когда нет MICOM - это видимо какой то интерфейс. Я бы попробовал убрать ЕЕПРОМ и попробовать обратиться к чипу как к памяти, вот только в I2C протоколе предусмотрено поле для идентификатора устройства, оно дополняется полем адреса. А вот это значение то нам и неизвестно, но можно попробовать перебором, там всего 4 или 5 бит, если мне память не изменяет.
Цитата
В описании на микру нигде не нашел, как перевести ее в I2C Slave (а хотелось бы, тогда все упрощается)
Подозреваю, что он после включения пытается прочитать ЕЕПРОМ, а в ней первые 4 байта должны содержать последовательность 0хАА, 0х55, 0хАА, 0х55. Есть вероятность что если он такой последовательности не примет, то он переключится в Слейв.

P.S. Приаттаченный файл будет более интересен в плане понимания, там говорится о некоем адаптере и программке для ПК для выполнения настроек.
P.P.S. Приаттачить не удалось. Ссылка на файл http://www.spectrum.com.tw/products%5Cnext...%5CNVP2000A.pdf
SasaVitebsk
Цитата(Ivan Kuznetzov @ Dec 9 2009, 17:26) *
SasaVitebsk можете поделиться кодом, пожалуйста?


Что значит кодом? Кодом чего?
Может вы исходники имели ввиду? Там 10 строк, поэтому я в библиотеку даже и не оформлял. Всё как-бы привязано к моему проекту. Если вы это написать не можете, то оцените возможность привязки моих исходников к своему проекту. Или поставьте более чётко задачу. Попробую вырвать исходники из текста.
Ivan Kuznetzov
Цитата(SasaVitebsk @ Dec 10 2009, 02:02) *
Что значит кодом? Кодом чего?
Может вы исходники имели ввиду? Там 10 строк, поэтому я в библиотеку даже и не оформлял. Всё как-бы привязано к моему проекту. Если вы это написать не можете, то оцените возможность привязки моих исходников к своему проекту. Или поставьте более чётко задачу. Попробую вырвать исходники из текста.

эммм.. попробую сформулировать... rolleyes.gif нужен кусок исходника, который бы на запрос от I2C мастера по опред. адресу выдавал бы из flash тиньки опред. байт... вроде так... laughing.gif
backa
дык Вам уважаемый земляк SasaVitebsk сказал что там и нужно то пару строк - есть в проце режим ведомый слэйв - смотрите в доки на ваш проц (единственное сами атмеловцы рекомендовали не юзать мегу8 в этом режиме т.к. немного накосячили в "железе" а брать 88-ю ) и лепите код - проверить можете в протеусе - для этого он в самый раз .....
Пока сами не разберётесь (не прочитаете доку на проц!!! ) - не какие исходники не помогут .....
SasaVitebsk
Попытался обрезать и упростить по максимуму.
Естественно перенос, обрезание, правка "на живую", объединение из нескольких файлов в 1 немогло не сказаться. smile.gif

Но в целом принцип должен быть понятен.

Сам I2C Slave работал и на меге8, но у меня там ещё куча всего было, в том числе RC5, и, по-моему, таймеров не хватало. Поэтому - финишбыл на м88.

У Вас для полной эмуляции памяти адрес должен быть, естественно, 0xA0.
defunct
Цитата(backa @ Dec 10 2009, 09:34) *
(единственное сами атмеловцы рекомендовали не юзать мегу8 в этом режиме т.к. немного накосячили в "железе" а брать 88-ю )

Можно немного поподробнее с этого места, а то у меня скоро в серию пойдут устройства где m8 используется в качестве I2C слейва, 10 образцов вроде работают без проблем...
SasaVitebsk
Да нормально всё работает на м8.
Она то по большому счёту от м88 ничем не отличается.
Единственное что добавлен регистр маски, что позволяет отвечать на группу адресов.
Ivan Kuznetzov
Попробывал сегдня один фокус: отпаял епромку, подрубил мегу, в мегу залил код по перебору адресов и по входному ACK отлавливал, хто у меня на I2C шине сидит..... biggrin.gif

Код
for (var=0; var<255; var++)
{
iic_start();
addr = iic_send(var);  
iic_stop();
if (addr) printf("ACK at: %u\r\n", var);
}


Видео-микра, не найдя еепромки, перешла в слейв и ответила по след. адресам (знач. десятич)

Код
ACK at: 138
ACK at: 139
ACK at: 140
ACK at: 141
ACK at: 142
ACK at: 143
ACK at: 144
ACK at: 145
ACK at: 146
ACK at: 147


тобиш все четные адреса - это непосредственно адреса микры на запись, но почаму их так много? может это банки, как в еепроме? unsure.gif
GDI
Судя по вашему даташиту, там и есть несколько банков, сами подсчитайте сколько их.
Ivan Kuznetzov
Попробывал сегодня писать в регистры видео-микрухи (в отсутствии еепром она Slave)... значение регистра почему-то устанавливается только с третьего раза и данные надо передавать сразу после сброса видео-микры, иначе она их потом не ловит... c задержками I2C игрался - один фих wassat.gif

вот так можно записать регистр, но это фмефно... biggrin.gif
Код
RST_LOW();
delay_ms(10);        
RST_HIGH();
      
for (i=0;i<3;i++){
        iic_start();
        iic_send(0x8A); //адрес микры
        iic_send(0x3F); // регистр тестовой картинки
        iic_send(0b01000000); //вывести тестовое изображение
        iic_stop();
        }
GDI
А если адрес микрухи другой попробовать? Кстати у еепром есть автоинкремент адреса при записи-чтении, может и тут что то подобное происходит?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.