NanoTerminal. Часть 3. OLED-дисплей на чипе SSD1306. Общее описание.

1306
Как и обещал, начинаю публиковать серию статей по работе с OLED-дисплеем на базе чипа SSD1306 разрешением 128 на 64 пикселя. Хотя практически всё нижеописанное будет относиться и к дисплеям с другим разрешением. Datasheet SSD1306 позволяет управлять через параллельный интерфейс 8080, последовательные интерфейсы I2C и SPI. Самыми дешевыми, простыми в освоении, хотя и наиболее тормозными являются версия c I2C-интерфейсом, но для использования в составе терминала — то, что нужно, если конечно мультики на экране не смотреть.

Как видно из картинки (которую я украл на просторах интернета), у рассматриваемого дисплея управление происходит по двум проводам — SDA (данные) и SCL (такт). Это самый распространенный вариант дисплея и самый демократичный — его цена около 170 рублей (2.5 — 3 $). Преимущества и недостатки кратко описаны в соответствующей табличке, но самый главный недостаток — очень хрупкое исполнение. Стекло дисплея неполностью прилегает к плате из стеклотекстолита, большой участок стекла — шириной более 5 мм (на фото —  нижняя прозрачная часть) просто «висит» в воздухе, что при малейшем надавливании приводит к излому. А излом приводит к разрыву внутренних проводников, что в свою очередь выводит из строя часть сегментов экрана.

Преимущества

Недостатки

— отличная контрастность
— невысокая цена за вариант 0.96 дюймов
— простота управления
— множество способов управления
— возможность управлять через I2C, то есть всего по двум проводам
-УЖАСНО хрупкая конструкция
-небольшие размеры, хотя иногда это можно отнести к преимуществам
-высокая цена за размеры отличные от 0.96 дюймов
-относительно невысокий FPS через I2C

Существуют модификации с одноцветными OLED-пикселями, например, белыми, голубыми, желтыми или даже зелеными. Также имеются двухцветные дисплеи, самый распространенный из который синий с желтой полоской, шириной 16 пикселей сверху.


Ну вот в целом и всё, что можно сказать о конструктиве дисплея. Самое время перейти к внутреннему устройству и основам управления. Основными составляющими SSD1306 являются:
— MCU Interface — блок взаимодействия SSD1306 с микроконтроллерами. Воспринимает команды по одному из четырех интерфейсов — параллельный, последовательные 4-wire SPI, 3-wire SPI, 2-wire I2C, транслируют их в единообразном формате в блок обработки команд — Command Decoder. Через MCU Interface также поступают данные, которые транслируются в блок памяти.
— GDDRAM — блок памяти графических данных дисплея (Graphic Display Data RAM). Собственно внутренний буфер SSD1306, в котором хранятся состояния каждого из пикселей дисплея. Путём записи данных в данный блок мы управляем картинкой на экране.
— Display Controller — блок управления экраном. Читает данные из GDDRAM и отображает эту информации на экране в режиме динамической индикации.
Есть и еще несколько блоков , полная картинка есть в datasheet‘e на странице №7.

Нас интересуют в основном два блока — GDDRAM и Command Decoder. Именно с ними происходит всё общение программиста. Причем неважно каким образом Вы направите данные в эти блоки — MCU Interface всё скушает и направит по правильному адресу. Соответственно для управления SSD1306 нужно всего лишь направлять нужные команды и нужные данные. Мы будем эти данные направлять через двухпроводной интерфейс I2C и для этого нужно две базовых функции — для данных (sendData) и для команд (sendCommand). Они практически ничем не отличаются, разница лишь в том, что перед отправкой данных мы шлем в шину I2C значение 0x40, а перед отправкой команды — 0x80, а MCU Interface распознает эти значения и решает куда направить следующий байт.  Иначе говоря, управление дисплеем сводится к отправке последовательностей двухбайтовых комбинаций по адресу SSD1306 равному 0x3C.

#include "Wire.h" 
#define SSD1306_Address               0x3C
#define SSD1306_Command_Mode          0x80
#define SSD1306_Data_Mode             0x40

void sendCommand(unsigned char command)
{
  Wire.beginTransmission(SSD1306_Address);
  Wire.write(SSD1306_Command_Mode);
  Wire.write(command);
  Wire.endTransmission();
}

void sendData(unsigned char Data)
{
     Wire.beginTransmission(SSD1306_Address);
     Wire.write(SSD1306_Data_Mode);
     Wire.write(Data);
     Wire.endTransmission();
}

На этом общая информация заканчивается. Далее мы рассмотрим инициализацию дисплея.

Типовые роботы Лего и их микроконтроллерные аналоги. Часть 1 «Плюсы и минусы Lego Mindstrorms».

АВТОР: Чуйкин Александр. При перепечатке ссылка на сайт обязательна.

В настоящий момент конструкторы Lego серий Mindstorms EV3 и NXT стали стандартом де-факто в сфере обучения детей основам робототехники. Это произошло, в первую очередь, благодаря широкой маркетинговой поддержке фирмы Lego своего детища, ну и конечно благодаря несомненным его преимуществам. Конструкторы просты в освоении, снабжены отличными инструкциями и позволяют в очень короткие сроки увидеть результат своего труда.
Перечислим основные плюсы и минусы данных конструкторов:


ПЛЮСЫ

МИНУСЫ

сразу 17 конструкций!!! Эта игрушка займет ребенка надолго. В коробке лежит одна скромная инструкция, но зато на сайте Lego еще целых 16 разнообразных поделок.

подробные пошаговые инструкции по сборке — позволят быстро добиться желаемого результата, выглядят очень красиво и футуристично. Гениальные создатели, как самих поделок, так и инструкций по сборке, сделали всё чтобы ребенок чувствовал себя приобщенным к хайтеку, робототехнике и технологиям будущего

куча дополнений, датчиков, ресурсных наборов — существенно увеличивают количество роботов и прочий конструкций, которые можно собрать. Кроме того, каждый новый датчик знакомит ребенка с каким-либо физическим явлением (звуковыми волнами, инфракрасным излучением, температурой воздуха и т.д.). Роботы могут автономно принимать решения основываясь на показаниях того или иного датчика.

возможность обучения основам алгоритмического программирования — поможет развить логическое мышление и в целом приблизит ребенка к пониманию сути програмиирования.

легкость освоения — для большинства детей не составит проблем собрать любую конструкцию

поддержка со стороны производителя и пользователей — новые конструкции с подробнейшими инструкциями постоянно появляются и обновляются. Сторонние производители выпускают множество Lego-совместимых деталей и модулей.

широкая распространенность — найти в сети Интернет Lego-робота на любой вкус можно за минуту. А еще за пару минут пошаговую инструкцию по его изготовлению и (если надо) программированию.

самый большой минус — цена. Стоимость базового набора на начало лета 2016 составляет от 22000 до 31000 рублей. Зарядное устройство, цена которому 200 рублей в базарный день, продают за 2000 р.

ограниченный набор датчиков — в базовую комплектацию входит всего 2 датчика (датчик цвета, датчик касания). А в продвинутую версию Education еще 2 (гироскоп и ультразвуковой датчик расстояния). Это сильно ограничивает Вашу свободу творчества, так как собранный робот, будет иметь очень ограниченную автономность и по сути все собранные роботы будут отличаться только механикой. Но если Вы готовы выложить от 3000 рублей за каждый новый датчик, то тогда конечно ограничения снимаются. В общем, это тот же минус, что и предыдуший.

урезанные возможности программирования — программированием это можно назвать с большой натяжкой. Раскладка блоков на экране позволяет выполнять некоторые простые задачи, но только в рамках того функционала, что заложен в Lego производителем. Продвинутые пользователи конечно могут возразить, что для Lego созданы куча компиляторов разных языков, но разве тот, кто способен программировать на Си и Ассемблере станет всерьез заниматься Lego?

скромное количество портов ввода и вывода — к одному микрокомпьютеру Lego можно подключить всего 4 датчика и 4 исполнительных устройства (двигатели или сервомоторы, как правило). Хотите подключить больше? Будьте готовы заплатить еще 20000 рублей за еще один блок.

 

Подытоживая, можно сказать, что в Lego Mindstorms несомненно больше плюсов чем минусов. Назвать минусом невозможность полноценного программирования скорее всего нельзя. Производитель не ставил задачи создать инструмент для обучения программированию. Нельзя забывать, что Lego Mindstorms — это всё же игрушка. Применяемый алгоритмический способ программирования вполне подходит для решения определенного круга задач. И этого достаточно.
Главный минус один: цена. Функциональные аналоги роботов на Arduino или других микроконтроллерных платформах обходятся пользователю на порядки дешевле. В дальнейших статьях мы рассмотрим стандартных роботов Lego и их микроконтроллерные аналоги.