Прошу совета у знатоков!
- VNS
- Говорящий с текстолитом
- Сообщения: 1614
- Зарегистрирован: Пт дек 10, 2021 12:48:46
- Откуда: Тюмень
Re: Прошу совета у знатоков!
[uquote="Dmitrudo",url="/forum/viewtopic.php?p=4723515#p4723515"]но в данном случае мне интересны подходы к решению. Даже, пожалуй, больше, чем само решение. Я пытаюсь разобраться- "как оно работает".[/uquote]
С какой целью вы интересуетесь алгоритмом программы? Если вас всё устраивает в данном алгоритме. Я думал вам нужен именно девайс, который сделал и забыл...
С какой целью вы интересуетесь алгоритмом программы? Если вас всё устраивает в данном алгоритме. Я думал вам нужен именно девайс, который сделал и забыл...
Re: Прошу совета у знатоков!
[uquote="Dmitrudo",url="/forum/viewtopic.php?p=4721811#p4721811"]Вариант на счетчиках решил не развивать. Тоже- ушла эпоха.[/uquote]
А посетители темы ловятся как наивные . Ведь о таких задачах на титульных страницах не пишут .
Пришла эпоха хакинга и дизассемблингаVNS писал(а):Я думал вам нужен именно девайс, который сделал и забыл...
А посетители темы ловятся как наивные . Ведь о таких задачах на титульных страницах не пишут .
«Когда у общества нет цветовой дифференциации штанов, то нет цели!»
- Позвольте-с вас спросить, почему от вас так отвратительно пахнет?
- Ну, что ж, пахнет... известно. По специальности. Вчера котов душили, душили. (с)
- Позвольте-с вас спросить, почему от вас так отвратительно пахнет?
- Ну, что ж, пахнет... известно. По специальности. Вчера котов душили, душили. (с)
Re: Прошу совета у знатоков!
Скорее просто вариант посмотреть как пишутся программы.
Или недостаток учебников по соответствующей теме.
Алгоритмы простые и общеизвестные и подгоняются под соответствующий вид/тип МК и применяемый компилятор (среду разработки).
Там заметно проще свою программу написать.

Чего там секретить то?
Частотомер, периодомер, измеритель длительности интервала - выбираем и смотрим, что подходит.

Или недостаток учебников по соответствующей теме.
Алгоритмы простые и общеизвестные и подгоняются под соответствующий вид/тип МК и применяемый компилятор (среду разработки).
Там заметно проще свою программу написать.
Чего там секретить то?
Частотомер, периодомер, измеритель длительности интервала - выбираем и смотрим, что подходит.
Re: Прошу совета у знатоков!
[uquote="VNS",url="/forum/viewtopic.php?p=4723584#p4723584"][uquote="Dmitrudo",url="/forum/viewtopic.php?p=4723515#p4723515"]но в данном случае мне интересны подходы к решению. Даже, пожалуй, больше, чем само решение. Я пытаюсь разобраться- "как оно работает".[/uquote]
С какой целью вы интересуетесь алгоритмом программы? Если вас всё устраивает в данном алгоритме. Я думал вам нужен именно девайс, который сделал и забыл...[/uquote]
Интересуюсь потому, что например, генератор- в Вашем варианте, он- не отключаем.
Наверняка, кому-то такой вариант подойдет, но я бы у себя отключил.
Дергать занятого человека: включи мне то, отключи мне это- как-то не совсем удобно.
И так чувствую себя неловко...
А алгоритм и код- можно было бы понять и как работает, и подогнать под себя.
Лучше объяснить не умею...
С какой целью вы интересуетесь алгоритмом программы? Если вас всё устраивает в данном алгоритме. Я думал вам нужен именно девайс, который сделал и забыл...[/uquote]
Интересуюсь потому, что например, генератор- в Вашем варианте, он- не отключаем.
Наверняка, кому-то такой вариант подойдет, но я бы у себя отключил.
Дергать занятого человека: включи мне то, отключи мне это- как-то не совсем удобно.
И так чувствую себя неловко...
А алгоритм и код- можно было бы понять и как работает, и подогнать под себя.
Лучше объяснить не умею...
- VNS
- Говорящий с текстолитом
- Сообщения: 1614
- Зарегистрирован: Пт дек 10, 2021 12:48:46
- Откуда: Тюмень
Re: Прошу совета у знатоков!
Не пойму чем мешает встроенный в алгоритм генератор. Если он не нужен, то можно его и не использовать. Он ведь на основную задачу (определения входной частоты) не влияет.
Но раз хочется написать свой вариант, то данная задача проста как гвоздь. То есть, за одну секунду необходимо посчитать количество импульсов. Если количество импульсов меньше установленного значения, то светодиод отключаем, а если равно или больше установленного значения, светодиод включаем. И такой подсчёт производим каждую секунду – всё.
Задействовать для отсчёта нужного интервала времени, можно как встроенный счётчик, так и сторожевой таймер (это кому как предпочтительней). А подсчёт входных импульсов можно производить по внешнему прерыванию. Вот собственно и всё.
Но раз хочется написать свой вариант, то данная задача проста как гвоздь. То есть, за одну секунду необходимо посчитать количество импульсов. Если количество импульсов меньше установленного значения, то светодиод отключаем, а если равно или больше установленного значения, светодиод включаем. И такой подсчёт производим каждую секунду – всё.
Задействовать для отсчёта нужного интервала времени, можно как встроенный счётчик, так и сторожевой таймер (это кому как предпочтительней). А подсчёт входных импульсов можно производить по внешнему прерыванию. Вот собственно и всё.
Re: Прошу совета у знатоков!
Генератор временных интервалов основной элемент что в частотомере, что в периодомере.
В первом случае генерируется измерительное окно заданной длительности и считается количество попавших в то окно импульсов.
Во втором генерируются импульсы заданной длительности и подсчитывается их количество в искомом периоде, который определяется длительностью периода входного импульса.
Какой вариант удобнее использовать определяем по соотношению периодов искомых импульсов и измерительного окна.
Ну и сам МК без генератора не работоспособен - это одна из его основных составляющих.

В первом случае генерируется измерительное окно заданной длительности и считается количество попавших в то окно импульсов.
Во втором генерируются импульсы заданной длительности и подсчитывается их количество в искомом периоде, который определяется длительностью периода входного импульса.
Какой вариант удобнее использовать определяем по соотношению периодов искомых импульсов и измерительного окна.
Ну и сам МК без генератора не работоспособен - это одна из его основных составляющих.
Re: Прошу совета у знатоков!
[uquote="BOB51",url="/forum/viewtopic.php?p=4724476#p4724476"]генерируются импульсы заданной длительности[/uquote]
... заданной частоты
... заданной частоты
Re: Прошу совета у знатоков!
[uquote="VNS",url="/forum/viewtopic.php?p=4724462#p4724462"]Не пойму чем мешает встроенный в алгоритм генератор. Если он не нужен, то можно его и не использовать. Он ведь на основную задачу (определения входной частоты) не влияет.
Но раз хочется написать свой вариант, то данная задача проста как гвоздь. То есть, за одну секунду необходимо посчитать количество импульсов. Если количество импульсов меньше установленного значения, то светодиод отключаем, а если равно или больше установленного значения, светодиод включаем. И такой подсчёт производим каждую секунду – всё.
Задействовать для отсчёта нужного интервала времени, можно как встроенный счётчик, так и сторожевой таймер (это кому как предпочтительней). А подсчёт входных импульсов можно производить по внешнему прерыванию. Вот собственно и всё.[/uquote]
Послушайте, товарищ VNS... Алгоритм подсчета и так понятен- не нужно так разжевывать, будто для тупых... На логике я же как-то справился, а там принцип тот же- но не устроила громоздкость и... вот новость- архаичность. Захотелось современности и новизны.
Я Вас не принуждал клепать проекты, рисовать рисунки, но, если уж Вы напряглись и ворвались в тему- вот я самый умный и быстрый, вот как я умею, то выложите, уж- ВСЁ, а не только никому не интересный хекс. Компилировать умеют, уже наверное, и в 5 классе...
Уверен, и другим читателям было бы интересен ваш ход мысли и изящность написания программы- на чем бы вы там не писали. Можно было бы поспорить, или бесспорно согласится- это жизня.
А вы- такое чувство, будто с врагами общаетесь, а не с единомышлениками...
Конечно я дойду до написания того, что мне нужно. Потрачу времени больше, но сделаю- как хочется.
Вам- всего наилучшего.
Добавлено after 10 minutes 2 seconds:
[uquote="BOB51",url="/forum/viewtopic.php?p=4724476#p4724476"]Ну и сам МК без генератора не работоспособен - это одна из его основных составляющих.
[/uquote]
Там, в проекте, специально на отдельную ногу выведен "генератор импульсов"- якобы, для проверки "порога срабатывания". В принципе не понятно кому он может понадобится, и, главное зачем- когда программно заложенно- зажигать светодиод после 27 импульсов. Или, что: программа может сбиться и начать считать не 27 а 37 импульсов?
И он (этот генератор)- не отключается. Он, либо генерит чаще, либо- реже.
Грубо говоря, "маслает" бесполезный генератор, жрет ресурсы МК и он там, в натуре нафиг не нужен, но- такова точка зрения автора.
Выложить исходник он не желает, посему там нечего и обсуждать- фтопку. Почитаю разных учебников- сам напишу...
Но раз хочется написать свой вариант, то данная задача проста как гвоздь. То есть, за одну секунду необходимо посчитать количество импульсов. Если количество импульсов меньше установленного значения, то светодиод отключаем, а если равно или больше установленного значения, светодиод включаем. И такой подсчёт производим каждую секунду – всё.
Задействовать для отсчёта нужного интервала времени, можно как встроенный счётчик, так и сторожевой таймер (это кому как предпочтительней). А подсчёт входных импульсов можно производить по внешнему прерыванию. Вот собственно и всё.[/uquote]
Я Вас не принуждал клепать проекты, рисовать рисунки, но, если уж Вы напряглись и ворвались в тему- вот я самый умный и быстрый, вот как я умею, то выложите, уж- ВСЁ, а не только никому не интересный хекс. Компилировать умеют, уже наверное, и в 5 классе...
Уверен, и другим читателям было бы интересен ваш ход мысли и изящность написания программы- на чем бы вы там не писали. Можно было бы поспорить, или бесспорно согласится- это жизня.
А вы- такое чувство, будто с врагами общаетесь, а не с единомышлениками...
Конечно я дойду до написания того, что мне нужно. Потрачу времени больше, но сделаю- как хочется.
Вам- всего наилучшего.
Добавлено after 10 minutes 2 seconds:
[uquote="BOB51",url="/forum/viewtopic.php?p=4724476#p4724476"]Ну и сам МК без генератора не работоспособен - это одна из его основных составляющих.
Там, в проекте, специально на отдельную ногу выведен "генератор импульсов"- якобы, для проверки "порога срабатывания". В принципе не понятно кому он может понадобится, и, главное зачем- когда программно заложенно- зажигать светодиод после 27 импульсов. Или, что: программа может сбиться и начать считать не 27 а 37 импульсов?
И он (этот генератор)- не отключается. Он, либо генерит чаще, либо- реже.
Грубо говоря, "маслает" бесполезный генератор, жрет ресурсы МК и он там, в натуре нафиг не нужен, но- такова точка зрения автора.
Выложить исходник он не желает, посему там нечего и обсуждать- фтопку. Почитаю разных учебников- сам напишу...
- VNS
- Говорящий с текстолитом
- Сообщения: 1614
- Зарегистрирован: Пт дек 10, 2021 12:48:46
- Откуда: Тюмень
Re: Прошу совета у знатоков!
[uquote="Dmitrudo",url="/forum/viewtopic.php?p=4724669#p4724669"]Я Вас не принуждал клепать проекты, рисовать рисунки[/uquote]
Признаю свою ошибку… более для вас такую глупость не совершу.

Признаю свою ошибку… более для вас такую глупость не совершу.
Убрал чтобы более вас не раздражать.а не только никому не интересный хекс.
Последний раз редактировалось VNS Пн июн 16, 2025 13:53:50, всего редактировалось 1 раз.
Re: Прошу совета у знатоков!
Dmitrudo
вы немного не правы....
VNS решил вашу просьбу и всё, более ничего он вам не обязан...хотите написать своё, так тогда не стоило и тему заводить...
вы немного не правы....
VNS решил вашу просьбу и всё, более ничего он вам не обязан...хотите написать своё, так тогда не стоило и тему заводить...
Re: Прошу совета у знатоков!
[uquote="BOB51",url="/forum/viewtopic.php?p=4723679#p4723679"]подгоняются под соответствующий вид/тип МК и применяемый компилятор (среду разработки).[/uquote]
Никаких пердуин а иделать все на перемычках и диодах - https://www.youtube.com/watch?v=w_zn9ekvhNA
Никаких пердуин а иделать все на перемычках и диодах - https://www.youtube.com/watch?v=w_zn9ekvhNA
«Когда у общества нет цветовой дифференциации штанов, то нет цели!»
- Позвольте-с вас спросить, почему от вас так отвратительно пахнет?
- Ну, что ж, пахнет... известно. По специальности. Вчера котов душили, душили. (с)
- Позвольте-с вас спросить, почему от вас так отвратительно пахнет?
- Ну, что ж, пахнет... известно. По специальности. Вчера котов душили, душили. (с)
Re: Прошу совета у знатоков!
незаметил вопроса,
воттак удобно чистить после дизассемблера от адреса и кода слева
а вывод - в ассемблер (или в gcc c директивой asm {...} , но там несколько нюансов, в паре слов не рассказать)
Disassembly of section .sec1:
00000000 <.sec1>:
rjmp .+18 ; 0x14
rjmp .+136 ; 0x8c
reti
reti
reti
reti
rjmp .+60 ; 0x4a
reti
reti
reti
ldi r16, 0x9F ; 159
out 0x3d, r16 ; 61
ldi r16, 0x19 ; 25
out 0x17, r16 ; 23
sbi 0x18, 1 ; 24
ldi r18, 0x00 ; 0
ldi r19, 0x00 ; 0
ldi r22, 0x00 ; 0
ldi r16, 0x02 ; 2
out 0x2f, r16 ; 47
ldi r16, 0x05 ; 5
out 0x33, r16 ; 51
ldi r16, 0x04 ; 4
out 0x39, r16 ; 57
ldi r16, 0xEA ; 234
out 0x36, r16 ; 54
ldi r16, 0x02 ; 2
out 0x35, r16 ; 53
ldi r16, 0x40 ; 64
out 0x3a, r16 ; 58
out 0x3b, r16 ; 59
sei
rcall .+54 ; 0x78
sbi 0x18, 0 ; 24
rcall .+50 ; 0x78
cbi 0x18, 0 ; 24
rjmp .-10 ; 0x40
push r16
push r17
in r16, 0x3f ; 63
push r16
inc r22
cpi r22, 0x05 ; 5
brcs .+22 ; 0x6e
ldi r22, 0x00 ; 0
ldi r16, 0x1E ; 30
cp r16, r18
brcs .+6 ; 0x66
cbi 0x18, 4 ; 24
cbi 0x18, 3 ; 24
rjmp .+4 ; 0x6a
sbi 0x18, 4 ; 24
sbi 0x18, 3 ; 24
ldi r18, 0x00 ; 0
andi r19, 0xFE ; 254
pop r16
out 0x3f, r16 ; 63
pop r17
pop r16
reti
ldi r20, 0x3C ; 60
push r20
nop
nop
dec r20
brne .-8 ; 0x7c
pop r20
dec r20
brne .-16 ; 0x7a
ret
push r16
push r17
in r16, 0x3f ; 63
push r16
cpi r18, 0xFF ; 255
breq .+14 ; 0xa6
sbrc r19, 0
rjmp .+8 ; 0xa4
ori r19, 0x01 ; 1
ldi r16, 0x00 ; 0
out 0x32, r16 ; 50
ldi r22, 0x00 ; 0
inc r18
pop r16
out 0x3f, r16 ; 63
pop r17
pop r16
reti
воттак удобно чистить после дизассемблера от адреса и кода слева
avr-objdump -D -m avr Count2.hex | sed 's/^.\+:\+\s[0-9,a-f, ]\+//'
а вывод - в ассемблер (или в gcc c директивой asm {...} , но там несколько нюансов, в паре слов не рассказать)
Спойлер
file format ihexDisassembly of section .sec1:
00000000 <.sec1>:
rjmp .+18 ; 0x14
rjmp .+136 ; 0x8c
reti
reti
reti
reti
rjmp .+60 ; 0x4a
reti
reti
reti
ldi r16, 0x9F ; 159
out 0x3d, r16 ; 61
ldi r16, 0x19 ; 25
out 0x17, r16 ; 23
sbi 0x18, 1 ; 24
ldi r18, 0x00 ; 0
ldi r19, 0x00 ; 0
ldi r22, 0x00 ; 0
ldi r16, 0x02 ; 2
out 0x2f, r16 ; 47
ldi r16, 0x05 ; 5
out 0x33, r16 ; 51
ldi r16, 0x04 ; 4
out 0x39, r16 ; 57
ldi r16, 0xEA ; 234
out 0x36, r16 ; 54
ldi r16, 0x02 ; 2
out 0x35, r16 ; 53
ldi r16, 0x40 ; 64
out 0x3a, r16 ; 58
out 0x3b, r16 ; 59
sei
rcall .+54 ; 0x78
sbi 0x18, 0 ; 24
rcall .+50 ; 0x78
cbi 0x18, 0 ; 24
rjmp .-10 ; 0x40
push r16
push r17
in r16, 0x3f ; 63
push r16
inc r22
cpi r22, 0x05 ; 5
brcs .+22 ; 0x6e
ldi r22, 0x00 ; 0
ldi r16, 0x1E ; 30
cp r16, r18
brcs .+6 ; 0x66
cbi 0x18, 4 ; 24
cbi 0x18, 3 ; 24
rjmp .+4 ; 0x6a
sbi 0x18, 4 ; 24
sbi 0x18, 3 ; 24
ldi r18, 0x00 ; 0
andi r19, 0xFE ; 254
pop r16
out 0x3f, r16 ; 63
pop r17
pop r16
reti
ldi r20, 0x3C ; 60
push r20
nop
nop
dec r20
brne .-8 ; 0x7c
pop r20
dec r20
brne .-16 ; 0x7a
ret
push r16
push r17
in r16, 0x3f ; 63
push r16
cpi r18, 0xFF ; 255
breq .+14 ; 0xa6
sbrc r19, 0
rjmp .+8 ; 0xa4
ori r19, 0x01 ; 1
ldi r16, 0x00 ; 0
out 0x32, r16 ; 50
ldi r22, 0x00 ; 0
inc r18
pop r16
out 0x3f, r16 ; 63
pop r17
pop r16
reti
Re: Прошу совета у знатоков!
[uquote="Krismi70",url="/forum/viewtopic.php?p=4724679#p4724679"]Dmitrudo
вы немного не правы....
VNS решил вашу просьбу и всё, более ничего он вам не обязан...хотите написать своё, так тогда не стоило и тему заводить...[/uquote]
Если Вы отмотаете в начало, то легко убедитесь, что у меня никаких просьб не было, кроме одной: получить совет- на какой элементной базе собрать свою поделку.
Но, уж если так вышло, что товарищ сам по собственной воле решил показать свои способности, то, лично мне, был бы интересен исходник с каментами- что там, к чему и для чего. Но встретил непонимание и даже упреки, мол: чем вам ТО ЧТО ЕСТЬ не нравиться? Пытался объясниться, но снова не был понят.
В итоге, да- "писал свое".
вы немного не правы....
VNS решил вашу просьбу и всё, более ничего он вам не обязан...хотите написать своё, так тогда не стоило и тему заводить...[/uquote]
Если Вы отмотаете в начало, то легко убедитесь, что у меня никаких просьб не было, кроме одной: получить совет- на какой элементной базе собрать свою поделку.
Но, уж если так вышло, что товарищ сам по собственной воле решил показать свои способности, то, лично мне, был бы интересен исходник с каментами- что там, к чему и для чего. Но встретил непонимание и даже упреки, мол: чем вам ТО ЧТО ЕСТЬ не нравиться? Пытался объясниться, но снова не был понят.
В итоге, да- "писал свое".
Re: Прошу совета у знатоков!
Продолжая, и заканчивая тему...
Не удовлетворившись ограниченным предложением пришлось код писать самому.
С помошью ИИ, было опробовано 27 вариантов кода, из которых удовлетворил последний- будучи переделанным из моргалки светодиодом- в счетчик импульсов. https://arduinodiy.wordpress.com/2015/0 ... -attiny13/
ИИ помощник- тот еще "помощник". Почти всегда пускал по ложному пути и всегда за ним приходилось "подчищать". Всегда норовил подсунуть "не то". В общем, это был ценный опыт. Но, научился хотя бы ориентироваться в Си. ИИ охотно объяснял непонятные моменты и давал много попутной информации, получить которую где-либо в другом месте я бы не смог. Для написания текста решил использовать Микрочип Студию- продвинутая штука, конечно. В тоже время, Ардуино ИДЕ показался громоздким.
Что хотелось бы отметить.., реализовать свою "хотелку" и использовать WDT в качестве источника прерываний 1 Гц- так и не удалось. В сети не очень много инфы на эту тему, а та что есть- у меня не сработала. Но, учитывая мой "богатый опыт" это и не удивительно, но зацепило. Буду пробовать еще.
В итоге использовал классику- прерывания на порту INT0 и таймер- для генерации секундных интервалов.
Все оказалось просто. По ходу дела скорректировал свои требования. Итак...
Схема выдает лог1 на Вых при 27 импульсах в секунду на Входе.
Лог0 на Вых появляется при снижении частоты на Входе ниже 10 Гц. Все работает.
#include <avr/interrupt.h> // Библиотека для работы с прерываниями
volatile uint8_t timer_count = 0;// Cчетчик времени
volatile uint8_t pulse_count = 0;// Cчетчик импульсов
// Обработчик прерывания по изменению состояния на порту PB1
ISR(INT0_vect) {
pulse_count++; // Увеличиваем счетчик при каждом прерывании
}
// Обработчик прерывания таймера TIMER0
ISR(TIM0_OVF_vect) {
if (++timer_count > 4) { // Прерывание примерно 4,6 раз за 1 сек
if (pulse_count > 29) { // Число импульсов необходимо подбирать
PORTB |= (1 << PB3) | (1 << PB4); // Устанавливаем лог 1 на PB3 и PB4
} else if (pulse_count < 10) {
PORTB &= ~((1 << PB3) | (1 << PB4)); // Устанавливаем лог 0 на PB3 и PB4
}
timer_count = 0; // Сбросить счетчик
pulse_count = 0; // Сбрасываем счетчик импульсов
}
}
void setup() {
cli(); // Отключить прерывания
DDRB = (1<<PB3) | (1<<PB4); // Настроить PB3 и PB4 как выход
// Настройка таймера
TCCR0B |= (1<<CS02) | (1<<CS00); // Предделитель 1/1024
TIMSK0 |= (1<<TOIE0); // Включить прерывание по переполнению таймера
// Настройка INT0 (PB1) для внешнего прерывания
GIMSK |= (1 << INT0); // Разрешаем внешнее прерывание INT0
MCUCR |= (1 << ISC01); // Срабатывание на спаде (INT0)
sei(); //Включить прерывания
}
void loop() {
// Все выполняется в прерываниях
}
int main(void) {
setup();
while (1) {
loop();
}
}
Схема была впихнута в корпус обычного 12V автомобильного реле.

Всем спасибо за помощь в поиске пути! Удачи!
Не удовлетворившись ограниченным предложением пришлось код писать самому.
С помошью ИИ, было опробовано 27 вариантов кода, из которых удовлетворил последний- будучи переделанным из моргалки светодиодом- в счетчик импульсов. https://arduinodiy.wordpress.com/2015/0 ... -attiny13/
ИИ помощник- тот еще "помощник". Почти всегда пускал по ложному пути и всегда за ним приходилось "подчищать". Всегда норовил подсунуть "не то". В общем, это был ценный опыт. Но, научился хотя бы ориентироваться в Си. ИИ охотно объяснял непонятные моменты и давал много попутной информации, получить которую где-либо в другом месте я бы не смог. Для написания текста решил использовать Микрочип Студию- продвинутая штука, конечно. В тоже время, Ардуино ИДЕ показался громоздким.
Что хотелось бы отметить.., реализовать свою "хотелку" и использовать WDT в качестве источника прерываний 1 Гц- так и не удалось. В сети не очень много инфы на эту тему, а та что есть- у меня не сработала. Но, учитывая мой "богатый опыт" это и не удивительно, но зацепило. Буду пробовать еще.
В итоге использовал классику- прерывания на порту INT0 и таймер- для генерации секундных интервалов.
Все оказалось просто. По ходу дела скорректировал свои требования. Итак...
Схема выдает лог1 на Вых при 27 импульсах в секунду на Входе.
Лог0 на Вых появляется при снижении частоты на Входе ниже 10 Гц. Все работает.
Спойлер
#include <avr/io.h> // Библиотека для работы с регистрами ввода-вывода AVR#include <avr/interrupt.h> // Библиотека для работы с прерываниями
volatile uint8_t timer_count = 0;// Cчетчик времени
volatile uint8_t pulse_count = 0;// Cчетчик импульсов
// Обработчик прерывания по изменению состояния на порту PB1
ISR(INT0_vect) {
pulse_count++; // Увеличиваем счетчик при каждом прерывании
}
// Обработчик прерывания таймера TIMER0
ISR(TIM0_OVF_vect) {
if (++timer_count > 4) { // Прерывание примерно 4,6 раз за 1 сек
if (pulse_count > 29) { // Число импульсов необходимо подбирать
PORTB |= (1 << PB3) | (1 << PB4); // Устанавливаем лог 1 на PB3 и PB4
} else if (pulse_count < 10) {
PORTB &= ~((1 << PB3) | (1 << PB4)); // Устанавливаем лог 0 на PB3 и PB4
}
timer_count = 0; // Сбросить счетчик
pulse_count = 0; // Сбрасываем счетчик импульсов
}
}
void setup() {
cli(); // Отключить прерывания
DDRB = (1<<PB3) | (1<<PB4); // Настроить PB3 и PB4 как выход
// Настройка таймера
TCCR0B |= (1<<CS02) | (1<<CS00); // Предделитель 1/1024
TIMSK0 |= (1<<TOIE0); // Включить прерывание по переполнению таймера
// Настройка INT0 (PB1) для внешнего прерывания
GIMSK |= (1 << INT0); // Разрешаем внешнее прерывание INT0
MCUCR |= (1 << ISC01); // Срабатывание на спаде (INT0)
sei(); //Включить прерывания
}
void loop() {
// Все выполняется в прерываниях
}
int main(void) {
setup();
while (1) {
loop();
}
}
Схема была впихнута в корпус обычного 12V автомобильного реле.
Всем спасибо за помощь в поиске пути! Удачи!
