Поиск по этому блогу

среда, 21 ноября 2012 г.

Автономный 7 сегментный индикатор 4 цифры в виде блочного устройства i2c на atmega8.

Харе кришна :)
Задумалось мне как-то подключить обычный индикатор - дело не сложное, но выводов потребляет... Жуть.
А если их надо 2-3-4-5 ?
О тож :)
После определённых поисков был найден у буржуев вариант индикатора со своими мозгами и подключением по SPI/I2c/Uart по выбору. Ещё он у них может менять яркость. Вот такой 7-Segment Serial Display - Blue

Одна проблемка - там использовался 32 чип, что при наших ценах... Да ну его на фиг - будем творить своё.
От изменения яркости пришлось отказаться - в atmega8 не получилось - зато удалось значительно сократить размер платы - она практически совпадает по размерам с индикатором.
В общем что получилось.
А по деталям - вообще песня - 3 резистора, 1 конденсатор, 1 чип atmega8 ну и индикатор конечно.

 Разъём "JARKOST" оставлен для того, если вдруг нужно будет яркость всё-таки менять - туда подключаем соответственно резисторы - или что придумаете сами - если не нужна эта опция - можно просто впаять перемычки или дорисовать дорожки перед травлением.
Кроме этого - на плате есть одна перемычка (синим цветом) - она будет идти под индикатором и её будет не видно.
Размер платы практически совпадает с размерами индикатора типа kem-5641(даташит в архиве).
Сам индикатор - с общим анодом. Понятно, что можно взять любой другой, совпадающий по параметрам.
Подключение по I2c адрес в прилагаемой прошивке - 45.
Если нужно пересобрать прошивку - то нужно доработать Arduino IDE - нужна плата с atmega8 c внутренними 8 mHz.
Как это сделать - довольно подробно описано в инете + инфа в прилагаемом архиве.
Набор символов, которые можно передавать по I2c в полученный индикатор нужно отправлять в ASCII коде - например вместо 0, нужно отправить 48.
Таблица поддерживаемых символов

  • 0 => 48
  • 1 =>49
  • 2=>50
  • 3=>51
  • 4=>52
  • 5=>53
  • 6=>54
  • 7=>55
  • 8=>56
  • 9=>57
  • #=>35
  • 0.=>65
  • 1.=>66
  • 2.=>67
  • 3.=>68
  • 4.=>69
  • 5.=>70
  • 6.=>71
  • 7.=>72
  • 8.=>73
  • 9.=>74
Передаются данные пакетами по 4 цифры.
Знак # (шарп) передаётся, если нужно погасить ячейку (пустая).
Ну вот вроде и всё. Собирается быстро, умеет достаточно :)
Удачи.
Ссылка на архив ТЫЦ!

Список деталей

Part     Value          Package   Library  Position (mm)         Orientation

C1       0.1mF          C1206     rcl      (4.2 13.8)            R270
IC1                            MEGA8-AI       TQFP32-08 atmel    (19.15 7.16)          R90
JARKOST                M04X2          2X4       SparkFun (33.4 5.4)                   R270
JP1                             1X02_LOCK SparkFun (0.2 12.7)            R90
JP3                            1X02_LOCK SparkFun (2.4 7.2)             R270
R1       000            M1206     resistor (37 -1.4)             R180
R2       10kOm          M1206     resistor (1.9 0.8)             R180
R3       000            M1206     resistor (9.4 -2)              R270
+индикатор kem-5641

P.s. Чуть не забыл :)
Надо же прошить бутлоадер в чистый чип - перед загрузкой скетча.
Используем в данном примере avrdude и Usbasp (программатор) ATmegaBOOT.hex - берём из прилагаемого архива из каталога "8 noxtal atmega8" :


sudo avrdude -c usbasp -P /dev/ttyUSB0 -p m8 -b 19200 -U hfuse:w:0xc4:m -U lfuse:w:0xe4:m
sudo avrdude -c usbasp -P /dev/ttyUSB0 -p m8 -b 19200 -U flash:w:ATmegaBOOT.hex 
sudo avrdude -c usbasp -P /dev/ttyUSB0 -p m8 -b 19200 -U lock:w:0x0F:m
А уже после этого можно заливать прошивку:
sudo avrdude -c usbasp -P /dev/ttyUSB0 -p m8 -b 19200 -U flash:w:I2c_45.hex

Вот теперь всё!

3 комментария:

  1. А почему не использовали обычные сдвиговые регистры? Они ж вроде копейки стоят.

    ОтветитьУдалить
  2. А размер? Тут платка получается совсем небольшая. Да и использовать намного проще - послал 4 цифры и готово - не нужно городить огород с описанием цифр в основном коде и процедурой отсылки в регистры. Код уменьшается очень заметно - соответственно намного проще писать и уменьшается нагрузка на проц. Да и память какая - никакая высвобождается.
    А если нужно 2 - 3 индикаторов?

    ОтветитьУдалить
  3. А ещё на этой основе можно спокойно лепить любое конечное устройство с I2c.

    ОтветитьУдалить