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

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


-=FISHER=-

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

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

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

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

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

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

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

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

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

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

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

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

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

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

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

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

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

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

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

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

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

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

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

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

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

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

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

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

Изменено пользователем -=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 пользователей онлайн

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

    • Вот здесь человек описывает похожий метод, только в домашних условиях: https://www.kondratev-v.ru/zaryadnye/zaryadnoe-ustrojstvo-dlya-avtomobilnyx-akkumulyatorov.html
    • Доковырялся с макеткой так, что все перестало работать( И посмотрев внимательнее обнаружил, что в рабочем варианте у меня используется TPL5111 (ZFVX), а на макетке TPL5110 (ZALX). Китайцы видать напутали со сборкой положили и то и то. В одной статейке написано :  TPL5110 — таймер для управления внешним ключом питания, в качестве которого используется МОП-транзистор TPL5111 — таймер для управления внешним ключом питания, в качестве которого используется LDO-стабилизатор с функцией разрешения Что используется в качестве этого "LDO стабилизатора" пока не разобрался( Теперь только после праздников. пысы  Не получается блин просто))))))  
    • Тут я уже писАл, какой ток что на самом деле протекает.  
    • Как к модеру к нему конечно были вопросы. Ну и правила его не касались, когда кидался оскорблениями в адрес Василича. А за ответы на оскорбления Василич баны выхватывал
    • Смотрю, многие в усилителях избегают катодного повторителя. Либо сразу берут токовые лампы с хорошим усилением, либо два каскада последовательно на токовых лампах с низким усилением. Вроде бы на звук не влияет...
    • Имел дело с зарядкой батареек еще с советских времен. Тогда еще в магазине (!) купил специальную зарядку для ртутно-цинковых батареек, очень миниатюрная, зарядка шла от встроенного солнечного элемента (и это еще в советские времена!). Использовал для зарядки батареек для наручных часов, после первой зарядки батарейки хватало примерно на полгода, потом на 3-4 месяца. Потом (когда батарейка служила меньше двух месяцев) батарейка отправлялась на упокой. Спасала студента тогда очень эта вещица. Жалею что тогда не срисовал ее внутренности. А вот с зарядкой щелочных батареек пришлось заниматься уже значительно позже. Мне кто-то подарил такой набор (зарядка с комплектом перезаряжаемых батареек) - вот его обзор https://aphnetworks.com/reviews/pure_energy_xl  Все было нормально, но у всех этих батареек ресурс очень ограничен, примерно 25 циклов максимум. После чего емкость уменьшается и нет смысла их дальше использовать. После каждой зарядки емкость уменьшается, но не сильно. Реально раз десять заряжать можно точно без проблем. После того как выработался ресурс последней батарейки стал вопрос - а можно ли заряжать обычные батарейки тоже? Зарядка-то осталась... И как раз в то время приобрел обычные (т.е. "незаряжаемые") батарейки той же фирмы (PureEnergy). Оказалось что они заряжаются точно также, как и "заряжаемые"! Возможно что у них та же химия... Пробовал батарейки разных фирм, степени разряда. Короче говоря, фирменные всякие Дюраселлы и Энержайзеры не заряжаются вообще, и даже могут потечь во время зарядки. А вот самые дикие и дешевые нонейм чаще всего заряжаются без проблем. Насчет емкости - конечно емкость полностью не восстанавливается, но для работы в беспроводной клаве,, мышке или пульте вполне хватает и достаточно надолго.  Но занимаюсь этим нечасто, просто когда лень ехать в магазин за очередной партией батареек.  А если есть возможность, то предпочитаю переделывать питание под литий. Очень сильно достает саморазряд всяких Ni-Cd, Ni-MH - разряжаются даже те, которые якобы должны долго держать заряд. Схему зарядки еще не срисовывал (лень было разбирать), но схема сложнее чем все что я видел в Интернете. Напряжение заряда примерно 1,7в. xlaa_tds.pdf
    • Я делаю ставку на контакты NC реле запуска и NO реле торможения. Тем более они такие хлипенькие.
×
×
  • Создать...