Jump to content
-=FISHER=-

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

Recommended Posts

Скорее нет, чем да.

Максимум, на сколько он растянется, это на 20 обработок оператора for. А это - мизер.

Share this post


Link to post
Share on other sites

Я отвык от элементарных задач. Мне зачастую проще на автоматах быстренько накидать. :)

Share this post


Link to post
Share on other sites

Изготовление 2-х слойных плат от 2$, а 4-х слойных от 5$!

Быстрое изготовление прототипа платы всего за 24 часа! Прямая доставка с нашей фабрики!

Смотрите видео о фабрике JLCPCB: https://youtu.be/_XCznQFV-Mw

Посетите первую электронную выставку JLCPCB https://jlcpcb.com/E-exhibition чтобы получить купоны и выиграть iPhone 12, 3D-принтер и так далее...

Он сейчас тупит с элементарным, а Вы ему события да автоматы подсовываете для изучения :vava:

Как бы это не звучало но это именно так.

Мне тоже кажется эта задача элементарной, но на самом деле сейчас для меня она архи-сложная. И её понимание, не говоря о решении видимо займет месяцок если не больше.

Я привык воспринимать нажатие кнопки, как единое событие (ну например для Delphi). А фиксация ОТЖАТИЯ меня сбивает с мысли.

Edited by -=FISHER=-

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

Share this post


Link to post
Share on other sites

Вебинар «Практическое использование TrustZone в STM32L5»(10.12.2020)

Приглашаем на вебинар, посвященный экосистеме безопасности и возможностях, которые появились у разработчиков благодаря новой технологии TrustZone в микроконтроллерах STM32L5. Программа рассчитана на технических специалистов и тех, кто уже знаком с основами защиты ПО в STM32.

Подробнее

Я отвык от элементарных задач. Мне зачастую проще на автоматах быстренько накидать. :)

Вы не поверите, но я эту задачу тоже решил бы по-другому. Примерно как и Вы :)

Share this post


Link to post
Share on other sites

Снижена цена на AC/DC и DC/DC преобразователи Mornsun в Компэл!

Компэл и компания Mornsun снизили цены на преобразователи AC/DC-преобразователи семейств LS и LDE. По привлекательной цене также предлагаются DC/DC-преобразователи изолированных семейств поколений R2 и R3 различного конструктивного исполнения.

Подробнее

А фиксация ОТЖАТИЯ меня сбивает с мысли.
А чем оно отличается от "нажатия" ? Да ничем. Только инверсией состояний.

Если хотите иметь события по кнопке, то выведите её обработку в отдельную функцию, в ней читайте текущее значение и сравнивайте с предыдущим. И будет Вам события. Но тогда нужно будет её вызывать с периодом, не меньшим дребезга.

Share this post


Link to post
Share on other sites

Материалы вебинара: «Силовые компоненты Wolfspeed на основе карбида кремния (SiC)»

Вы можете посмотреть видеозапись вебинара «Силовые компоненты Wolfspeed на основе карбида кремния (SiC)», ознакомиться с ответами на вопросы и презентацией, в которой вы найдете много полезных ссылок, в том числе подробнее раскрывающих ответы на вопросы.

Подробнее

ТС, читайте это. Там много ответов на ваши вопросы. А в моем проекте еще и бонусом программные таймеры.

Edited by demiurg1978

Share this post


Link to post
Share on other sites
bit oldButton, Button;
int timer5sec, timer3sec;

void main(void)
{
while(1)
{
delay_ms(10);
oldButton= Button;
Button= PINB.0;
if(oldButton && !Button)
   {
   if(timer5sec)
       {
       timer3sec= 300; // взводим таймер на 3 сек
       PORTB.1= 1; // зажигаем светодиод
       }
   else timer5sec= 500; // взводим таймер на 5 сек
   }
if(timer5sec) --timer5sec;
if(timer3sec) --timer3sec;
else PORTB.1= 0; // гасим светодиод
}
}


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

Share this post


Link to post
Share on other sites

bit oldButton, Button;
int timer5sec, timer3sec;

void main(void)
{
while(1)
{
delay_ms(10);
oldButton= Button;
Button= PINB.0;
if(oldButton && !Button)
{
if(timer5sec)
{
timer3sec= 300; // взводим таймер на 3 сек
PORTB.1= 1; // зажигаем светодиод
}
else timer5sec= 500; // взводим таймер на 5 сек
}
if(timer5sec) --timer5sec;
if(timer3sec) --timer3sec;
else PORTB.1= 0; // гасим светодиод
}
}

Я извиняюсь, это законченный вариант для решения моей задачи? :umnik2:


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

Share this post


Link to post
Share on other sites

Неотлаженный. Может и рабочий даже.


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

Share this post


Link to post
Share on other sites

Неотлаженный. Может и рабочий даже.

Спасибо! На досуге попробую запустить. Кстати МК AtTiny13a.

А что означают строчки:

if(timer5sec) --timer5sec;

if(timer3sec) --timer3sec;

Edited by -=FISHER=-

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

Share this post


Link to post
Share on other sites

Декремент при ненулевом значении переменной. В данном случае уменьшение таймеров, отсчитывающих 5 сек и 3сек.


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

Share this post


Link to post
Share on other sites

Подкорректировал с учетом первого поста:

#include <tiny13.h>
#include <delay.h>

bit oldButton, Button;
int timer5sec, timer3sec;

void main(void)
{
// Port B initialization
PORTB=0x01;
DDRB=0x02;
// Analog Comparator: Off
ACSR=0x80;
ADCSRB=0x00;

while (1)
{
delay_ms(10);
oldButton= Button;
Button= PINB.0;
if(oldButton && !Button)
{
if(timer5sec)
{
timer5sec= 0;
timer3sec= 300; // взводим таймер на 3 сек
PORTB.1= 1; // зажигаем светодиод
}
else timer5sec= 500; // взводим таймер на 5 сек
}
if(timer5sec) --timer5sec;
if(timer3sec) --timer3sec;
else PORTB.1= 0; // гасим светодиод
};
}


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

Share this post


Link to post
Share on other sites

...

Как бы в данном случае не важно. Но почему преддекремент? Ненавижу если честно эти термины, инкремент, декремент... Но альтернативы вроде нет...

Share this post


Link to post
Share on other sites

Я посчитал, что важно, бо:

и таймер сбрасывается в ноль

Почему пред? Да чёрт его знает. Так встали звёзды. Поставьте пост.

Термины вы можете любить, ненавидеть. Им по барабану.


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

Share this post


Link to post
Share on other sites

Вот вариант.

Chip type : ATtiny13

AVR Core Clock frequency: 4,800000 MHz

Memory model : Tiny

External RAM size : 0

Data Stack size : 16

*****************************************************/

#include <tiny13.h>

#include <delay.h>

unsigned char vremja; //Переменная для отсчёта времени в прерываниях

unsigned char klavisha; //Переменная для подсчёта количества нажатий

// Прерывание Timer 0 по переполнению каждые 0,054312 Сек

interrupt [TIM0_OVF] void timer0_ovf_isr(void)

{if(!PINB.1) //Если порт B1 выключен отсчитываем 5 сек

{vremja++; //Счётчик времени +1

if(vremja == 92) //Если прошло 5 сек то

{TCCR0B=0x00; //Остановить таймер

vremja = 0; //Обнулить счётчик

}

}

else //Иначе если порт B1 включён отсчитываем 3 сек

{vremja++; //Счётчик времени +1

if(vremja == 55) //Если прошло 3 сек то

{PORTB.1 = 0; //Выключить порт B1

TCCR0B=0x00; //Остановить таймер

vremja = 0; //Обнулить счётчик

}

}

}

void main(void)

{// Crystal Oscillator division factor: 1

#pragma optsize-

CLKPR=0x80;

CLKPR=0x00;

#ifdef _OPTIMIZE_SIZE_

#pragma optsize+

#endif

PORTB=0x00;

DDRB=0x02;

// Timer/Counter 0 initialization

// Clock source: System Clock

// Clock value: 4,688 kHz

TCCR0B=0x00;

// Timer/Counter 0 Interrupt(s) initialization

TIMSK0=0x02;

// Analog Comparator initialization

// Analog Comparator: Off

ACSR=0x80;

ADCSRB=0x00;

// Global enable interrupts

#asm("sei")

while (1)

{if(PINB.0) //Если клавиша нажата то

{delay_ms(10); //Задержка для антидребезга

if(PINB.0) //Если клавиша точно нажата то

{if(klavisha) //Если клавиша нажата не первый раз то

{PORTB.1 = 1; //Включить порт В1

vremja = 0; //Обнулить счётчик для отсчёта 3 сек

TCNT0 = 0;

klavisha = 0; //Обнулить информацию о клавишах для последующих нажатий

}

else //Иначе если клавиша нажата первый раз то

{klavisha++; //Клавиша = 1

TCCR0B = 0x05; //Запустить таймер для отсчёта 5 сек

}

while(PINB.0) //Ждём отпускания клавиши

{}

delay_ms(100); //Задержка для антидребезга

}

}

};

}

Edited by Ittido

Share this post


Link to post
Share on other sites

Всем спасибо! Однако будучи полным нулем в СИ для МК да и вообще в СИ, я не смогу подогнать Ваши примеры под реальное устройство. Пойду поищу кто сделает готовый проект


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

Share this post


Link to post
Share on other sites

Браво. :wall: Готовый проэкт я выложил в последнем посте и разжёван каждый шаг в коментах. Неужели нельзя самому скопировать и скомпилировать. Воистину НИКТО, НИКОГО, НИЧЕМУ не может научить. Могут только помочь научиться. Но для этого нужно иметь желание учиться. Иначе всё напрасно.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

×
×
  • Create New...