Память AT24Cxx

Вообще, я не планировал писать эту статью. Но по просьбам трудящихся/учащихся 🙂 решил осветить одну из своих конструкций с использованием памяти AT24Cxx. Данное устройство разрабатывалась давным-давно, и, честно говоря, я даже точно и не помню техзадания (сколько их было с тех пор!). Нужно было записать значение в указанную память по фиксированному адресу — вроде бы телемастерА заказывали, чтобы прописывать номера каналов или настроек или ещё фиг его знает что. Ну это не важно — главное понять принцип общения с данной памятью. Нужно сказать что памятьAT24Cxx достаточно удобный и дешёвый способ хранения информации, поэтому нижеуказанные наработки, надеюсь, помогут начинающим разработчикам в её освоении. Кроме того, можно посмотреть как организовано простое меню с использованием LCD и клавиатуры из четырёх кнопок.
Алгоритм обмена с AT24Cxx хорошо описан в даташите. Стандартный обмен по шине I2C, только, естественно, нужно смотреть адрес конкретного устройства. Протокол обмена реализован программно, мне так больше нравится — и более простой, и более гибкий, т.к не привязан к конкретным портам.
Поскольку самого устройства у меня нет (естественно, я его продал заказчикам) придётся макетировать из моего универсального микроконтроллерного конструктора. Управляющий контроллер ATmega8A, модуль I2C, LCD HD44780 — 24 символа х 2 строки без подсветки и телефонная тастатура в которой я использую всего 4 кнопки (0 — ввод, 8 — вверх, 5 — вправо, 2 — отмена). Устройство не содержит дополнительных дискретных элементов, все модули подключаются напрямую к контроллеру, поэтому схему рисовать смысла нет, ведь она «нарисована» в разделе define  и в заголовочных файлах проекта. Собираем макет, подключаем узлы к контроллеру:
прошиваем его и на экране ЖКИ наблюдаем:
Это главное меню. Кнопкой «Вправо» выбираем нужный пункт, при этом стрелка показывает этот пункт, кнопка «Ввод» активирует. Выберем Set и активируем его:
Устройство предложит нам выбрать разрядность набираемого числа. «Вправо» будет гонять стрелку по кругу, показывая выбранную разрядность, «Отмена» вернёт нас в зад :), «Ввод» (в данном случае 7-ми разрядов) высветит следующее:
Это пункт меню непосредственно набора записываемого числа. «Вправо» — перебирает набираемые разряды стрелкой, «Вверх» — увеличивает набираемый разряд (при достижении 9-ки вернётся в 0), «Отмена» возвратит в предыдущий пункт меню, «Ввод» запишет набранное число в собственное EEPROM микроконтроллера для последующей его записи в AT24C16 и высветит меню выбора разрядности числа, т.е. предыдущее. В нём нажимаем «Отмена» и возвращаемся в главное меню. Выбираем «Save», нажимаем «Ввод». Наблюдаем:
если запись в AT24C16 прошла нормально, или:
если устройству не удалось обнаружить на линии I2C микросхему памяти AT24C16.

Проверим связь и, в случае её удачного установления, считаем записанное число. В главном меню выбираем «Connect» и нажимаем «Ввод». Если связь установлена, то вначале высветиться:
а по прошествии приблизительно трёх секунд и сама строка, считанная из AT24C16:
Первые два байта 0xCE и 0xBA. Им я специально присвоил такие значения, чтобы лишний раз убедится, что записана именно та строка, которую набирал (типа маркера). Число 0x21E88E — это 2222222 в десятичной форме — то, что я набирал.  Считанное число будет высвечиваться около 10-ти секунд после чего устройство вернёться в главное меню.

Если связи с AT24C16 нет, то отобразится:
а по прошествии трёх секунд высветятся символы «FF» на всех знакоместах строки.

Вот такая получилась заготовка. Внимательно читаем комменты в исходнике — в них половина статьи, её теоретическая часть.
Повторюсь, что память AT24Cxx, ИМХО, весьма и весьма привлекательная в использовании в плане цены и простоты работы. Например, в предыдущей статье, где ATiny2313 выводит символы на uDisp320240 в ней можно хранить знакогенератор — получиться дёшево и сердито. Всех с праздником Крещения! Удачи, друзья!

Запись опубликована в рубрике Микроконтроллерный конструктор с метками , , . Добавьте в закладки постоянную ссылку.

10 комментариев: Память AT24Cxx

  1. Konoplj2010 говорит:

    Статья интерестная, спосибо что откликнулись. А можно схемку подключения посмотреть. Это та плата, на которой Вы подключали внешний таймер в предедущих статьях? И ещё меня интересует вывод WP его же надо к общему подключить?

  2. s_black говорит:

    Цитата: «…Устройство не содержит дополнительных дискретных элементов, все модули подключаются напрямую к контроллеру, поэтому схему рисовать смысла нет, ведь она «нарисована» в разделе define и в заголовочных файлах проекта…». Микроконтроллерный модуль на ATmega8A — это тоже указано в статье. AT24C16 подключена так: 1,2,3 — й выводы «висят» в воздухе — не используются, WP — на корпусе (общий, минус питания).

  3. Александр говорит:

    Хочу собрать эмулятор Сд привода к автомагнитоле…нужна помощь…кто может взяться??
    eemail@ukr.net

  4. Konoplj2010 говорит:

    Так ну схему собрал. Запись идет!!! Но вот проблема другая. При чтении я пытаюсь прочитать зохранённый байт, а он читается где то аж с 100 байта. То есть первые 100 получаю как FF, а потом получаю данные те которые я записывал раньше, при этом начинается приём с первого байта. Что же может быть.

  5. s_black говорит:

    Нужно смотреть исходник — без него только предположения.
    embed@embed.com.ua

  6. Konoplj2010 говорит:

    Всё, я разобрался. Прикол в том что после записи 24с16 начинает работать с МК после определённого времени. То есть после записи байта в 24с16 необходимо дождатся до окончания выполнения его внутренних операций и поэтому он не откликается. После какогото времени (2-3 милисекунды) память начинет работать нормально, поэтому читается только как FF изза ризистеров. Вобщем разобрался, большое Вам спасибо.

  7. Valeriy говорит:

    Эт опять я при попытке компиляции исходника warning на строку pointer1 = pointer+2;.. ../at24c16.c:101:15: warning: assignment from incompatible pointer type , если поправить на » *pointer1 = *pointer+2;..» студия перестает ругаться.

  8. Valeriy говорит:

    И еще подскажите пож. какова частота генератора проекта компилируется и 8мгц и на 14мгц. если скрыто в учебных целях тоже понятно 🙂

  9. s_black говорит:

    1. Не надо путать адрес и значение по этому адресу (почитайте внимательнее про указатели в Си в любой книге). Не обращайте внимание на этот Варнинг.
    2. Частота указана в настройках в майкфайле и составляет 1 МГц.

  10. Valeriy говорит:

    Спасибо , а Варнингов боюсь не всегда понятна их природа… ;(

Добавить комментарий

Ваш e-mail не будет опубликован.