i2c (slave) расширитель на ATMega

AVR
Потребовалось тут из основной задачи на ARM-e под Linux дрыгоножество неспешное, а ног под GPIO сконфигурировано всего 3 шт! Разумеется, можно пересобрать ядро соответствующим образом, но поскольку в данном вопросе пока слаб, решил поставить расширитель i2c. Когда понял, что в городе я микросхем не найду, и посмотрел цены — понял, что ATMega весьма неплохое решение в данном случае! Попутно выяснил параметры для AVRDUDE, чтобы шить через Arduino бутлоадер.
Очень сильно помог этот материал в разборках с TWI, он же «квадратная шина» i2c.
Возникла заминка — как получить доступ не только регистрам PORTB, но и к остальным, а в идеале — ко всей периферии? Если делать в лоб — сравнивать адрес, потом обратиться к нужному регистру — много кода, ненаглядно, и никакой гибкости. Подумал, поспрашивал на форумах — на местном камрады почти готовое решение дали — используем указатель, значение которого вычисляется, и уже через него читаем-пишем в нужный порт.
В общем, кому надо — пользуйтесь. Мега прикидывается 24cXX, адресация начинается с PINB, дальше — по даташиту. Кому хочется адресации по даташиту — поправьте строку
#define BASEPORT PORTB-2

на такую:
#define BASEPORT PORTB-5

В этом случае адреса будут соответствовать описанию от Atmel.
Ещё момент — не уверен, что будет доступна периферия в верхних адресах, например — UART.
Скриншот терминала с проверкой ниже.

i2c-tools
  • 0
  • 20 августа 2013, 06:47
  • Hoksmur
  • 1

Пособие для студента (разработка на AVR, на английском, но с картинками, 26 МБ) топик-ссылка

Цитирую: This is a textbook that I have written to support my high school students learning using the AVR for their technology projects. We have 300 students who learn to program the AVR and some do neat things. The book is no charge, its almost 1000 pages of learning. It starts with Bascom and does some C and C++ The complementary software I have written is also free. And there are a lot of students projects on my website as well. Bill Auckland New Zealand www.techideas.co.nz

MicroVGA conio/text user interface library на Pinboard II (AVR). Демо пример. Часть 1

AVR
MicroVGA на Pinboard II (AVR)

Аннотация


Показан демонстрационный пример работы с библиотекой MicroVGA conio/text user interface library на Pinboard II + AVR в стандартной комплектации (ATmega16 @ 16 МГц). Выполнен небольшой его обзор. Библиотека предназначена для работы в связке с периферийным модулем, с помощью которого можно напрямую выводить информацию на монитор из контроллера (через SVGA). В данном примере библиотека в качестве терминала использует программу на ПК и работа осуществляется по последовательному порту. Т.о. с её помощью, к примеру, можно реализовать удобный (дружелюбный) отладочный пользовательский интерфейс, либо организовать на её основе конфигурирование устройства (по аналогии с BIOS).


Читать дальше
  • +6
  • 14 ноября 2012, 04:07
  • uni

Преобразуем в строку. Часть 1. Целые числа.

Задача преобразования числа в строку стоит всегда, когда нужно отобразить числовые результаты работы программы. Процессоры у нас оперируют двоичными данными, человеку-же подавай десятичные числа. Собственно задача состоит в преобразовании базы числа. Какие для этого есть способы? Целью данной статьи является описание и сравнение максимального количества способов преобразования числа в строку. Задачу, естественно, рассматриваем с точки зрения реализации на микроконтроллерах, по этому размер и скорость имеют значение. Для простоты рассматриваем только без-знаковые 32-х и 16-ти разрядные числа (со знаком не намного сложнее).


Читать дальше

Интересная функция в avr-gcc 4.7

AVR
Недавно обнаружил в avr-gcc 4.7 новую встроенную функцию __builtin_avr_insert_bits.
В заголовок <avr/builtins.h>, где находятся остальные встроенные функции, эту функцию пока не включили и объявлять ее прототип придётся самостоятельно:
unsigned char __builtin_avr_insert_bits (unsigned long map, unsigned char bits, unsigned char val);

Эта функция делает вставку отдельных бит из параметра bits в значение val, при этом параметр map задаёт способ вставки бит. Каждые 4 бита в map отвечают за отображение одного бита:
  • Если значение тетрады 0xf, то в соответствующий выходной бит копируется значение соответствующего бита из val
  • Если значение тетрады в диапазоне 0-7, то в соответствующий выходной бит копируется значение бита с номером равном этой тетраде из bits
  • Для остальных значений выход не определен.

Основное назначение этой функции — работа с несмежными линиями ввода-вывода. То есть то, что я делал тут и тут.
Достоинства:
  • Предельно эффективный генерируемый машинный код. Используются инструкции, которые нельзя сгенерировать с помощью стандартного Си кода, например, BST и BLD.
  • Способ отображения бит хранится в целочисленной 32-х битной константе, которую можно вынести из места использования куда-нибудь в заголовок.
Недостатки:
  • Только 8-ми битные значения.
  • Совершенно непереносимо — поддерживается только в одном компиляторе — avr-gcc 4.7.
Искать эту функцию в WinAVR или в AVR Toolchain от Atmel не стоит — там используется avr-gcc 4.5.x.
Достать avr-gcc 4.7. собранный под Windows можно тут.

HD44780. Библиотека для avr-gcc

AVR
Первым (и пока единственным) навесным расширением моей отладочной платы стал LCD дисплей WH1602 (или как-то так) с контроллером HD44780. Такого рода дисплеи пользуются популярностью среди электронщиков-самодельщиков за их простоту и достаточную для большинства задач информативность.




Читать дальше

PB2, LCD, графика

Увидел такую вещь и захотел тоже порисовать:




Читать дальше
  • +2
  • 11 марта 2012, 08:30
  • uni

Pinboard II (AVR) Demo (видео)


Смотреть в HD. Исходники для симуляции в Протеус: mysvn.ru/schoolbell/pbiidemo/
ТОЛЬКО РЕВИЗИЯ 11 (!) Т.к. там для 4 МГц я сделал сборку.

Читать дальше
  • +1
  • 29 февраля 2012, 03:38
  • uni

Командная оболочка для AVR

AVR
Подумал я тут недавно: «а не написать ли мне от нечего делать свою командную оболочку для AVR?» И написал.





Читать дальше
  • +8
  • 02 февраля 2012, 21:50
  • _YS_
  • 1

Еще одна реализация 1-Wire

AVR
Наконец-то и я сочинил свою программную реализацию мастера шины 1-Wire. За исходниками и комментариями добро пожаловать под кат.



Читать дальше
  • +1
  • 26 января 2012, 14:41
  • _YS_
  • 2