Как управлять светодиодной матрицей при помощи ардуино?
- Войдите на сайт для отправки комментариев
Чт, 26/06/2014 - 10:45
Привет!
Хочу сделать светодиодную матрицу 16х32. Управление по SPI. Для этого предполагаю 2 сдвиговых регистра 74HC595 на аноды (16 строк) и 4 на катоды ( 32 столбца). Работает понятно со стробоскопическим эффектом.
В связи с этим два вопроса: 1 не будет ли тормозить вся схема через SPI при последовательном подключении регистров с частотой обновления скажем 2-3 мс на регистр (учитываются только катодные регистры, т.е. цикл около 10 мс) и 2 посоветуйте библиотеку символов, чтобы самому не набирать. Может можно из LiquidCrystal можно как то выковырять?
посмотрите в сторону max7219
про spi: если spi хардварный, можно не ждать окончания передачи, делать что то пока передается, а когда закончилась передача отправить следующий байт
посмотрите в сторону max7219
про spi: если spi хардварный, можно не ждать окончания передачи, делать что то пока передается, а когда закончилась передача отправить следующий байт
У меня десяток регистров лежит, не хотелось еще что то покупать. Так можно и с дешифратором схему конечно сделать.
ну тогда не 2 сдвиговых регистра а 6 получается
про усиление по току надеюсь знаете
ну тогда не 2 сдвиговых регистра а 6 получается
про усиление по току надеюсь знаете
6 регистров всего или только на анод?
Да. Пока только думаю с какой стороны ключи ставить, или с обоих?
8 каналов на регистр. по горизонтали получается нужно 4 по вертикали 2. достаточно только по вертикали
Набросал в proteus схему.
8х8 работало, а вот 16х16 уже нет. Если удаляю диоды то регистры начинают моргать как надо.
Оставшиеся 16 столбцов пока не стал дорисовывать..
Где могут быть ошибк
и?
не должно быть по идее такого. либо модель корявая, либо ошибка в коде
не должно быть по идее такого. либо модель корявая, либо ошибка в коде
Код простенький
01
#include <SPI.h> //подключаем библиотеку SPI
02
enum
{ reg = 9 };
//выбираем линию SS регистра на 9-м пине Arduino
03
04
void
setup
(){
05
SPI.begin();
//инициализируем SPI
06
pinMode(reg, OUTPUT);
//инициализируем пин SS
07
}
08
09
int
time = 500;
//время задержки между фрэймами
10
11
12
void
loop
(){
13
digitalWrite(reg, LOW);
//начинаем передачу
14
SPI.transfer(0x00);
//передаем 1-й байт на анод т.е. вторые 8 строк
15
SPI.transfer(0x01);
//передаем 2-й байт на анод т.е. первые 8 строк
16
SPI.transfer(0x00);
//передаем 3-й байт на катод т.е. нижняя половина
17
SPI.transfer(0x01);
//передаем 4-й байт на катод т.е. верхняя половина
18
digitalWrite(reg, HIGH);
//заканчиваем передачу
19
delay(time);
//пауза
20
21
digitalWrite(reg, LOW);
22
SPI.transfer(0x00);
23
SPI.transfer(0x80);
24
SPI.transfer(0x00);
25
SPI.transfer(0x01);
26
digitalWrite(reg, HIGH);
27
delay(time);
28
29
digitalWrite(reg, LOW);
30
SPI.transfer(0x00);
31
SPI.transfer(0x01);
32
SPI.transfer(0x80);
33
SPI.transfer(0x00);
34
digitalWrite(reg, HIGH);
35
delay(time);
36
37
digitalWrite(reg, LOW);
38
SPI.transfer(0x80);
39
SPI.transfer(0x00);
40
SPI.transfer(0x80);
41
SPI.transfer(0x00);
42
digitalWrite(reg, HIGH);
43
delay(time);
44
}
Файл proteus
https://yadi.sk/d/dr_cAKj3V3Syo
Simulino корявая фигня. В Протеус 8 встроенная поддержка Ардуин. И симуляция без тормозов.
Решил проблему применением стандартных светодиодных матриц вместо отдельных диодов.
В продолжение темы хочу сказать, что потестить в proteus отображение со стробоскопическим эффектом не получилось)
Т.е. можно посмотреть работоспособность схемы зажигая по одному (ну или рядами) и все.
...Для этого предполагаю 2 сдвиговых регистра 74HC595 на аноды (16 строк) и 4 на катоды ( 32 столбца)...
А не жирновато для регистра 16 диодов на ногу? Если реализовывать в железе там не все так просто (ИМХО)... мах 35мА на ногу. Если сопроты поставить для защиты, то при разной нагрузке будет разная яркость, при динамическом отображении лучше сразу об этом позаботиться...