Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
25.02.2013, 02:44
|
|
Почётный гражданин KAZUS.RU
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
|
Re: Бегущая строка
Сообщение от miwutka
|
шишек делать буду оч много.... а это будет вас нервировать )))
|
"Нервирует" вовсе не это, а кульбиты, вроде тех, что ты с JhonLaboratory напару тут устраивал.
Сообщение от miwutka
|
Как его объявить правильно чтобы чтобы обращаться к биту элемента массива?
|
Можешь на досуге почитать про битовые поля, побитовые логические операции и операции сдвига ( не переусердствуй! ). Возможны разные способы и пока нет аргументов, которые бы перевесили в сторону какого-то одного - подойдем поближе, будет видно.
__________________
There's always more than one way to skin a cat.
Последний раз редактировалось tempora; 25.02.2013 в 02:47.
|
|
|
|
25.02.2013, 02:48
|
|
Почётный гражданин KAZUS.RU
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
|
Re: Бегущая строка
Сообщение от miwutka
|
for (stolbec=0;stolbec‹=15;stolbec++)
|
Вот уже первое отклонение от плана. Обещали скважность 8...
Сообщение от miwutka
|
DATA_STROKA=Codepage[36][stolbec].0;// подскажите как у переменной которую взял я из массива взять значение нужного бита и назначить переменной?
|
С какой целью, если не секрет?
Вы ж не собираетесь двигать весь знакогенератор, надеюсь?
Извлекайте бит из DATA_STROKA чем-нибудь типа
PORTD.0 = (DATA_STROKA & 1);
DATA_STROKA = (DATA_STROKA››1);
Это будет быстрей, чем менять на каждый бит маску.
Upd.
Кстати, DATA_STROKA можно объявить в регистре, это ещё несколько ускорит работу.
Последний раз редактировалось omercury; 25.02.2013 в 02:52.
|
|
|
|
25.02.2013, 02:56
|
|
Почётный гражданин KAZUS.RU
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
|
Re: Бегущая строка
Сообщение от omercury
|
Вы ж не собираетесь двигать весь знакогенератор, надеюсь?
|
Думаю, ему Ваш вопрос пока непонятен. Пусть почитает, поробует, вникнет. Кроме того, поскольку знакогенератор справа от присвоения, это к сдвигу не привело бы, может он побитный цикл развернет.
__________________
There's always more than one way to skin a cat.
|
|
|
|
25.02.2013, 10:26
|
|
Почётный гражданин KAZUS.RU
Регистрация: 08.06.2008
Сообщений: 1,394
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
|
Re: Бегущая строка
Поделюсь некоторым опытом.
Замечание - светодиодные матрицы никто сам не собирает, а покупают китайские. У китайцев их на любой вкус и цвет и цену.
Пусть матрица 16х8;
И так - с чего начинать?
Создаем битмап.
Пусть каждый байт - это столбец;
Хотя организация этого битмапа силно зависи от размеров строки, типа и организации матриции светодиодов;
PHP код:
|
unsigned char bmp[]=
{1,0,0,0, 0,0,0,0,
0,0,0,0, 0,0,0,0
};
|
Затем необходимо сделать подпрограмму, вывода битмапа на матрицу.
Как только на матрице засветится левый верхний диод - начало, положено.
Быренько меняем
PHP код:
|
unsigned char bmp[]=
{0,0,0,0, 0,0,0,0,
0,0,0,0, 0,0,0,0x80
};
|
И если видим что светится, только правый нижний диод, то мы почти уже у цели.
Быренько меняем
PHP код:
|
unsigned char bmp[]=
{1,3,7,15, 31,63,127,255,
255,127,63,31, 15,7,3,1
};
|
И ... если видим пионерский галстук - забываем про матрицу и вывод на нее и начнем задумываться как и что теперь рисовать.
|
|
|
|
25.02.2013, 11:04
|
|
Почётный гражданин KAZUS.RU
Регистрация: 08.06.2008
Сообщений: 1,394
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
|
Re: Бегущая строка
Попробуем это вывести.
Матрица динамическая.
Строк 8.
Три регистра сдвига. Один выбор строки и два - выбор диодов строки (столбцов).
Пущай подпрограмму вывода строки вызывают из таймера раз в милисекунду. (Если будет мерцать, то частоту повысить);
И так начали;
PHP код:
|
unsigned char line = 1 ; // первая строка
void OutLine()
{
// начнем задвигать диоды текущей строки;
for( int i = 0; i ‹ 16; i++ )
{
if( (bmp[ i ] & line ) ! = 0 )
{
DATA = 1;
}
else
{
DATA = 0;
}
CLOCK = 1; // задвигаем бит
CLOCK = 0;
}
// столбцы задвинули
// тепреь задвинем line - она ж строка, которая будет светиться;
unsigned char tmp = 1;
for(int i=0;i‹8;i++)
{
if( (line[ i ] & tmp ) ! = 0 )
{
DATA = 1;
}
else
{
DATA = 0;
}
CLOCK = 1; // задвигаем бит
CLOCK = 0;
tmp ‹‹= 1;
}
// все задвинули теперь надо это отобразить
OE=1; // выключение матрицы, что б не было паразитного свечения диодов при переключении строк
LATCH = 1; // Защелка в регистрах
LATCH = 0;
OE = 0; // включаем матрицу.
// == приготовимся к следующей строке
line ‹‹= 1;
if( line == 0 ) line = 1;
// вот пожалуй и все
}
|
Прошу скорострельность и оптимизацию, пока не обсуждать ибо преследую цель дать алгоритм.
Схему не смотрел, но надеюсь, что DATA с МК идет на регистр выбора строки, затем на регистр старших диодов и на регистр младших диодов.
|
|
|
|
25.02.2013, 11:41
|
|
Почётный гражданин KAZUS.RU
Регистрация: 08.06.2008
Сообщений: 1,394
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
|
Re: Бегущая строка
А типа MBI5026 - чем плохи ? Да и цена вроде на порядок ниже
|
|
|
|
25.02.2013, 12:05
|
|
Почётный гражданин KAZUS.RU
Регистрация: 19.08.2006
Адрес: Львов
Сообщений: 1,616
Сказал спасибо: 65
Сказали Спасибо 315 раз(а) в 264 сообщении(ях)
|
Re: Бегущая строка
Сообщение от Boba_spb
|
А типа MBI5026 - чем плохи ? Да и цена вроде на порядок ниже
|
На порядок? Т.е. при цене в 50 центов/корпус для МАХ7219, MBI имеют 5 центов? Наверное, я не там смотрю.
Для опытного программера не составит проблем наваять под то или под другое. Или вообще на внешних сдвиговых. Разница в небольшом. 7912 под динамическую индикацию, 5026 - статика. Функционал у 7912 гораздо выше. Можно применять разные типы декодирования, аппаратно гасить ненужные знакоместа, кроме внешнего резистора яркостью можно управлять программно.
http://mcucpu.ru/index.php/pdevices/...sii/60-max7219
Я с ними плотно поработал, пощупал за ножки и если где-то и есть что-то дешевле, меня никто не разубедит в их "вкусности".
__________________
С уважением,
Vic / ut1wpr
Последний раз редактировалось ut1wpr; 25.02.2013 в 12:24.
|
|
|
|
25.02.2013, 16:31
|
|
Почётный гражданин KAZUS.RU
Регистрация: 08.06.2008
Сообщений: 1,394
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
|
Re: Бегущая строка
А где MAX7219 за 50 центов дают?
Я посмотрю как эти MAX скаскадировать, для простой строки из 16 матриц 16х8.
И зачем токо MacroBlock стоко мелкосхем для управления светодиодами наклепал, когда динамическое управление семисегментниками справляется со всем?
|
|
|
|
25.02.2013, 16:42
|
|
Почётный гражданин KAZUS.RU
Регистрация: 19.08.2006
Адрес: Львов
Сообщений: 1,616
Сказал спасибо: 65
Сказали Спасибо 315 раз(а) в 264 сообщении(ях)
|
Re: Бегущая строка
Сообщение от Boba_spb
|
А где MAX7219 за 50 центов дают?
|
Я вот тут покупал. По 50 центов. За штуку. В лоте 10 штук. Я же ссылку давал.
http://www.ebay.com/itm/10PCS-MAXIM-...item1e7059429f
Цитата:
|
Я посмотрю как эти MAX скаскадировать, для простой строки из 16 матриц 16х8.
|
А какие проблемы? Правда, один чип на одну матрицу 8х8. На 16х8 понадобится два камушка. Целый бакс!
Цитата:
|
И зачем токо MacroBlock стоко мелкосхем для управления светодиодами наклепал, когда динамическое управление семисегментниками справляется со всем?
|
ХЗ...
Я подобные применял, когда на морде было много индикаторных СД, а выводов не хватало. Ну, это кто как и для чего.. Как говорят, соль и перец - по вкусу.
__________________
С уважением,
Vic / ut1wpr
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 09:49.
|
|