Ребят, я конечно дико извиняюсь, что влажу со своими 2 копейками, но у меня просто порвался шаблон.....
Я так понимаю есть 8 лампочек и 8 выключателей к этим лампочкам... причем выключатели нормально замкнутые, когда нажимаеш на выключатель то цепь разрывается и лампочка гаснет, отпускаеш выключатель, цепь замыкается и лампочка загорается...
Причем тут вообще ардуино, схемы, программы и прочий бред на 4 страницы? Такими темпами, скоро начнете на держатель туалетной бамаги сервомотор прикручивать.. Но там хоть будет смысл какой то, типа по команде голосовой бамажка отматывалась что бы..
гы гы
Есть такая штука как мульти руль от BMW 3 , и на нём 10 кнопок, а шлей всего 6 контактов из которых 2 на аирбег и два на сигнал, вот и скажите каким образам можно это решить без контроллера если туда нереально запихнуть ещё 10 проводов ))))
Есть такая штука как мульти руль от BMW 3 , и на нём 10 кнопок, а шлей всего 6 контактов из которых 2 на аирбег и два на сигнал, вот и скажите каким образам можно это решить без контроллера если туда нереально запихнуть ещё 10 проводов ))))
Элементарно. нужно просто купить сразу БМВ с нужным рулем... а не пытаться из жигулей методом допила напильником сделать БМВ.
представил как вам в процесе крвиого допила бахнет подушкой в голову... :) пилите Шура, пилите.
и вообще мне казалось что если кнопок больше, а проводков всего 2.. то скорее всего там уже как то решено это апаратно.. какой смысл огород городить? скорее всего там реализован CANBUS.. зачем лисапед изобретать. непонятно сапсем.
Есть такая штука как мульти руль от BMW 3 , и на нём 10 кнопок, а шлей всего 6 контактов из которых 2 на аирбег и два на сигнал, вот и скажите каким образам можно это решить без контроллера если туда нереально запихнуть ещё 10 проводов ))))
Элементарно. нужно просто купить сразу БМВ с нужным рулем... а не пытаться из жигулей методом допила напильником сделать БМВ.
представил как вам в процесе крвиого допила бахнет подушкой в голову... :) пилите Шура, пилите.
и вообще мне казалось что если кнопок больше, а проводков всего 2.. то скорее всего там уже как то решено это апаратно.. какой смысл огород городить? скорее всего там реализован CANBUS.. зачем лисапед изобретать. непонятно сапсем.
А у нас в России большинство так и делаю лучше купим за рубежом готовое чем изобретать что то у себя.
Да и подушку я не трогал она на своём шлейфе и весит , а вот всё остальное у меня и сигнал и автомагнитолла и ещё куча функций управляется через TX –RX и всё чудесно работает хоть и на тазике с рулём от бехи)))
Извините конечно но если бы все в мире рассуждали как вы и не лезли не в какие огороды то я думаю мы бы ездили до сих пор на лошадях
И смотрели черно-белые ламповые телевизоры сидя на кресле качалке ))))
Ребят, я конечно дико извиняюсь, что влажу со своими 2 копейками, но у меня просто порвался шаблон.....
Я так понимаю есть 8 лампочек и 8 выключателей к этим лампочкам... причем выключатели нормально замкнутые, когда нажимаеш на выключатель то цепь разрывается и лампочка гаснет, отпускаеш выключатель, цепь замыкается и лампочка загорается...
Причем тут вообще ардуино, схемы, программы и прочий бред на 4 страницы? Такими темпами, скоро начнете на держатель туалетной бамаги сервомотор прикручивать.. Но там хоть будет смысл какой то, типа по команде голосовой бамажка отматывалась что бы..
гы гы
уважаемый Puhlyaviy!
в том то и дело что Вы не правильно (как мне кажеться )все понимаете.
На примере с лампочками и с выключателями я пытаюсь разобраться и понять как работать с сдвиговыми регистрами. а потом уже применить эти знания для реализации в более сложных устройствах.
Если у Вас эти знания имеются - поделитесь с другими .
Или быть может я ошибаюсь и этот форум только для прожженых профи -програмеров и начинающим тут делать нечего?
Да и подушку я не трогал она на своём шлейфе и весит , а вот всё остальное у меня и сигнал и автомагнитолла и ещё куча функций управляется через TX –RX и всё чудесно работает хоть и на тазике с рулём от бехи)))
Извините конечно но если бы все в мире рассуждали как вы и не лезли не в какие огороды то я думаю мы бы ездили до сих пор на лошадях
И смотрели черно-белые ламповые телевизоры сидя на кресле качалке ))))
пойду руль от лисапеда прикручу к лошади. никто не подскажет как мне тормоза передние задние запрограмировать и и переключатель для скоростей :)
все работает как мне надо. Но есть одно но...
при нажатии первой загорается последний лед , а при нажатии последней кнопки - первый лед на ардуино
то есть кнопки считываются в обратном порядке.
Почему?
Когда мы нажимаем на 1 кнопку «А» регистра он выдаёт сигнал , 00000001 восемь байт и соответственно в таком же порядке он приходит к ардуино то есть получается
Парни, здравствуйте, у меня вопрос немного не по теме, хотя и по теме....
В общем у меня ардуино принимает сигналы от другой и при поступлении Command 7 от передатчика, начинает считывать какой из выводов здвигового регистра нужно включить (строки 120-159)
Планирую доработать код, подскажите как лучьше... Задача зделать так чтобы помнилось состояние каждых нажатых и не нажатых кнопок, как я предпологаю, нужно в swith'е смотреть какой вывод нужно включить, проверить какие уже включеныы, и потом только отправить всё на сдвиг регистор....
У меня проблема: как менять, помнить, биты в 0b00000000 , типо 0b(12345678) помогите
#include <VirtualWire.h>
#include <EasyTransferVirtualWire.h>
#include <EEPROM.h>
const int led_pin = 13; // Проверка прием состояния
const int receive_pin = 50;
unsigned int unique_device_id = 0;
int BlueLed = 7;
int LightLED = 6; // включаеться по наступлению темноты
int LightSensitivity=150; // порог чувствительности 0-999
//Здвиг регистр
int latchPin = 8; //Пин подключен к ST_CP входу 74HC595
int clockPin = 12; //Пин подключен к SH_CP входу 74HC595
int dataPin = 11; //Пин подключен к DS входу 74HC595
int out0 = 0b00000000;
int out1 = 0b00000001;
int out2 = 0b00000010;
int out3 = 0b00000100;
int out4 = 0b00001000;
int out5 = 0b00010000;
int out6 = 0b00100000;
int out7 = 0b01000000;
int out8 = 0b10000000;
//create object
EasyTransferVirtualWire ET;
char buf[120];
struct SEND_DATA_STRUCTURE{
//наша структура данны. она должна быть определена одинаково на приёмнике и передатчике
//кроме того, размер структуры не должен превышать 26 байт (ограничение VirtualWire)
unsigned int device_id;
unsigned int destination_id;
unsigned int packet_id;
byte command;
int data;
};
//переменная с данными нашей структуры
SEND_DATA_STRUCTURE mydata;
//ниже пару функций для записи данных типа unsigned int в EEPROM
void EEPROMWriteInt(int p_address, unsigned int p_value)
{
byte lowByte = ((p_value >> 0) & 0xFF);
byte highByte = ((p_value >> 8) & 0xFF);
EEPROM.write(p_address, lowByte);
EEPROM.write(p_address + 1, highByte);
}
unsigned int EEPROMReadInt(int p_address)
{
byte lowByte = EEPROM.read(p_address);
byte highByte = EEPROM.read(p_address + 1);
return ((lowByte << 0) & 0xFF) + ((highByte << 8) & 0xFF00);
}
void setup()
{
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);
pinMode(led_pin, OUTPUT);
pinMode(BlueLed, OUTPUT);
pinMode(LightLED, OUTPUT);
Serial.begin(9600); // Debugging only
ET.begin(details(mydata));
// Initialise the IO and ISR
vw_set_rx_pin(receive_pin);
vw_setup(2000); // Скорость приёма
vw_rx_start(); // Запуск режима приёма
// Device ID
Serial.print("Getting Device ID... ");
unique_device_id=EEPROMReadInt(0);
if (unique_device_id<10000 || unique_device_id>60000) {
Serial.print("N/A, updating... ");
unique_device_id=random(10000, 60000);
EEPROMWriteInt(0, unique_device_id);
}
Serial.println(unique_device_id);
}
void loop()
{
if(ET.receiveData()) // получили пакет данных, обрабатываем
{
digitalWrite(led_pin, HIGH);
Serial.print("Got: ");
Serial.print("Device ID: ");
Serial.print(mydata.device_id);
Serial.print(" Destination ID: ");
Serial.print(mydata.destination_id);
Serial.print(" Packet ID: ");
Serial.print(mydata.packet_id);
Serial.print(" Command: ");
Serial.print(mydata.command);
Serial.print(" Data: ");
Serial.print(mydata.data);
Serial.println();
digitalWrite(led_pin, LOW);
// проверяем команду и разбираем данные
switch (mydata.command){
case 3://управление реле
for (int i = mydata.data; i>0; i++)
{digitalWrite(BlueLed, !digitalRead(BlueLed));}
break;
case 5://управление освещением
if(mydata.data < LightSensitivity)
{digitalWrite(LightLED, HIGH);}
else{digitalWrite(LightLED, LOW);}
break;
case 7://сдвиг регистр управ реле
switch (mydata.data){
case 1:
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, out1);
digitalWrite(latchPin, HIGH);
case 2:
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, out2);
digitalWrite(latchPin, HIGH);
case 3:
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, out3);
digitalWrite(latchPin, HIGH);
case 4:
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, out4);
digitalWrite(latchPin, HIGH);
case 5:
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, out5);
digitalWrite(latchPin, HIGH);
break;
case 6:
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, out6);
digitalWrite(latchPin, HIGH);
break;
case 7:
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, out7);
digitalWrite(latchPin, HIGH);
case 8:
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, out8);
digitalWrite(latchPin, HIGH);
default:
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, out0);
digitalWrite(latchPin, HIGH);}
}
}
}
какой командой с ардуино обесточить регистры? пример - горели при включении диоды, а нужно командой их выключить все сразу 1 командой а не поштучно. Ардуино так умеет, если нажать serial port, она гасит сама все светодиоды, какая команда есть значит?
Спасибо большое! Может это сброс какой нибудь? Интересно как тогда объяснить если при нажатии в arduino ide кнопки зайти в serial port происходит сброс всех светодиодов которые горят, т.е. пины ардуино в том числе регистров подключенных к ардуино получают состояние LOW, что там может быть, знаю #13#15 это перенос строки, а там какой то ещё код поступает через USB к ардуино, так как ардуино подключаясь к ардуино ide переводит в состояние low свои пины все на момент инициализации подключения к ардуино ide. Несколько раз проверял, это не случайно.
Что вы курите? Какой перенос строки, какой код от USB? Сами подумайте - откель ваш комплюктор знает, что к ардуине подключено для того, чтобы дать код на сброс?
Спасибо большое! Может это сброс какой нибудь? Интересно как тогда объяснить если при нажатии в arduino ide кнопки зайти в serial port происходит сброс всех светодиодов которые горят, т.е. пины ардуино в том числе регистров подключенных к ардуино получают состояние LOW, что там может быть, знаю #13#15 это перенос строки, а там какой то ещё код поступает через USB к ардуино, так как ардуино подключаясь к ардуино ide переводит в состояние low свои пины все на момент инициализации подключения к ардуино ide. Несколько раз проверял, это не случайно.
Сброс не переводит все пины в состояние LOW, он переводит их в высокоимпедансное состояние (т.н. Z-состояние).
Самое простое (в Вашем случае) перевести все пины в состояние LOW циклом. Это займет несколько десятков мкс (сотые доли мс), тогда как глаз (наблюдающий светодиоды) имеет инерционность, исчисляемыми десятками мс (т.е. примерно в 1000 раз больше). Так что ни Вы, ни видеокамера этой "неодновременности" никак не почувствуете.
очень нужно их быстро перевести в такое состояние, пока дельфи программа их через serial 180 шт. отправляет циклом поочередно из combobox (там команды означают погасить пин1 пин2 и т.д. 180 шт. это очень долго. секунды 3-5, если быстрее отправлять не успевает обрабатывать mega2560 и светодиоды зависают не выключаясь. Ардуино отлавливает пришедшие команды, и гасит названные пины с ПК. Но это явно длинный способ и самый примитивный. На все светодиоды не менее 5 сек. а нужно погасить их ну хотя бы за 1 сек. было бы большим скачком. Так понимаю цикл должен быть в mega2560 самой, что бы ей не пришлось тратить времени из serial 180 команд пришедших каждую искать и выключать. Было бы замечательно просто погасить какой нибудь одной командой, разгрузив serial от 180 команд. Ардуино ide это делает в 1 клик если нажимать serial port monitor, ардуино научена принимать слова, как ей приняв например слово "off" погасить все светодиоды разом как можно скорее. В каком направлении идти. Сделать loop так понимаю в ардуино самой вместо дельфи, но как не нагородить очередной огород. Ткните носом пожалуйста. Вот serial monitor мгновенно их гасит всегда. Только кликнуть мышкой сразу все разом гаснут. Но как так и не удалось сделать. Поштучно гасятся. Каждый день нужно их гасить, и время приходится ждать пока они гаснут.
Ткните носом пожалуйста. Вот serial monitor мгновенно их гасит всегда. Только кликнуть мышкой сразу все разом гаснут. Но как так и не удалось сделать. Поштучно гасятся. Каждый день нужно их гасить, и время приходится ждать пока они гаснут.
Повторяю еще раз, сериал монитор просто устраивает ардуине полный сброс и программа там начинает выполняться с 0 заново. Если вас такой вариант гашения светодиодов устраивает, то посмотрите как из Дельфи манипулировать сигналом DTR на используемом вами сериал порте. И будет вам счастье.
очень нужно их быстро перевести в такое состояние, пока дельфи программа их через serial 180 шт. отправляет циклом поочередно из combobox (там команды означают погасить пин1 пин2 и т.д. 180 шт. это очень долго. секунды 3-5, если быстрее отправлять не успевает обрабатывать mega2560 и светодиоды зависают не выключаясь. Ардуино отлавливает пришедшие команды, и гасит названные пины с ПК. Но это явно длинный способ и самый примитивный. На все светодиоды не менее 5 сек. а нужно погасить их ну хотя бы за 1 сек. было бы большим скачком. Так понимаю цикл должен быть в mega2560 самой, что бы ей не пришлось тратить времени из serial 180 команд пришедших каждую искать и выключать. Было бы замечательно просто погасить какой нибудь одной командой, разгрузив serial от 180 команд. Ардуино ide это делает в 1 клик если нажимать serial port monitor, ардуино научена принимать слова, как ей приняв например слово "off" погасить все светодиоды разом как можно скорее. В каком направлении идти. Сделать loop так понимаю в ардуино самой вместо дельфи, но как не нагородить очередной огород. Ткните носом пожалуйста. Вот serial monitor мгновенно их гасит всегда. Только кликнуть мышкой сразу все разом гаснут. Но как так и не удалось сделать. Поштучно гасятся. Каждый день нужно их гасить, и время приходится ждать пока они гаснут.
МОЙДРУГ, это просто какой-то ужас!
1. Откуда вдруг взялась Делфи? Раньше о ней речь не шла.
2. Откуда взялось 180 пинов? Ни в одном контроллере Ардуино такого количества отродясь не было. Максимум - 70.
3. "быстро" и "очень долго" оставьте для художестенных произведений, в технике должны быть конкретные цифры. Но для конкретных цифр нужно конкретное схемное решение. А оно неизвестно (см. п. 2)
Идем дальше.
Чтобы с ПК (персонального компьютера) управлять светодиодами, подключенными к Ардуино, нужно 3 вещи:
1. Программа на ПК (например, на Делфи), которая будет посылать нужные команды Ардуино.
2. Скетч (программа) на Ардуино, которая будет принимать и выполнять команды.
3. Протокол обмена, по которому будут передаваться команды от ПК к Ардуино и, возможно, какая-то информация в обратном направлении, т.е. от Ардуино в ПК.
Собственно, желаемое (одновременное гашение всех светодиодов в количестве больше сотни) наиболее прямым методом решается присутствием в протоколе соответствующей команды.
Так что, думаю, в каком направлении идти, теперь стало понятно.
Поскольку от Вас никакой конкретики не поступало, больше по этому поводу ничего сказать нельзя.
Могу дать очень грубую оценку для случая, если светодиоды подключены через 595 регистры - даже при самой неоптимальной реализации гашения через shiftOut() это не должно занимать более 0.005с.
какой командой с ардуино обесточить регистры? пример - горели при включении диоды, а нужно командой их выключить все сразу 1 командой а не поштучно. Ардуино так умеет, если нажать serial port, она гасит сама все светодиоды, какая команда есть значит?
Придётся тебе "напрячь" мозг и изучить Ассемблер. Уотт тогда возможно даже казалось-бы невозможное, вытворяй "штохошЪ" с дурдуиной )))
"датыШо)))" Шлёшь в порт ОДИН БАЙТ за ОДИН такт и "фсёсдюжит" ))) Чё, показать пример? Ссылки на сторонние форумы приветствуются? Не копипаста, МОЁ, личное. )))))
"датыШо)))" Шлёшь в порт ОДИН БАЙТ за ОДИН такт и "фсёсдюжит" ))) Чё, показать пример? Ссылки на сторонние форумы приветствуются? Не копипаста, МОЁ, личное. )))))
Ну здесь возможны два варианта:
1. Ардуина заранее прошита конкретным скетчем: здесь и одного байта много - можно сделать так, что все необходимое будет выполняться вообще без команды - автоматически.
2. Ардуина не имеет прошивки (прошит только загрузчик) либо прошита произвольным скетчем, который мы изменить не в силах, - вот для этого варианта и приведите, пожалуйста, пример.
если светодиоды подключены через 595 регистры - даже при самой неоптимальной реализации гашения через shiftOut() это не должно занимать более 0.005с.
Спасибо большое! Всё как вы сказали, 595 регистры высылают shiftOut поштучно каждому светодиоду и кроме 595 регистров все ножки задействованы mega2560 в том числе и аналоговые, несколько секунд гаснут светодиоды. Я бы сказал медленно. Неужели нельзя их быстро потушить какой нибудь командой регистрам и ножкам mega2560.
если светодиоды подключены через 595 регистры - даже при самой неоптимальной реализации гашения через shiftOut() это не должно занимать более 0.005с.
Спасибо большое! Всё как вы сказали, 595 регистры высылают shiftOut поштучно каждому светодиоду и кроме 595 регистров все ножки задействованы mega2560 в том числе и аналоговые, несколько секунд гаснут светодиоды. Я бы сказал медленно. Неужели нельзя их быстро потушить какой нибудь командой регистрам и ножкам mega2560.
Еще раз: если светодиоды подключены к сдвиговым регистрам, а не к "регистрам и ножкам mega2560", то никакой "командой регистрам и ножкам mega2560" их погасить нельзя. Должна быть достаточно длинная последовательность переключений ножек контроллера, чтобы передать необходимые данные всем светодиодам (по последовательному интерфейсу).
Но, если контроллер работает на частоте 16 МГц, то 200 светодиодов даже при неоптимальном программировании можно поргасить за тысячные доли секунды.
Еще раз: если светодиоды подключены к сдвиговым регистрам, а не к "регистрам и ножкам mega2560", то никакой "командой регистрам и ножкам mega2560" их погасить нельзя. Должна быть достаточно длинная последовательность переключений ножек контроллера, чтобы передать необходимые данные всем светодиодам
У 74HC595 есть такая ножка как "Output Enable" и при подаче туда высокого уровня все выходы регистра переводятся high-impedance state. Таким образом погасить светодиоды одной командой вполне возможно.
Я не великий специалист, конечно, но AVR разве не сам свои ноги в Hi-Z ставит на старте? На них высокий уровень возникает без дополнительных манипуляций?
Да, после ресета выводы ставятся в Hi-Z, но это не высокий уровень, а "плавающий". Как это будет воспринято другим входом подключенным к выводу в HI-Z зависит от массы факторов.
У 74HC595 есть такая ножка как "Output Enable" и при подаче туда высокого уровня все выходы регистра переводятся high-impedance state. Таким образом погасить светодиоды одной командой вполне возможно.
Ну так напишите конкретно, как выглядит эта команда для такой (достаточно стандартной) схемы:
PS. Проблему ТС я вижу исключительно в том, что он умудрился написать код, который работает примерно в 1000 раз медленнее, чем средний неоптимизированный код для Ардуины, но вместо того, чтобы внести исправления в свой код, ищет "волшебную команду".
время mega2560 уходило на то что бы для 200 светодиодов кадому при получении команды из serial перекапывать из 200 вариантов ножек одну, по вашему совету отправлю ка в serial такую команду "alloff"
и увидя данную команду mega2560 одним махом выключит их, ничего нигде не переискивая получив команду сразу отключит все ножки разом. До этого ардуино получив из serial 200 команд !!! каждую из 200 искала среди 200!!! Фууухх.. Сколько ардуино пришлось пережить из за кривой оптимизации кода так понимаю. Теперь ардуино получит лишь одну команду, получив которую она пойдёт выключать все 200 светодиодов. А не искать из 200 полученных команд для каждой решение из 200 вариантов.
Большое вам спасибо многоуважаемый andriano просто нет слов отблагодарить вас. Вы помогли найти решение как помогают на передаче Жди меня. Вы как ведущий ардуино версии передачи "Жди меня" Люблю все ваши ответы !!! Это Большой скачок ваши ответы.
У 74HC595 есть такая ножка как "Output Enable" и при подаче туда высокого уровня все выходы регистра переводятся high-impedance state. Таким образом погасить светодиоды одной командой вполне возможно.
Ну так напишите конкретно, как выглядит эта команда для такой (достаточно стандартной) схемы:
asam, в типовой схеме включения 595 регистра (к Ардуино) пин OE сидит на земле. Если Вы в этом сомневаетесь, наберите в Гугле "Ардуино 74HC595", переключите в режим картинок и подведите статистику.
И такое включение, надо сказать, вполне оправдано, ибо сдвиговые регистры обычно используют, когда не хватает пинов, поэтому для управлением регистром задействуют минимально возможное число пинов контроллера. Пин ОЕ в число этих пинов явно не попадает.
Соответственно команды для того, чтобы "подать высокий уровень" на пин микросхемы, который не подсоединен ни к какому пину МК, зато накоротко посажен на землю, в природе не существует.
Поэтому Ваша рекомендация без специальных оговорок, что для ее реализации скорее всего потребуется переделка схемы, явно некорректна.
А Ваш выпад в сообщении №185 вообще в рамках здравого смысла необъясним.
Позволю себе процитировать ваш пост с которого все началось:
andriano пишет:
Еще раз: если светодиоды подключены к сдвиговым регистрам, а не к "регистрам и ножкам mega2560", то никакой "командой регистрам и ножкам mega2560" их погасить нельзя. Должна быть достаточно длинная последовательность переключений ножек контроллера, чтобы передать необходимые данные всем светодиодам (по последовательному интерфейсу).
Как видете, речь идет о сдвиговых регистрах per se и ни "типовые" ни какие другие схемы подключения не упоминаются. А как только я казал, вам, что сдвиговый регистр может "погасить все светодиоды" если подать высокий уровень на OE, вы начали тыкать мне схемой где ОЕ заземлен.
Myfriend тоже не упоминал схему включения. И откуда вы знаете есть ли у него свободная ножка для управления ОЕ, если понадобится, или нет. То есть ваше предложение "Ну так напишите конкретно, как выглядит эта команда для такой (достаточно стандартной) схемы" было чистой воды демагогией. А у меня на нее аллергия.
Восхищаюсь советами andriano, вы для меня самый опытный и я свой голос отдаю вам!
Ваши советы настолько уникальны все, и успешно удалось за тысячные секунды погасить 200 светодиодов, отправив лишь одну команду по вашему совету светодиодам, при получении команды "off" через сериал порт ардуино все команды выполнила как одну, а не получала 200 команд для каждого светодиода. Казалось бы просто и самому уже понимая механизм разобраться, но без вас никогда бы не дойти до этого. Очень вам благодарен, низкий вам поклон, вы старались давать много ответов, уделяли ваше внимание. Нет слов отблагодарить вас. Вы такая умница! Спасибо вам andriano! Тысячи спасибо! Спасибо за каждый ваш ответ. Я с нетерпением ждал каждого вашего ответа. Вы столько помогли! Спасибо ещё раз и ещё раз! andriano вы большая умница!
Под столом! Это что. Мне тут один товарищ схему прислал. Ардуино, I2c расширитель + пара hc595 к 27с512 и всё. Можно читать BIOS и эмулировать ПК... А вы о каком то тривиальном гашении светодиодов одной командой.)))
Ребят, я конечно дико извиняюсь, что влажу со своими 2 копейками, но у меня просто порвался шаблон.....
Я так понимаю есть 8 лампочек и 8 выключателей к этим лампочкам... причем выключатели нормально замкнутые, когда нажимаеш на выключатель то цепь разрывается и лампочка гаснет, отпускаеш выключатель, цепь замыкается и лампочка загорается...
Причем тут вообще ардуино, схемы, программы и прочий бред на 4 страницы? Такими темпами, скоро начнете на держатель туалетной бамаги сервомотор прикручивать.. Но там хоть будет смысл какой то, типа по команде голосовой бамажка отматывалась что бы..
гы гы
Есть такая штука как мульти руль от BMW 3 , и на нём 10 кнопок, а шлей всего 6 контактов из которых 2 на аирбег и два на сигнал, вот и скажите каким образам можно это решить без контроллера если туда нереально запихнуть ещё 10 проводов ))))
Есть такая штука как мульти руль от BMW 3 , и на нём 10 кнопок, а шлей всего 6 контактов из которых 2 на аирбег и два на сигнал, вот и скажите каким образам можно это решить без контроллера если туда нереально запихнуть ещё 10 проводов ))))
Элементарно. нужно просто купить сразу БМВ с нужным рулем... а не пытаться из жигулей методом допила напильником сделать БМВ.
представил как вам в процесе крвиого допила бахнет подушкой в голову... :) пилите Шура, пилите.
и вообще мне казалось что если кнопок больше, а проводков всего 2.. то скорее всего там уже как то решено это апаратно.. какой смысл огород городить? скорее всего там реализован CANBUS.. зачем лисапед изобретать. непонятно сапсем.
Есть такая штука как мульти руль от BMW 3 , и на нём 10 кнопок, а шлей всего 6 контактов из которых 2 на аирбег и два на сигнал, вот и скажите каким образам можно это решить без контроллера если туда нереально запихнуть ещё 10 проводов ))))
Элементарно. нужно просто купить сразу БМВ с нужным рулем... а не пытаться из жигулей методом допила напильником сделать БМВ.
представил как вам в процесе крвиого допила бахнет подушкой в голову... :) пилите Шура, пилите.
и вообще мне казалось что если кнопок больше, а проводков всего 2.. то скорее всего там уже как то решено это апаратно.. какой смысл огород городить? скорее всего там реализован CANBUS.. зачем лисапед изобретать. непонятно сапсем.
А у нас в России большинство так и делаю лучше купим за рубежом готовое чем изобретать что то у себя.
Да и подушку я не трогал она на своём шлейфе и весит , а вот всё остальное у меня и сигнал и автомагнитолла и ещё куча функций управляется через TX –RX и всё чудесно работает хоть и на тазике с рулём от бехи)))
Извините конечно но если бы все в мире рассуждали как вы и не лезли не в какие огороды то я думаю мы бы ездили до сих пор на лошадях
И смотрели черно-белые ламповые телевизоры сидя на кресле качалке ))))
Ребят, я конечно дико извиняюсь, что влажу со своими 2 копейками, но у меня просто порвался шаблон.....
Я так понимаю есть 8 лампочек и 8 выключателей к этим лампочкам... причем выключатели нормально замкнутые, когда нажимаеш на выключатель то цепь разрывается и лампочка гаснет, отпускаеш выключатель, цепь замыкается и лампочка загорается...
Причем тут вообще ардуино, схемы, программы и прочий бред на 4 страницы? Такими темпами, скоро начнете на держатель туалетной бамаги сервомотор прикручивать.. Но там хоть будет смысл какой то, типа по команде голосовой бамажка отматывалась что бы..
гы гы
уважаемый Puhlyaviy!
в том то и дело что Вы не правильно (как мне кажеться )все понимаете.
На примере с лампочками и с выключателями я пытаюсь разобраться и понять как работать с сдвиговыми регистрами. а потом уже применить эти знания для реализации в более сложных устройствах.
Если у Вас эти знания имеются - поделитесь с другими .
Или быть может я ошибаюсь и этот форум только для прожженых профи -програмеров и начинающим тут делать нечего?
Да и подушку я не трогал она на своём шлейфе и весит , а вот всё остальное у меня и сигнал и автомагнитолла и ещё куча функций управляется через TX –RX и всё чудесно работает хоть и на тазике с рулём от бехи)))
Извините конечно но если бы все в мире рассуждали как вы и не лезли не в какие огороды то я думаю мы бы ездили до сих пор на лошадях
И смотрели черно-белые ламповые телевизоры сидя на кресле качалке ))))
пойду руль от лисапеда прикручу к лошади. никто не подскажет как мне тормоза передние задние запрограмировать и и переключатель для скоростей :)
Конец 00000001 начало
все работает как мне надо. Но есть одно но...
при нажатии первой загорается последний лед , а при нажатии последней кнопки - первый лед на ардуино
то есть кнопки считываются в обратном порядке.
Почему?
Когда мы нажимаем на 1 кнопку «А» регистра он выдаёт сигнал , 00000001 восемь байт и соответственно в таком же порядке он приходит к ардуино то есть получается
Конец 00000001 начало
87654321
Вроде бы так )) хотя я в этом деле сам то недавно
Парни, здравствуйте, у меня вопрос немного не по теме, хотя и по теме....
В общем у меня ардуино принимает сигналы от другой и при поступлении Command 7 от передатчика, начинает считывать какой из выводов здвигового регистра нужно включить (строки 120-159)
Планирую доработать код, подскажите как лучьше... Задача зделать так чтобы помнилось состояние каждых нажатых и не нажатых кнопок, как я предпологаю, нужно в swith'е смотреть какой вывод нужно включить, проверить какие уже включеныы, и потом только отправить всё на сдвиг регистор....
У меня проблема: как менять, помнить, биты в 0b00000000 , типо 0b(12345678) помогите
Разобрался!!! всё помним и меняем биты, вот исходник если интересно
какой командой с ардуино обесточить регистры? пример - горели при включении диоды, а нужно командой их выключить все сразу 1 командой а не поштучно. Ардуино так умеет, если нажать serial port, она гасит сама все светодиоды, какая команда есть значит?
Нет такой команды.
Нет такой команды.
Спасибо большое! Может это сброс какой нибудь? Интересно как тогда объяснить если при нажатии в arduino ide кнопки зайти в serial port происходит сброс всех светодиодов которые горят, т.е. пины ардуино в том числе регистров подключенных к ардуино получают состояние LOW, что там может быть, знаю #13#15 это перенос строки, а там какой то ещё код поступает через USB к ардуино, так как ардуино подключаясь к ардуино ide переводит в состояние low свои пины все на момент инициализации подключения к ардуино ide. Несколько раз проверял, это не случайно.
Что вы курите? Какой перенос строки, какой код от USB? Сами подумайте - откель ваш комплюктор знает, что к ардуине подключено для того, чтобы дать код на сброс?
Конечно не случайно. При запуске сериал монитор дерганье DTR. A у большинства ардуин это приводит к ресету. Это специально так задумано.
Нет такой команды.
Спасибо большое! Может это сброс какой нибудь? Интересно как тогда объяснить если при нажатии в arduino ide кнопки зайти в serial port происходит сброс всех светодиодов которые горят, т.е. пины ардуино в том числе регистров подключенных к ардуино получают состояние LOW, что там может быть, знаю #13#15 это перенос строки, а там какой то ещё код поступает через USB к ардуино, так как ардуино подключаясь к ардуино ide переводит в состояние low свои пины все на момент инициализации подключения к ардуино ide. Несколько раз проверял, это не случайно.
Самое простое (в Вашем случае) перевести все пины в состояние LOW циклом. Это займет несколько десятков мкс (сотые доли мс), тогда как глаз (наблюдающий светодиоды) имеет инерционность, исчисляемыми десятками мс (т.е. примерно в 1000 раз больше). Так что ни Вы, ни видеокамера этой "неодновременности" никак не почувствуете.
перевести все пины в состояние LOW циклом.
очень нужно их быстро перевести в такое состояние, пока дельфи программа их через serial 180 шт. отправляет циклом поочередно из combobox (там команды означают погасить пин1 пин2 и т.д. 180 шт. это очень долго. секунды 3-5, если быстрее отправлять не успевает обрабатывать mega2560 и светодиоды зависают не выключаясь. Ардуино отлавливает пришедшие команды, и гасит названные пины с ПК. Но это явно длинный способ и самый примитивный. На все светодиоды не менее 5 сек. а нужно погасить их ну хотя бы за 1 сек. было бы большим скачком. Так понимаю цикл должен быть в mega2560 самой, что бы ей не пришлось тратить времени из serial 180 команд пришедших каждую искать и выключать. Было бы замечательно просто погасить какой нибудь одной командой, разгрузив serial от 180 команд. Ардуино ide это делает в 1 клик если нажимать serial port monitor, ардуино научена принимать слова, как ей приняв например слово "off" погасить все светодиоды разом как можно скорее. В каком направлении идти. Сделать loop так понимаю в ардуино самой вместо дельфи, но как не нагородить очередной огород. Ткните носом пожалуйста. Вот serial monitor мгновенно их гасит всегда. Только кликнуть мышкой сразу все разом гаснут. Но как так и не удалось сделать. Поштучно гасятся. Каждый день нужно их гасить, и время приходится ждать пока они гаснут.
какой командой с ардуино обесточить регистры?
собрать все ноги EN (enable) на одну ногу МК и подавать на нее такую команду.
А вообще о какой схеме речь? что в железе? я просто запутался
MYFRIEND, а так пробовали?
http://arduino.ru/forum/programmirovanie/programmnyi-reset
перевести все пины в состояние LOW циклом.
Ткните носом пожалуйста. Вот serial monitor мгновенно их гасит всегда. Только кликнуть мышкой сразу все разом гаснут. Но как так и не удалось сделать. Поштучно гасятся. Каждый день нужно их гасить, и время приходится ждать пока они гаснут.
Повторяю еще раз, сериал монитор просто устраивает ардуине полный сброс и программа там начинает выполняться с 0 заново. Если вас такой вариант гашения светодиодов устраивает, то посмотрите как из Дельфи манипулировать сигналом DTR на используемом вами сериал порте. И будет вам счастье.
очень нужно их быстро перевести в такое состояние, пока дельфи программа их через serial 180 шт. отправляет циклом поочередно из combobox (там команды означают погасить пин1 пин2 и т.д. 180 шт. это очень долго. секунды 3-5, если быстрее отправлять не успевает обрабатывать mega2560 и светодиоды зависают не выключаясь. Ардуино отлавливает пришедшие команды, и гасит названные пины с ПК. Но это явно длинный способ и самый примитивный. На все светодиоды не менее 5 сек. а нужно погасить их ну хотя бы за 1 сек. было бы большим скачком. Так понимаю цикл должен быть в mega2560 самой, что бы ей не пришлось тратить времени из serial 180 команд пришедших каждую искать и выключать. Было бы замечательно просто погасить какой нибудь одной командой, разгрузив serial от 180 команд. Ардуино ide это делает в 1 клик если нажимать serial port monitor, ардуино научена принимать слова, как ей приняв например слово "off" погасить все светодиоды разом как можно скорее. В каком направлении идти. Сделать loop так понимаю в ардуино самой вместо дельфи, но как не нагородить очередной огород. Ткните носом пожалуйста. Вот serial monitor мгновенно их гасит всегда. Только кликнуть мышкой сразу все разом гаснут. Но как так и не удалось сделать. Поштучно гасятся. Каждый день нужно их гасить, и время приходится ждать пока они гаснут.
1. Откуда вдруг взялась Делфи? Раньше о ней речь не шла.
2. Откуда взялось 180 пинов? Ни в одном контроллере Ардуино такого количества отродясь не было. Максимум - 70.
3. "быстро" и "очень долго" оставьте для художестенных произведений, в технике должны быть конкретные цифры. Но для конкретных цифр нужно конкретное схемное решение. А оно неизвестно (см. п. 2)
Идем дальше.
Чтобы с ПК (персонального компьютера) управлять светодиодами, подключенными к Ардуино, нужно 3 вещи:
1. Программа на ПК (например, на Делфи), которая будет посылать нужные команды Ардуино.
2. Скетч (программа) на Ардуино, которая будет принимать и выполнять команды.
3. Протокол обмена, по которому будут передаваться команды от ПК к Ардуино и, возможно, какая-то информация в обратном направлении, т.е. от Ардуино в ПК.
Собственно, желаемое (одновременное гашение всех светодиодов в количестве больше сотни) наиболее прямым методом решается присутствием в протоколе соответствующей команды.
Так что, думаю, в каком направлении идти, теперь стало понятно.
Поскольку от Вас никакой конкретики не поступало, больше по этому поводу ничего сказать нельзя.
Могу дать очень грубую оценку для случая, если светодиоды подключены через 595 регистры - даже при самой неоптимальной реализации гашения через shiftOut() это не должно занимать более 0.005с.
какой командой с ардуино обесточить регистры? пример - горели при включении диоды, а нужно командой их выключить все сразу 1 командой а не поштучно. Ардуино так умеет, если нажать serial port, она гасит сама все светодиоды, какая команда есть значит?
Придётся тебе "напрячь" мозг и изучить Ассемблер. Уотт тогда возможно даже казалось-бы невозможное, вытворяй "штохошЪ" с дурдуиной )))
Нет такой команды.
"датыШо)))" Шлёшь в порт ОДИН БАЙТ за ОДИН такт и "фсёсдюжит" ))) Чё, показать пример? Ссылки на сторонние форумы приветствуются? Не копипаста, МОЁ, личное. )))))
Нет такой команды.
"датыШо)))" Шлёшь в порт ОДИН БАЙТ за ОДИН такт и "фсёсдюжит" ))) Чё, показать пример? Ссылки на сторонние форумы приветствуются? Не копипаста, МОЁ, личное. )))))
1. Ардуина заранее прошита конкретным скетчем: здесь и одного байта много - можно сделать так, что все необходимое будет выполняться вообще без команды - автоматически.
2. Ардуина не имеет прошивки (прошит только загрузчик) либо прошита произвольным скетчем, который мы изменить не в силах, - вот для этого варианта и приведите, пожалуйста, пример.
если светодиоды подключены через 595 регистры - даже при самой неоптимальной реализации гашения через shiftOut() это не должно занимать более 0.005с.
Спасибо большое! Всё как вы сказали, 595 регистры высылают shiftOut поштучно каждому светодиоду и кроме 595 регистров все ножки задействованы mega2560 в том числе и аналоговые, несколько секунд гаснут светодиоды. Я бы сказал медленно. Неужели нельзя их быстро потушить какой нибудь командой регистрам и ножкам mega2560.
если светодиоды подключены через 595 регистры - даже при самой неоптимальной реализации гашения через shiftOut() это не должно занимать более 0.005с.
Спасибо большое! Всё как вы сказали, 595 регистры высылают shiftOut поштучно каждому светодиоду и кроме 595 регистров все ножки задействованы mega2560 в том числе и аналоговые, несколько секунд гаснут светодиоды. Я бы сказал медленно. Неужели нельзя их быстро потушить какой нибудь командой регистрам и ножкам mega2560.
Но, если контроллер работает на частоте 16 МГц, то 200 светодиодов даже при неоптимальном программировании можно поргасить за тысячные доли секунды.
Что Вам непонятно то?
Еще раз: если светодиоды подключены к сдвиговым регистрам, а не к "регистрам и ножкам mega2560", то никакой "командой регистрам и ножкам mega2560" их погасить нельзя. Должна быть достаточно длинная последовательность переключений ножек контроллера, чтобы передать необходимые данные всем светодиодам
У 74HC595 есть такая ножка как "Output Enable" и при подаче туда высокого уровня все выходы регистра переводятся high-impedance state. Таким образом погасить светодиоды одной командой вполне возможно.
Происходит это ежели в прошивке и подключении заложено... А не при любом случайном ребуте МК, как втирает нам Майфренд.
Происходит это ежели в прошивке и подключении заложено... А не при любом случайном ребуте МК, как втирает нам Майфренд.
Ну, при соответсвующем подключении (ОЕ заведена на выход ардуины и есть подтяжка) любой ресет будет "гасить" и без поддержки в прошивке
Я не великий специалист, конечно, но AVR разве не сам свои ноги в Hi-Z ставит на старте? На них высокий уровень возникает без дополнительных манипуляций?
Да, после ресета выводы ставятся в Hi-Z, но это не высокий уровень, а "плавающий". Как это будет воспринято другим входом подключенным к выводу в HI-Z зависит от массы факторов.
У 74HC595 есть такая ножка как "Output Enable" и при подаче туда высокого уровня все выходы регистра переводятся high-impedance state. Таким образом погасить светодиоды одной командой вполне возможно.
PS. Проблему ТС я вижу исключительно в том, что он умудрился написать код, который работает примерно в 1000 раз медленнее, чем средний неоптимизированный код для Ардуины, но вместо того, чтобы внести исправления в свой код, ищет "волшебную команду".
можно поргасить за тысячные доли секунды.
спасибо большое! кажется до меня дошло!
время mega2560 уходило на то что бы для 200 светодиодов кадому при получении команды из serial перекапывать из 200 вариантов ножек одну, по вашему совету отправлю ка в serial такую команду "alloff"
и увидя данную команду mega2560 одним махом выключит их, ничего нигде не переискивая получив команду сразу отключит все ножки разом. До этого ардуино получив из serial 200 команд !!! каждую из 200 искала среди 200!!! Фууухх.. Сколько ардуино пришлось пережить из за кривой оптимизации кода так понимаю. Теперь ардуино получит лишь одну команду, получив которую она пойдёт выключать все 200 светодиодов. А не искать из 200 полученных команд для каждой решение из 200 вариантов.
Большое вам спасибо многоуважаемый andriano просто нет слов отблагодарить вас. Вы помогли найти решение как помогают на передаче Жди меня. Вы как ведущий ардуино версии передачи "Жди меня" Люблю все ваши ответы !!! Это Большой скачок ваши ответы.
Опять веб-погроммист прокрался на форум...
Опять веб-погроммист прокрался на форум...
причем тут "веб-программист"? - тут клиника в медицинском смысле...
У 74HC595 есть такая ножка как "Output Enable" и при подаче туда высокого уровня все выходы регистра переводятся high-impedance state. Таким образом погасить светодиоды одной командой вполне возможно.
Скажите, сэр, вы дурак или демагог?
Скажите, сэр, вы дурак или демагог?
Скажите, сэр, вы дурак или демагог?
Если вам удобнее так считать, то не буду спорить. Но вы все же скажите -
Вы не пониманимаете значение выражения "подать высокий уровень" или не разбираетесь в принципиальных схемах?
asam, в типовой схеме включения 595 регистра (к Ардуино) пин OE сидит на земле. Если Вы в этом сомневаетесь, наберите в Гугле "Ардуино 74HC595", переключите в режим картинок и подведите статистику.
И такое включение, надо сказать, вполне оправдано, ибо сдвиговые регистры обычно используют, когда не хватает пинов, поэтому для управлением регистром задействуют минимально возможное число пинов контроллера. Пин ОЕ в число этих пинов явно не попадает.
Соответственно команды для того, чтобы "подать высокий уровень" на пин микросхемы, который не подсоединен ни к какому пину МК, зато накоротко посажен на землю, в природе не существует.
Поэтому Ваша рекомендация без специальных оговорок, что для ее реализации скорее всего потребуется переделка схемы, явно некорректна.
А Ваш выпад в сообщении №185 вообще в рамках здравого смысла необъясним.
Позволю себе процитировать ваш пост с которого все началось:
Еще раз: если светодиоды подключены к сдвиговым регистрам, а не к "регистрам и ножкам mega2560", то никакой "командой регистрам и ножкам mega2560" их погасить нельзя. Должна быть достаточно длинная последовательность переключений ножек контроллера, чтобы передать необходимые данные всем светодиодам (по последовательному интерфейсу).
Как видете, речь идет о сдвиговых регистрах per se и ни "типовые" ни какие другие схемы подключения не упоминаются. А как только я казал, вам, что сдвиговый регистр может "погасить все светодиоды" если подать высокий уровень на OE, вы начали тыкать мне схемой где ОЕ заземлен.
Myfriend тоже не упоминал схему включения. И откуда вы знаете есть ли у него свободная ножка для управления ОЕ, если понадобится, или нет. То есть ваше предложение "Ну так напишите конкретно, как выглядит эта команда для такой (достаточно стандартной) схемы" было чистой воды демагогией. А у меня на нее аллергия.
Myfriend тоже не упоминал схему включения. И откуда вы знаете есть ли у него свободная ножка для управления ОЕ, если понадобится, или нет.
Myfriend тоже не упоминал схему включения. И откуда вы знаете есть ли у него свободная ножка для управления ОЕ, если понадобится, или нет.
и ничего не понятно, точной схемы для понимания так и нет (#167) ...
можно погасить за тысячные доли секунды.
Восхищаюсь советами andriano, вы для меня самый опытный и я свой голос отдаю вам!
Ваши советы настолько уникальны все, и успешно удалось за тысячные секунды погасить 200 светодиодов, отправив лишь одну команду по вашему совету светодиодам, при получении команды "off" через сериал порт ардуино все команды выполнила как одну, а не получала 200 команд для каждого светодиода. Казалось бы просто и самому уже понимая механизм разобраться, но без вас никогда бы не дойти до этого. Очень вам благодарен, низкий вам поклон, вы старались давать много ответов, уделяли ваше внимание. Нет слов отблагодарить вас. Вы такая умница! Спасибо вам andriano! Тысячи спасибо! Спасибо за каждый ваш ответ. Я с нетерпением ждал каждого вашего ответа. Вы столько помогли! Спасибо ещё раз и ещё раз! andriano вы большая умница!
Под столом! Это что. Мне тут один товарищ схему прислал. Ардуино, I2c расширитель + пара hc595 к 27с512 и всё. Можно читать BIOS и эмулировать ПК... А вы о каком то тривиальном гашении светодиодов одной командой.)))
делал плакат подключения 595 регистров может кому нужен очень