Одновибратор без перезапуска на Attyny 13

Обсуждаем контроллеры компании Atmel.
Ответить
Нашел транзистор. Понюхал.
Сообщения: 156
Зарегистрирован: Вс сен 28, 2014 07:54:21

Сообщение 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
}

что тут не так? пока косяки идут на лог.анализаторе.... Таймер будет перезапускаться, если его снова запустить?
Вложения
пакет.jpg
(9.85 КБ) 213 скачиваний
Реклама
Друг Кота
Аватара пользователя
Сообщения: 15589
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

А зачем АЦП для ловли сигнала заранее нормированного под логический уровень???
:shock:
Для того, что на картинке достаточно прерывания по спаду.
И то, ежли у МК помимо отслеживания "куча прочих забот" имеется.
8)
Последний раз редактировалось BOB51 Сб мар 13, 2021 18:48:25, всего редактировалось 1 раз.
Реклама
Нашел транзистор. Понюхал.
Сообщения: 156
Зарегистрирован: Вс сен 28, 2014 07:54:21

Сообщение dim3740 »

пакет - это звук с выхода усилителя. Там стоит выходной каскад в режиме ограничения, но тем не менее фронты могут быть нечеткие. Особая точность фиксации периода не нужна.
Друг Кота
Аватара пользователя
Сообщения: 15589
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

Уровень отсечки то всегда будет. В принципе сработка по уровню в какой-то точке всегда будет даже при наихудших условиях.
Другое дело ежли уровен где-то посрединке висеть будет.
:roll:
Возможно даже на адуринье подобное втиснуть можно...
(хотя мне для подобного ассемблер больше нравится).
Есть еще разновидности ждущих одновибраторов на логике-рассыпухе...
:roll:
Последний раз редактировалось BOB51 Сб мар 13, 2021 18:55:50, всего редактировалось 1 раз.
Реклама
Эиком - электронные компоненты и радиодетали
Нашел транзистор. Понюхал.
Сообщения: 156
Зарегистрирован: Вс сен 28, 2014 07:54:21

Сообщение dim3740 »

Если вы знаете, режимы работы компаратора и будет ли перезапускаться таймер по моему коду - подскажите, пожалуйста.
Реклама
Друг Кота
Аватара пользователя
Сообщения: 15589
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

Режимы аппаратной начинки могу дать только под ассемблером.
Си лишь "в рамках референса" ардуиноIDE (без произвольного доступа к ресурсам аппаратных модулей МК).
:beer:
Реклама
Нашел транзистор. Понюхал.
Сообщения: 156
Зарегистрирован: Вс сен 28, 2014 07:54:21

Сообщение dim3740 »

Если поможете "под ключ" - то меня устроил бы и ассемблер (я его уже забыл совсем от института). Буду признателен, обсудим в личке.

Ардуино - тем более устроит, но.... Сделано так, что Тинька прошивается в панельке под ISP и AVR Studio, затем переносится на плату также в панельку. Всякие аддоны на IDE под тиньку не хочу ставить.

Уточняю, что уровень - не нормируемый. На другой вход Тиньки заведено опорное напряжение, и потенциометром устанавливается уровень сравнения компаратора. Это не стоит пересматривать.
Последний раз редактировалось dim3740 Сб мар 13, 2021 19:55:26, всего редактировалось 1 раз.
Друг Кота
Аватара пользователя
Сообщения: 15589
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

Под ардуиноIDE имеется вполне приличный перечень дополнительных платформ с аттини13.
Ограничения по установке платформ касаются только работы на компьютере с виндовс ХР (и то преодолимы).
Прошивка из ардуиноIDE через ISP программатор (который делается из ардуино-нано) также затруднений не вызывает.
Да и симулятор там имеется весьма солидный.
Так что можно попробовать.
:roll:
Вот вариант для аттини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 проверить да работу на реал - макете... Пока натуртесты на макетке не делал.
:beer:

Таки работает от кнопки...
:roll:

Как вариант можно работу с АЦП посмотреть - напрямую в референсе компрартора нет, а лезть в ассемблер - там больше времени на анализ и подготовку надо.
Да и схема должна быть в обязательном порядке.
8)
Это не хвост, это антенна
Сообщения: 1480
Зарегистрирован: Ср июн 25, 2008 15:19:44

Сообщение Demiurg »

[uquote="dim3740",url="/forum/viewtopic.php?p=3996691#p3996691"]...[/uquote]
Изобрази картинкой с временными диаграммами, что приходит на вход, что хочешь получить на выходе. Словами, как ты написал не совсем понятно.
Контактная информация:
Нашел транзистор. Понюхал.
Сообщения: 156
Зарегистрирован: Вс сен 28, 2014 07:54:21

Сообщение dim3740 »

диаграмму приложил.

Если нужно, еще раз уточняю, что верхний (входной) сигнал условно нарисован нормируемым, т.е. логическим. В реалии - это звуковой сигнал в режиме ограничения, т.е. перегруженный. Я не знаю, как это понятнее написать... Число "импульсов" в пакете может быть различным, но период следования пакетов - задан в определенных границах. Поэтому является ВОЗМОЖНЫМ и определение параметров выходного сигнала - периода и длительности.
Вложения
33333.jpg
(9.06 КБ) 183 скачивания
Друг Кота
Аватара пользователя
Сообщения: 15589
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

В подобной конструкции наиболее сложная часть - нормирование и привязка к "земле" уровня отсутствия входного сигнала.
Состояние покоя на сигнальном входе МК должно быть то-ли логической единицей, то-ли "землей".
А вот во время самого сигнала - то уже произвольно - от gnd до +питания-0,5вольта (или наоборот - в зависимости какой уровень будет выбран как "отсутствие сигнала"). Простая привязка к опорному напряжению на неинвертирующем выводе компаратора может вызвать проблемы при наличии шумов... Да и усиление самого встроенного компаратора (именно в данном случае - аттини13) не поддается регулировке.
Основная проблема именно там и будет подстерегать.
Посему и конкретная схемка не помешает.
:roll:
Согласно Ваших диаграмм мой вышеприложенный СКОТч вполне выполнит задачу.
Разве что выходной сигнал надо инвертировать (у меня под светик сделан).
А вот ежли входной аналоговый да ненормированный сигнал гнать - тогда не помешает пересмотреть книжи Рюмика серии "1000 и одна микроконтроллерная схема" ( их на сегодня три книжи в серии...) или схемы формирователей-ограничителей любительских частотомеров.
:beer:
Это не хвост, это антенна
Сообщения: 1480
Зарегистрирован: Ср июн 25, 2008 15:19:44

Сообщение Demiurg »

Если я правильно понял задачу, вход чисто логический. Со стороны сигнала, понять что на выходе звука. Если потребуется усилить, выпрямить и подать на компаратор, чтобы получить логический сигнал.
Уточняю задачу. Пришла первая пачка, формируем одиночный сигнал. Во время подачи сигнала игнорируем, что на входе. С какой частотой приходят пачки неважно. И сколько времени нет входного сигнала тоже не важно? Всё правильно?
Вообще хотелось бы понять, что за устройство вам требуется. И какие задачи устройство должно выполнять.
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 15589
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

Да вот тут и неразбериха - судя по тому, что топикстартер выше написал у него входной сигнал сравнивается с заданным уровнем средствами компаратора тиньки. Статус "покоя"(отсутствия сигнала) в этом случае неопределен (неизвестна схемотехника).
Т.е. сигнал аналоговый (хотя и "покореженный").
А на приводимых диаграммах - вроде как "нормированная логика"...
Посему и разобраться в "тонкостях" проблематично.
:dont_know:
Нашел транзистор. Понюхал.
Сообщения: 156
Зарегистрирован: Вс сен 28, 2014 07:54:21

Сообщение dim3740 »

Я посмотрю скетч ...спасибо. Правда, его надо "привязывать" к компаратору все равно. Что касается точности - думаю, у меня требования к ним очень невелики. Важнее простота в данном случае. Аттини, переменный резистор, кондер по питанию - все. Входа, выхода, питание.
Это не хвост, это антенна
Сообщения: 1480
Зарегистрирован: Ср июн 25, 2008 15:19:44

Сообщение Demiurg »

ТС, ответьте на вопросы выше. Вдогонку ещё один вопрос. Что с аналоговым сигналом? Размах и так далее.
Контактная информация:
Нашел транзистор. Понюхал.
Сообщения: 156
Зарегистрирован: Вс сен 28, 2014 07:54:21

Сообщение dim3740 »

Аналоговый сигнал снимается через типовой выход китайского МП3 плеера. На плеер записан семпл - это ограниченный, перегруженный короткий импульс звуковой частоты. Длительность - ту которую нужно для работы схемы. Пусть это 30 мс, и частота 2 кгц. Период следования не чаще 250 мс. Выход выпрямляем через однополупериодный диод. И подаем на компаратор Аттини без всяких "усилителей" и нормировщиков. Задача - мерять период следования "пакетов / импульсов". На аттини - возложена первая задача - преобразование формы и нормирование. На выход можно иметь сигнал любой скважности - важны только фронты для измерения. Задачу измерения НЕ рассматриваем! Это другой вопрос.
Поставщик валерьянки для Кота
Сообщения: 1978
Зарегистрирован: Ср июл 17, 2013 13:55: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
      }
   }
}
Друг Кота
Аватара пользователя
Сообщения: 15589
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

[uquote="dim3740",url="/forum/viewtopic.php?p=3996962#p3996962"]Я посмотрю скетч ...спасибо. Правда, его надо "привязывать" к компаратору все равно. Что касается точности - думаю, у меня требования к ним очень невелики. Важнее простота в данном случае. Аттини, переменный резистор, кондер по питанию - все. Входа, выхода, питание.[/uquote]
Если сигнал на входе уже нормирован по амплитуде, то компаратор там совершенно лишний.
Вот схемка макетки на которой тестировался СКОТч:
https://img.radiokot.ru/files/20529/2gpqssq40l.GIF
описаниа платформы под адуринку
https://github.com/MCUdude/MicroCore
8)
"без усилителей и нормировщиков" это задача АЦП, а не компаратора.
И в любом варианте при выпрямлении будет постоянная составляющая...
Опять же элементы схемотехники важны.
:roll:
Нашел транзистор. Понюхал.
Сообщения: 156
Зарегистрирован: Вс сен 28, 2014 07:54:21

Сообщение dim3740 »

NStorm, про то и речь))) Код в принципе работает ,(но ненадежно , он не мой), однако, подсказали сейчас, что таймер можно заменить делеем. Потом - что значит "по каждому переходу компаратора" - это любому фронту?

Добавлено after 2 minutes 39 seconds:
[uquote="BOB51",url="/forum/viewtopic.php?p=3996977#p3996977"]"без усилителей и нормировщиков" это задача АЦП, а не компаратора.
И в любом варианте при выпрямлении будет постоянная составляющая...
Опять же элементы схемотехники важны.
:roll:[/uquote]

Я тут чайник(( Компаратор - для меня это всегда тот же АЦП, только с устройством сравнения.
Поставщик валерьянки для Кота
Сообщения: 1978
Зарегистрирован: Ср июл 17, 2013 13:55:57

Сообщение NStorm »

[uquote="dim3740",url="/forum/viewtopic.php?p=3996979#p3996979"]Потом - что значит "по каждому переходу компаратора" - это любому фронту?[/uquote]
Ну это вообще-то слова были в исходном коде :)))
Но вообще нет. Срабатывать это будет когда на выходе компаратора будет 1.
Ответить

Вернуться в «AVR»