Разработки ecoins

Библиотеки для разных контроллеров

starshoy81
Лейтенант
Сообщения: 488
Зарегистрирован: 05.04.2016{, 23:30}
Репутация: 29
Откуда: Санкт-Петербург
Имя: Илья

Разработки ecoins

#1341

Сообщение starshoy81 » 09.10.2021{, 20:20}

o615ye161 писал(а):
09.10.2021{, 19:50}
при пропадании питания
импульсы с генератора тоже слетят и городить тоже много надо. А с часов с батарейкой ничего не слетает.
Чем будильник не устраивает?
будильник.PNG
Вот полив по времени на 40 мин со сторонним блоком ещё года от 2017 наверное.
полив по времени.PNG
Установка часов.
уст часов.PNG
Для скачивания вложений Вы должны быть зарегистрированы.

ecoins
Подполковник
Сообщения: 1264
Зарегистрирован: 12.02.2016{, 11:40}
Репутация: 216
Откуда: Шатура
Имя: Энвер

Разработки ecoins

#1342

Сообщение ecoins » 10.10.2021{, 08:09}

ecoins писал(а):
08.10.2021{, 19:13}
Генератор с такими возможностями не реализовывался.
Во многом из-за того, что такие режимы вполне удобно реализованы в стандартном таймере.
Многофункциональный генератор больше планировался для планирования задач и других сервисных функций. В качестве входа используются переменные int16_t.
Такой режим реализовать возможно, но вроде незачем.
Может быть будет к делителю фронтов со временем добавим делитель импульсов - тогда возможно будет реализовать каскадное деление импульсов.
o615ye161 писал(а):
08.10.2021{, 22:14}
Было бы круто, чтобы был многофункциональный блок работы с временем, иногда нужен суточный таймер с определенными интервалами работы, ну и многое другое.
Был не прав по стандартному генератором - внешние входы там только int.
В генератор ecoins добавил выбор формата входов (v16/v32), проверил на Arduino Nano.
FLProg_Test_GeneratorPulse.rar
Test_Pulse_1.png
На больших значениях должно работать.
-------------------
Для работы теста из первого поста потребуется скачать новые версии библиотек от 10.10.21
------------------
Успехов.
Для скачивания вложений Вы должны быть зарегистрированы.

GDAN7777
Сержант
Сообщения: 142
Зарегистрирован: 15.04.2020{, 06:19}
Репутация: 21
Имя: Vital

Разработки ecoins

#1343

Сообщение GDAN7777 » 10.10.2021{, 08:38}

ecoins писал(а):
10.10.2021{, 08:09}
Был не прав по стандартному генератором - внешние входы там только int.
Позвольте уточнить,генератор реализован программно или аппаратно?

ecoins
Подполковник
Сообщения: 1264
Зарегистрирован: 12.02.2016{, 11:40}
Репутация: 216
Откуда: Шатура
Имя: Энвер

Разработки ecoins

#1344

Сообщение ecoins » 10.10.2021{, 08:44}

GDAN7777 писал(а):
10.10.2021{, 08:38}
Позвольте уточнить,генератор реализован программно или аппаратно?
Программно.
---------------------
struct RT_HW_GENERATOR_EVENT_ID {uint32_t time; uint8_t dir=0; uint8_t meander:1, event:1;}; //--Для генератора меандров и событий;
bool RT_HW_BASE:: generatorPulse(RT_HW_GENERATOR_PULSE_ID &id, uint8_t EN, uint16_t timeON, uint16_t timeOFF){ //==Генератор импульсов (v16);
if(id.dir==0) {if(EN) {id.dir=3;} else {return 0;}}
if(id.dir==1) {if(millis()>=id.time) {id.time+=timeOFF; id.dir=2; return 0;} else {return 1;}}
if(id.dir==2) {if(millis()>=id.time) {id.dir=3;}}
if(id.dir>=3) {if(EN) {id.time=RT_HW_MILLIS+timeON; id.dir=1; return 1;}
else {id.dir=0; return 0;}} return 0;};
bool RT_HW_BASE:: generatorPul32(RT_HW_GENERATOR_PULSE_ID &id, uint8_t EN, uint32_t timeON, uint32_t timeOFF){ //==Генератор импульсов (v32);
if(id.dir==1) {if(millis()>=id.time) {id.time+=timeOFF; id.dir=2; return 0;} else {return 1;}}
if(id.dir==2) {if(millis()>=id.time) {id.dir=3;}}
if(id.dir>=3) {if(EN) {id.time=RT_HW_MILLIS+timeON; id.dir=1; return 1;}
else {id.dir=0; return 0;}} return 0;};
------------------------------------------------------
Вопрос к Sancho : нет в приведенной реализации подвохов с переполнением таймера?

o615ye161
Сержант
Сообщения: 145
Зарегистрирован: 19.12.2019{, 14:47}
Репутация: 2
Имя: Сергей

Разработки ecoins

#1345

Сообщение o615ye161 » 10.10.2021{, 22:49}

ecoins писал(а):
10.10.2021{, 08:09}
Для работы теста из первого поста потребуется скачать новые версии библиотек от 10.10.21
Благодарю, будем тестить

Аватара пользователя
Sancho
Полковник
Сообщения: 3810
Зарегистрирован: 25.12.2015{, 17:32}
Репутация: 528
Откуда: Ярославль.
Имя: Александр
Контактная информация:

Разработки ecoins

#1346

Сообщение Sancho » 11.10.2021{, 09:26}

ecoins писал(а):
10.10.2021{, 08:44}
Вопрос к Sancho : нет в приведенной реализации подвохов с переполнением таймера?
millis()>=id.time - очень неправильная вещь.
При сравнении, в отличии вычитания, использование "невидимого" старшего разряда не работает.
Т.е. в момент времени, когда значение, возвращаемое функцией millis() изменит своё значение
с 0xFFFFFFFF на 0х00000000, придёт не совсем ожидаемый результат.
Посему, самым правильным будет измерять "пройденное расстояние", и сравнивать с нужным, больше или меньше, по желанию.
Это вытекает из выше-упомянутого, а именно, например, 0х00000002 - 0xFFFFFFFE = 4,
где
0х00000002 - результат millis()
0xFFFFFFFE - например, id.time
и потом можем сравнить с ожидаемым, не прибавляя его заранее,
а Ваше использование if(millis()>=id.time) в таком случае вернёт нам else
Выполнение millis() занимает около 2us на 328/16м. Иногда, для удобства, проще один раз присвоить временной переменной и работать в функции с ней.
Ну и советую не забывать, что штатная функция от Wiring() - millis() считает время "скачками" по 42 миллисекунды и оно плавает на плюс-минус 1 миллисекунду с этим периодом. Из-за этого, не бывает 42, 84 .. и т.д. "миллисекунд". После 41 всегда идет 43. :)
Это из-за 1024 us/ms
Как-то так.
Если не получится на контроллере - сделаю на тразисторах и 155/176...Научился, немного.
Поможем проекту вместе!

ecoins
Подполковник
Сообщения: 1264
Зарегистрирован: 12.02.2016{, 11:40}
Репутация: 216
Откуда: Шатура
Имя: Энвер

Разработки ecoins

#1347

Сообщение ecoins » 11.10.2021{, 11:26}

Sancho писал(а):
11.10.2021{, 09:26}
millis()>=id.time - очень неправильная вещь.
При сравнении, в отличии вычитания, использование "невидимого" старшего разряда не работает.
Т.е. в момент времени, когда значение, возвращаемое функцией millis() изменит своё значение
с 0xFFFFFFFF на 0х00000000, придёт не совсем ожидаемый результат.
Спасибо. Подкорректирую в библиотеке.

Ответить

Вернуться в «Библиотеки пользователей»