Перейти к содержанию

Использование Таймера T0 Attiny13


-=FISHER=-

Рекомендуемые сообщения

Приветствую всех!

Знающие люди подскажите пожалуйста, как организовать на C следующий алгоритм действий:

при появление на входе PB0 кратковременной единицы, запускается таймер

при повторном появлении на PB0 единицы
{
если прошло менее 5 секунд то на выходе PB1 появляется единица на 3 секунды и таймер сбрасывается в ноль
}

если в течении 5 секунд единица на PB0 так и не появилась, то таймер сбрасывается

Прошу простить если не корректно описал задачу, спросите, попробую по другому объяснить. Заранее спасибо!

Мы все учились по-немногу, чему-нибудь и как-нибудь...

Ссылка на комментарий
Поделиться на другие сайты

Зачем нужен таймер, что он должен отсчитывать. Для его использования нужно знать частоту на которой работает МК. Эту задачу можно решить и на задержках, если это всё что нужно от МК.

Ссылка на комментарий
Поделиться на другие сайты

Некорректно, скорее не задача описана, а вопрос. Не понятно, что значит "как" ? Расписать алгоритм на бумажке и перевести его на любой язык. Это если в голове не можете держать алгоритм. Если можете, тогда просто взять и написать его.

И ещё, причём тут Т0 ?

Ссылка на комментарий
Поделиться на другие сайты

Сравнительное тестирование аккумуляторов EVE Energy и Samsung типоразмера 18650

Инженеры КОМПЭЛ провели сравнительное тестирование аккумуляторов EVE и Samsung популярного для бытовых и индустриальных применений типоразмера 18650. 

Для теста были выбраны аккумуляторы литий-никельмарганцевой системы: по два образца одного наименования каждого производителя – и протестированы на двух значениях тока разряда: 0,5 А и 2,5 А. Испытания проводились в нормальных условиях на электронной нагрузке EBD-USB от ZKEtech, а зарядка осуществлялась от лабораторного источника питания в режиме CC+CV в соответствии с рекомендациями в даташите на определенную модель. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Зачем нужен таймер, что он должен отсчитывать.

Ну в моем понимании он должен отсчитывать время, которое прошло после первого нажатия на кнопку. И если повторное нажатие произошло ранее чем пройдет 5 секунд, то выполняется действие. Если прошло меньше 5 секунд то ничего не происходит и опять начнается отсчет 5 секунд итд

Такую задачу можно решить без таймера? Да это это всё что требуется от МК.

Мы все учились по-немногу, чему-нибудь и как-нибудь...

Ссылка на комментарий
Поделиться на другие сайты

Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. 

Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств. Подробнее параметры и результаты тестов новой серии PLM по ссылке.

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Такую задачу можно решить без таймера?
Конечно можно. Временные интервалы то огромные.

Тут даже дело не в огромности, а в точности этих интервалов. Не думаю, что Вам нужна точность до микросекунды.

Ссылка на комментарий
Поделиться на другие сайты

Литиевые батарейки и аккумуляторы от мирового лидера  EVE в Компэл

Компания Компэл, официальный дистрибьютор EVE Energy, бренда №1 по производству химических источников тока (ХИТ) в мире, предлагает продукцию EVE как со склада, так и под заказ. Компания EVE широко известна в странах Европы, Америки и Юго-Восточной Азии уже более 20 лет. Недавно EVE была объявлена поставщиком новых аккумуляторных элементов круглого формата для электрических моделей «нового класса» компании BMW.

Продукция EVE предназначена для самого широкого спектра применений – от бытового до промышленного. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Конечно можно. Временные интервалы то огромные. Не думаю, что Вам нужна точность до микросекунды.

Нет не нужна конечно такая точность. Будьте добры, укажите вектор по которому я найду решение.

Изменено пользователем -=FISHER=-

Мы все учились по-немногу, чему-нибудь и как-нибудь...

Ссылка на комментарий
Поделиться на другие сайты

Тогда обычный опрос ПИНа и задержки на delay_ms'ах.

А как примерно будет выглядеть алгоритм в таком случае?

Мы все учились по-немногу, чему-нибудь и как-нибудь...

Ссылка на комментарий
Поделиться на другие сайты

Примерно - так, как Вы описали в первом посте.

ждём нажатия кнопки ;
небольшая задержка, для устранения дребезга ;
ждём отжатия кнопки ;
цикл с задержкой 5 секунд {
 если нажали на кнопку{
   включаем что-то там ;
   небольшая задержка, для устранения дребезга ;
   ждём отжатия кнопки ;
   выходим из цикла задержки ; // команда break;
 }
}

Ссылка на комментарий
Поделиться на другие сайты

Ваш таймер интереснее организовать как таймаут. Пришла "1" - запустили отсчёт. Ну а далее по обстоятельствам.

ждем "1";

если таймаут невзведён, то запускаем на 5 сек;

иначе взвести на 3с порт РВ1

Я не раздаю удочки. Я продаю рыбу.

Ссылка на комментарий
Поделиться на другие сайты

Ваш таймер интереснее организовать как таймаут. Пришла "1" - запустили отсчёт. Ну а далее по обстоятельствам.

Если Вас не затруднит, могли бы Вы чуть-чуть конкретнее описать Ваше предложение. Я пока ещё не "славливаю на лету".

Примерно - так, как Вы описали в первом посте.

цикл с задержкой 5 секунд {

Цикл с задержкой в 5 секунд это вот так будет выглядеть?

for(sec=1; sec<6;sec++)

{

delay(1000);

}

Мы все учились по-немногу, чему-нибудь и как-нибудь...

Ссылка на комментарий
Поделиться на другие сайты

Цикл с задержкой в 5 секунд это вот так будет выглядеть?

for(sec=1; sec<6;sec++)

{

delay(1000);

}

Да, он самый.

Только дискретность, наверное, нужно поменьше поставить, чтобы успевалась кнопка обрабатываться. Например, 50-100 мс.

Ссылка на комментарий
Поделиться на другие сайты

Только дискретность, наверное, нужно поменьше поставить, чтобы успевалась кнопка обрабатываться. Например, 50-100 мс.

Если я правильно понял Вашу мысль, то вот как-то так?

for(sec=1; sec<21;sec++)

{

delay(50);

}

Мы все учились по-немногу, чему-нибудь и как-нибудь...

Ссылка на комментарий
Поделиться на другие сайты

при появление на входе PB0 кратковременной единицы, запускается таймер

Кратковременной - это какие временные рамки? Дребезг контактов учитываем?

Изменено пользователем demiurg1978
Ссылка на комментарий
Поделиться на другие сайты

Кратковременной - это какие временные рамки? Дребезг контактов учитываем?

Ну вот как раз чтобы исключить дребезг.

Мы все учились по-немногу, чему-нибудь и как-нибудь...

Ссылка на комментарий
Поделиться на другие сайты

for(sec=1; sec<21;sec++)
{
delay_ms(50);
if PINB.0==1 \\отслеживаем нажатие кнопки
{
delay_ms(50); \\задержка для устранения дребезга
if PINB.0==1 \\фиксируем истинное нажатие
{
PORTB.1=1;\\включаем что-то там
delay_ms(3000); \\удерживаем что-то там включенное в течении 3х секунд (так нужно по ТЗ)
POTDB.1=0; \\выключаем что-то там
}
}

Мне кажется здесь совсем не подходит метод с ипользованием обычного delay_ms, ибо общее время задержки в цикле увеличивается с каждой задержкой....

Изменено пользователем -=FISHER=-

Мы все учились по-немногу, чему-нибудь и как-нибудь...

Ссылка на комментарий
Поделиться на другие сайты

//========================================================================
#include "proc_device.h"
//========================================================================
//========================================================================
enum
{
BTN_NONE = 0,
BTN_DOWN,
BTN_WAIT_UP,
BTN_UP,
};
void proc_button (void)
{
static u08 _proc_button;
static soft_timer ST_PROC_BUTTON;
switch (_proc_button)
{
 case BTN_NONE:
	 if (PINB & (1<<PB0))
	 {
	 set_soft_timer (ST_PROC_BUTTON, 40, 0);
	 _proc_button = BTN_DOWN;
	 }
	 break;
 case BTN_DOWN:
	 if (handle_soft_timer (ST_PROC_BUTTON))
	 {
	 if (PINB & (1<<PB0))
	 {
		 Set_Event (EV_ID_KEY_PRESSED);
		 _proc_button = BTN_WAIT_UP;
	 }
	 else
		 _proc_button = BTN_NONE;
	 }
	 break;
 case BTN_WAIT_UP:
	 if (!(PINB & (1<<PB0)))
	 {
		 set_soft_timer (ST_PROC_BUTTON, 40, 0);
		 _proc_button = BTN_UP;
	 }
	 break;
 case BTN_UP:
	 if (handle_soft_timer (ST_PROC_BUTTON))
	 {
	 if (!(PINB & (1<<PB0)))
	 {
		 Set_Event (EV_ID_KEY_UNPRESSED);
		 _proc_button = BTN_NONE;
	 }
	 else
		 _proc_button = BTN_WAIT_UP;
	 }
	 break;
 default:
	 break;
}
}
//========================================================================
//========================================================================
void proc_device (void)
{
static u08 _proc_device;
static soft_timer ST_PROC_DEVICE;
proc_button ();
switch (_proc_device)
{
 case 0:
	 set_bit (DDRB, 1); // Светодиод.
	 _proc_device = 1;
	 break;
 case 1:
	 if (Get_Event (EV_ID_KEY_PRESSED)) // Ждем нажатия кнопки.
	 {
		 _proc_device = 2;
	 }
	 break;
 case 2:
	 if (Get_Event (EV_ID_KEY_UNPRESSED)) // Ждем отжатия кнопки.
	 {
		 set_soft_timer (ST_PROC_DEVICE, 5000, 0); // Установка таймера на 5 с.
		 _proc_device = 3;
	 }
	 break;
 case 3:
	 if (Get_Event (EV_ID_KEY_PRESSED)) // Ждем повторное нажатие кнопки.
	 {
	 _proc_device = 4;
	 }
	 if (handle_soft_timer (ST_PROC_DEVICE)) // Если 5 с истекло, начинаем сначала.
	 {
	 _proc_device = 1;
	 }
	 break;
 case 4:
	 if (Get_Event (EV_ID_KEY_UNPRESSED)) // Ждем отжатия кнопки.
	 {
	 set_bit (PORTB, 1); // Включаем светодиод.
	 set_soft_timer (ST_PROC_DEVICE, 3000, 0); // Установка таймера на 3 с.
	 _proc_device = 5;
	 }
	 break;
 case 5:
	 if (handle_soft_timer (ST_PROC_DEVICE)) // Если 3 секунды истекло,
	 {
	 clr_bit (PORTB, 1); // то отключаем светодиод.
	 _proc_device = 1; // и начинаем сначала.
	 }
	 break;
}
}
//========================================================================

TEMPLATE_FORUM_CXEM.rar

Изменено пользователем demiurg1978
Ссылка на комментарий
Поделиться на другие сайты

общее время задержки в цикле увеличивается с каждой задержкой....
А как оно должно быть ?

С каждой интерацией цикла, задержка увеличивается на 50 мс. Всё верно.

А при нажатии на кнопку, уже пофиг сколько там она будет потом идти, общее время всё равно сбрасывается.

Кстати, у Вас нет выхода из цикла.

Что не так?

Слишком многабукафф, ради элементарной задачи :)

кстати, и вот это :

delay_ms(50); \\задержка для устранения дребезга
if PINB.0==1 \\фиксируем истинное нажатие
{

наверное, всё таки, ни к чему. Особенно вторая проверка. В течении последующих 3-х секунд, всё равно кнопка будет отжата.
Ссылка на комментарий
Поделиться на другие сайты

А как оно должно быть ?

Цикл ведь получится не 5 секундный тогда, а наверное минимум 8 секундный, разве нет?

Мы все учились по-немногу, чему-нибудь и как-нибудь...

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...