Форум myROBOT.ru » Шаг за шагом » Делаем роботов » Светодиодная панель

Страниц (11): В начало « ... 3 4 5 6 [7] 8 9 10 11 »
 

91. skyburn - 05 Февраля, 2011 - 13:26:53 - перейти к сообщению
Окей)) Буду по 1му перепаивать, может найду засранца
(Добавление)
Цитата:
У вас такой опыт большой чтобы из головы без схемы паять?

Ну как бы схема не сложная, припаял детали, открыл датащиты, и уже припаивал, что куда.
92. cjA - 05 Февраля, 2011 - 13:38:16 - перейти к сообщению
а в Игле поюзать для красоты разводки? Улыбка
Одного засранца я нашел в темной комнате. Бросил китайский фонарик чинить, выключил свет, пошел курить, стемнело быстро. Возвращаюсь- вот он, светится голубиньким. Они у меня белые были, видать не все переходы сгорели.
Если зрение хорошее- попробуйте визуально, контактики внутри сгоревшего отличались от других по цвету.
Ну и конечно это все при условии что лед сгорел, а не что еще. Замешательство
93. skyburn - 06 Февраля, 2011 - 23:18:49 - перейти к сообщению
Можете плз подсказать, как реализовать передачу данных из двумерного массива в сдвиговый регистр. к примеру массив 4х4.
А то что то пока в голову ничего не идет =(((
94. nest - 07 Февраля, 2011 - 00:03:04 - перейти к сообщению
skyburn, а схему нарисуйте Улыбка
95. skyburn - 07 Февраля, 2011 - 11:33:04 - перейти к сообщению
Все)) Спасибо)) Сегодня когда засыпал, понятно, что из головы не шли алгоритмы, я еще раз хорошо подумал, прикинул все, и сообразил вот это
CODE:
#include <tiny2313.h>
#include <delay.h>
unsigned char ram[4][4]={ //мой массив с изображением.
{1,0,1,0},
{0,1,0,1},
{1,0,1,0},
{0,1,0,1}};
unsigned char min[4][4]={ //массив для последовательной подачи отрицательного контакта
{1,1,1,0},
{1,1,0,1},
{1,0,1,1},
{0,1,1,1}};
int a,b;

main()
{
DDRB=0xff;

for(;;)
{for(a=0;a<4;a++) //что б построить матрицу 4х4 нужно 4 раза заполнить ее 8ю байтами.
{for(b=0;b<4;b++) //первыми нужно затолкать значения отрицательных ног
{PORTB.0=min[a][b];
PORTB.1=0;
PORTB.1=1;
}
for(b=0;b<4;b++) // дальше вывод строки из массива с картинкой
{PORTB.0=ram[a][b];
PORTB.1=0;
PORTB.1=1;
}
PORTB.2=1; // ну и защелкнуть все это и повторить но для другой строки
PORTB.2=0;
}}}
96. skyburn - 07 Февраля, 2011 - 13:52:41 - перейти к сообщению
Теперь вопрос о анимации. Как это лучше сделать?
97. Белый Волк - 07 Февраля, 2011 - 15:17:36 - перейти к сообщению
skyburn
Если важно, чтобы устройство было автономным - желательно использовать для каждого светодиода только один бит, а также сделать анимацию программной: вращения геометрических примитивов, движение цифр, букв и т.п.
Если автономность не важна - подключите микроконтроллер через USART к компьютеру и используйте спрайтовую анимацию.
98. skyburn - 07 Февраля, 2011 - 16:37:34 - перейти к сообщению
ммм не совсем вас понял, в каком смысле использовать для каждого светодиода только один бит?

Мне нужно что б оно было автономным
99. cjA - 07 Февраля, 2011 - 17:57:22 - перейти к сообщению
в том смысле что у вас сейчас на один кадр тратится 16 байт, хотя очевидно достаточно двух
100. skyburn - 07 Февраля, 2011 - 18:32:08 - перейти к сообщению
Можете немного подробней обьяснить, как мне использовать 2 байта вместо 16?
(Добавление)
Для той шахмотной доски, понятно, что можно и в 2 байта уложиться. А если рисунок будет сложным. Я просто может не так вас понял
(Добавление)
Цитата:
а также сделать анимацию программной: вращения геометрических примитивов, движение цифр, букв и т.п.

Не ну понятно)) А как ее еще можно сделать?)
101. Белый Волк - 07 Февраля, 2011 - 19:41:38 - перейти к сообщению
skyburn
Говоря "программная анимация" я говорил о математических вычислениях и построениях линий, я подчёркивал её отличие от спрайтовой анимации, где каждый кадр сохранён отдельным изображением.

Для матрицы 4х4, как верно заметил cjA, необходимо только 2 байта. В одном байте 8 бит. В двух байтах - 16. К примеру, есть два байта:

0b00010010
0b01001000

Если вывести в первую тетраду первого байта, во вторую строку - вторую, в третью - первую тетраду второго байта, в четвёртую строку - вторую тетраду второго байта, то матрица отобразит:

0001
0010
0100
1000
102. skyburn - 07 Февраля, 2011 - 20:20:25 - перейти к сообщению
ухх, а не подскажете где по подробнее можно об этом узнать. А то мне многое не понятно. К примеру почему именно 2 байта. И как их загнать в сдвиговый регистр
103. nest - 07 Февраля, 2011 - 20:43:46 - перейти к сообщению
skyburn пишет:
как их загнать в сдвиговый регистр
ну я ведь вам вроде бы давал ссылку на объяснение сдвигового регистра и как он работает?
Или вам программно непонятно, как биты выдвигать?
Можно, кстати, ещё аппаратный SPI поднапрячь - вообще красота будет.
104. cjA - 08 Февраля, 2011 - 00:14:45 - перейти к сообщению
оставте 4х4, может потом захочется 10х10
просто держите в голове что у вас уже 8 кадров.
что-то типа
PORTB.0=( ram[a][b] >> номер_кадра);

(не охота думать как это на Си граммотно сделать Замешательство )
105. Белый Волк - 08 Февраля, 2011 - 05:32:10 - перейти к сообщению
skyburn
Вы знакомы с операциями >> и <<? (на Pascal - shl и shr)