14.12.2008

Семисегментный индикатор для Arduino

Часть I

Цифровой индикатор может пригодиться во многих приложениях, особенно связанных с робототехникой. Библиотека Serial позволяет Arduino передавать и принимать данные через последовательный порт, но носить с собой компьютер просто для того, чтобы иметь возможность посмотреть пару цифр - мягко говоря, неудобно.

Допустим, у вас под рукой случайно оказались семисегментные светодиодные дисплеи - почему бы их не пустить в дело? Знатоки неодобрительно покачают головой: довольно расточительно тратить целых 8 пинов микроконтроллера (семь сегментов и одна десятичная точка) на такое удовольствие.



Но что такое индикатор на один разряд? Смех, да и только: даже температуру не показать. Поэтому, хочется хотя бы три:



Вырисовывается довольно прозрачная задача: разработка компактной Shield-платы со светодиодными индикаторами. Однако, прежде чем перейти к фантазированию проектированию, поставим себе ограничения:
  1. Контроллер Arduino должен быть разгружен от тупой работы по поддержанию информации на дисплее => один раз вывел и дальше занимается своими делами, а данные удерживаются до обновления в "защелке" (latch) на Shield-е.
  2. Использовать минимальное количество корпусов микросхем на Shield-е.
  3. Использовать минимальное число ножек для взаимодействия Arduino с Shield, при минимальных издержках. Например, неплохой вариант с последовательным интерфейсом (SPI, TWI).
  4. По-возможности, минимизировать стоимость Shield-а.
Есть масса микросхем-дешифраторов, уже заточенная под индикацию на семисегментном дисплее: те же 541ИД1, ИД2. У них параллельный ввод в BCD-коде - это 4 бита, да еще по биту на каждый разряд, итого 7.



Многовато, да и от циклического сканирования не избавляет, а ставить регистр-защелку - лишний корпус. Зато дешево стоят - 4-5 руб. за штуку.

Наиболее полно нашим условиям удовлетворяют микросхемы MAX7219 и MAX7221: DIP24, порт SPI, защелка присутствует. Однако в розницу они стоят порядка 150 и 250 рублей соответственно, и дешевого решения уже не получается.

А что, если?

Использовать для этих целей ATMEGA8? Связать с контроллером по TWI (Two Wire Interface, полностью совместимый с шиной I2C) - при использовании библиотеки Wire это не представляет труда, к тому же можно расширить диапазон выводимых символов (не только цифры, но и какие-то буквы и прочие символы).

Плюсы:
  • стоит минимум в 2 раза дешевле MAX7219;
  • температурный диапазон шире MAX7221 (а это уже в 4 раза дешевле, можно использовать при температурах ниже нуля, например в непрогретом авто ;)
  • использование I2C дает шанс сделать полноценную Shield, потому что не надо использовать колодку с цифровыми пинами 9-12 - следовательно подойдет макетка со стандартным шагом 2,54 мм!
Минусы:
  • ног больше на 4
  • придется повозиться с программированием ;)

Если жалко времени - однозначно MAX, или вообще готовый последовательный дисплей купить. Но мы же - "бедные студенты" ;) времени - много, денег лишних платить не хочется, а уж программирование мы как-нибудь одолеем!

(продолжение следует - Часть II)

Комментариев нет:

Отправить комментарий