Страница 1 из 2
Управление LED индикатором.
Добавлено: Пн сен 09, 2013 13:28:05
Renych
Всем привет.
Имеется вопрос по управлению матрицей светодиодов.
А именно - формирование символов, текст бегущей строкой,
с возможностью в последствии по USB редактировать текст бегущей строки.
Опыт работы с МК минимальный, посему такие вопросы:
1. достаточно ли будет ATmega8 для этих целей?
2. нужен ли какой модуль сопряжения с USB или достаточно будет возможностей МК?
3. хватит ли ПЗУ МК для хранения "битмапа" алфавита или понадобится внешняя память?
спасибо )
Re: Управление LED индикатором.
Добавлено: Пн сен 09, 2013 14:54:19
uk8amk
1,3 - зависит от размеров символов(ширина*высота в точках). В общем случае Mega8 достаточна для хранения 2-х шрифтов 8*8. Atmega64 - 6 шрифтов 32*24.
2 - FT232, CP2102, PL2303. Или шнурок от телефона. Чтобы обойтись без внешней микросхемы, нужно использовать MK со встроенным USB - Atmega32U4, AT91SAM7S64 и т.д.
Re: Управление LED индикатором.
Добавлено: Пн сен 09, 2013 15:32:19
balmer
Можно и ATMega8 использовать с USB 1. Пример использования можно посмотреть в usbasp
http://www.fischl.de/usbasp/ программаторе. Но там ужиматься надо. Хардварный USB таки круче.
STM32F1xx рулез

Re: Управление LED индикатором.
Добавлено: Вт сен 10, 2013 11:48:55
Renych
В общем случае Mega8 достаточна для хранения 2-х шрифтов 8*8.
что Вы называете шрифтом? Как я понимаю, мне нужно будет закодировать каждую из букв алфавита
в массив точек. Размер буквы 16х16 точек. Таким образом мне понадобится ~ 40 символов (буквы + символы).
И того 16х16 = 256 бит (32 байта) на букву. 40 букв = 1280 байт.
Т.е. уже за килобайт переваливает. ПЗУ у Mega8 512, у Mega32 1Кб.
Или я неправильно считаю?
Re: Управление LED индикатором.
Добавлено: Вт сен 10, 2013 12:24:37
Renych
перефразирую вопрос:
помогите подобрать МК для следующих целей:
1. DIP корпус
2. объём ПЗУ для хранения шрифта ~ 40 символов 16х16
3. встроенный USB
4. недорогой :)
или хотя бы ткните в таблицу сравнения МК - в интернет не получилось найти.
Re: Управление LED индикатором.
Добавлено: Вт сен 10, 2013 15:08:05
alex2103
Renych писал(а): ПЗУ у Mega8 512, у Mega32 1Кб.
Или я неправильно считаю?
это вы про еепром наверное. Правильные цифры 8 и 32 соответственно.
Re: Управление LED индикатором.
Добавлено: Вт сен 10, 2013 16:47:06
balmer
Еще чутка оффтопа
DIP корпуса сейчас редко встречаются.
Их паять тяжело. Дырочек сверлить много надо.
Скажем ATMega8 в SMD исполнении без проблем можно запаять за 5 минут, причем большую часть времени бездельничать.
А вот аналогичную микросхему с 32 выводами в DIP корпусе паять надо вместе со сверлением минут 20. Еще и припоя в 10 раз больше уйдет.
Re: Управление LED индикатором.
Добавлено: Вт сен 10, 2013 19:17:59
uk8amk
что Вы называете шрифтом?
Кодовая таблица СР1251 имеет 256 символов. Она стандартна для ПК, поэтому разумно принять и там и там одинаковую кодировку. Так вот, допустим рисуем 256 символов обычным стилем = шрифт №1, 256 символов жирным стилем = шрифт №2, 256 символов курсивом = шрифт №3 и т.д. В реальности для экономии памяти конечно можно выбросить неиспользуемые знаки.
помогите подобрать МК
Из самых простых при разумном кодинге думаю это должно подойти: Atmega16U2(может быть 8U2), STM32F103C4T6, PIC18F2550(единственное что есть в DIP).
или хотя бы ткните в таблицу сравнения МК
Для Атмел:
http://www.atmel.com/ru/ru/ Внизу нажать "Выбор микроконтроллера". У других производителей примерно также.
Вообще, если речь не про крупную серию, то я бы советовал внешний USB, особенно с учетом этого:
Опыт работы с МК минимальный
Re: Управление LED индикатором.
Добавлено: Вт сен 10, 2013 19:34:51
uk8amk
Сейчас попробовал сохранить шрифт и посмотреть размер.
Шрифт Arial кириллический, 16 пикселей, пропорциональный. Все символы кодировки кроме первых 32-х.
Получилось 5933 байта. Так что вполне и в М8 вместе с программой влезет.
Re: Управление LED индикатором.
Добавлено: Вт сен 10, 2013 20:14:30
Kavka
А если ещё и сжатие применить. А при прорисовке распаковывать.
Re: Управление LED индикатором.
Добавлено: Вт сен 10, 2013 22:15:44
uk8amk
Распаковка быстро и налету - RLE. Более эффективные алгоритмы будут сильно грузить контроллер. А я как понял автор симпатизирует восновном мелким 8-битникам.
Но здесь все равно растр недостаточно большой и эффективность сжатия тоже невелика будет.
Например, А - нифига не ужмется, Е или ПРОБЕЛ - хорошо.

Поэтому в целом для одного шрифта и несжатый можно оставить. Я как-то хотел ужать чтоб диапазон юникода в мегу уместился. Чтоб сразу писать можно было на русском, армянском, короче по всякому. Потом плюнул, нафиг оно надо.
Еще в табло могут быть графические эффекты. Ну типа текст выплывает сверху, наезжает на другой или как-то вертится.
Они тоже жрут ОЗУ. Так как нужен дополнительный буфер экрана.
И от размера экрана тоже зависит. Например на большом экране может быть трудно в реалтайме даже просто бегущую строку вывести. Всмысле не просто буфер вывести, а успеть его перерисовать к началу следующего цикла регенерации с приемлемой частотой(>100Гц). Полностью победить все дефекты удалось только двойной буферизацией изображения. Это для табло больше 64*16 светодиодов. Так что число буферов тоже надо считать чтоб оно не оказалось больше размера ОЗУ и на стек чуток осталось.
Re: Управление LED индикатором.
Добавлено: Чт сен 12, 2013 10:10:10
Renych
Спасибо за подробные комментарии.
Вернусь после покупки МК :)
Re: Управление LED индикатором.
Добавлено: Вт сен 17, 2013 11:19:47
Alexeyslav
Собственно, символы у вас 16x16 а сколько символов вообще собираетесь отобразить в одну строку? Надо иметь в виду что одной только меги8 едва хватит на матрицу 8x8 дальнейшее увеличение надо делать за счет расширителей - обычных регистров сдвига с драйверами под светодиоды(простой регистр сдвига едва ли потянет светодиоды, тем более в динамике с её пиковыми токами).
Есть еще другой вариант - на EBay продаются готовые светодиодные модули в виде матриц 16x24 - их можно соединять последовательно увеличивая разрядность, поддерживают отображение аппаратно и группируются по 4 таких модуля на одну шину. Да, модули поддерживают аппаратно 4 уровня яркости для каждого пикселя! т.е. можно реализовать алгоритмы сглаживания для шрифтов.
В целом, разработка бегущей строки требует так же знаний в области аналоговой электроники - при большом количестве светодиодов получаются огромные значения токов по шинам - их надо будет уметь правильно развести чтобы ваша бегущая строка 1) заработала и 2) не являлась мощным источником радиопомех.
Re: Управление LED индикатором.
Добавлено: Чт сен 19, 2013 15:10:24
Renych
дальнейшее увеличение надо делать за счет расширителей - обычных регистров сдвига
Как раз по этому поводу возник вопрос.
Первоначально планировал использовать регистры SN74HC595N (и даже приобрёл десяток),
но потом вычитал, что понадобятся транзисторные ключи для включения такого кол-ва
светодиодов. Но затем узнал про LED-драйвер Max6960. Вот только в продаже их не нашёл
ни в одном магазине. Может это устаревшая микросхема и существует более свежий аналог?
В общем подскажите, чем заменить Max6960. Ведь если использовать SN74HC595N + транзисторные сборки,
больно много компонентов получается.
Re: Управление LED индикатором.
Добавлено: Чт сен 19, 2013 15:22:10
Gudd-Head
Какая же она старая, последняя ревизия ДШ в ноябре прошлого года!
Просто слишком специфическая, наверняка доступна под заказ.
Re: Управление LED индикатором.
Добавлено: Чт сен 19, 2013 19:12:17
Alexeyslav
TB62725FN - 8 каналов со встроенными драйверами светодиодов 2...80мА на каждый канал.
stp16cp05 - 16 каналов со встроенными драйверами светодиодов 5...100мА на каждый канал с регулировкой тока на все каналы всего одним резистором.
Есть еще какие-то модификации усиленные для 595-регистра которые позволяют выходной ток до 150мА в импульсе, но недостаток регистра без драйвера - на каждый канал надо еще токоограничивающее сопротивление и напряжение на диоде не может превысить напряжение питания микросхемы - а это 5 ввольт.
Искать лучше всего на EBay.
Re: Управление LED индикатором.
Добавлено: Пт сен 27, 2013 14:50:10
Renych
И так, был куплен МК ATmega32u4. Получилось поиграться с ним - загрузить простую прошивку, помигать светодиодом.
Теперь встал вопрос по LED-драйверу. Был куплен STP16CP05.
Вот кусок даташита:


И вот кусок описания:
Когда на входе LE (вывод 4) высокий уровень, регистр-защёлка захватывает данные,
которые проходят через регистр сдвига, и удерживает (хранит) их, когда на этом входе низкий потенциал.
Низкий уровень на входе OE (21) разрешает прохождение данных
с регистра-защёлки на выходные каскады (стабилизаторы тока) микросхемы.
Высокий уровень на этом входе запирает выходные каскады.
Помогите составить примерный алгоритм действий:Допустим я подключил к выходам микросхемы 8 светодиодов (как на схеме)
и хочу зажечь их все. Как я понимаю, мне нужно
1. на вход SDI (2) отправить байт 0b00000000
2. на вход CLK (3) передавать импульсы синхронизации
3. на вход OE (21) подать 0
4. а вот со входом LE (4) не совсем понятно. Во время передачи байта подавать 1,
а после передачи 0?
Подсобите )
Re: Управление LED индикатором.
Добавлено: Пт сен 27, 2013 15:01:57
Martin76
Во время передачи байта держать на LE " 0", чтобы сегменты не мерцали. После загрузки байта в регистр нужно на LE подать высокий уровень для записи в регистр- защелку.
Alexeyslav писал(а):напряжение на диоде не может превысить напряжение питания микросхемы - а это 5 ввольт.
А если даташиты смотреть, а не на ходу придумывать? TPIC6(A-D)595 - напряжение на стоках ключей до 20-50В.
Re: Управление LED индикатором.
Добавлено: Пт сен 27, 2013 20:17:05
Alexeyslav
Это уже несколько другая микросхема.
Re: Управление LED индикатором.
Добавлено: Пт окт 04, 2013 22:33:17
Renych
Собрал такую схему:
STP16CP05Подключил к выводам 5-12 светодиоды.
К выводу 23 (R-EXT) резистор 1 кОм.
Вывод 21 (OE) замкнул на "землю".
Вывод 2 (SDI) к MOSI МК.
Вывод 3 (CLK) к CLK МК.
Вывод 4 (LE) к сконфигурированному на выход порту PC6 МК.
Питание 5 V
Код прошивки:
Код: Выделить всё
.def TEMP = R16
.equ CS = PB0
.equ MOSI = PB2
.equ MISO = PB3
.equ SCK = PB1 ;разряды порта В, используемые интерфейсом SPI.
;=================
Start: rjmp Init;
Init: ldi TEMP, 0b11111111 ; порт C на выход
out DDRC,TEMP
; включаю SPI, говорю, что устройство будет Master и выборка по переднему фронту
ldi TEMP, (1<<SPE) + (1<<MSTR) + (1<<CPHA)
out SPCR, TEMP
;SCK,MOSI,CS, SS - выходы
ldi TEMP, (1<<SCK) + (1<<MOSI) + (1<<CS) + (1<<PB4)
out DDRB, TEMP
cbi PORTC, PC6 ; на вход LE драйвера 0
DoLed: ;запись-чтение SPI,
ldi TEMP, 0b01010101 ;
out SPDR, TEMP ;начать передачу
wait_spi:
;ожидаем конца передачи
lds R20, SPSR
sbrs R20, SPIF
rjmp wait_spi
sbi PORTC, PC6 ; на вход LE драйвера 1
End:
При включении ничего не происходит.
Пробовал на LE (4) подавать 1 во время записи и 0 после - без результата.
Подскажите в чём моя ошибка, куда копать?
PS
Насколько я понял из этой диаграммы, драйвер считывает данные по нарастающему переднему фронту:

PS2
К МК (Mega32U4) подключен внешний кварц на 8 MHz