Найти в Дзене

Работа с внутренней и внешней EEPROM на микроконтроллерах семейства ATtiny

Оглавление

Здравствуйте, уважаемые читатели!

В одной из прошлых статей (Подключение внешней памяти EEPROM к Ардуино) я на примере чипа 24LC512 рассказывал как подключить к Ардуино внешнюю EEPROM память. Там было подробно рассказано о характеристиках данного модуля памяти и о схеме его подключения к Arduino UNO.

В этой статье мы рассмотрим как подключить дополнительную память EEPROM к микроконтроллерам семейства ATtiny.

Общий вид подключения ATtiny к модулю памяти EEPROM  24LC512
Общий вид подключения ATtiny к модулю памяти EEPROM 24LC512

Запись во внутреннюю EEPROM память

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

Для примера возьмем ATtiny13. После выбора нужной платы в Менеджере плат , в примерах для ATtiny13 открываем скетч eeprom_put.

Скетч записи во внутреннюю EEPROM
Скетч записи во внутреннюю EEPROM

Здесь вначале подключается библиотека EEPROM.

Далее объявляется структура, содержащая одну вещественную переменную, одну целочисленную, типа байт и массив из 10 символов.

После этого в нулевую ячейку памяти (которых на ATtiny13 у нас всего 64) записываем некоторое вещественное число.

После этого создаем экземпляр ранее объявленной структуры, который называется customVar и заполняем его значениями. Только изменим число 65 на 5. Дальше будет понятно почему.

Код скетча записи во внутреннюю EEPROM
Код скетча записи во внутреннюю EEPROM

Сдвигаем адрес ячейки для записи на размер записанной переменной типа float и записываем экземпляр структуры в энергонезависимую память по новому адресу.

Загружаем скетч в ATtiny. Естественно, Arduino UNO к этому моменту должен быть в режиме программатора. Как это делается, я рассказывал в статье "ATtiny13 и ATtiny85. Обзор и программирование с помощью Arduino".

После загрузки скетча, данные в EEPROM память записаны.

Чтение из внутренней EEPROM памяти

Теперь прочитаем данные из EEPROM памяти. Для этого там же в примерах найдем и откроем скетч eeprom_get.

Скетч чтения из внутренней EEPROM
Скетч чтения из внутренней EEPROM

В нем мы определяем те же переменные и структуру. И с помощью функции EEPROM.get() считываем данные в оперативную память.

На Arduino UNO мы могли бы всё вывести в монитор порта. Но здесь поэтому поступим по-другому.

Видоизменим скетч. В настройках определим нулевой пин, который соответствует 5-й ножке ATtiny на работу с выходным сигналом.

А после чтения из EEPROM памяти данных структуры добавим цикл, который повторится столько раз, сколько мы записали во вторую переменную структуры, т.е. 5 раз.

А в теле цикла, будем подавать высокий и низкий сигнал на 5-й ножку ATtiny. Т.е. подключенный к этой ножке светодиод должен мигнуть 5 раз.

Код скетча чтения из внутренней EEPROM
Код скетча чтения из внутренней EEPROM

Подключаем светодиод с уже припаянным резистором на 220 ом к 5-й ножке и 4-й ножке (земле). Загружаем скетч.

Светодиод мигает 5 раз подряд.

Пример работы скетча
Пример работы скетча

Данный метод универсален и подходит и для других микроконтроллеров ATtiny и для микроконтроллеров семейства Arduino и многих других.

Запись и чтение из внешней EEPROM памяти

Теперь поработаем с внешней памятью. Сразу скажу, что этот метод будет работать начиная с ATtiny25. ATtiny13 слишком прост для таких задач.

Для работы с внешней памятью на микроконтроллерах ATtiny служит специальная библиотека TinyWireM, которая используется вместо библиотеки Wireна Arduino UNO. Ссылка на скачивание библиотеки -

https://github.com/adafruit/TinyWireM

Скачиваем библиотеку. И добавляем ее в Arduino IDE.

Библиотека TinyWireM на Github
Библиотека TinyWireM на Github

Для демонстрации работы библиотеки у меня есть вот такой скетч. Собственно это переработка скетча для работы с внешней EEPROM памятью на Arduino UNO. Ссылка на скачивание самого скетча в конце статьи.

Код скетча чтения и записи во внешнюю EEPROM для ATtiny
Код скетча чтения и записи во внешнюю EEPROM для ATtiny

Точно так же, мы вначале мы проводим инициализацию библиотеки и начинаем передачу данных, указывая в качестве аргумента функции TinyWireM.beginTransmission() адрес внешней памяти.

Запись во внешнюю память ничем не отличается от записи при использовании Arduino UNO, только меняем имя библиотеки с Wire на TinyWireM.

Чтение осуществляется таким же образом, как и в случае с Arduino UNO. Только после отправки запроса на получение 1 байта от подключенного модуля памяти TinyWireM.requestFrom()добавим проверку, доступен ли обмен данных, и с помощью функции read() прочитаем байт данных из EEPROM памяти в переменную data.

Далее, чтобы убедимся, что данные успешно прочитаны мигнем красным светодиодом, подключенным к 6-му пину ATtiny соответствующее число раз.

Для демонстрации я буду использовать ATtiny85. Хотя годятся и младшее модели ATtiny25 и ATtiny45. Но не ATtiny13. Загружаем скетч в ATtiny. После успешной загрузки временно отключаем программатор от компьютера.

Далее можно не вынимать ATtiny из программатора соединить 4 пин ATtiny с минусом макетной платы, а 8 пин с плюсом.

Теперь согласно распиновке ATtiny25/45/85 5-й пин у нас SDA, соединяем с 5 пином EEPROM, а 7 пин ATtiny85 SCL с 6 пином EEPROM.

Распиновка ATtiny25/45/85
Распиновка ATtiny25/45/85

6-й пин ATtiny у нас служит для подключения светодиода. Длинную его ножку соединим с этим пином, а короткую, с уже припаянным резистором на 220 Ом соединим с минусом макетной платы. Таким образом, схема подключения выглядит следующим образом:

Схема подключения внешней EEPROM к ATtiny
Схема подключения внешней EEPROM к ATtiny

Подключаем программатор с ATtiny к компьютеру. И видим, что светодиод мигает 3 раза. Значит значение в EEPROM память было успешно записано и считано.

Результат  работы скетча чтения из внешней EEPROM
Результат работы скетча чтения из внешней EEPROM

Таким образом, работая с данным модулем памяти EEPROM 24LC512 мы можем последовательно записать и считать до 64 КБ информации.

Далее, когда будем работать с достаточно большими объемами данных, информация из этого ролика очень пригодится.

Ссылка на скетч из статьи - https://yadi.sk/d/M5jqEYveu6cBvw

Видео по материалам статьи:

_________________________________________________________

Спасибо, что дочитали до конца! Если статья понравилась, нажмите, пожалуйста, соответствующую кнопку. Если интересна тематика электроники и различных электронных самоделок, подписывайтесь на канал. До встречи в новых статьях!

Другие публикации по теме: