Котуинко
-
Вячеслав М.
- Нашел транзистор. Понюхал.
- Сообщения: 174
- Зарегистрирован: Пн янв 13, 2025 15:24:02
Re: Котуинко
Ясней не становится как писать код под LGT, мне нужна полное инфо - как программировать, все аппаратные заморочки чтобы на ASM писать оптимизированный код, а ардуино это просто ограничение возможностей многократное.
- Реклама
Re: Котуинко
Без адуринки (железа программатора на её основе из нанки сделанного) с прошивкой не справиться.
Так что в любом случае для начального старта или покупной программатор или портабле ардуина для старта понадобится.
Под Си там проще - программа от изготовителя дружит с АВР студией 4.19.
Да и попадаются в продаже эти LGTшки только как платки группы ардуино.
Для работы под ассемблером первичной документации вроде достаточно, но требуется время на обработку - там минимум "двойной перевод" - сначала с китайского на английский, затем с английского на русский.
Короче надо весьма внимательно вычитать и редактировать по трем-четырем первичным оригиналам.
Насколько актуальным может быть - зависит от стабильности производства (что весьма под вопросом - микры для адуринки то поставляются, но... "с затертым логотипом и наименованием")
Если интерес будет - заброшу собранный комплект док в сундук и/или сюда/в личку.
Пока жду ещё поступления ардуиновской версии LGT а-ля про-мини (без USB моста на палатках). Да пытаюсь доки просматривать.

Так что в любом случае для начального старта или покупной программатор или портабле ардуина для старта понадобится.
Под Си там проще - программа от изготовителя дружит с АВР студией 4.19.
Да и попадаются в продаже эти LGTшки только как платки группы ардуино.
Для работы под ассемблером первичной документации вроде достаточно, но требуется время на обработку - там минимум "двойной перевод" - сначала с китайского на английский, затем с английского на русский.
Короче надо весьма внимательно вычитать и редактировать по трем-четырем первичным оригиналам.
Насколько актуальным может быть - зависит от стабильности производства (что весьма под вопросом - микры для адуринки то поставляются, но... "с затертым логотипом и наименованием")
Если интерес будет - заброшу собранный комплект док в сундук и/или сюда/в личку.
Пока жду ещё поступления ардуиновской версии LGT а-ля про-мини (без USB моста на палатках). Да пытаюсь доки просматривать.
-
Вячеслав М.
- Нашел транзистор. Понюхал.
- Сообщения: 174
- Зарегистрирован: Пн янв 13, 2025 15:24:02
Re: Котуинко
Говорится в той статье "LGT8F328P: импортозамещение по-китайски (окончание)" про файл lgt8f328Pdef.inc присущ всем чипам, но чёто я его не нашёл, у вас он есть?
Re: Котуинко
Такой файл самостоятельно составляется по документации МК.
Под соответствующий компилятор ассемблера.
За основу берем примеры по уже имеющимся в наличии и делаем свой.
Я такое не раз для 51й делал под с51asm.
Да и АВРкины разбирал...
не так уж и сложно - вписываем отличия по карте регистров.
Только у LGT будет еще возня с картированием ОЗУ и 16-разрядным доступом и соответствующим ядром.
Пока тот садомазохизьм в неспешных планах...

Под соответствующий компилятор ассемблера.
За основу берем примеры по уже имеющимся в наличии и делаем свой.
Я такое не раз для 51й делал под с51asm.
Да и АВРкины разбирал...
не так уж и сложно - вписываем отличия по карте регистров.
Только у LGT будет еще возня с картированием ОЗУ и 16-разрядным доступом и соответствующим ядром.
Пока тот садомазохизьм в неспешных планах...
-
Вячеслав М.
- Нашел транзистор. Понюхал.
- Сообщения: 174
- Зарегистрирован: Пн янв 13, 2025 15:24:02
Re: Котуинко
У меня обычно дополнение к фирмовому файлу это идёт, с тем же именем, с дополнительной чёрточкой и расширением .inc.
- Реклама
Re: Котуинко
[uquote="Вячеслав М.",url="/forum/viewtopic.php?p=4697387#p4697387"]Говорится в той статье "LGT8F328P: импортозамещение по-китайски (окончание)" про файл lgt8f328Pdef.inc присущ всем чипам, но чёто я его не нашёл, у вас он есть?[/uquote]
Смотрите внимательнее, в конце статьи архив с вашим lgt8f328Pdef.inc.
Смотрите внимательнее, в конце статьи архив с вашим lgt8f328Pdef.inc.
-
Вячеслав М.
- Нашел транзистор. Понюхал.
- Сообщения: 174
- Зарегистрирован: Пн янв 13, 2025 15:24:02
Re: Котуинко
Adrift, Спасибо, нашёл.
Re: Котуинко
С великим прискорбием сообщаю о завершении практической тест-поддержки проектов на базе ПК с Win XP x32...
По причине кончины кома с данной ОС...
Комп честно и героически отработал свой ресурс...
Прощальный салют
В дальнейшем базой средств разработки будут использоваться ресурсы программ под ПК с win 7/10/11 х64.

По причине кончины кома с данной ОС...
Комп честно и героически отработал свой ресурс...
Прощальный салют
В дальнейшем базой средств разработки будут использоваться ресурсы программ под ПК с win 7/10/11 х64.
Re: Котуинко
Весьма вкусненькие инструменты для всякоработы с *.pdf ...
https://tools.pdf24.org/ru/creator
жаль только что "полный фарш" оффлайн только для виндовс 10 и 11...
под 7кой/8кой некоторый функционал лишь "он лайн" (в тырнете)...

https://tools.pdf24.org/ru/creator
жаль только что "полный фарш" оффлайн только для виндовс 10 и 11...
под 7кой/8кой некоторый функционал лишь "он лайн" (в тырнете)...
Re: Котуинко
MCUdude выпустило обновку для платформы MinyCore версия 3.0.4....
Навороченная однако
https://github.com/MCUdude/MiniCore
Unlike the official Arduino cores, MiniCore has printf support out of the box. If you're not familiar with printf you should probably read this first. It's added to the Print class and will work with all libraries that inherit Print. Printf is a standard C function that lets you format text much easier than using Arduino's built-in print and println. Note that this implementation of printf will NOT print floats or doubles. This is disabled by default to save space but can be enabled using a build flag if using PlatformIO.
If you're using a serial port, simply use Serial.printf("Milliseconds since start: %ld\n", millis());. You can also use the F() macro if you need to store the string in flash. Other libraries that inherit the Print class (and thus supports printf) are the LiquidCrystal LCD library and the U8G2 graphical LCD library.
Pin macros
Note that you don't have to use the digital pin numbers to refer to the pins. You can also use some predefined macros that maps "Arduino pins" to the port and port number:
// Use PIN_PB5 macro to refer to pin PB5 (Arduino pin 13)
digitalWrite(PIN_PB5, HIGH);
// Results in the exact same compiled code
digitalWrite(13, HIGH);
Write to own flash
MiniCore uses the excellent Urboot bootloader, written by Stefan Rueger. Urboot supports flash writing within the running application, meaning that content from e.g. a sensor can be stored in the flash memory directly without needing external memory. Flash memory is much faster than EEPROM, and can handle at least 10,000 write cycles before wear becomes an issue. For more information on how it works and how you can use this in your own application, check out the Serial_read_write for a simple proof-of-concept demo, and Flash_put_get + Flash_iterate for useful examples on how you can store strings, structs, and variables to flash and retrieve then afterward.
...
меги
328/Р/РА/А/РВ
168/Р/РА/А/РВ
88/Р/РА/А/РВ
48/Р/РА/А/РВ
8
а вот про мегу 8А забыли...

Навороченная однако
https://github.com/MCUdude/MiniCore
Спойлер
Printf supportUnlike the official Arduino cores, MiniCore has printf support out of the box. If you're not familiar with printf you should probably read this first. It's added to the Print class and will work with all libraries that inherit Print. Printf is a standard C function that lets you format text much easier than using Arduino's built-in print and println. Note that this implementation of printf will NOT print floats or doubles. This is disabled by default to save space but can be enabled using a build flag if using PlatformIO.
If you're using a serial port, simply use Serial.printf("Milliseconds since start: %ld\n", millis());. You can also use the F() macro if you need to store the string in flash. Other libraries that inherit the Print class (and thus supports printf) are the LiquidCrystal LCD library and the U8G2 graphical LCD library.
Pin macros
Note that you don't have to use the digital pin numbers to refer to the pins. You can also use some predefined macros that maps "Arduino pins" to the port and port number:
// Use PIN_PB5 macro to refer to pin PB5 (Arduino pin 13)
digitalWrite(PIN_PB5, HIGH);
// Results in the exact same compiled code
digitalWrite(13, HIGH);
Write to own flash
MiniCore uses the excellent Urboot bootloader, written by Stefan Rueger. Urboot supports flash writing within the running application, meaning that content from e.g. a sensor can be stored in the flash memory directly without needing external memory. Flash memory is much faster than EEPROM, and can handle at least 10,000 write cycles before wear becomes an issue. For more information on how it works and how you can use this in your own application, check out the Serial_read_write for a simple proof-of-concept demo, and Flash_put_get + Flash_iterate for useful examples on how you can store strings, structs, and variables to flash and retrieve then afterward.
меги
328/Р/РА/А/РВ
168/Р/РА/А/РВ
88/Р/РА/А/РВ
48/Р/РА/А/РВ
8
а вот про мегу 8А забыли...
- главный колбасист
- Это не хвост, это антенна
- Сообщения: 1326
- Зарегистрирован: Чт авг 21, 2014 11:11:48
- Откуда: краснодарский край
- Контактная информация:
Re: Котуинко
[uquote="BOB51",url="/forum/viewtopic.php?p=4703407#p4703407"]меги
328/Р/РА/А/РВ
168/Р/РА/А/РВ
88/Р/РА/А/РВ
48/Р/РА/А/РВ
8
а вот про мегу 8А забыли...
[/uquote]
А если очки напялить?
328/Р/РА/А/РВ
168/Р/РА/А/РВ
88/Р/РА/А/РВ
48/Р/РА/А/РВ
8
а вот про мегу 8А забыли...
А если очки напялить?
Supported microcontrollers:
ATmega8
ATmega48
ATmega88
ATmega168
ATmega328
* All variants (A, P, PA and PB)
Re: Котуинко
А Вы, уважаемый OKF, пробовали соответствующие окошки в работающей IDE открывать и на соответствующие графы выбора типа МК смотреть?
В списке свойств платформы для тех, что "с буковками" есть опция "variant" в которой выбираем тот вариант буковок, с которым будем работать.
Я пишу о том, что проверил при пробе настроить эту платформу по факту.
Было бы для меги8 соответствующее расширение (как для других вариантов) я бы это указал.
Не всегда общее описание на страничке проекта соответствует тому, что во вкладках платформы установить можно.
Возможно при редактировании авторы забыли указать соответствующие буковки, а может и нет- это уже на конкретном кристалле тестом поверить надо. Но лучше без особых причин
(и запасов времени и подопытных МК) не экспериментировать с подобной проверкой.
Да и грубость как то Вам не к лицу, уважаемый OKF.

Добавлено after 13 minutes 51 second:
[uquote="главный колбасист",url="/forum/viewtopic.php?p=4706743#p4706743"]......
Что это за хрень, ардуина, чё ли ?[/uquote]
Возможно и одна из будущих платформ.
Это ж вроде как ARM - просто один из вариантов DIP микро сборки. Будет соответствующая платформа под ардуино IDE - почему бы и не воспользоваться?
В то же время может и что-то отдельно для такой платки выпустят (из IDE и/или иного софта сопровождения) ...

В списке свойств платформы для тех, что "с буковками" есть опция "variant" в которой выбираем тот вариант буковок, с которым будем работать.
Я пишу о том, что проверил при пробе настроить эту платформу по факту.
Было бы для меги8 соответствующее расширение (как для других вариантов) я бы это указал.
Не всегда общее описание на страничке проекта соответствует тому, что во вкладках платформы установить можно.
Возможно при редактировании авторы забыли указать соответствующие буковки, а может и нет- это уже на конкретном кристалле тестом поверить надо. Но лучше без особых причин
(и запасов времени и подопытных МК) не экспериментировать с подобной проверкой.
Да и грубость как то Вам не к лицу, уважаемый OKF.
Добавлено after 13 minutes 51 second:
[uquote="главный колбасист",url="/forum/viewtopic.php?p=4706743#p4706743"]......
Что это за хрень, ардуина, чё ли ?[/uquote]
Возможно и одна из будущих платформ.
Это ж вроде как ARM - просто один из вариантов DIP микро сборки. Будет соответствующая платформа под ардуино IDE - почему бы и не воспользоваться?
В то же время может и что-то отдельно для такой платки выпустят (из IDE и/или иного софта сопровождения) ...
Re: Котуинко
[uquote="BOB51",url="/forum/viewtopic.php?p=4706792#p4706792"]А Вы, уважаемый OKF, пробовали соответствующие окошки в работающей IDE открывать и на соответствующие графы выбора типа МК смотреть?
Я пишу о том, что проверил при пробе настроить эту платформу по факту.
Было бы для меги8 соответствующее расширение (как для других вариантов) я бы это указал.
Не всегда общее описание на страничке проекта соответствует тому, что во вкладках платформы установить можно.[/uquote]
А есть отличие А - без А? В софтовом плане?
Я пишу о том, что проверил при пробе настроить эту платформу по факту.
Было бы для меги8 соответствующее расширение (как для других вариантов) я бы это указал.
Не всегда общее описание на страничке проекта соответствует тому, что во вкладках платформы установить можно.[/uquote]
А есть отличие А - без А? В софтовом плане?
Re: Котуинко
Буковки типа МК определяют набор фузов и тип загружаемого бутлоадера для опции "записать загрузчик".
(совместно с другими вкладками опций в менюшке текущей платформы).
Да и возможные отличия начинки МК там также учитывается.
Насколько глубоко - то нужно или полностью документацию вычитывать или пользоваться тем, что задано.
По крайней мере для других подобных платформ это оговаривается-
та же платформа DIY ATMEGA 8/88/48/168/328
при выборе атмега8 имеет опцию
processor version для раздельного указания атмега 8 и атмега 8а...
Детально мне сегодня в тех тонкостях разбираться не особо интересно - этих кристаллов сегодня в массовом количестве не так уж и много - хватит и "штатного" адуринкина применения. (разбирал в прошлом аналогии "диагоналек" 51й в DIP8/20/40, а до "бабочки" меги 8й так дело и не дошло - появились более навороченные да и адуринка многие вопросы сняла с повестки дня).
Но рисковать проверками смысла не вижу (если только то не спец по Си и устройству IDE, для собственного удовольствия сей вопрос рассматривать будет).

(совместно с другими вкладками опций в менюшке текущей платформы).
Да и возможные отличия начинки МК там также учитывается.
Насколько глубоко - то нужно или полностью документацию вычитывать или пользоваться тем, что задано.
По крайней мере для других подобных платформ это оговаривается-
та же платформа DIY ATMEGA 8/88/48/168/328
при выборе атмега8 имеет опцию
processor version для раздельного указания атмега 8 и атмега 8а...
Детально мне сегодня в тех тонкостях разбираться не особо интересно - этих кристаллов сегодня в массовом количестве не так уж и много - хватит и "штатного" адуринкина применения. (разбирал в прошлом аналогии "диагоналек" 51й в DIP8/20/40, а до "бабочки" меги 8й так дело и не дошло - появились более навороченные да и адуринка многие вопросы сняла с повестки дня).
Но рисковать проверками смысла не вижу (если только то не спец по Си и устройству IDE, для собственного удовольствия сей вопрос рассматривать будет).
Последний раз редактировалось BOB51 Сб апр 19, 2025 15:08:37, всего редактировалось 1 раз.
Re: Котуинко
В том то и дело, что в софте никакого отличия нет. Ни в фузах, ни в бутах, ни даже в id. B не надо для этого быть спецом по Си и IDE.
А в тех МК где отличия есть, они (МК с буковками) и указываются в соответствующих подпунктах.
А в тех МК где отличия есть, они (МК с буковками) и указываются в соответствующих подпунктах.
Re: Котуинко
Но факт отсуствия выборки варианта и/или указания на то, что данное действие не требуется в соответствующей опции платформы таки есть.
О чем я собственно и сообщил в своем посте выше, на который Вы, OKF, так накинулись.
Кстати... насчет того "...* All variants (A, P, PA and PB)..."... я что то не встречал атмегу 8 с буковками "P, PA and PB" - следовательно там, откуда взята строчка надо еще и примечания под "*", что где-то в остальном тексте запрятаны, смотреть...
Как и наличие в той же платформе прямого указания на применение кристаллов с разными буковками
к примеру в той же 328й там прямо указан вариант "328/328А".
Или не добавили по невнимательности или таки чего то но там есть - то уж не столь и интересно для прикладного применения.
хотите - копните глубже(если время и желание позволяет).

О чем я собственно и сообщил в своем посте выше, на который Вы, OKF, так накинулись.
Кстати... насчет того "...* All variants (A, P, PA and PB)..."... я что то не встречал атмегу 8 с буковками "P, PA and PB" - следовательно там, откуда взята строчка надо еще и примечания под "*", что где-то в остальном тексте запрятаны, смотреть...
Как и наличие в той же платформе прямого указания на применение кристаллов с разными буковками
к примеру в той же 328й там прямо указан вариант "328/328А".
Или не добавили по невнимательности или таки чего то но там есть - то уж не столь и интересно для прикладного применения.
хотите - копните глубже(если время и желание позволяет).
Re: Котуинко
По мотивам "великого холивара" из этих мест:
https://radiokot.ru/forum/viewtopic.php?f=2&t=197648
и
https://radiokot.ru/forum/viewtopic.php?f=66&t=197774
Решил малость потренироваться/развлечься...
В результате вот такой набросок появился
https://img.radiokot.ru/files/20529/3qy48mejjy.GIF при решении "примитивно в лоб" и только референсом там будут ограничения на максимальную частоту счетных импульсов -
минимальная длительность импульса 2mS
минимальная длительность паузы 3mS
(проверка проводилась симулятором UnoArduSim 2.9.2).
Можно б еще одно действо применить убрав loop - но то уже из "ухищрений" за рамками "референса

https://radiokot.ru/forum/viewtopic.php?f=2&t=197648
и
https://radiokot.ru/forum/viewtopic.php?f=66&t=197774
Решил малость потренироваться/развлечься...
В результате вот такой набросок появился
https://img.radiokot.ru/files/20529/3qy48mejjy.GIF при решении "примитивно в лоб" и только референсом там будут ограничения на максимальную частоту счетных импульсов -
минимальная длительность импульса 2mS
минимальная длительность паузы 3mS
(проверка проводилась симулятором UnoArduSim 2.9.2).
Можно б еще одно действо применить убрав loop - но то уже из "ухищрений" за рамками "референса
Re: Котуинко
Продолжение садизьма...
Итого малость ужал... Но таки быстродействие как было, так и осталось 2mS импульс на 3mS паузы...Маловато...
Поскольку параметры импульсов произвольны это в принципе близко к "гаданию на кофеной гуще"...
Но все же ... можеть и чего таки выжму.
Надо еще "простейшие фокусы" попробовать - но то "за рамками "референса""...

Итого малость ужал... Но таки быстродействие как было, так и осталось 2mS импульс на 3mS паузы...Маловато...
Спойлер
Код: Выделить всё
/* проект taho
простейший автомат селектор количества импульсов в секунду
диапазон контроля от 0 до 200 импульсов в секунду (120 км/час)
ориентировочный порог (уставка) 33 импульса в секунду
решение для ардуино нано в рамках средств референса
параметры входных импульсов не известны, но
оговорено:
1. отсутствие дребезга фронтов (аппаратный антидребезг в источнике сигнала)
2. длительность активной части импульса не менее 2 милисекунд
3. длительность паузы не менее 3 милисекунд
точность сработки +/- 2 импульса */
// линия водного сигнала
const byte Taho = 4; // D4
// активный уровень входного сигнала
byte AlTaho = LOW;
// линия выходного сигнала
const byte RelOut = 8; // D8
// активный уровень выходного сигнала
byte AlRelOut = LOW;
// флаг захвата фронта начала импульса или начала паузы
byte Fl = 0;
// флаг начала окна измерительного интервала
byte Fw = 0;
// счетик - накопитель импульсов
byte cntTaho = 0;
// пороговое значение контрольной уставки количества импульсов
const byte MaskTaho = 33;
// контрольный накопитель текущего времени в милисекундах
unsigned long tmslot = 0;
//--------------------------------------------------------------------------
void setup() {
// put your setup code here, to run once:
pinMode(Taho, INPUT);
digitalWrite(RelOut, !AlRelOut);
pinMode(RelOut, OUTPUT);
Fl = 0; Fw = 0;
cntTaho = 0; tmslot = 0;
}
void loop() {
// put your main code here, to run repeatedly:
while(AlTaho == (digitalRead(Taho)))
{
if(!Fl)
{
Fl = 1;
if(!Fw){ Fw = 1; cntTaho = 0; tmslot = millis(); }
}
}
Fl = 0;
while(AlTaho != (digitalRead(Taho)))
{
if(!Fl)
{
Fl = 1;
if(Fw)
{
cntTaho++;
unsigned long tmp1 = millis();
if(1000 <= (tmp1 - tmslot))
{
if(cntTaho < MaskTaho){ digitalWrite(RelOut, !AlRelOut); }
else{digitalWrite(RelOut, AlRelOut);}
cntTaho = 0; Fw = 0;
}
}
}
}
Fl = 0;
}
Но все же ... можеть и чего таки выжму.
Надо еще "простейшие фокусы" попробовать - но то "за рамками "референса""...
Re: Котуинко
Немножко дополнительного садомазохизма в попытке поднять максимальное быстродействие (количество считанных импульсов) для пародии на частотомер в рамках ардуиньего референса (а заодно и симулятор погонять)...
Условие - не использовать ничего за рамками "стандарно - адуринко" - ни таймеры в режиме счета, ни дополнительные фокусы с дополнительным генератором 1mS на Т0, ни отказа от LOOP()...
Захват входного сигнала проводится обычным чтением лапок, а вот формирование измерительного окна чуток с извратом - использована генерация tone c последующей обработкой счетчика в прерывании от INT0.
Ну и компаратор по количеству входных импульсов - поставлено 33 - если меньше выход D8 = 1, ежли больше D8 = 0.
При такой схемке максимум корректно считанных импульсов возможен для условия
длительность активной части импульса (0) = 1100 микросекунд,
длительность пассивной части импульса (1) =1150 микросекунд.
Собственно несколько измененная схемка:
https://img.radiokot.ru/files/20529/3qzplyk6yn.GIF
скрин окна симулятора с максимальным количеством корректно считываемых импульсов скрин окна симулятора с количеством импульсов ниже пороговой величины и текст исходника (taho.ino)
В принципе для релюшки, срабатывающей на требуемый порог вполне сгодится.
Для частотомера явно не особо пригодное решение, разве что обороты считать.
Но и исходные требования к входным импульсам зверские - от постоянного 0 до постоянной 1 при старте (и в любой момент работы)...
Да плюс тренировка мозгам и навыков пользования симулятором.

Условие - не использовать ничего за рамками "стандарно - адуринко" - ни таймеры в режиме счета, ни дополнительные фокусы с дополнительным генератором 1mS на Т0, ни отказа от LOOP()...
Захват входного сигнала проводится обычным чтением лапок, а вот формирование измерительного окна чуток с извратом - использована генерация tone c последующей обработкой счетчика в прерывании от INT0.
Ну и компаратор по количеству входных импульсов - поставлено 33 - если меньше выход D8 = 1, ежли больше D8 = 0.
При такой схемке максимум корректно считанных импульсов возможен для условия
длительность активной части импульса (0) = 1100 микросекунд,
длительность пассивной части импульса (1) =1150 микросекунд.
Собственно несколько измененная схемка:
https://img.radiokot.ru/files/20529/3qzplyk6yn.GIF
скрин окна симулятора с максимальным количеством корректно считываемых импульсов скрин окна симулятора с количеством импульсов ниже пороговой величины и текст исходника (taho.ino)
Спойлер
Код: Выделить всё
/* проект taho
простейший автомат селектор количества импульсов в секунду
диапазон контроля от 0 до 200 импульсов в секунду (120 км/час)
ориентировочный порог (уставка) 33 импульса в секунду
решение для ардуино нано в рамках средств референса
параметры входных импульсов не известны, но
оговорено:
1. отсутствие дребезга фронтов (аппаратный антидребезг в источнике сигнала)
2. длительность активной части импульса не менее 1.1 милисекунд
3. длительность паузы не менее 1.15 милисекунд
точность сработки +/- 2 импульса */
// линия водного сигнала
#define Taho 6 // D6
// активный уровень входного сигнала исключительно LOW
//byte AlTaho = LOW;
// линия выходного сигнала
#define RelOut 8 // D8
// активный уровень выходного сигнала
byte AlRelOut = LOW;
// выход тактового сигнала на формирователь счетного окна
#define tonout 4 // D4
// вход тактового сигнала на формирователь счетного окна
#define toninp 2 // D2 (= INT0)
// флаг захвата фронта начала импульса или начала паузы
byte Fl = 0;
// флаг начала окна измерительного интервала
byte Fw = 0;
// счетик - накопитель импульсов
int cntTaho = 0;
// пороговое значение контрольной уставки количества импульсов
#define MaskTaho 33
// контрольный накопитель формирователя счетного окна
byte tmslot = 0;
// пороговое значение контрольной уставки накопителя формирователя счетного окна
#define MaskCtms 50
// функция бработчика прерывания формирователя счетного окна
void timeslot();
//---------------------------------------------------------------------------
void setup() {
// put your setup code here, to run once:
pinMode(toninp, INPUT_PULLUP);
digitalWrite(tonout, HIGH); pinMode(tonout, OUTPUT);
pinMode(Taho, INPUT_PULLUP);
digitalWrite(RelOut, !AlRelOut); pinMode(RelOut, OUTPUT);
Fl = 0; Fw = 0; cntTaho = 0; tmslot = 0;
noInterrupts();
attachInterrupt(digitalPinToInterrupt(toninp), timeslot, FALLING);
interrupts();
}
void loop() {
// put your main code here, to run repeatedly:
while(LOW == digitalRead(Taho))
{
if(!Fl)
{
Fl = 1;
if(!Fw){ Fw = 1; tone(tonout, 50); } //cntTaho = 0;
}
}
Fl = 0;
while(HIGH == digitalRead(Taho))
{
if(!Fl)
{
Fl = 1;
if(Fw){ cntTaho++; }
}
}
Fl = 0;
}
//---------------------------------------------------------------------------
// функция бработчика прерывания формирователя счетного окна
void timeslot()
{
tmslot++;
if(tmslot == MaskCtms)
{
noTone(tonout); digitalWrite(tonout, HIGH);
if(cntTaho < MaskTaho){ digitalWrite(RelOut, !AlRelOut); }
else{digitalWrite(RelOut, AlRelOut);}
tmslot = 0; cntTaho = 0; Fw = 0;
}
}
//---------------------------------------------------------------------------
Для частотомера явно не особо пригодное решение, разве что обороты считать.
Но и исходные требования к входным импульсам зверские - от постоянного 0 до постоянной 1 при старте (и в любой момент работы)...
Да плюс тренировка мозгам и навыков пользования симулятором.


