реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Эмулятор I2C eeprom на AVR, можно такое замутить?
Ivan Kuznetzov
сообщение Dec 9 2009, 06:25
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 307
Регистрация: 6-02-08
Из: Россия, Екатеринбург
Пользователь №: 34 798



Есть микра NVP2010 в видеокамере, которая грузит настройки из внешней I2c епромки 24c16, дык вот есть идея заменить епромку на AVR в режиме i2c slave и меняя значения байт по указ. адресам в AVR, изменять настройки при старте главной микры. Можно такое организовать? Киньте примером, пожалуйста, если есть...
Прикрепленные файлы
Прикрепленный файл  NVP2010.rar ( 621.64 килобайт ) Кол-во скачиваний: 5508
 


--------------------
Разработчик
Go to the top of the page
 
+Quote Post
GDI
сообщение Dec 9 2009, 08:57
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 235
Регистрация: 14-05-05
Из: Санкт-Петербург
Пользователь №: 5 008



На вопрос "Можно ли", отвечу, можно сделать на АВР эмуляцию I2C еепром, примера дать не могу, скажу лишь, что проект был реализован с АтТини12, I2C делался софтово, написано было на асме.

Но у меня есть вопрос, а зачем такой изврат делать? Этот процессор судя по приаттаченному даташиту может управляться по I2C от внешнего контроллера, это и надо использовать. Только думаю, что надо более подробный даташит поискать где описан протокол.


--------------------
http://www.embedders.org Блоги разработчиков электроники.
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Dec 9 2009, 11:31
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



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

Работаеет крайне устойчиво. За пару лет не заметил сбоев. Правда аппаратно должно быть всё тип топ. Например при неверном значении резисторов подтягивающих - могут появляться сбои и неустойчивая работа.
Go to the top of the page
 
+Quote Post
Deka
сообщение Dec 9 2009, 12:03
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 248
Регистрация: 18-07-06
Из: Сочи
Пользователь №: 18 890



Согласен с GDI. Недавно бадался с I2C на тини2313. Бодался на асме. Победил таки - сделал слэйв. Почти. Ещё немного доработать и будет работать. Использовал USI тиньки.
Go to the top of the page
 
+Quote Post
Ivan Kuznetzov
сообщение Dec 9 2009, 13:26
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 307
Регистрация: 6-02-08
Из: Россия, Екатеринбург
Пользователь №: 34 798



В том-то и дело, что это единственный ДШ с описанием регистров, сегодня, кстати уже успел поиграться с программированием ячеек 24c16 - поигрался с кучей настроек картинки (негатив, позитив, гамма, цветность, контрастность и еще куча).
В описании на микру нигде не нашел, как перевести ее в I2C Slave (а хотелось бы, тогда все упрощается)

SasaVitebsk можете поделиться кодом, пожалуйста?


--------------------
Разработчик
Go to the top of the page
 
+Quote Post
GDI
сообщение Dec 9 2009, 14:19
Сообщение #6


Профессионал
*****

Группа: Свой
Сообщений: 1 235
Регистрация: 14-05-05
Из: Санкт-Петербург
Пользователь №: 5 008



Можно обратиться к производителю с просьбой об даташите. На документах с сайта производителя нарисован опциональный 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


--------------------
http://www.embedders.org Блоги разработчиков электроники.
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Dec 9 2009, 21:02
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Цитата(Ivan Kuznetzov @ Dec 9 2009, 17:26) *
SasaVitebsk можете поделиться кодом, пожалуйста?


Что значит кодом? Кодом чего?
Может вы исходники имели ввиду? Там 10 строк, поэтому я в библиотеку даже и не оформлял. Всё как-бы привязано к моему проекту. Если вы это написать не можете, то оцените возможность привязки моих исходников к своему проекту. Или поставьте более чётко задачу. Попробую вырвать исходники из текста.
Go to the top of the page
 
+Quote Post
Ivan Kuznetzov
сообщение Dec 10 2009, 05:41
Сообщение #8


Местный
***

Группа: Свой
Сообщений: 307
Регистрация: 6-02-08
Из: Россия, Екатеринбург
Пользователь №: 34 798



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

эммм.. попробую сформулировать... rolleyes.gif нужен кусок исходника, который бы на запрос от I2C мастера по опред. адресу выдавал бы из flash тиньки опред. байт... вроде так... laughing.gif


--------------------
Разработчик
Go to the top of the page
 
+Quote Post
backa
сообщение Dec 10 2009, 07:34
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 313
Регистрация: 15-06-05
Из: Минск
Пользователь №: 6 028



дык Вам уважаемый земляк SasaVitebsk сказал что там и нужно то пару строк - есть в проце режим ведомый слэйв - смотрите в доки на ваш проц (единственное сами атмеловцы рекомендовали не юзать мегу8 в этом режиме т.к. немного накосячили в "железе" а брать 88-ю ) и лепите код - проверить можете в протеусе - для этого он в самый раз .....
Пока сами не разберётесь (не прочитаете доку на проц!!! ) - не какие исходники не помогут .....
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Dec 10 2009, 13:05
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Попытался обрезать и упростить по максимуму.
Естественно перенос, обрезание, правка "на живую", объединение из нескольких файлов в 1 немогло не сказаться. smile.gif

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

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

У Вас для полной эмуляции памяти адрес должен быть, естественно, 0xA0.
Прикрепленные файлы
Прикрепленный файл  slv88.zip ( 1.81 килобайт ) Кол-во скачиваний: 86
 
Go to the top of the page
 
+Quote Post
defunct
сообщение Dec 10 2009, 13:53
Сообщение #11


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



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

Можно немного поподробнее с этого места, а то у меня скоро в серию пойдут устройства где m8 используется в качестве I2C слейва, 10 образцов вроде работают без проблем...
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Dec 10 2009, 15:08
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Да нормально всё работает на м8.
Она то по большому счёту от м88 ничем не отличается.
Единственное что добавлен регистр маски, что позволяет отвечать на группу адресов.
Go to the top of the page
 
+Quote Post
Ivan Kuznetzov
сообщение Dec 11 2009, 08:57
Сообщение #13


Местный
***

Группа: Свой
Сообщений: 307
Регистрация: 6-02-08
Из: Россия, Екатеринбург
Пользователь №: 34 798



Попробывал сегдня один фокус: отпаял епромку, подрубил мегу, в мегу залил код по перебору адресов и по входному 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


--------------------
Разработчик
Go to the top of the page
 
+Quote Post
GDI
сообщение Dec 11 2009, 12:50
Сообщение #14


Профессионал
*****

Группа: Свой
Сообщений: 1 235
Регистрация: 14-05-05
Из: Санкт-Петербург
Пользователь №: 5 008



Судя по вашему даташиту, там и есть несколько банков, сами подсчитайте сколько их.


--------------------
http://www.embedders.org Блоги разработчиков электроники.
Go to the top of the page
 
+Quote Post
Ivan Kuznetzov
сообщение Dec 11 2009, 13:24
Сообщение #15


Местный
***

Группа: Свой
Сообщений: 307
Регистрация: 6-02-08
Из: Россия, Екатеринбург
Пользователь №: 34 798



Попробывал сегодня писать в регистры видео-микрухи (в отсутствии еепром она 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();
        }


Сообщение отредактировал Ivan Kuznetzov - Dec 11 2009, 13:25


--------------------
Разработчик
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 17:58
Рейтинг@Mail.ru


Страница сгенерированна за 0.01484 секунд с 7
ELECTRONIX ©2004-2016