|
Atmega8+24C256, Проблемы со стабильным чтением |
|
|
|
Aug 26 2006, 09:28
|

Местный
  
Группа: Свой
Сообщений: 386
Регистрация: 1-12-05
Пользователь №: 11 639

|
Уважаемые знатоки прошу Вашей помощи. Бьюсь уже три дня и две ночи.  Перечитал кучу литературы и Data Sheets. Но так и немогу добится стабильной работы. Поэтому и решил обратится к Вам за помощью поскольку впервые начинаю работать с I2C. Описание схемы: Связка Atmega8+M24LC256. Микросхема ЕЕPROM подключена к выводам TWI Atmega8. Описание задачи: Читать содержимое ЕЕPROM с адреса 0х0000 по 0х0400. Описание программы: Используется программа Software I2C (так как с Hardware TWI были еще большие проблеммы) написанная в IAR, с использванием части кода взятого на форуме - БОЛЬШОЕ спасибо Мах и Андрей http://nav2.livejournal.com/130205.html. Описание проблеммы: Наблюдается крайне неустойчивое чтение M24LC256 (на тактовой частоте 70 КГц). Поначалу еще более менее наблюдается стабильное чтение порядка 10 байт. А далее ....Просто тихий Ужас  Микросхема просто отказывается читатся  Было проведенно множественное число экспериментов как с реальным железом, так и с использованием симулятора Proteus (в котором были полученны временные параметры сигналов SDA и SCL а также и всего протокола обмена (вроде все там в норме). Непонятно почему, но на каком то этапе чтения ЕЕPROM видает 0xFF (хотя в зашитом файле этого числа там просто нет !!!)  . Такое ощущение будто она просто переходит в пасивное состояние и шиной просто не управляет. Повторные последующие рестарты просто ухудшают ситуацию - микросхема не выдает даже первых стабильных 10 Байт. Вопрос: Неужели все так печально с I2C ?  Может есть какой то "секрет" по работе с M24LC256 который не описан (или случайно пропущен мною) в Data Sheet ??? Читается ли у кого-либо M24LC256 с первого раза (без рестартов) стабильно как часы ? Прошу Вашей помощи !!! Заранее багодарен.
|
|
|
|
2 страниц
1 2 >
|
 |
Ответов
(1 - 16)
|
Aug 26 2006, 15:16
|

Местный
  
Группа: Свой
Сообщений: 386
Регистрация: 1-12-05
Пользователь №: 11 639

|
Цитата(&-rey @ Aug 26 2006, 14:53)  и конденсатор к ногам питания на 100нФ to rezident ?: С осцылографом напряг, поэтому и несмог посмотеть. Но и если б и был то толку мне с него -одноканального ?  ... Ясность в картину происходящего мог бы внести только двухканальный цыфровой анализатор, которого увы нету  Имеется такой только в симуляторе, на котором, как я и говорил были проведены измерения. to Shurmas & &-rey. Понятное дело имеются подтягивающие резисторы на 4,7 КОМ к линии SDA и SCL как симуляторе так и в реальном железе. Фильтрующий конденсатор на макетной плате на 0,33 МкФ (многослойная керамика) был заранее установлен рядомже с панелькой на которой стоит M24LC256. Кстати подобные "наводящие" вопросы я предвидел , просто забыл об этих "само-собой разумеющихся " деталях ранее упромянуть. Незря ж я, наверное, читал литературу и Data Sheets ? Скажу наперед что и программа управления SDA и SCL построена по всем канонам шины I2C (Open Drain): void scl_set(unsigned char set_c) { if(set_c) { I2C_DDR&=~(1<<SCL_LN); I2C_PORT&=~(1<<SCL_LN); } else { I2C_DDR|=(1<<SCL_LN); I2C_PORT&=~(1<<SCL_LN); } __delay_cycles(I2C_T*F_CLK); } У меня вопрос простой: Это у меня так себя ведет M24LC256 ? Ктото еще сталкивался с подобным явлением ? Кто реально работал с серией 24xx ? Есть ли подобные проблемы у других ? Заранее благодарен.
|
|
|
|
|
Aug 29 2006, 06:16
|
Частый гость
 
Группа: Свой
Сообщений: 196
Регистрация: 19-07-06
Из: Москва
Пользователь №: 18 922

|
>>Используется программа Software I2C (так как с Hardware TWI были еще большие проблеммы) >>написанная в IAR, с использванием части кода взятого на форуме - БОЛЬШОЕ спасибо Мах и Андрей Использовал TWI в Mega8 с памятью 24С64 и 24С128 проблем не было. Делал всё по даташату.
--------------------
Тяжелое детство - 8-битные игрушки на 8-дюемовых дискетах
|
|
|
|
|
Aug 29 2006, 08:50
|

Местный
  
Группа: Свой
Сообщений: 386
Регистрация: 1-12-05
Пользователь №: 11 639

|
Тема закрыта. Наконец удалось раздобыть двухканальный цыфровой осцылограф. Недоспав еще одну ночь, наконец разобрался в сути проблемы. Подрихтовав маленечко пограмму - Все заработало.  Микросхема наконец начала читатся стабильно.  Основной проблемой было то, что упор я делал на Proteus, надеясь что терминал I2C в нем работает правильно. Но на самом деле не все там "красиво", но все таки Proteus здорово помог мне в настройке временных параметров. Все удалось проверить подключив Atmega8 к COM порту компа. Все ответившим спасибо за поддержку. defunct - спасибо за код Hardware TWI, но к сожалению задача требует контроля прихода 8-го такта сигнала SCL перед ACK(NOT ACK). Поэтому все же пришлось использовать Software TWI.
|
|
|
|
|
Aug 29 2006, 14:41
|

Местный
  
Группа: Свой
Сообщений: 386
Регистрация: 1-12-05
Пользователь №: 11 639

|
Цитата(defunct @ Aug 29 2006, 15:59)  Цитата(OLEG_BOS @ Aug 29 2006, 11:50)  defunct - спасибо за код Hardware TWI, но к сожалению задача требует контроля прихода 8-го такта сигнала SCL перед ACK(NOT ACK). Поэтому все же пришлось использовать Software TWI.
?! Зачем контроллировать "приход 8-го такта сигнала SCL"?Он же контроллером генерируется... И start/stop condition тоже... Но я же говорю: так требует поставленная задача....Даю намек  : скажем перевод последовательных данных с шины I2C в их паральный вид с помощью сдвигового регистра.
|
|
|
|
|
Aug 29 2006, 15:00
|

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

|
Цитата(OLEG_BOS @ Aug 29 2006, 17:41)  Но я же говорю: так требует поставленная задача....Даю намек  : скажем перевод последовательных данных с шины I2C в их паральный вид с помощью сдвигового регистра. Все равно непонятно зачем это может понадобиться. Особливо учитывая сабж: "Atmega8+24C256". Пытаетесь убить двух зайцев вычитываете данные из eeprom и сразу запихиваете не только в контроллер но и еще куда-то? Зы: прочитанные контроллером данные, можно отправить по месту назначения не применяя никаких хакерских методов. ;> Зыы: на время работы с нестандартным устройством, подключенным к I2C шине, TWI можно отключать. И работать без старт/стоп состояний по требуемому вам протоколу. Драйвер проще получится.
|
|
|
|
|
Aug 29 2006, 19:35
|
Участник

Группа: Участник
Сообщений: 15
Регистрация: 29-10-05
Пользователь №: 10 265

|
А не поделится ли кто нибудь исходником НА АССЕМБЛЕРЕ! для общения с 24cXX по аппаратному I2C.
|
|
|
|
|
Aug 30 2006, 07:35
|

Местный
  
Группа: Свой
Сообщений: 386
Регистрация: 1-12-05
Пользователь №: 11 639

|
Цитата(defunct @ Aug 29 2006, 18:00)  Цитата(OLEG_BOS @ Aug 29 2006, 17:41)  Но я же говорю: так требует поставленная задача....Даю намек  : скажем перевод последовательных данных с шины I2C в их паральный вид с помощью сдвигового регистра. Все равно непонятно зачем это может понадобиться. Особливо учитывая сабж: "Atmega8+24C256". Пытаетесь убить двух зайцев вычитываете данные из eeprom и сразу запихиваете не только в контроллер но и еще куда-то? Зы: прочитанные контроллером данные, можно отправить по месту назначения не применяя никаких хакерских методов. ;> Зыы: на время работы с нестандартным устройством, подключенным к I2C шине, TWI можно отключать. И работать без старт/стоп состояний по требуемому вам протоколу. Драйвер проще получится. 1. Удивительно, когда непонятны элементарные вещи  Даю второй намек  Уважаемый defunct, а Вы представте себе что к выходам сдвигового регистра подключена матрица R-2R  .... Надеюсь теперь Вам стало понятно для чего это ? 2. Нет в данном случае я не пытаюсь убивать двух зайцев, потому что контроллеру данные из 24C256 нужны как "зайцу стоп сигнал". Его задача очень простая - адресовать данные на шину I2C и в нужный момент выставлять их на регистр. 3. Этот метод я бы назвал не "хакерским" а "KnowHow " в условиях когда к контроллеру и так подключенно много другой переферии (выводы других портов заняты), в память FLASH и так еле помещается управляющая программа, буфер RAM и без этого занят другими данными....И драйвер не совсем уж сложным получается, каких то 1-1,5 Кб.
|
|
|
|
|
Aug 30 2006, 10:01
|

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

|
Цитата(OLEG_BOS @ Aug 30 2006, 10:35)  1. Удивительно, когда непонятны элементарные вещи  Даю второй намек  Уважаемый defunct, а Вы представте себе что к выходам сдвигового регистра подключена матрица R-2R  .... Надеюсь теперь Вам стало понятно для чего это ? Мы что играем в шараду? Было бы гораздо лучше если бы вместо намеков, вы бы сразу точно описали задачу и ресурсы отведенные под нее. Цитата 2. Нет в данном случае я не пытаюсь убивать двух зайцев, потому что контроллеру данные из 24C256 нужны как "зайцу стоп сигнал". Его задача очень простая - адресовать данные на шину I2C и в нужный момент выставлять их на регистр. Задача может быть изменена: Контроллер буферизировано читает данные из AT24 быстро, используя TWI шину с режиме прерываний. В свою очередь это снизит загрузку проца, и он сможет заниматься во время чтения данных чем-то другим. По таймеру в realtime выводить на ЦАП данные по отдельным двум линиям. В таком виде задача будет решена классически без всяких возможных подводных камней. Цитата 3. Этот метод я бы назвал не "хакерским" а "KnowHow " в условиях когда к контроллеру и так подключенно много другой переферии (выводы других портов заняты), в память FLASH и так еле помещается управляющая программа, буфер RAM и без этого занят другими данными....И драйвер не совсем уж сложным получается, каких то 1-1,5 Кб.  Дело конечно ваше, но если сделать как было сказано выше, то драйвер работы с i2c и вывода данных в dac займет около 200 байт Flash и около ~20 байт RAM с учетом аппартного I2C и режима прерываний.
|
|
|
|
|
Aug 30 2006, 11:03
|

Местный
  
Группа: Свой
Сообщений: 386
Регистрация: 1-12-05
Пользователь №: 11 639

|
Цитата(defunct @ Aug 30 2006, 13:01)  Цитата(OLEG_BOS @ Aug 30 2006, 10:35)  1. Удивительно, когда непонятны элементарные вещи  Даю второй намек  Уважаемый defunct, а Вы представте себе что к выходам сдвигового регистра подключена матрица R-2R  .... Надеюсь теперь Вам стало понятно для чего это ? Мы что играем в шараду? Было бы гораздо лучше если бы вместо намеков, вы бы сразу точно описали задачу и ресурсы отведенные под нее. Цитата 2. Нет в данном случае я не пытаюсь убивать двух зайцев, потому что контроллеру данные из 24C256 нужны как "зайцу стоп сигнал". Его задача очень простая - адресовать данные на шину I2C и в нужный момент выставлять их на регистр. Задача может быть изменена: Контроллер буферизировано читает данные из AT24 быстро, используя TWI шину с режиме прерываний. В свою очередь это снизит загрузку проца, и он сможет заниматься во время чтения данных чем-то другим. По таймеру в realtime выводить на ЦАП данные по отдельным двум линиям. В таком виде задача будет решена классически без всяких возможных подводных камней. Цитата 3. Этот метод я бы назвал не "хакерским" а "KnowHow " в условиях когда к контроллеру и так подключенно много другой переферии (выводы других портов заняты), в память FLASH и так еле помещается управляющая программа, буфер RAM и без этого занят другими данными....И драйвер не совсем уж сложным получается, каких то 1-1,5 Кб.  Дело конечно ваше, но если сделать как было сказано выше, то драйвер работы с i2c и вывода данных в dac займет около 200 байт Flash и около ~20 байт RAM с учетом аппартного I2C и режима прерываний. Уважаемый defunct, признателен Вам за поддержку и рекомендации  Но в данном моем случае сделана уже печатная плата именно с такой схемной реализацией задачи, поэтому отступать некуда. Приходится решать ее именно таким способом. В дальнейших разработках попробую воспользоватся Вашими рекомендациями.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|