Страница 1 из 2
Одновибратор без перезапуска на Attyny 13
Добавлено: Сб мар 13, 2021 18:04:07
dim3740
на вход АЦП Аттини 13 в режиме компаратора поступают пакеты импульсов (см фото)
Период пакета - не менее 300 мс
Нужно ловить первый перепад, выдавать сигнал на выход,
игнорировать следующие в пакете и воспринимать новый перепад только после 280...290 мс
Код: Выделить всё
#define F_CPU 9600000UL // не обязательно
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h> // тоже не нужно
int main(void)
{
DDRB |= (1 << PB3); // выход
TIMSK0 = (1<<TOIE0); // разрешить прерывание по переполнению таймера счетчика Т0
TCNT0 = 0x00; // обнулить счетный регистр
sei();
ACSR|=(0<<ACIE); // прерывание по компаратору вЫкл
ACSR|=(0<<ACIS1) | (1<<ACIS0);
while(1)
{
if(ACSR&(1<<ACO)) // по каждому переходу компаратора
{
PORTB &= ~(1<<PB3); // выход в 0
TCCR0B = (1<<CS00) | (1<<CS02); // запуск таймера без перезапуска
// с предделителем 1024(CLK = 1200000 Гц / 1024/256 = 4 Гц, 250 мс)
}
}
}
ISR(TIM0_OVF_vect) {
TCCR0B = 0x00; // остановка таймера
TCNT0 = 0x00; // обнуление счетного регистра
PORTB |= (1<<PB3); // выход в 1
}
что тут не так? пока косяки идут на лог.анализаторе.... Таймер будет перезапускаться, если его снова запустить?
Re: Одновибратор без перезапуска на Attyny 13
Добавлено: Сб мар 13, 2021 18:32:30
BOB51
А зачем АЦП для ловли сигнала заранее нормированного под логический уровень???

Для того, что на картинке достаточно прерывания по спаду.
И то, ежли у МК помимо отслеживания "куча прочих забот" имеется.

Re: Одновибратор без перезапуска на Attyny 13
Добавлено: Сб мар 13, 2021 18:44:03
dim3740
пакет - это звук с выхода усилителя. Там стоит выходной каскад в режиме ограничения, но тем не менее фронты могут быть нечеткие. Особая точность фиксации периода не нужна.
Re: Одновибратор без перезапуска на Attyny 13
Добавлено: Сб мар 13, 2021 18:52:22
BOB51
Уровень отсечки то всегда будет. В принципе сработка по уровню в какой-то точке всегда будет даже при наихудших условиях.
Другое дело ежли уровен где-то посрединке висеть будет.

Возможно даже на адуринье подобное втиснуть можно...
(хотя мне для подобного ассемблер больше нравится).
Есть еще разновидности ждущих одновибраторов на логике-рассыпухе...

Re: Одновибратор без перезапуска на Attyny 13
Добавлено: Сб мар 13, 2021 18:53:43
dim3740
Если вы знаете, режимы работы компаратора и будет ли перезапускаться таймер по моему коду - подскажите, пожалуйста.
Re: Одновибратор без перезапуска на Attyny 13
Добавлено: Сб мар 13, 2021 18:57:53
BOB51
Режимы аппаратной начинки могу дать только под ассемблером.
Си лишь "в рамках референса" ардуиноIDE (без произвольного доступа к ресурсам аппаратных модулей МК).

Re: Одновибратор без перезапуска на Attyny 13
Добавлено: Сб мар 13, 2021 19:29:09
dim3740
Если поможете "под ключ" - то меня устроил бы и ассемблер (я его уже забыл совсем от института). Буду признателен, обсудим в личке.
Ардуино - тем более устроит, но.... Сделано так, что Тинька прошивается в панельке под ISP и AVR Studio, затем переносится на плату также в панельку. Всякие аддоны на IDE под тиньку не хочу ставить.
Уточняю, что уровень - не нормируемый. На другой вход Тиньки заведено опорное напряжение, и потенциометром устанавливается уровень сравнения компаратора. Это не стоит пересматривать.
Re: Одновибратор без перезапуска на Attyny 13
Добавлено: Сб мар 13, 2021 19:54:43
BOB51
Под ардуиноIDE имеется вполне приличный перечень дополнительных платформ с аттини13.
Ограничения по установке платформ касаются только работы на компьютере с виндовс ХР (и то преодолимы).
Прошивка из ардуиноIDE через ISP программатор (который делается из ардуино-нано) также затруднений не вызывает.
Да и симулятор там имеется весьма солидный.
Так что можно попробовать.

Вот вариант для аттини13 "в стиле адуринко"(платформа micro core лт MCUdude).
Контролируется изменение уровня на входе D1 и зажигается светик на D4 на время блокирующего интервала.
Спойлер
Код: Выделить всё
const byte test_input = 1; // 2; номер цифрового вывода, соответствующий входу
// активный уровень равен изменению состояния (arduino pin D1)
const byte test_output = 4; // номер цифрового выхода активный уровень =0 (arduino pin D4)
const unsigned long wait_time = 300; // константа времени задержки в милисекундах
// более максимальной длительности пакета
volatile byte flag = 0; // передаточный флаг
void pak_ap(); // объявление функции обработчика прерывания
void setup() {
// put your setup code here, to run once:
digitalWrite(test_input,HIGH);
digitalWrite(test_output,HIGH);
pinMode(test_input,INPUT_PULLUP);
pinMode(test_output,OUTPUT);
attachInterrupt(digitalPinToInterrupt(test_input), pak_ap, CHANGE);
}
void loop() {
// put your main code here, to run repeatedly:
while(!flag)
{
}
digitalWrite(test_output,LOW);
delay (wait_time);
flag=0;
digitalWrite(test_output,HIGH);
}
void pak_ap()
{
flag=1;
}
на всяк случай надо еще прошивку через ардуино IDE проверить да работу на реал - макете... Пока натуртесты на макетке не делал.
Таки работает от кнопки...
Как вариант можно работу с АЦП посмотреть - напрямую в референсе компрартора нет, а лезть в ассемблер - там больше времени на анализ и подготовку надо.
Да и схема должна быть в обязательном порядке.

Re: Одновибратор без перезапуска на Attyny 13
Добавлено: Вс мар 14, 2021 09:17:59
Demiurg
[uquote="dim3740",url="/forum/viewtopic.php?p=3996691#p3996691"]...[/uquote]
Изобрази картинкой с временными диаграммами, что приходит на вход, что хочешь получить на выходе. Словами, как ты написал не совсем понятно.
Re: Одновибратор без перезапуска на Attyny 13
Добавлено: Вс мар 14, 2021 09:39:41
dim3740
диаграмму приложил.
Если нужно, еще раз уточняю, что верхний (входной) сигнал условно нарисован нормируемым, т.е. логическим. В реалии - это звуковой сигнал в режиме ограничения, т.е. перегруженный. Я не знаю, как это понятнее написать... Число "импульсов" в пакете может быть различным, но период следования пакетов - задан в определенных границах. Поэтому является ВОЗМОЖНЫМ и определение параметров выходного сигнала - периода и длительности.
Re: Одновибратор без перезапуска на Attyny 13
Добавлено: Вс мар 14, 2021 10:28:36
BOB51
В подобной конструкции наиболее сложная часть - нормирование и привязка к "земле" уровня отсутствия входного сигнала.
Состояние покоя на сигнальном входе МК должно быть то-ли логической единицей, то-ли "землей".
А вот во время самого сигнала - то уже произвольно - от gnd до +питания-0,5вольта (или наоборот - в зависимости какой уровень будет выбран как "отсутствие сигнала"). Простая привязка к опорному напряжению на неинвертирующем выводе компаратора может вызвать проблемы при наличии шумов... Да и усиление самого встроенного компаратора (именно в данном случае - аттини13) не поддается регулировке.
Основная проблема именно там и будет подстерегать.
Посему и конкретная схемка не помешает.
Согласно Ваших диаграмм мой вышеприложенный СКОТч вполне выполнит задачу.
Разве что выходной сигнал надо инвертировать (у меня под светик сделан).
А вот ежли входной аналоговый да ненормированный сигнал гнать - тогда не помешает пересмотреть книжи Рюмика серии "1000 и одна микроконтроллерная схема" ( их на сегодня три книжи в серии...) или схемы формирователей-ограничителей любительских частотомеров.

Re: Одновибратор без перезапуска на Attyny 13
Добавлено: Вс мар 14, 2021 10:34:47
Demiurg
Если я правильно понял задачу, вход чисто логический. Со стороны сигнала, понять что на выходе звука. Если потребуется усилить, выпрямить и подать на компаратор, чтобы получить логический сигнал.
Уточняю задачу. Пришла первая пачка, формируем одиночный сигнал. Во время подачи сигнала игнорируем, что на входе. С какой частотой приходят пачки неважно. И сколько времени нет входного сигнала тоже не важно? Всё правильно?
Вообще хотелось бы понять, что за устройство вам требуется. И какие задачи устройство должно выполнять.
Re: Одновибратор без перезапуска на Attyny 13
Добавлено: Вс мар 14, 2021 10:39:37
BOB51
Да вот тут и неразбериха - судя по тому, что топикстартер выше написал у него входной сигнал сравнивается с заданным уровнем средствами компаратора тиньки. Статус "покоя"(отсутствия сигнала) в этом случае неопределен (неизвестна схемотехника).
Т.е. сигнал аналоговый (хотя и "покореженный").
А на приводимых диаграммах - вроде как "нормированная логика"...
Посему и разобраться в "тонкостях" проблематично.

Re: Одновибратор без перезапуска на Attyny 13
Добавлено: Вс мар 14, 2021 10:40:46
dim3740
Я посмотрю скетч ...спасибо. Правда, его надо "привязывать" к компаратору все равно. Что касается точности - думаю, у меня требования к ним очень невелики. Важнее простота в данном случае. Аттини, переменный резистор, кондер по питанию - все. Входа, выхода, питание.
Re: Одновибратор без перезапуска на Attyny 13
Добавлено: Вс мар 14, 2021 10:42:43
Demiurg
ТС, ответьте на вопросы выше. Вдогонку ещё один вопрос. Что с аналоговым сигналом? Размах и так далее.
Re: Одновибратор без перезапуска на Attyny 13
Добавлено: Вс мар 14, 2021 10:51:56
dim3740
Аналоговый сигнал снимается через типовой выход китайского МП3 плеера. На плеер записан семпл - это ограниченный, перегруженный короткий импульс звуковой частоты. Длительность - ту которую нужно для работы схемы. Пусть это 30 мс, и частота 2 кгц. Период следования не чаще 250 мс. Выход выпрямляем через однополупериодный диод. И подаем на компаратор Аттини без всяких "усилителей" и нормировщиков. Задача - мерять период следования "пакетов / импульсов". На аттини - возложена первая задача - преобразование формы и нормирование. На выход можно иметь сигнал любой скважности - важны только фронты для измерения. Задачу измерения НЕ рассматриваем! Это другой вопрос.
Re: Одновибратор без перезапуска на Attyny 13
Добавлено: Вс мар 14, 2021 10:58:57
NStorm
Если смотреть на ваши диаграммы, то всё просто. Много лишнего было:
Код: Выделить всё
#define F_CPU 9600000UL
#include <avr/io.h>
#include <util/delay.h>
int main(void)
{
DDRB |= (1 << PB3); // выход
while(1)
{
if(ACSR&(1<<ACO)) // по каждому переходу компаратора
{
PORTB &= ~(1<<PB3); // выход в 1
_delay_ms(280);
PORTB |= (1<<PB3); // выход в 0
}
}
}
Re: Одновибратор без перезапуска на Attyny 13
Добавлено: Вс мар 14, 2021 11:00:59
BOB51
[uquote="dim3740",url="/forum/viewtopic.php?p=3996962#p3996962"]Я посмотрю скетч ...спасибо. Правда, его надо "привязывать" к компаратору все равно. Что касается точности - думаю, у меня требования к ним очень невелики. Важнее простота в данном случае. Аттини, переменный резистор, кондер по питанию - все. Входа, выхода, питание.[/uquote]
Если сигнал на входе уже нормирован по амплитуде, то компаратор там совершенно лишний.
Вот схемка макетки на которой тестировался СКОТч:
https://img.radiokot.ru/files/20529/2gpqssq40l.GIF
описаниа платформы под адуринку
https://github.com/MCUdude/MicroCore

"без усилителей и нормировщиков" это задача АЦП, а не компаратора.
И в любом варианте при выпрямлении будет постоянная составляющая...
Опять же элементы схемотехники важны.

Re: Одновибратор без перезапуска на Attyny 13
Добавлено: Вс мар 14, 2021 11:04:43
dim3740
NStorm, про то и речь))) Код в принципе работает ,(но ненадежно , он не мой), однако, подсказали сейчас, что таймер можно заменить делеем. Потом - что значит "по каждому переходу компаратора" - это любому фронту?
Добавлено after 2 minutes 39 seconds:
[uquote="BOB51",url="/forum/viewtopic.php?p=3996977#p3996977"]"без усилителей и нормировщиков" это задача АЦП, а не компаратора.
И в любом варианте при выпрямлении будет постоянная составляющая...
Опять же элементы схемотехники важны.

[/uquote]
Я тут чайник(( Компаратор - для меня это всегда тот же АЦП, только с устройством сравнения.
Re: Одновибратор без перезапуска на Attyny 13
Добавлено: Вс мар 14, 2021 11:06:25
NStorm
[uquote="dim3740",url="/forum/viewtopic.php?p=3996979#p3996979"]Потом - что значит "по каждому переходу компаратора" - это любому фронту?[/uquote]
Ну это вообще-то слова были в исходном коде

Но вообще нет. Срабатывать это будет когда на выходе компаратора будет 1.