|
"32х канальный програмируемый Sequencer"
|
|
alexval2007 | Дата: Пятница, 27.08.2010, 04:11 | Сообщение # 1 |
Электро воспламенитель
Группа: Администраторы
Сообщений: 659
Статус: Offline
| На буржуйском форуме выпросил код секвенсора на базе контролера Arduino вот собственно сам проект и схемка которую я нарисовал к нему. вот схема А это код для Arduino временные задержки правим вручную под себя и заливаем в контролер по USB Код доработал но все равно остались еще косяки в ближайшее время доведу до ума. ************************************************************************************** /* "24CH Programmable Sequencer". On the basis of Arduino the controler. Author RESET. Optimized the program alexval2006. 27.08.2010 V1.0. */ int INDICATOR = 13; // choose the pin for power indicator int CH1 = 0; // choose the pin for CH1 int CH2 = 1; // choose the pin for CH2 int CH3 = 2; // choose the pin for CH3 int CH4 = 3; // choose the pin for CH4 int CH5 = 4; // choose the pin for CH5 int CH6 = 5; // choose the pin for CH6 int CH7 = 6; // choose the pin for CH7 int CH8 = 7; // choose the pin for CH8 int CH9 = 8; // choose the pin for CH9 int CH10 = 9; // choose the pin for CH10 int CH11 = 10; // choose the pin for CH11 int CH12 = 11; // choose the pin for CH12 int RELAY = 12; // choose the pin for RELAY int BUTTON = 14; // choose the input pin (for a pushbutton) int val = 0; // variable for reading the pin status //****************************************************************************************************** // Constants which need to be changed to the user. #define CueInterval 1000 // Time interval between inclusion of Cues, 2 seconds. #define CueHIGH 500 // Time of a starting impulse for igniters, 500ms. //****************************************************************************************************** // Initialization of ports of input / output. void setup(){ pinMode(INDICATOR, OUTPUT); // declare INDICATOR as output pinMode(CH1, OUTPUT); // declare CH1 as output pinMode(CH2, OUTPUT); // declare CH2 as output pinMode(CH3, OUTPUT); // declare CH3 as output pinMode(CH4, OUTPUT); // declare CH4 as output pinMode(CH5, OUTPUT); // declare CH5 as output pinMode(CH6, OUTPUT); // declare CH6 as output pinMode(CH7, OUTPUT); // declare CH7 as output pinMode(CH8, OUTPUT); // declare CH8 as output pinMode(CH9, OUTPUT); // declare CH9 as output pinMode(CH10, OUTPUT); // declare CH10 as output pinMode(CH11, OUTPUT); // declare CH11 as output pinMode(CH12, OUTPUT); // declare CH12 as output pinMode(RELAY, OUTPUT); // declare RELAY as output pinMode(BUTTON, INPUT); // declare pushbutton as input digitalWrite(BUTTON, HIGH); // I engage tightening resistor. // We switch off all ports just in case from failures though they and are switched off by default. digitalWrite(CH1, LOW); // turn CH1 OFF digitalWrite(CH2, LOW); // turn CH2 OFF digitalWrite(CH3, LOW); // turn CH3 OFF digitalWrite(CH4, LOW); // turn CH4 OFF digitalWrite(CH5, LOW); // turn CH5 OFF digitalWrite(CH6, LOW); // turn CH6 OFF digitalWrite(CH7, LOW); // turn CH7 OFF digitalWrite(CH8, LOW); // turn CH8 OFF digitalWrite(CH9, LOW); // turn CH9 OFF digitalWrite(CH10, LOW); // turn CH10 OFF digitalWrite(CH11, LOW); // turn CH11 OFF digitalWrite(CH12, LOW); // turn CH12 OFF digitalWrite(RELAY, LOW); // turn RELAY OFF digitalWrite(INDICATOR, LOW); // turn INDICATOR OFF } void loop(){ // The basic program cycle val = digitalRead(BUTTON); // read input value if (val == LOW) { // check the input state digitalWrite(INDICATOR, HIGH); // turn INDICATOR on //*****************************************************************************************************// // ON bank for Cue 1-12 //*****************************************************************************************************// // Cue 1 digitalWrite(CH1, HIGH); // sets CH1 on delay(CueHIGH); // Time of a starting impulse for igniters digitalWrite(CH1, LOW); // sets CH1 off delay(CueInterval); // Time interval between inclusion of Cues // Cue 2 digitalWrite(CH2, HIGH); // sets CH2 on delay(CueHIGH); // Time of a starting impulse for igniters digitalWrite(CH2, LOW); // sets CH2 off delay(CueInterval); // Time interval between inclusion of Cues // Cue 3 digitalWrite(CH3, HIGH); // sets CH3 on delay(CueHIGH); // Time of a starting impulse for igniters digitalWrite(CH3, LOW); // sets CH3 off delay(CueInterval); // Time interval between inclusion of Cues // Cue 4 digitalWrite(CH4, HIGH); // sets CH4 on delay(CueHIGH); // Time of a starting impulse for igniters digitalWrite(CH4, LOW); // sets CH4 off delay(CueInterval); // Time interval between inclusion of Cues // Cue 5 digitalWrite(CH5, HIGH); // sets CH5 on delay(CueHIGH); // Time of a starting impulse for igniters digitalWrite(CH5, LOW); // sets CH5 off delay(CueInterval); // Time interval between inclusion of Cues // Cue 6 digitalWrite(CH6, HIGH); // sets CH6 on delay(CueHIGH); // Time of a starting impulse for igniters digitalWrite(CH6, LOW); // sets CH6 off delay(CueInterval); // Time interval between inclusion of Cues // Cue 7 digitalWrite(CH7, HIGH); // sets CH7 on delay(CueHIGH); // Time of a starting impulse for igniters digitalWrite(CH7, LOW); // sets CH7 off delay(CueInterval); // Time interval between inclusion of Cues // Cue 8 digitalWrite(CH8, HIGH); // sets CH8 on delay(CueHIGH); // Time of a starting impulse for igniters digitalWrite(CH8, LOW); // sets CH8 off delay(CueInterval); // Time interval between inclusion of Cues // Cue 9 digitalWrite(CH9, HIGH); // sets CH9 on delay(CueHIGH); // Time of a starting impulse for igniters digitalWrite(CH9, LOW); // sets CH9 off delay(CueInterval); // Time interval between inclusion of Cues // Cue 10 digitalWrite(CH10, HIGH); // sets CH10 on delay(CueHIGH); // Time of a starting impulse for igniters digitalWrite(CH10, LOW); // sets CH10 off delay(CueInterval); // Time interval between inclusion of Cues // Cue 11 digitalWrite(CH11, HIGH); // sets CH11 on delay(CueHIGH); // Time of a starting impulse for igniters digitalWrite(CH11, LOW); // sets CH11 off delay(CueInterval); // Time interval between inclusion of Cues // Cue 12 digitalWrite(CH12, HIGH); // sets CH12 on delay(CueHIGH); // Time of a starting impulse for igniters digitalWrite(CH12, LOW); // sets CH12 off //*****************************************************************************************************// // ON bank for Cue 13-24, OFF bank for Cue 1-12. //*****************************************************************************************************// digitalWrite(RELAY, HIGH); // sets RELAY on delay(CueInterval); // Time interval between inclusion of Cues // Cue 13 digitalWrite(CH1, HIGH); // sets CH13 on delay(CueHIGH); // Time of a starting impulse for igniters digitalWrite(CH1, LOW); // sets CH13 off delay(CueInterval); // Time interval between inclusion of Cues // Cue 14 digitalWrite(CH2, HIGH); // sets CH14 on delay(CueHIGH); // Time of a starting impulse for igniters digitalWrite(CH2, LOW); // sets CH14 off delay(CueInterval); // Time interval between inclusion of Cues // Cue 15 digitalWrite(CH3, HIGH); // sets CH15 on delay(CueHIGH); // Time of a starting impulse for igniters digitalWrite(CH3, LOW); // sets CH15 off delay(CueInterval); // Time interval between inclusion of Cues // Cue 16 digitalWrite(CH4, HIGH); // sets CH16 on delay(CueHIGH); // Время РїСѓСЃРєРѕРІРѕРіРѕ импульса РЅР° воспламенители digitalWrite(CH4, LOW); // sets CH16 off delay(CueInterval); // Time interval between inclusion of Cues // Cue 17 digitalWrite(CH5, HIGH); // sets CH17 on delay(CueHIGH); // Time of a starting impulse for igniters digitalWrite(CH5, LOW); // sets CH17 off delay(CueInterval); // Time interval between inclusion of Cues // Cue 18 digitalWrite(CH6, HIGH); // sets CH18 on delay(CueHIGH); // Time of a starting impulse for igniters digitalWrite(CH6, LOW); // sets CH18 off delay(CueInterval); // Time interval between inclusion of Cues // Cue 19 digitalWrite(CH7, HIGH); // sets CH19 on delay(CueHIGH); // Time of a starting impulse for igniters digitalWrite(CH7, LOW); // sets CH19 off delay(CueInterval); // Time interval between inclusion of Cues // Cue 20 digitalWrite(CH8, HIGH); // sets CH20 on delay(CueHIGH); // Time of a starting impulse for igniters digitalWrite(CH8, LOW); // sets CH20 off delay(CueInterval); // Time interval between inclusion of Cues // Cue 21 digitalWrite(CH9, HIGH); // sets CH21 on delay(CueHIGH); // Time of a starting impulse for igniters digitalWrite(CH9, LOW); // sets CH21 off delay(CueInterval); // Time interval between inclusion of Cues // Cue 22 digitalWrite(CH10, HIGH); // sets CH22 on delay(CueHIGH); // Time of a starting impulse for igniters digitalWrite(CH10, LOW); // sets CH22 off delay(CueInterval); // Time interval between inclusion of Cues // Cue 23 digitalWrite(CH11, HIGH); // sets CH23 on delay(CueHIGH); // Time of a starting impulse for igniters digitalWrite(CH11, LOW); // sets CH23 off delay(CueInterval); // Time interval between inclusion of Cues // Cue 24 digitalWrite(CH12, HIGH); // sets CH24 on delay(CueHIGH); // Time of a starting impulse for igniters digitalWrite(CH12, LOW); // sets CH24 off delay(CueInterval); // Time interval between inclusion of Cues //*****************************************************************************************************// // Return to the first bank, OFF bank for Cue 13-34, ON bank for Cue 1-12. // //*****************************************************************************************************// } else{ digitalWrite(INDICATOR, LOW); // turn INDICATOR OFF digitalWrite(CH1, LOW); // turn CH1 OFF digitalWrite(CH2, LOW); // turn CH2 OFF digitalWrite(CH3, LOW); // turn CH3 OFF digitalWrite(CH4, LOW); // turn CH4 OFF digitalWrite(CH5, LOW); // turn CH5 OFF digitalWrite(CH6, LOW); // turn CH6 OFF digitalWrite(CH7, LOW); // turn CH7 OFF digitalWrite(CH8, LOW); // turn CH8 OFF digitalWrite(CH9, LOW); // turn CH9 OFF digitalWrite(CH10, LOW); // turn CH10 OFF digitalWrite(CH11, LOW); // turn CH11 OFF digitalWrite(CH12, LOW); // turn CH12 OFF digitalWrite(RELAY, LOW); // turn RELAY OFF } }
|
|
| |
alexval2007 | Дата: Суббота, 28.08.2010, 23:44 | Сообщение # 2 |
Электро воспламенитель
Группа: Администраторы
Сообщений: 659
Статус: Offline
| Переработал код потому что код написанный интуристом RESET полное ггг даже с моими доработками потому было принято решение написать с нуля //"32CH Programmable Sequencer". On the basis of Arduino the controler. The author of idea RESET. //The author of the program alexval2006. 29.08.2010 V1.1. //****************************************************************************************************** // Constants which need to be changed to the user. #define CueInterval 1000 // Time interval between inclusion of Cues, 1 seconds. #define CueHIGH 500 // Time of a starting impulse for igniters, 500ms. //****************************************************************************************************** int RELAY = 18; // choose the pin for RELAY int BUTTON = 19; // choose the input pin (for a pushbutton) int val = 0; // variable for reading the pin status int lnumber=18; // cues+2=our quantity of Cues. 16+2=18 int i; // a variable of cycles void setup(){ // Initialization of ports of input / output. for (i=2; i < lnumber; i++){ pinMode(i,OUTPUT); //We adjust ports on a conclusion. Ports aren't necessary to 0 and 1 us at reset on them HIGH level. } pinMode(RELAY, OUTPUT); // declare RELAY as output pinMode(BUTTON, INPUT); // declare pushbutton as input digitalWrite(BUTTON, HIGH); // I engage tightening resistor. } void loop(){ // The basic program cycle val = digitalRead(BUTTON); // read input value if (val == LOW) { // check the input state // bank A for Cue 1-16 for (i=2; i < lnumber; i++){ digitalWrite(i,HIGH);//sets Cue ON delay(CueHIGH); // Time of a starting impulse for igniters. digitalWrite(i,LOW);//sets Cue OFF delay(CueInterval); // Time interval between inclusion of Cues. } // bank B for Cue 17-32 digitalWrite(RELAY, HIGH); // sets RELAY on for (i=2; i < lnumber; i++){ digitalWrite(i,HIGH);//sets Cue ON delay(CueHIGH); // Time of a starting impulse for igniters. digitalWrite(i,LOW);//sets Cue OFF delay(CueInterval); // Time interval between inclusion of Cues. } digitalWrite(RELAY, LOW); // turn RELAY OFF } } Схема для него тоже новая PLATA FT232R MOD доки по FTDI 98,63гривен
|
|
| |
Asttoxa | Дата: Воскресенье, 29.08.2010, 19:56 | Сообщение # 3 |
Рядовой
Группа: Проверенные
Сообщений: 1
Статус: Offline
| Вот последний код: Полностью работоспособный. //"32CH Programmable Sequencer". On the basis of Arduino the controler. The author of idea RESET. //The author of the program alexval2007, Asstoxa. 29.08.2010 V1.2. //****************************************************************************************************** // Constants which need to be changed to the user. #define CueHIGH 500 // Time of a starting impulse for igniters, 500ms. #define Cue1 50 #define Cue2 100 #define Cue3 10 #define Cue4 200 #define Cue5 10 #define Cue6 100 #define Cue7 1000 #define Cue8 100 #define Cue9 10 #define Cue10 100 #define Cue11 10 #define Cue12 100 #define Cue13 10 #define Cue14 100 #define Cue15 10 #define Cue16 100 #define Cue17 20 #define Cue18 200 #define Cue19 20 #define Cue20 200 #define Cue21 20 #define Cue22 200 #define Cue23 20 #define Cue24 200 #define Cue25 20 #define Cue26 200 #define Cue27 20 #define Cue28 200 #define Cue29 20 #define Cue30 200 #define Cue31 20 #define Cue32 200 //****************************************************************************************************** int RELAY = 18; // choose the pin for RELAY int BUTTON = 19; // choose the input pin (for a pushbutton) int val = 0; // variable for reading the pin status int CueNumber=16; // quantity of Cues. int i,j; // a variables of cycles int CueDelay[2][16] = {{ Cue1, Cue2, Cue3, Cue4, Cue5, Cue6, Cue7, Cue8, Cue9, Cue10, Cue11, Cue12, Cue13, Cue14, Cue15, Cue16}, {Cue17, Cue18, Cue19, Cue20, Cue21, Cue22, Cue23, Cue24, Cue25, Cue26, Cue27, Cue28, Cue29, Cue30, Cue31, Cue32}}; void setup(){ // Initialization of ports of input / output. for (i=2; i < CueNumber+2; i++){ pinMode(i,OUTPUT); //We adjust ports on a conclusion. Ports aren't necessary to 0 and 1 us at reset on them HIGH level. } pinMode(RELAY, OUTPUT); // declare RELAY as output pinMode(BUTTON, INPUT); // declare pushbutton as input digitalWrite(BUTTON, HIGH); // I engage tightening resistor. } void loop(){ val = digitalRead(BUTTON); if (val == LOW){ for (j=0; j < 2; j++){ for (i=2; i < CueNumber+2; i++){ digitalWrite(i,HIGH);//sets Cue ON delay(CueHIGH); // Time of a starting impulse for igniters. digitalWrite(i,LOW);//sets Cue OFF delay(CueDelay[j][i-2]); // Time interval between inclusion of Cues. } digitalWrite(RELAY,HIGH); // банк 2 вкл delay(500); // задержка на переключение реле } digitalWrite(RELAY,LOW); // банк 1 вкл, банк 2 выкл. delay(500); // задержка на переключение реле. } }
Сообщение отредактировал Asttoxa - Понедельник, 30.08.2010, 01:13 |
|
| |
alexval2007 | Дата: Пятница, 03.09.2010, 19:35 | Сообщение # 4 |
Электро воспламенитель
Группа: Администраторы
Сообщений: 659
Статус: Offline
| У меня есть мысли о создании приложения для PC для удобного редактирования задержек и записи их в микроконтроллер в его энергонезависимую память EEPROM.
|
|
| |
sTs | Дата: Суббота, 04.09.2010, 13:25 | Сообщение # 5 |
Подполковник
Группа: Проверенные
Сообщений: 133
Статус: Offline
| Вещь! А прозвонка каналов возможно только попарно или можно все 32 светодиода поставить?
|
|
| |
alexval2007 | Дата: Суббота, 04.09.2010, 15:58 | Сообщение # 6 |
Электро воспламенитель
Группа: Администраторы
Сообщений: 659
Статус: Offline
| Да там надо схему изменить и все будет
|
|
| |
MRACOBESSS- | Дата: Суббота, 04.09.2010, 17:34 | Сообщение # 7 |
Рядовой
Группа: Проверенные
Сообщений: 11
Статус: Offline
| скажу от лица всего простого народа: кончайте кормить кодами и программами для высоколобых!!! даешь готовое изделие за недорого!!!
|
|
| |
alexval2007 | Дата: Воскресенье, 05.09.2010, 10:43 | Сообщение # 8 |
Электро воспламенитель
Группа: Администраторы
Сообщений: 659
Статус: Offline
| Ну совсем недорого невыйдет пощитай скоко деталий а потом это еще и собрать в кучу а это все время. Можно сделать конструктор набор основных деталей ну там печатные платы прошитый контролер может еще чего а полевики резисторы и светодиоды на совести обладателя этого набора вобщем чтонибудь придумать можно
|
|
| |
Open_Pyro | Дата: Четверг, 09.09.2010, 02:26 | Сообщение # 9 |
Генерал-майор
Группа: Проверенные
Сообщений: 390
Статус: Offline
| MRACOBESSS-, На счет готового изделия не вопрос , но вот параметр "недорого" для него задан неверно. Если можно то более конкретно чего ждет "народ". Сейчас закончил новую версию радио пульта на 10 каналов со встроенным Sequencer. В ближайшее время выложу подробную информацию. Может быть тебя такой простой пульт заинтересует. alexval2007, Погоняй схему в протеусе !!! Ты делаешь подобие матрицы 16*2 и она у тебя без диодов! Возможны самопроизвольные запуски соседних каналов. Еще рекомендую заменить реле на полевые транзисторы и сделать матрицу 8*4 =32 с использованием всего 12 выводов микроконтроллера против 18 которые задействованы сейчас.
|
|
| |
MRACOBESSS- | Дата: Четверг, 09.09.2010, 17:01 | Сообщение # 10 |
Рядовой
Группа: Проверенные
Сообщений: 11
Статус: Offline
| Open_Pyro нет, спасибо, я уже "упакован". просто я имел в виду что очень малому количеству людей интересен процесс сборки с полного нуля. А конечное законченное изделие обычно дороговато. В этом плане Санин вариант производства конструктора мне кажется оптимальным. Дешевле и проще для пользователя я не вижу другого варианта.
|
|
| |
alexval2007 | Дата: Пятница, 10.09.2010, 16:11 | Сообщение # 11 |
Электро воспламенитель
Группа: Администраторы
Сообщений: 659
Статус: Offline
| Quote (Open_Pyro) alexval2007, Погоняй схему в протеусе !!! Ты делаешь подобие матрицы 16*2 и она у тебя без диодов! Возможны самопроизвольные запуски соседних каналов. Еще рекомендую заменить реле на полевые транзисторы и сделать матрицу 8*4 =32 с использованием всего 12 выводов микроконтроллера против 18 которые задействованы сейчас. принято к сведению посмотрю как будет время что можно сделать
|
|
| |
alexval2007 | Дата: Понедельник, 01.11.2010, 18:47 | Сообщение # 12 |
Электро воспламенитель
Группа: Администраторы
Сообщений: 659
Статус: Offline
| Новое творчество на сдвиговом регистре недописанное но я обязательно доделаю работает вывод на регистры состояния массива но нет пока что вывода по времени нужно разобраться с с интервалами времени схема //"32CH Programmable Sequencer". On the basis of Arduino the controler. //The author of the program alexval2007, Asstoxa. 1.10.2010 V2. //****************************************************************************************************** // Constants which need to be changed to the user. #define CueHIGH 500 // Time of a starting impulse for igniters, 500ms. #define Cue1 50 #define Cue2 100 #define Cue3 10 #define Cue4 200 #define Cue5 10 #define Cue6 100 #define Cue7 1000 #define Cue8 100 #define Cue9 10 #define Cue10 100 #define Cue11 10 #define Cue12 100 #define Cue13 10 #define Cue14 100 #define Cue15 10 #define Cue16 100 #define Cue17 20 #define Cue18 200 #define Cue19 20 #define Cue20 200 #define Cue21 20 #define Cue22 200 #define Cue23 20 #define Cue24 200 #define Cue25 20 #define Cue26 200 #define Cue27 20 #define Cue28 200 #define Cue29 20 #define Cue30 200 #define Cue31 20 #define Cue32 200 //****************************************************************************************************** int latchPin = 4; // Подключаем вывод к ST_CP of 74HC595 int clockPin = 2; // Подключаем вывод к SH_CP of 74HC595 int dataPin = 3; // Подключаем вывод к DS of 74HC595 int BUTTON = 19; // choose the input pin (for a pushbutton) //Обявляю переменные и массивы byte dataRED; // Обявляю глобальные переменные массив зеленых светодиодов byte dataGREEN; // Обявляю глобальные переменные массив красных светодиодов byte dataArrayRED[10]; // Обявляю битовый массив красных светодиодов из 10 элементов byte dataArrayGREEN[10]; // Обявляю битовый массив зелёных светодиодов из 10 элементов int val = 0; // variable for reading the pin status int CueNumber=16; // quantity of Cues. int i,j; // a variables of cycles int CueDelay[2][16] = {{ Cue1, Cue2, Cue3, Cue4, Cue5, Cue6, Cue7, Cue8, Cue9, Cue10, Cue11, Cue12, Cue13, Cue14, Cue15, Cue16}, {Cue17, Cue18, Cue19, Cue20, Cue21, Cue22, Cue23, Cue24, Cue25, Cue26, Cue27, Cue28, Cue29, Cue30, Cue31, Cue32}}; void setup(){ // Инициализация pinMode(BUTTON, INPUT); // Настраиваю Pin на ввод digitalWrite(BUTTON, HIGH); // Включаю подтягивающий резистор по входу к лог 1 pinMode(latchPin, OUTPUT); // Настраиваем портына вывод Serial.begin(9600); // Скорость обмена по UART // Записую все состояния элементов Массива dataArrayRED[0] = 0xFF; //11111111 dataArrayRED[1] = 0xFE; //11111110 dataArrayRED[2] = 0xFC; //11111100 dataArrayRED[3] = 0xF8; //11111000 dataArrayRED[4] = 0xF0; //11110000 dataArrayRED[5] = 0xE0; //11100000 dataArrayRED[6] = 0xC0; //11000000 dataArrayRED[7] = 0x80; //10000000 dataArrayRED[8] = 0x00; //00000000 dataArrayRED[9] = 0xFF; //11111111 dataArrayGREEN[0] = 0xFF; //11111111 dataArrayGREEN[1] = 0x00; //01111111 dataArrayGREEN[2] = 0x00; //00111111 dataArrayGREEN[3] = 0x1F; //00011111 dataArrayGREEN[4] = 0x0F; //00001111 dataArrayGREEN[5] = 0x07; //00000111 dataArrayGREEN[6] = 0x03; //00000011 dataArrayGREEN[7] = 0x00; //00000001 dataArrayGREEN[8] = 0x00; //00000000 dataArrayGREEN[9] = 0x07; //00000111 } void loop(){ // Основной цикл val = digitalRead(BUTTON); // Обработка состояния пускового входного сигнала if (val == LOW){ /* for (j=0; j < 2; j++){ for (i=2; i < CueNumber+2; i++){ digitalWrite(i,HIGH); // Установить Высокий уровень на канале delay(CueHIGH); // Время запускающегося импульса на воспламенителей. digitalWrite(i,LOW); // Установить Низкий уровень на канале delay(CueDelay[j][i-2]); // Временной интервал между включением Сигналов. } } */ for (j = 0; j < 10; j++){ //Цикл перебора элементов массива из 10 элементов dataRED = dataArrayRED[j]; //присваиваем переменной dataRED состояние j элемента массива красных светодиодов dataGREEN = dataArrayGREEN[j]; //присваиваем переменной dataGREEN состояние j элемента массива зелёных светодиодов digitalWrite(latchPin, 0); //Подготавливаем регистр к приёму данных //Выводим данные из масивов в сдвиговые регистры shiftOut(dataPin, clockPin, dataGREEN); // данные для зеленых светодиодов shiftOut(dataPin, clockPin, dataRED); // данные для красных светодиодов digitalWrite(latchPin, 1); //Защелкиваем данные в регистре delay(300); // Задержка перебора данных для вывода из массива на регистр } } } void shiftOut(int myDataPin, int myClockPin, byte myDataOut){ //Основная программа вывода на сдвиговый регистр //Это смещает 8 битов MSB сначала, на нарастающем фронте часов, часы бездействуют низко int i=0;//Обявляю внутреннию переменную int pinState; pinMode(myClockPin, OUTPUT);// Настраиваем на вывод pinMode(myDataPin, OUTPUT);// Настраиваем на вывод digitalWrite(myDataPin, 0); //Записуем в регистр 0 на всякий случай digitalWrite(myClockPin, 0); for (i=7; i>=0; i--){ digitalWrite(myClockPin, 0); if (myDataOut & (1< pinState= 1; }else{ pinState= 0; } digitalWrite(myDataPin, pinState);//Устанавливает pin данных в ВЫСОКИЙ или НИЗКОЕ в зависимости от pinState digitalWrite(myClockPin, 1);//установить бит clock pin в лог 1 digitalWrite(myDataPin, 0);//обнулите контакт данных после сдвига, чтобы предотвратить выход за край } digitalWrite(myClockPin, 0);// остановить сдвиг }
|
|
| |
Open_Pyro | Дата: Понедельник, 01.11.2010, 22:15 | Сообщение # 13 |
Генерал-майор
Группа: Проверенные
Сообщений: 390
Статус: Offline
| О это уже по круче !!! Схемотехника очень нравится, но зачем сдвиговые регистры разделять по палам ? Программный код осталось только просмотреть чтобы ошибок не было.
|
|
| |
Open_Pyro | Дата: Вторник, 02.11.2010, 02:07 | Сообщение # 14 |
Генерал-майор
Группа: Проверенные
Сообщений: 390
Статус: Offline
| Что-то не правильно с последним абзацем кода: Quote if (myDataOut & (1< pinState= 1; }else{ pinState= 0; } digitalWrite(myDataPin, pinState);//Устанавливает pin данных в ВЫСОКИЙ или НИЗКОЕ в зависимости от pinState digitalWrite(myClockPin, 1);//установить бит clock pin в лог 1 digitalWrite(myDataPin, 0);//обнулите контакт данных после сдвига, чтобы предотвратить выход за край } digitalWrite(myClockPin, 0);// остановить сдвиг } Проект не компилится.
|
|
| |
Open_Pyro | Дата: Вторник, 02.11.2010, 03:09 | Сообщение # 15 |
Генерал-майор
Группа: Проверенные
Сообщений: 390
Статус: Offline
| Вот код хотя бы в читаемом виде. Понятно что сырой до ужаса. Его еще делать и делать. Уже компилиируется нормально, но не проверял по тому что не на чем. В прикрепленном файле исходный код проекта. Code
//"32CH Programmable Sequencer". On the basis of Arduino the controler. //The author of the program alexval2007, Asstoxa , Open_Pyro. 2.10.2010 V3.
//****************************************************************************************************** // Constants which need to be changed to the user. #define CueHIGH 500 // Time of a starting impulse for igniters, 500ms. #define Cue1 50 #define Cue2 100 #define Cue3 10 #define Cue4 200 #define Cue5 10 #define Cue6 100 #define Cue7 1000 #define Cue8 100 #define Cue9 10 #define Cue10 100 #define Cue11 10 #define Cue12 100 #define Cue13 10 #define Cue14 100 #define Cue15 10 #define Cue16 100 #define Cue17 20 #define Cue18 200 #define Cue19 20 #define Cue20 200 #define Cue21 20 #define Cue22 200 #define Cue23 20 #define Cue24 200 #define Cue25 20 #define Cue26 200 #define Cue27 20 #define Cue28 200 #define Cue29 20 #define Cue30 200 #define Cue31 20 #define Cue32 200 //****************************************************************************************************** int latchPin = 4; // Подключаем вывод к ST_CP of 74HC595 int clockPin = 2; // Подключаем вывод к SH_CP of 74HC595 int dataPin = 3; // Подключаем вывод к DS of 74HC595 int BUTTON = 19; // choose the input pin (for a pushbutton) //Обявляю переменные и массивы byte dataRED; // Обявляю глобальные переменные массив зеленых светодиодов byte dataGREEN; // Обявляю глобальные переменные массив красных светодиодов byte dataArrayRED[10]; // Обявляю битовый массив красных светодиодов из 10 элементов byte dataArrayGREEN[10]; // Обявляю битовый массив зелёных светодиодов из 10 элементов int val = 0; // variable for reading the pin status int CueNumber=16; // quantity of Cues. int i,j; // a variables of cycles int CueDelay[2][16] = {{ Cue1, Cue2, Cue3, Cue4, Cue5, Cue6, Cue7, Cue8, Cue9, Cue10, Cue11, Cue12, Cue13, Cue14, Cue15, Cue16}, {Cue17, Cue18, Cue19, Cue20, Cue21, Cue22, Cue23, Cue24, Cue25, Cue26, Cue27, Cue28, Cue29, Cue30, Cue31, Cue32}};
//****************************************************************************************************** // Инициализация void setup(){ pinMode(BUTTON, INPUT); // Настраиваю Pin на ввод digitalWrite(BUTTON, HIGH); // Включаю подтягивающий резистор по входу к лог 1 pinMode(latchPin, OUTPUT); // Настраиваем портына вывод Serial.begin(9600); // Скорость обмена по UART
// Записую все состояния элементов Массива dataArrayRED[0] = 0xFF; //11111111 dataArrayRED[1] = 0xFE; //11111110 dataArrayRED[2] = 0xFC; //11111100 dataArrayRED[3] = 0xF8; //11111000 dataArrayRED[4] = 0xF0; //11110000 dataArrayRED[5] = 0xE0; //11100000 dataArrayRED[6] = 0xC0; //11000000 dataArrayRED[7] = 0x80; //10000000 dataArrayRED[8] = 0x00; //00000000 dataArrayRED[9] = 0xFF; //11111111
// dataArrayRED[9] = 0b11111111; - Скорее всего проще применить этот формат записи !
dataArrayGREEN[0] = 0xFF; //11111111 dataArrayGREEN[1] = 0x00; //01111111 dataArrayGREEN[2] = 0x00; //00111111 dataArrayGREEN[3] = 0x1F; //00011111 dataArrayGREEN[4] = 0x0F; //00001111 dataArrayGREEN[5] = 0x07; //00000111 dataArrayGREEN[6] = 0x03; //00000011 dataArrayGREEN[7] = 0x00; //00000001 dataArrayGREEN[8] = 0x00; //00000000 dataArrayGREEN[9] = 0x07; //00000111 } //****************************************************************************************************** // Основной цикл void loop(){ val = digitalRead(BUTTON); // Обработка состояния пускового входного сигнала if (val == LOW){ /* for (j=0; j < 2; j++){ for (i=2; i < CueNumber+2; i++){ digitalWrite(i,HIGH); // Установить Высокий уровень на канале delay(CueHIGH); // Время запускающегося импульса на воспламенителей. digitalWrite(i,LOW); // Установить Низкий уровень на канале delay(CueDelay[j][i-2]); // Временной интервал между включением Сигналов. } } */ // Цикл перебора элементов массива из 10 элементов for (j = 0; j < 10; j++){ dataRED = dataArrayRED[j]; // присваиваем переменной dataRED состояние j элемента массива красных светодиодов dataGREEN = dataArrayGREEN[j]; // присваиваем переменной dataGREEN состояние j элемента массива зелёных светодиодов digitalWrite(latchPin, 0); // Подготавливаем регистр к приёму данных // Выводим данные из масивов в сдвиговые регистры shiftOut(dataPin, clockPin, dataGREEN); // данные для зеленых светодиодов shiftOut(dataPin, clockPin, dataRED); // данные для красных светодиодов digitalWrite(latchPin, 1); // Защелкиваем данные в регистре delay(300); // Задержка перебора данных для вывода из массива на регистр } } }
//****************************************************************************************************** //Основная программа вывода на сдвиговый регистр void shiftOut(int myDataPin, int myClockPin, byte myDataOut){ //Это смещает 8 битов MSB сначала, на нарастающем фронте часов, часы бездействуют низко int i=0;//Обявляю внутреннию переменную int pinState; pinMode(myClockPin, OUTPUT); // Настраиваем на вывод pinMode(myDataPin, OUTPUT); // Настраиваем на вывод digitalWrite(myDataPin, 0); // Записуем в регистр 0 на всякий случай digitalWrite(myClockPin, 0);
for (i=7; i>=0; i--){ digitalWrite(myClockPin, 0);
if ((myDataOut >> i) & 0x01 ) pinState= 1; else pinState= 0; digitalWrite(myDataPin, pinState); // Устанавливает pin данных в ВЫСОКИЙ или НИЗКОЕ в зависимости от pinState digitalWrite(myClockPin, 1); // установить бит clock pin в лог 1 digitalWrite(myDataPin, 0); // обнулите контакт данных после сдвига, чтобы предотвратить выход за край } digitalWrite(myClockPin, 0); // остановить сдвиг } //******************************************************************************************************
|
|
| |
|
|
|