Вопрос по MAX7219/7221
- Войдите на сайт для отправки комментариев
Вс, 27/11/2016 - 09:50
Доброе утро!
Подскажите, пожалуйста, как вручную, без библиотеки работать со сдвиговыми регистрами, как пример на MAX 7219?
У нас есть входы:
1. din
2. CS
3. CLK
Как мне правильно подавать логические сигналы, чтоб выводить какую-то информацию, любую?
Как пример, сделал небольшой код. Но как я понимаю, соврешенно неправильный)))
int dIn = 10; int clk = 10; void setup() { // put your setup code here, to run once: pinMode(10, OUTPUT); pinMode(11, OUTPUT); pinMode(12, OUTPUT); } void loop() { digitalWrite(clk, LOW); digitalWrite(clk, HIGH); digitalWrite(dIn, HIGH); digitalWrite(dIn, HIGH); digitalWrite(dIn, HIGH); digitalWrite(dIn, HIGH); digitalWrite(dIn, HIGH); digitalWrite(dIn, HIGH); digitalWrite(dIn, HIGH); digitalWrite(dIn, HIGH); digitalWrite(dIn, LOW); digitalWrite(dIn, LOW); digitalWrite(dIn, LOW); digitalWrite(dIn, LOW); digitalWrite(dIn, LOW); digitalWrite(dIn, LOW); digitalWrite(dIn, LOW); digitalWrite(dIn, LOW); digitalWrite(clk, LOW); digitalWrite(clk, HIGH); }
http://arduino.ru/Reference/ShiftOut
Вы чего хотите?
1) руками (без библиотеки) пользоваться аппаратным SPI?
2) сделать программный SPI с помощью функции shifOut?
3) не использовать shifOut, а сделать всё совсем вручную (типа для изучения)?
Спасибо! Но я так понимаю, что ShiftOut - таже самая библиотечная функция.
Т.е. по сути, упрощенный вариант кода (чтоб не задумываться).
Или я ошибаюсь?
"3) не использовать shifOut, а сделать всё совсем вручную (типа для изучения)?"
Да именно)))
Ну, откуда мне знаь, ошибаетесь Вы или нет.
Протокол SPI в контроллере есть аппаратный. Его можно использовать, но для него нужны строго определённые пины. Если пины заняты, то его можно моделировать программно (существенно медленнее, но для светодиодов за глаза хватит). Дла программного моделирования есть функция shiftOut. Она простая как валенок, её текст есть в поставке IDE, можно посмотреть.
Или, может Вам пофигу как именно использовать SPI, а Вам нужно саму MAX программировать "без библиотеки"? Так это элементарно - у неё там 14 регисторов и всё программирование состоит в том, чтобы загнать пару "адрес регистра" и "значение для записи в регистр". Больше там ничего нет.
Может быть. А можете пример привести, как так "загнать" можно?
Kruppa, а зачем это Вам?
Если нужно воспользоваться протоколом SPI, то Вам уже порекомендовали два варианта: аппаратный и программный.
Если интересно, как они устроены внутри, в комплекте со средой Arduino IDE поставляются исходники, которые моржно посмотреть.
Если интересно самому сделать с нуля, то читайте дэйташит.
Чего именно Вы хотите? Или Вам нужно просто "поговорить", не хватает общения?
andriano, Да, не хватает. Только общения со специалистами.
ЕвгенийП, можете пример привести, пожалуйста, как загнать пару "адрес регистра" и "значение для записи в регистр"?
Заранее спасибо
Kruppa, https://datasheets.maximintegrated.com/en/ds/MAX7219-MAX7221.pdf
andriano , даташит я и сам могу найти.
И вопрос я задал не Вам. Спасибо за понимание.
andriano, Да, не хватает. Только общения со специалистами.
Зря Вы так. Не зная-то людей!
ЕвгенийП, может быть и зря. Но он тоже хорош. Не вникая в тему сразу "в даташит посылает". Нехорошо.
ЕвгенийП, можете пример привести, пожалуйста, как загнать пару "адрес регистра" и "значение для записи в регистр"?
Да, пример-то могу. только Вы не сказали что у Вас за Ардуина. Пример для uno/nano. Если у Вас Mega - сами себе злобный Буратино, этот пример не заработает, а переписывать я уже, простите, не буду - надо было говорить сразу :)))
Пример включает режим проверки экрана на битые светодиоды - т.е. MAХ7219 зажигает их все. По идее все должны светиться. Этот режим включается записью 1 в регистр 15. Вот в примере это и делается. Сначала Максу передаётся номер регистра (15), а потом 1 для записи в него.
Как видите, в примере вообще никакие библиотеки не используются.
Пример проверен, работает. Так что если что не так, сначала ищите ошибки в соединениях, а потом уж постите сюда отчёт о проблеме.
ЕвгенийП, спасибо за помощь!