Сдвиговый регистр. Управления по технологи COM порта
- Войдите на сайт для отправки комментариев
Добрый день! Столкнулся с проблемой по написанию скедча для различных моделей сдвигового регистра. А именно имеется необходимость создания более 256пинов которые могли бы управлять через стороннею программу с ПК. На данный момент имеется вот такой банальный код, который занимает довольно-такибольшое пространства на плате.(если его расширить на 256 независимых команд, а то и больше так как в некоторых случаях необходима совместная работа нескольких пинов одновременно)
char pc_code=0; int dataPin = 9; //Пин подключен к DS входу 74HC595 int latchPin = 10; //Пин подключен к ST_CP входу 74HC595 int clockPin = 11; //Пин подключен к SH_CP входу 74HC595 void setup() { pinMode(latchPin, OUTPUT); pinMode(clockPin, OUTPUT); pinMode(dataPin, OUTPUT); Serial.begin(9600); } void loop() { if (Serial.available() > 0) { pc_code = Serial.read(); if(pc_code=='q') // после подачи на порт q включить цикл { digitalWrite(latchPin, LOW); // устанавливаем синхронизацию "защелки" на LOW shiftOut(dataPin, clockPin, LSBFIRST, B01001100); // передаем последовательно на dataPin digitalWrite(latchPin, HIGH); //"защелкиваем" регистр, тем самым устанавливая значения на выходах } } if(pc_code=='Q') { digitalWrite(latchPin, LOW); shiftOut(dataPin, clockPin, LSBFIRST, B00000000); digitalWrite(latchPin, HIGH); } } }
Хотелось бы узнать у вас, как создать массив с пустыми элементами, заполнения, которых происходила бы через ком порт что бы можно было заменить вот эту строку,
shiftOut(dataPin, clockPin, LSBFIRST, B01001100);
на что то подобное.
shiftOut(dataPin, clockPin, LSBFIRST, Babsdifgk);
Где n, a, b, s, d, i, f, g и k являются переменными массива который бы непосредственно засылались стороней програмы по ком порту. Ничего похожжего увы не нашел. :( Помогите разобраться или посоветуйте литературу где можно почитать про это поподробний.
Заранее благодарю, с уважениям Александр.
Дважды перечитал Ваш пост и ничего не понял.
Поэтому просто некоторые мысли вслух:
Для того, чтобы управлять 256 пинами, нужно 32 корпусов 74HC595. Это много. Подумайте над схемой, нельзя ли ее преобразовать к виду матрицы 16х16. Тогда 256 ячейками можно будет управлять всего по 32 пинам, т.е. с помощью 4-х корпусов 74HC595.
В своем коде Вы используете довольно медленные команнды digitalWrite() и shiftOut(), который внутри тоже использует digitalWrite(). Передача одного байта таким образом занимает около 0.2 мс. 30 байт будут передаваться 6 мс. Бывает, это некритично, а бывает - слишком много. При большом количестве регистров я бы посоветовал использовать SPI.
Ваш код работает с единственным регистром, хотя Вы пишете, что Вам нужно большое их количество.
Спасибо за ответ, прошу прошения что не понятно выражаюсь. Данный регистр приведены просто для примера, будут использованы HV 507. Я не могу найти хорошую книгу по программированию скетча. Вкратце можно сказать что есть устройство построенное на базе ардуино. Для него пишу программа на ПК которая будит отправлять команды на открытия и закрытия пина(с этим проблемы нет). До этого обходился пинами на самой плате по этому использовал вот такой код
Теперь решил заняться регистрами но не могу понять как управлять ими с помощью команд отправленными с ПК. Мне нужно реализовать скейч где можно ардуинузаставить ожидать количество бай с пк и команду на выполнения цикла с этими байтами, не могли бы вы подсказать где можно почитать про работу с ком портом, а то все что нахожу все не то:(
Хороших книг по Ардуино не существует. Все, изданное на настоящий момент имеет значительное количество серьезных ошибок.
Поэтому могу посоветовать начать с Кернигана и Ритчи "Язык программирования Си".
Затем - любой учебник по C++. Страуструпа порекомендовать не могу, он хотя и создатель языка, но с дидактической точки зрения его книга написана сложновато.
После этого можно, конечно, прочитать одну-две книжки про Ардуино, а можно и не читать, а пользоваться исключительно онлайн-документацией.
Из Ваших сообщений я могу сделать вывод, что проблема у Вас не с ком-портом, а с выводом информации в регистры. Т.е. как работать с ком-портом, Вы в общих чертах представляете, а с регистрами - нет. В этом случае основной источник знаний - дэйташит на те устройства, которые собираетесь использовать. В Вашем случае, как понимаю, это HV 507.
И еще пара замечаний:
Вероятнее всего, Вам нужно будет хранить карту активности ваших пинов в оперативной памяти - в битовом поле, а потом, вероятнее всего, все битовое поле одной командой отправлять в регистры. Если Вам нужно будет изменить состояние нескольких десятков пинов одновременно, обновление состояние регистров после изменения каждого бита будет довольно накладно. Т.е. нужно предусмотреть отдельные команды как для изменения битов, так и для обновления регистров.
Т.к. команд оказывается довольно много - явно больше, чем доступных символов. Поэтому нужно будет передавать команды не в виде символов, а в виде строк, а затем разбирать каждую команду-строку, чтобы выполнить нужное действие.
Спасибо большое, за потраченное время. Будим изучать:)
Так кину свой код для ознакомления. Полный код здесь https://yadi.sk/d/_MeJSDvJ3EaSzR
Головной файл выкладываю
А ничего, что этот класс не поддерживает масштабирование (каскадирование)?
Ну я же не обязан за ТС делать все. Разберется и промаштабирует. Тем более есть там то, что будет интересно ТС.
А ничего, что этот класс не поддерживает масштабирование (каскадирование)?
- Странные у Вас часы. Показывают дату, день недели, фазу Луны, а который час не показывают!
- С какой стати? Часы не обязаны всё показывать!
:---)))
Примного блогодарен:)
Ну я же не обязан за ТС делать все. Разберется и промаштабирует. Тем более есть там то, что будет интересно ТС.
Вероятно, есть. Чтобы посмотреть и сделать по-своему. Хоты бы потому, что вот так:
Cl_74HC595(byte _pin1, byte _pin2, byte _pin3, bool _logic);
делать не нужно ни в каком случае. Имена формальных параметров должны иметь осмысленные имена.
Но, честно говоря, городить класс ради работы со сдвиговым регистром IMHO перебор. Тем более, что никаких "вкусностей" там нет - стандартные неповоротливые digitalWrite и shiftOut.
Британские ученые провели долгие исследования и обнаружили, что IMHO у каждого свой.
ПС: Критика ради критики полезна только критиканам.
Отнюдь.
Иногда из критики умеют извлекать пользу как сами критикуемые, так и простые читатели.