Здравствуйте, уважаемые читатели!
В одной из прошлых статей (Подключение внешней памяти EEPROM к Ардуино) я на примере чипа 24LC512 рассказывал как подключить к Ардуино внешнюю EEPROM память. Там было подробно рассказано о характеристиках данного модуля памяти и о схеме его подключения к Arduino UNO.
В этой статье мы рассмотрим как подключить дополнительную память EEPROM к микроконтроллерам семейства ATtiny.
Запись во внутреннюю EEPROM память
Для начала разберемся с записью во внутреннюю EEPROM память, чтобы в дальнейшем были видны отличия.
Для примера возьмем ATtiny13. После выбора нужной платы в Менеджере плат , в примерах для ATtiny13 открываем скетч eeprom_put.
Здесь вначале подключается библиотека EEPROM.
Далее объявляется структура, содержащая одну вещественную переменную, одну целочисленную, типа байт и массив из 10 символов.
После этого в нулевую ячейку памяти (которых на ATtiny13 у нас всего 64) записываем некоторое вещественное число.
После этого создаем экземпляр ранее объявленной структуры, который называется customVar и заполняем его значениями. Только изменим число 65 на 5. Дальше будет понятно почему.
Сдвигаем адрес ячейки для записи на размер записанной переменной типа float и записываем экземпляр структуры в энергонезависимую память по новому адресу.
Загружаем скетч в ATtiny. Естественно, Arduino UNO к этому моменту должен быть в режиме программатора. Как это делается, я рассказывал в статье "ATtiny13 и ATtiny85. Обзор и программирование с помощью Arduino".
После загрузки скетча, данные в EEPROM память записаны.
Чтение из внутренней EEPROM памяти
Теперь прочитаем данные из EEPROM памяти. Для этого там же в примерах найдем и откроем скетч eeprom_get.
В нем мы определяем те же переменные и структуру. И с помощью функции EEPROM.get() считываем данные в оперативную память.
На Arduino UNO мы могли бы всё вывести в монитор порта. Но здесь поэтому поступим по-другому.
Видоизменим скетч. В настройках определим нулевой пин, который соответствует 5-й ножке ATtiny на работу с выходным сигналом.
А после чтения из EEPROM памяти данных структуры добавим цикл, который повторится столько раз, сколько мы записали во вторую переменную структуры, т.е. 5 раз.
А в теле цикла, будем подавать высокий и низкий сигнал на 5-й ножку ATtiny. Т.е. подключенный к этой ножке светодиод должен мигнуть 5 раз.
Подключаем светодиод с уже припаянным резистором на 220 ом к 5-й ножке и 4-й ножке (земле). Загружаем скетч.
Светодиод мигает 5 раз подряд.
Данный метод универсален и подходит и для других микроконтроллеров ATtiny и для микроконтроллеров семейства Arduino и многих других.
Запись и чтение из внешней EEPROM памяти
Теперь поработаем с внешней памятью. Сразу скажу, что этот метод будет работать начиная с ATtiny25. ATtiny13 слишком прост для таких задач.
Для работы с внешней памятью на микроконтроллерах ATtiny служит специальная библиотека TinyWireM, которая используется вместо библиотеки Wireна Arduino UNO. Ссылка на скачивание библиотеки -
https://github.com/adafruit/TinyWireM
Скачиваем библиотеку. И добавляем ее в Arduino IDE.
Для демонстрации работы библиотеки у меня есть вот такой скетч. Собственно это переработка скетча для работы с внешней EEPROM памятью на Arduino UNO. Ссылка на скачивание самого скетча в конце статьи.
Точно так же, мы вначале мы проводим инициализацию библиотеки и начинаем передачу данных, указывая в качестве аргумента функции 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.
6-й пин ATtiny у нас служит для подключения светодиода. Длинную его ножку соединим с этим пином, а короткую, с уже припаянным резистором на 220 Ом соединим с минусом макетной платы. Таким образом, схема подключения выглядит следующим образом:
Подключаем программатор с ATtiny к компьютеру. И видим, что светодиод мигает 3 раза. Значит значение в EEPROM память было успешно записано и считано.
Таким образом, работая с данным модулем памяти EEPROM 24LC512 мы можем последовательно записать и считать до 64 КБ информации.
Далее, когда будем работать с достаточно большими объемами данных, информация из этого ролика очень пригодится.
Ссылка на скетч из статьи - https://yadi.sk/d/M5jqEYveu6cBvw
Видео по материалам статьи:
_________________________________________________________
Спасибо, что дочитали до конца! Если статья понравилась, нажмите, пожалуйста, соответствующую кнопку. Если интересна тематика электроники и различных электронных самоделок, подписывайтесь на канал. До встречи в новых статьях!
Другие публикации по теме:
- ATtiny13 и ATtiny85. Обзор и программирование с помощью Arduino.
- Создаем удобный модуль для программирования микроконтроллеров ATtiny.