Так ответьте по человечески что да как, если ответ знаете .Зачем строить из себя не известно что .?
Ты, милое дитя, в каком ВУЗе учишься? В смысле КТО тебе ТАК сформулировал задание? Это щоб знать и туда мое дите не попало кады подрастеть.. :)
Цитата:
Изучил меня некий вопрос так вот как по внешнему прерыванию трех последовательных очень коротких импульсов запустить три независимых таймера и чтоб по окончанию каждого из таймеров выполнить свое действие и сбросить таймер ? Подскажите а то мочи больше нет что я только не пробовал но так чтоб три не зависимо друг от друга не получается .
Излагай внятно и четко, с примерами:
1. "что я только не пробовал" -- вот конкретно, чего НЕ пробовал и укажи;
2. "но так чтоб три не зависимо друг от друга не получается" -- вот и покажи КАК это у тебя НЕ получается (а то 3.14еть все горазды, всё там получается у тебя, просто ты в себя не веришь ни разу);
3. Что это такое (но это скорее всего к тому дебилу, что давал задание):
а) "сбросить таймер" -- куда сбросить, в мусорку? б) "чтоб по окончанию каждого из таймеров" -- что такое это "окончание каждого из таймеров" .. хде оно.. в) "очень коротких импульсов" -- это как? Полчаса - короткий импульс, не? А пару пикосекунд - сойдет? Вот так прямо и скажи "скока вешать в граммах". г) Что за "внешнее прерывание" из трех коротких импульсов .. оно что, с первого разу не попадает, как пушкари на вход в гавань? Обязателен салют из трех импульсов?
В общем, если хочешь чтобы тебе помогли, мил дитя, то ответствуй полноценно на поставленные вопросы. Или катись в Армию. Там тебя этот вопрос измучает ишо сильней. :)
Смысл собственно в чем. Есть три фазы сети, есть 6 тиристора на которые нужно выдавать управляющие импульсы. Есть три синхроимпульса от пересечения каждой из фаз. Задача по первому синхроимпульса подождать какое-то время которое можно менять (чем больше ждем тем меньше выходная мощность ) и так по всем трем. Все три импульса подключены на вход прерывания через диодное или то Есть каждый из них вызывает прерывание.
Также каждый из импульсов подключен к своему цифровому порту чтоб в обработчике прерывания определять по какому импульсы прерывание. Все банально просто но если мы ждем по первому импульсу максимально долго то уже приходит второй и тут и.есть суть проблемы. То Есть надо либо три отдельных таймера на которые не как не будет влиять прерывание либо три отдельных ардуины .?
Ну то есть, Вы хотите сказать, что задание ставил вовсе не дебил, а это Вы его так особенно интерпретировали? И да, без внятного ответа на ВСЕ остальные вопросы - тут помоще6й не бываить .. так шта .. выкладывайте "что пробовали", "как оно не получилось" и т.д. или "в армию" .. :)
Насчет задания это моя идея. Насчет интерпретировали не когда не был буквоедом. Пробовал создавал функцию которая вызывалась прерыванием в ней определял по какому входу прерывания ждал и давал импульс ждал с помощью делей . Пробовал в функции поднимать флаг а в лупе ждал с помощью миллис и давал импульс. Лучше всего работает первый вариант но в месте где задержка по первому импульсу превышает время прихода второго импульсы начинаю пропадать .
Всем привет.
В этой теме, в самом начале вроде озвучена сама идея как завести три таймера на независимое
Включение трех устройств. Это все работает и по сей день. Проблем нет. Там даже скетч есть. Так что копайте в эту сторону.
Простейший пример вроде и есть.
Насчет задания это моя идея. Насчет интерпретировали не когда не был буквоедом. Пробовал создавал функцию которая вызывалась прерыванием в ней определял по какому входу прерывания ждал и давал импульс ждал с помощью делей . Пробовал в функции поднимать флаг а в лупе ждал с помощью миллис и давал импульс. Лучше всего работает первый вариант но в месте где задержка по первому импульсу превышает время прихода второго импульсы начинаю пропадать .
Вы сознательно тупите и ожидаете тролления в свой адрес?!? Я же чистым русским текстом, черным по белому накатал: излагайте что делали .. хде?!? Примеры чего делали: схема, скетчи, варианты, результаты .. "умучился" он панимаишь ли.. ты не начинал даже!
Используя delay невозможно решить данную задачу. Используйте таймеры и их прерывания для генерации импульсов. Используйте возможности процессора а не ардуины. Если не знаете как , учитесь. Задача сложная. То что вы привели в качестве примеров детский лепет. Эту задачу можно решить только при прямом управлении регистрами процессора.
Я же просил откомментировать каждую строчку этого чудо-кода .. не хотите или не знаете? Все-таки откомментируйте, может Вам самому станет понятно что flag у вас НЕ устанавливается НИГДЕ в приведенном куске непойми чего, зато ПРОВЕРЯЕТСЯ с какого-то перепугу. А ещё заметьте что ПОКА ИДЕТ прерывание (исполняется код в обработчике), то прерывания (все остальные) - ЗАКРЫТЫ, и соответственно устанавливая Dimmer Вы регулируете в общем-то время запрещенного прерывания до .. 6мсек.
Вообще-то 50Гц это период в 20мсек. 1/2 периода = 10мсек. Три фазы имеют сдвиг 120* или 1/3 периода или .. 6.67мсек. То есть, вроде как успевают ваши задержки, но что называется "на пределе".
Кстати, а хде ваша схема "диодного ИЛИ" которая подает три сигнала на один вход прерывания?
И ещё конструкции типа: if( мойПин ){ нечтоПоднять() }else{ этожеНечтоОпустить() } работают точно как Вы ожидали?
Пример:
1. приходит прерывание по фазеА (первый блок): "да" - сначала ждем Диммер, и только ПОТОМ поднимаем пинДляА, и только потом убеждаемся что пинДляВ и пинДляС надо сбюросить.
2. приходит прерывание по фазеС (последний блок): фигвам, пинДляА сбрасываем СРАЗУ, снова фигвам и пинДляВ сбрасываем практически следом, "да" - только теперь ЖДЕМ ваш Диммер и потом поднимаем пинДляС
Ощущаете "что-то не так в датском королевстве" и как несинхронно работает этот код, в зависимости от фазы? (А ведь просил откомментарить каждую строчку)
Давайте закончим разбор чуда из поста №64, вопросы к которому и пример его работы содержится в посте №84. Перечитайте пост №84 вдумчиво и от Вас требуется:
а) схема вашего "диодного ИЛИ";
б) вдумчивый ответ на пример работы и/или КАК оно должно нормально работать .. что Вы хотели получить от этого кода.
Диодное или три импульса с каждой фазы приходят каждая на анод своего диода диодов три катоды диодов соединены вместе и через резистор притянуты на землю . С катодов диодов подключен вход прирывания а с анодов подключены три цифровых входа . Получается что любая из фаз вызывает прирывания а по трем цифровым входам нужно определять какая именно из фаз вызвала прерывания и давать импульс на свой выход.
int ledPin = 8;
int ledState = LOW;
int flag =0;
long previousMillis = 0;
long interval = 2000;
void setup() {
pinMode(ledPin, OUTPUT);
attachInterrupt(0, blink,RISING);
}
void blink(){
if(digitalRead(6)==HIGH){
flag = 1;
}
else {
flag = 0;
}
}
void loop() {
unsigned long currentMillis = micros();
if(currentMillis - previousMillis > interval) {
previousMillis = currentMillis;
if ( flag == 1){
digitalWrite(8,1);
}
else {
digitalWrite(8,0);
}
Диодное или три импульса с каждой фазы приходят каждая на анод своего диода диодов три катоды диодов соединены вместе и через резистор притянуты на землю . С катодов диодов подключен вход прирывания а с анодов подключены три цифровых входа . Получается что любая из фаз вызывает прирывания а по трем цифровым входам нужно определять какая именно из фаз вызвала прерывания и давать импульс на свой выход.
Да он с трех Zero-Cross-ов сигналы посадил на три разных пина и эти же сигналы через диоды завел на пин с внешним прерыванием. В обработчике проверяет, какой из пинов активный (т.е. кто вызывал прерывание), а потом начинает фигней страдать - вместо того, чтобы начинать отсчитывать от этого момента, зачем-то проверяет по флагу раз в 2мс было ли прерывание и пульсирует в выход. фунции местами переставляет туда-сюда, как будто от этого что-то поменяется.
А когда должен опускаться ваш выходной пин? Поднимается он через некоторый интервал после входого, это вроде написано. А когда он должен опуститься? Или он должен подняться на некоторое определенное время? Может должен опуститься, когда придет второе прерывание по тому же входу? Что-то в постаноке недодумано.
Опускается сразу как только по входу LOW. Не совсем пойму миллис считает постоянно то есть получается что все что после него будет происходить с указанным интервалом циклично. А надо если флаг 1 то посчитали включили отключили. То есть условие надо до него ? Подскажите как правильно этот момент написать ?
Опускается сразу как только по входу LOW. Не совсем пойму миллис считает постоянно то есть получается что все что после него будет происходить с указанным интервалом циклично. А надо если флаг 1 то посчитали включили отключили.
После того как "посчитали - включили - отключили" - надо сбросить флаг в ноль. И ничего циклично происходить не будет, пока флаг снова не поднимется. И что тут сложного?
Опять в трех соснах заблудились. Который раз повторяю - не ваше это. У вас логического мыгшления в принципе нет.
Каким образом в обработчике прерывания время расчитывать? Там миллис не работает.
Вот вам пример начала счета задержки из обработчика. Но в нем есть пара неприкрытых дырок, связанных с обработкой прерываний и изменяемыми в нем переменными, которые придется найти. И, конечно, как вам уже написали, задержки для вашей задачи делаются иначе. Я с высоким электричеством не работаю, но тем, кто написал про таймеры - доверяю.
Ты, милое дитя, в каком ВУЗе учишься? В смысле КТО тебе ТАК сформулировал задание? Это щоб знать и туда мое дите не попало кады подрастеть.. :)
Излагай внятно и четко, с примерами:
1. "что я только не пробовал" -- вот конкретно, чего НЕ пробовал и укажи;
2. "но так чтоб три не зависимо друг от друга не получается" -- вот и покажи КАК это у тебя НЕ получается (а то 3.14еть все горазды, всё там получается у тебя, просто ты в себя не веришь ни разу);
3. Что это такое (но это скорее всего к тому дебилу, что давал задание):
а) "сбросить таймер" -- куда сбросить, в мусорку? б) "чтоб по окончанию каждого из таймеров" -- что такое это "окончание каждого из таймеров" .. хде оно.. в) "очень коротких импульсов" -- это как? Полчаса - короткий импульс, не? А пару пикосекунд - сойдет? Вот так прямо и скажи "скока вешать в граммах". г) Что за "внешнее прерывание" из трех коротких импульсов .. оно что, с первого разу не попадает, как пушкари на вход в гавань? Обязателен салют из трех импульсов?
В общем, если хочешь чтобы тебе помогли, мил дитя, то ответствуй полноценно на поставленные вопросы. Или катись в Армию. Там тебя этот вопрос измучает ишо сильней. :)
Смысл собственно в чем. Есть три фазы сети, есть 6 тиристора на которые нужно выдавать управляющие импульсы. Есть три синхроимпульса от пересечения каждой из фаз. Задача по первому синхроимпульса подождать какое-то время которое можно менять (чем больше ждем тем меньше выходная мощность ) и так по всем трем. Все три импульса подключены на вход прерывания через диодное или то Есть каждый из них вызывает прерывание.
Также каждый из импульсов подключен к своему цифровому порту чтоб в обработчике прерывания определять по какому импульсы прерывание. Все банально просто но если мы ждем по первому импульсу максимально долго то уже приходит второй и тут и.есть суть проблемы. То Есть надо либо три отдельных таймера на которые не как не будет влиять прерывание либо три отдельных ардуины .?
Ну то есть, Вы хотите сказать, что задание ставил вовсе не дебил, а это Вы его так особенно интерпретировали? И да, без внятного ответа на ВСЕ остальные вопросы - тут помоще6й не бываить .. так шта .. выкладывайте "что пробовали", "как оно не получилось" и т.д. или "в армию" .. :)
Насчет задания это моя идея. Насчет интерпретировали не когда не был буквоедом. Пробовал создавал функцию которая вызывалась прерыванием в ней определял по какому входу прерывания ждал и давал импульс ждал с помощью делей . Пробовал в функции поднимать флаг а в лупе ждал с помощью миллис и давал импульс. Лучше всего работает первый вариант но в месте где задержка по первому импульсу превышает время прихода второго импульсы начинаю пропадать .
Всем привет.
В этой теме, в самом начале вроде озвучена сама идея как завести три таймера на независимое
Включение трех устройств. Это все работает и по сей день. Проблем нет. Там даже скетч есть. Так что копайте в эту сторону.
Простейший пример вроде и есть.
А ежели в ардуине только три таймера и один из них уже заведен - его сначала развести надо?
Вопрос в том как ? И возможно ли это или все же делать на трех Ардуинах?
Нет, на трёх мало. Лучше на шести. Тиристоров же шесть!
Либо по теме либо засунся от куда вылез.
Да, да. Тебя забыл спросить что мне делать.))) Писать без ошибок сначала научись. ППЦ!
Вы сознательно тупите и ожидаете тролления в свой адрес?!? Я же чистым русским текстом, черным по белому накатал: излагайте что делали .. хде?!? Примеры чего делали: схема, скетчи, варианты, результаты .. "умучился" он панимаишь ли.. ты не начинал даже!
Aрдуина не догма. Если не использовать delay & millis, то можно использовать все три таймера.
Самое рабочее было вот так
Но как только время задержки превышает по времени прихода следующей фазы все часть импульсов пропадают .
Потом делал вот так
поднимал флаг по прерыванию а влупе
Начало импульсов не смещалось при изминении интервала ?
?!? Этта .. чё? Попробуйте самостоятельно откомментировать каждую строчку кода что она по-вашему тут делает? Оч. любопытна. :)
Это вроде понятно.
Это непонятно совсем. Пересечения чего с чем?
Подождать и что сделать?
Как подключены? Нарисовали бы схему что ли на коленке, чтобы в угадайку не играть. Может в графике понятнее получится, чем в тексте.
Используя delay невозможно решить данную задачу. Используйте таймеры и их прерывания для генерации импульсов. Используйте возможности процессора а не ардуины. Если не знаете как , учитесь. Задача сложная. То что вы привели в качестве примеров детский лепет. Эту задачу можно решить только при прямом управлении регистрами процессора.
Ну хоть ссылку скиньте где почитать ??
Или примерчик какой ? Для старта так сказать.
http://narodstream.ru/programmirovanie-mk-avr/
http://narodstream.ru/avr-urok-10-tajmery-schetchiki-preryvaniya/
http://narodstream.ru/avr-urok-42-exint-ili-vneshnie-preryvaniya/
Вы писали что частота меняется. Скажите как в силовой сети это может произойти?
В силовой сети частота не идеальна 50 герц. И если прийдется подключать через генератор допусть в поле там тоже плюс минус пару герц .
Тоесть вы считаете что такую задачу можно решить только на с++ непосредственно ?
И типа так
не спасет?
Нет с++ это лишнее. Как раз наоборот. Чем меньше лишнего кода тем лучше. В идеале ассемблер, но и чистый си вполне пойдёт. Читайте уроки.
http://arduino.ru/forum/programmirovanie/attiny85-i-preryvanie
Прочитайте тему.
это для меня пока оч сложно . На языке ардуино не как ???
Я же просил откомментировать каждую строчку этого чудо-кода .. не хотите или не знаете? Все-таки откомментируйте, может Вам самому станет понятно что flag у вас НЕ устанавливается НИГДЕ в приведенном куске непойми чего, зато ПРОВЕРЯЕТСЯ с какого-то перепугу. А ещё заметьте что ПОКА ИДЕТ прерывание (исполняется код в обработчике), то прерывания (все остальные) - ЗАКРЫТЫ, и соответственно устанавливая Dimmer Вы регулируете в общем-то время запрещенного прерывания до .. 6мсек.
Вообще-то 50Гц это период в 20мсек. 1/2 периода = 10мсек. Три фазы имеют сдвиг 120* или 1/3 периода или .. 6.67мсек. То есть, вроде как успевают ваши задержки, но что называется "на пределе".
Кстати, а хде ваша схема "диодного ИЛИ" которая подает три сигнала на один вход прерывания?
И ещё конструкции типа: if( мойПин ){ нечтоПоднять() }else{ этожеНечтоОпустить() } работают точно как Вы ожидали?
Пример:
1. приходит прерывание по фазеА (первый блок): "да" - сначала ждем Диммер, и только ПОТОМ поднимаем пинДляА, и только потом убеждаемся что пинДляВ и пинДляС надо сбюросить.
2. приходит прерывание по фазеС (последний блок): фигвам, пинДляА сбрасываем СРАЗУ, снова фигвам и пинДляВ сбрасываем практически следом, "да" - только теперь ЖДЕМ ваш Диммер и потом поднимаем пинДляС
Ощущаете "что-то не так в датском королевстве" и как несинхронно работает этот код, в зависимости от фазы? (А ведь просил откомментарить каждую строчку)
Посмотрев на схему и учитывая написнное ранее:
Напрашивается вывод, что за 1 перид фазы (A) на один вход ардуины приходит 6 импульсов c одинаковой переодичностью.
Или всетаки задействованы 3 входа?
Опять какая-то угадайка...
В обработчике флаг поднимается просто не стал писать решил и так понятно. Вы имеете в виду ждем поднимаем влаг а только потом луп ?
Давайте закончим разбор чуда из поста №64, вопросы к которому и пример его работы содержится в посте №84. Перечитайте пост №84 вдумчиво и от Вас требуется:
а) схема вашего "диодного ИЛИ";
б) вдумчивый ответ на пример работы и/или КАК оно должно нормально работать .. что Вы хотели получить от этого кода.
Диодное или три импульса с каждой фазы приходят каждая на анод своего диода диодов три катоды диодов соединены вместе и через резистор притянуты на землю . С катодов диодов подключен вход прирывания а с анодов подключены три цифровых входа . Получается что любая из фаз вызывает прирывания а по трем цифровым входам нужно определять какая именно из фаз вызвала прерывания и давать импульс на свой выход.
Вот пробовал еще так ?
Это для одного канала .
Диодное или три импульса с каждой фазы приходят каждая на анод своего диода диодов три катоды диодов соединены вместе и через резистор притянуты на землю . С катодов диодов подключен вход прирывания а с анодов подключены три цифровых входа . Получается что любая из фаз вызывает прирывания а по трем цифровым входам нужно определять какая именно из фаз вызвала прерывания и давать импульс на свой выход.
Становится все понятнее и понятнее.
Да он с трех Zero-Cross-ов сигналы посадил на три разных пина и эти же сигналы через диоды завел на пин с внешним прерыванием. В обработчике проверяет, какой из пинов активный (т.е. кто вызывал прерывание), а потом начинает фигней страдать - вместо того, чтобы начинать отсчитывать от этого момента, зачем-то проверяет по флагу раз в 2мс было ли прерывание и пульсирует в выход. фунции местами переставляет туда-сюда, как будто от этого что-то поменяется.
Каким образом в обработчике прерывания время расчитывать? Там миллис не работает.
Отсчитывать.
А когда должен опускаться ваш выходной пин? Поднимается он через некоторый интервал после входого, это вроде написано. А когда он должен опуститься? Или он должен подняться на некоторое определенное время? Может должен опуститься, когда придет второе прерывание по тому же входу? Что-то в постаноке недодумано.
в прерывании старт, а отсчет в лупе
Опускается сразу как только по входу LOW. Не совсем пойму миллис считает постоянно то есть получается что все что после него будет происходить с указанным интервалом циклично. А надо если флаг 1 то посчитали включили отключили. То есть условие надо до него ? Подскажите как правильно этот момент написать ?
После того как "посчитали - включили - отключили" - надо сбросить флаг в ноль. И ничего циклично происходить не будет, пока флаг снова не поднимется. И что тут сложного?
Опять в трех соснах заблудились. Который раз повторяю - не ваше это. У вас логического мыгшления в принципе нет.
А 17. Строка это что по вашему ?
Вот примернаяя диаграмма для входов.
Можете, хотя бы для себя, нарисовать как должна выглядеть диаграмма выходов? В графике у вас лучше получается, чем в словах.
Вот вам пример начала счета задержки из обработчика. Но в нем есть пара неприкрытых дырок, связанных с обработкой прерываний и изменяемыми в нем переменными, которые придется найти. И, конечно, как вам уже написали, задержки для вашей задачи делаются иначе. Я с высоким электричеством не работаю, но тем, кто написал про таймеры - доверяю.