Как правильно управлять 350 светодиодами
- Войдите на сайт для отправки комментариев
Добрый день. Я хочу выводить цифры используяс для их вывода группу светодиодов и включая одни и выключая другие формировать цифры на доске. У меня по моей задумке получается матрица 5 на 5 светодиодов , но ничего не получается сформировать.Я использую для объеденения светодиодов 6 сдвиговых регистров 74HC595 благодаря этому чисто теоретически смогу управлять 25 светодиодами. Я думал что будет все просто , но я застопорился на алгоритме. Получается какая то фигня. Он выводит совсем не те светодиоды которые мне нужны и какую то логику в их управлении я уже просто не могу найти. Сижу уже три дня и и ничего не получается поэтому решил написать сюда. Вот кусок кода отвечающий за вывода части анных , но тоже чушь полнаяя т.к. я уже по всякому пробовал. Могу еще проект протеуса скинуть если кому нужно . П.С В теме написано про 350 светодиодов т.к. таких модулей из 25 светодиодов будет много.
digitalWrite(LATCH,LOW); shiftOut(SER,CLK,MSBFIRST,B00000000<<8); //shiftOut(SER,CLK,MSBFIRST,leds[0]); shiftOut(SER,CLK,MSBFIRST,leds[0]<<7); shiftOut(SER,CLK,MSBFIRST,B00000000<<8); shiftOut(SER,CLK,MSBFIRST,leds[0]<<5); digitalWrite(LATCH,HIGH); delay(250);
"
А что это написано в коде? Вы можете построчно прокомментировать?
Например, чем отличается B00000000<<8 от просто 0?
Что такое leds[0]<<7 и leds[0]<<5?
Это вообще всё про что?
И почему это
6 сдвиговых регистров 74HC595 благодаря этому чисто теоретически смогу управлять 25 светодиодами.
именно 25, а не 48 как все нормальные люди?
Как они у Вас вообще подключены, светодиоды?
int leds[]={1,2,4,8,16,32,64,128};
25 светодиодов выбрал именно из-за экономии светодиодов их зватит чтобы любую однозначную цифру вывести. Подключены через DS регистр стандартно, между собой микросхемы 74HC595 соеденины в каскад через регистр Q7'. По поводу leds[0]<<7 это я типо пытался сдвигать еденицу чтобы ее падать на тот светодиод который мне нужно. Если один каскад то это работает а если несколько то уже фигня получается :(
Блин, что значит "стандартно"? Их можно подключать 100500 способами и никакого стандарта нет.
Если у Вас 6 регистров, почему выводите только 4 байта?
Давайте-ка схмеу и полный скетч (маленький - без лишнего, просто вывод, но полный)
А схема?
В любом случае. Если у Вас 6 регистров, Вы должны выводть 6 байтов. А Вы выводите только 4. Вы точно понимаете что делаете?
http://disk.tom.ru/wy4my3t
Вот схема
Вот в этом то вся и проблема что я просто не понимаю как правильно вывести эти 6 байт. Как закодировать так чтобы в итоге например светодиоды зажгли цифру 1.
Не понимаю, чего Вы не понимаете. Если у Вас есть 6 регистров (Вы правда, так и не привели схему) и Вы их соединили правильно, то Вы должны передать 6 байтов. Самый первый отвечает за самый дальний от ардуины релистр, второй - за "чуть ближе", ..., последний - за ближайший к Ардуине. Попробуйте передать 255, а затем 5 нулей. На самом дальнем регистре долны включиться все ноги, а на остальных - ни одна.
Но, больше я с Вами без схемы не разговариваю, т.к. не понимаю для чего Вам 6 регистров на 25 светодиодов (каждый регистр обслуживает 8 светодиодов) и не понимаю, что за вывод Q7 о которым Вы писали.
так я вам схему в ссылке кинул ? Я ее на файлообменник залил. Так вопрос а как передать самые дальние байты ?
Мне нужно передать shiftOut(SER,CLK,MSBFIRST,255<<16);
так я вам схему в ссылке кинул ?
Я не нашёл там шести регистров
Так вопрос а как передать самые дальние байты ?
Блин, ну я же Вам писал. Если регистров 6, то пердаёте 6 байтов. Первый пойдёт на самый дальний регистр. Второй, на "пред-самый дальний" и т.д. Самый последний байт - на ближайший к ардуине регистр.
И я Вам писал - попробуйте передать 255, а затем 5 нулей. Сделайте же наконец!
И кстати, о Вашей схеме, а что токограничивающих резисторов нет? Ваши регистры ещё живы? У них ведь абсолютный максимум - 70мА на корпус!
Мне нужно передать shiftOut(SER,CLK,MSBFIRST,255<<16);
Не сходите с ума!
Вам нужно 6 раз передать по байту!
Хмм сейчас попробую , спасибо , да я там еще читал как это по другому делается. Я тут просто моделирую у меня еще реальных элементов нет. Да вроде понял как этиими вещами управлять , спасибо большое за помощь :)
Так там все получилось но меня возник еще один вопрос, у этого регистра данные подаются через регистр DS. Могу ли я параллельно подключить к разным пинам ардуины эти регистры DS разных 74HC595. Просто я сейчас так в симуляторе попробовал сделать но чтото не очень работает почему то. Аа да понял не могу ) это глупый вопрос был )
Можно, если с умом. Непонятно только зачем.
у меня просто когда одна цифры "рисуется" светодиодами то все норм а если вторую начинаю рисовать то все сбивается :( Каждая цифра у меня занимает 3 сдвиговых регистра получается.
Ну, я же не знаю, что и как у Вас подключено. Схему нет. Откуда мне знать, что такое напримере Ваши 124 в строках 30-32 - чему они соответсвуют? Как Вы раскидали 25 светодиодов по шести регистрам - тоже секрет.
почему бы не купить готовые матрицы? там схемы управления уже есть
а по цене получается выгоднее чем стоимость одних светодиодов
Айй ) похоже реально в данном случае попробую смотреть в сторону светодиодных матриц , ЕвгенийП и axill спасибо за подсказки :)
посмотрите поиском на алиэкспресс по слову HUB75 это распространенный протокол, там много панелей
ими конечно ардуиной управлять не очень просто, нужно быстрое сканирование сотен-тясяч светодидов, но если нужны неторопливые надписи то вполне, есть готовая библиотека от adafruit. я пробовал, неплохо
ну а если подключить что то более мощное, STM32 или какой нибудь raspberry то можно хоть видео выводить
есть еще матрицы со свтроенным контроллером и памятью которыми ардуиной управлять легче, один из примеров в моей статье http://radiokot.ru/circuit/digital/home/194/
они соотвественно несколько дороже
Айй ) похоже реально в данном случае попробую смотреть в сторону светодиодных матриц
С помошью Ардуины легко управлять матрицами (лентами) с чипами ws2811 и ws2812.