Например TDA7294

Форум РадиоКот • Просмотр темы - Таймеры/счётчики в AVR
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Чт апр 18, 2024 20:42:00

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 1322 ]     ... , , , 44, , , ...  
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: Таймеры/счётчики в AVR
СообщениеДобавлено: Вс янв 14, 2018 14:46:51 
Друг Кота
Аватар пользователя

Карма: 46
Рейтинг сообщений: 2030
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Сообщений: 6618
Откуда: Сердце Пармы
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
jeka101 хоть мегу, хоть тини: настраиваешь таймер на генерацию прерываний, по ним идут пара программных счётчиков и программное же сравнение с уставками, всё.

_________________
Просто не учи физику в школе, и вся твоя жизнь будет наполнена чудесами и волшебством :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Таймеры/счётчики в AVR
СообщениеДобавлено: Вс янв 14, 2018 17:06:23 
Открыл глаза

Карма: 4
Рейтинг сообщений: 4
Зарегистрирован: Вс май 03, 2015 15:05:58
Сообщений: 55
Рейтинг сообщения: 0
Всем добрый день.
Вопросик есть, мне нужен таймер, с 2мя каналами на atmega8 или 328, к сожалению программную среду атмег я почти не знаю. Тем не менее хочу спросить может кто поможет.
Суть, нужно что-бы канал работал допустим 10ч а потом был выключен 14ч, 2й так-же но независимо от первого, и фоторезистор который не останавливает таймеры но блокирует работу обоих каналов, то есть если я посветил светом, канал отключиться но когда наступит темнота если время рабочего состояния на таймере еще не истекло он включит канал.

Я поискал на просторах интернета и нашел некоторые схемы и прошивки к ним но они все с дисплеями и ручными настройками, я ищу вариант без дисплея где у меня есть 1 кнопка RESET которая коротким нажатием запускает таймер одного канала и начинает его отсчет а последующим коротким нажатием запускает таймер второго канала и начинает его счет, а долгим нажатием сбрасывает оба, настройка интервалов таймеров через исходники.
Схему вроде собрать могу а вот программную часть не знаю как реализовать...


Можно сделать на одной atmega8, вешаем на нее часовой кварц, запускаем таймер в асинхронном режиме так, чтобы прерывание возникало раз в секунду. На каждом прерывании инкрементируем необходимые счетчики и проверяем достигли порога или нет (10ч = 36000с). Кнопки и инициализация каналов рулится через флаги, например. :)
Читать здесь http://easyelectronics.ru/avr-uchebnyj- ... jmera.html


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Таймеры/счётчики в AVR
СообщениеДобавлено: Вс янв 14, 2018 17:39:21 
Друг Кота

Карма: 64
Рейтинг сообщений: 966
Зарегистрирован: Пт мар 07, 2008 06:54:43
Сообщений: 4220
Откуда: Ижевск
Рейтинг сообщения: 0
Может неправильная последовательность запуска и очистки?

Попробуйте так
Код:
   ldi temp, (1<<OCIE0A) //Включаем прерывание по OCIE0A
   out TIMSK0, temp
;   ldi temp, (1<<OCF0A) //Очищаем флаг требования прерывания
   out TIFR0, temp


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: Таймеры/счётчики в AVR
СообщениеДобавлено: Вс янв 14, 2018 18:35:23 
Открыл глаза

Карма: 4
Рейтинг сообщений: 4
Зарегистрирован: Вс май 03, 2015 15:05:58
Сообщений: 55
Рейтинг сообщения: 0
Может неправильная последовательность запуска и очистки?

Попробуйте так


Так еще одно лишнее прерывание появляется. Скидываю проект в 4й студии и 7м протеусе чтобы Вы попробовали сами. На скрине красным обведено прерывание которое возникать не должно.


Вложения:
6. timer bug.rar [16.68 KiB]
Скачиваний: 167
Снимок.JPG [51.5 KiB]
Скачиваний: 403
Вернуться наверх
 
Организация питания на основе надежных литиевых аккумуляторов EVE и микросхем азиатского производства

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

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Таймеры/счётчики в AVR
СообщениеДобавлено: Пн янв 15, 2018 06:53:11 
Друг Кота

Карма: 64
Рейтинг сообщений: 966
Зарегистрирован: Пт мар 07, 2008 06:54:43
Сообщений: 4220
Откуда: Ижевск
Рейтинг сообщения: 0
Прерывание возникает т.к. нет глобального запрета. Попробуйте так.
Код:
//Разрешаем прерывания
   sei
MAIN:
   sbrs flag, flg_interval   
   rjmp MAIN            
//Стоп таймер
   CLI
;
;
;
   RJMP MAIN-1


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

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

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Таймеры/счётчики в AVR
СообщениеДобавлено: Пн янв 15, 2018 08:24:47 
Открыл глаза

Карма: 4
Рейтинг сообщений: 4
Зарегистрирован: Вс май 03, 2015 15:05:58
Сообщений: 55
Рейтинг сообщения: 0
Конечно все можно исправить с помощью cli. Но дело то в другом, по теории прерывание не должно возникать потому что таймер был остановлен, сброшен, очищен флаг прерывания и запущен заново. Ну не может оно возникнуть с режиме стс на первом такте в то время как сравнение идёт не с 1 а с числом 124. Я пока что расцениваю это явление как очередной баг протеуса, тк симулятор студии этого прерывания не показывает. Постараюсь проверить в железе этот код, отпишусь.


Последний раз редактировалось Feruz Пн янв 15, 2018 12:55:39, всего редактировалось 1 раз.

Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Таймеры/счётчики в AVR
СообщениеДобавлено: Пн янв 15, 2018 08:26:58 
Вымогатель припоя
Аватар пользователя

Карма: 7
Рейтинг сообщений: 58
Зарегистрирован: Чт янв 20, 2011 09:07:08
Сообщений: 665
Откуда: Пермь
Рейтинг сообщения: 0
А это вообще нормально - использовать cli для остановки таймера?
Разве запрет прерываний остановит таймер?

_________________
Никакая контра не уйдёт от нас


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Таймеры/счётчики в AVR
СообщениеДобавлено: Пн янв 15, 2018 11:04:31 
Открыл глаза

Карма: 4
Рейтинг сообщений: 4
Зарегистрирован: Вс май 03, 2015 15:05:58
Сообщений: 55
Рейтинг сообщения: 0
Все подтвердилось. В железе прерывание не происходит (в прикреплении). В протеусе происходит (скрин парой постов выше).


Вложения:
jgJ8si6HgUk.jpg [53.66 KiB]
Скачиваний: 517
Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Таймеры/счётчики в AVR
СообщениеДобавлено: Пт янв 26, 2018 14:25:16 
Родился

Зарегистрирован: Ср ноя 23, 2011 10:36:42
Сообщений: 1
Рейтинг сообщения: 0
Добрый день, изучаю AVR и делаю управление для вытяжки, за основу взял ATmega8. требуется помощь в правильности написания алгоритма при выполнении временных задержек.

Основные задачи:

1.Режим включение на 15мин. одного из трех режимов вентилятора.
2.Режим включения на 2 минуты подсветки, при чем не зависимо от 1 пункта.
3.Режимы оповещения т.к. моргание светодиодов (короткое, длинное, плавное) и звуки динамика (короткие, длинные).

Почитав литературу понял, что правильно это реализовывать через таймеры, но как правильно пока не понимаю, из просмотра форума понял что мигание и опрос кнопок лучше реализовать через создание одного таймера как системный, а как правильно формировать временные задержки на выполнение?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Таймеры/счётчики в AVR
СообщениеДобавлено: Пт янв 26, 2018 14:43:02 
Мудрый кот

Карма: 34
Рейтинг сообщений: 288
Зарегистрирован: Вс ноя 15, 2009 23:13:59
Сообщений: 1817
Откуда: Харьков
Рейтинг сообщения: 0
Цитата:
А это вообще нормально - использовать cli для остановки таймера?
Разве запрет прерываний остановит таймер?

Не остановит! Он только перестанет плевать прерываниями, но продолжит работать. Чтобы его остановить, надо или явно прописать это в регистр, или остановить соответствующий тактовый генератор.

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Таймеры/счётчики в AVR
СообщениеДобавлено: Вс фев 18, 2018 15:36:37 
Потрогал лапой паяльник
Аватар пользователя

Карма: 19
Рейтинг сообщений: 8
Зарегистрирован: Чт окт 31, 2013 10:54:32
Сообщений: 381
Рейтинг сообщения: 0
Сижу туплю. Есть таймер, прерывание раз в 10мкс. Как сделать аппаратный delay при помощи таймера?

Т.е. мне нужно взять текущее значение которое на тикал таймер, и отсчитать от этого значение времени задержки? Или управлять таймером - включать и выключать его на нужно время?


Последний раз редактировалось alex38779 Вс фев 18, 2018 16:39:53, всего редактировалось 1 раз.

Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Таймеры/счётчики в AVR
СообщениеДобавлено: Вс фев 18, 2018 15:58:29 
Вымогатель припоя

Карма: -8
Рейтинг сообщений: 49
Зарегистрирован: Вс дек 28, 2014 21:54:05
Сообщений: 615
Рейтинг сообщения: 0
А диапазон делая какой?

_________________
Я всё-всё узнAю и стану профессором.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Таймеры/счётчики в AVR
СообщениеДобавлено: Вс фев 18, 2018 16:04:08 
Потрогал лапой паяльник
Аватар пользователя

Карма: 19
Рейтинг сообщений: 8
Зарегистрирован: Чт окт 31, 2013 10:54:32
Сообщений: 381
Рейтинг сообщения: 0
10мкс мин. задержка, таймер на стм32.

Мне интересен принцип построения такой функции. Как сделать правильно все.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Таймеры/счётчики в AVR
СообщениеДобавлено: Вс фев 18, 2018 16:46:18 
Вымогатель припоя

Карма: -8
Рейтинг сообщений: 49
Зарегистрирован: Вс дек 28, 2014 21:54:05
Сообщений: 615
Рейтинг сообщения: 0
10мкс задержка на секундном таймере? Это как?
Если не нужны задержки мкс и сек, минуты одновременно, то таймер настраиваем на соответствующий диапазон. Напр, надо 120 мкс, настраиваем таймер на 10мкс, в переменную заносим 12 и в прерывании декремент, если переменная=0, выставляем некий флаг, на который в основном теле обратите внимание.
Т.е.:
1. Каждые 10 мкс по таймеру возникает прерывание
2. В прерывании проверяем переменную. Если 255 - выходим ничего не делая, те вам не нужна задержка.
3. Вам потребовалась задержка. Переменной присваиваем значение равное нужной задержке /на частоту прерывания, те 120/10=12
4. В прерывании обнаруживаете, что переменная не равна 255 и декрементируете её, проверяете на 0, выходите из прерывания
5. Как только переменная стала =0 выставляете флаг и выходите. В следующем прерывании переменная декрементируется и автоматом станет=255
6. В теле по флагу запускаете/останавливаете свой процесс и сбрасываете флаг

Пременная может быть и 2хбайтовой, в этом случае я проверяю оба байта.
Если надо секунды-минуты-часы и т.д. настраиваем соответственно и таймер, а то замучаетесь по 10мкс насчитать десяток часов
Взяв несколько переменных можно организовать несколько задержек одновременно
Если одновременно должны тикать и минуты и микросекунды, может рациональнее задействовать другой таймер?

_________________
Я всё-всё узнAю и стану профессором.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Таймеры/счётчики в AVR
СообщениеДобавлено: Ср фев 21, 2018 06:02:05 
Потрогал лапой паяльник

Зарегистрирован: Сб май 03, 2014 20:01:51
Сообщений: 359
Откуда: Ижевск
Рейтинг сообщения: 0
я проще сделал, если надо считать время и точность не особо важна (розетка с таймером для подогрева машины и соседу делал управление светом в курятнике) использовал ватчдог, настроил на пол секунды, и в каждом прерывании по ватчдогу добавляю переменные. только плавает время в зависимости от температуры на улице. но от этого никуда не деться если только часы реального времени использовать. за неделю разбег в час не особо напрягает, тем более есть кнопки, которыми можно время поправить.
Спойлер
Код:
#define F_CPU 8000000
#include <avr/io.h>
#include <avr/wdt.h> // здесь организована работа с ватчдогом
#include <avr/sleep.h> // здесь описаны режимы сна
#include <avr/interrupt.h> // работа с прерываниями
#include <util/delay.h>

unsigned char tc=0;
unsigned char tm=0;
unsigned char th=0;
// Массив значений для индикатора
//----------
char SEGMENTE[] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F};
// Функция вывода 1 разряда
void write_byte_1(char data)
{
   for(char i = 0; i < 8 ; i++)
   {
      if((data & 0x80)!= 0) // Сравниваем 8-й бит с нулем
      PORTA |= (1 << PA0); // DATA 1
      else
      PORTA &= ~(1 << PA0); // DATA 0
      PORTA &= ~(1 << PA1); // CLK 0
      PORTA |= (1 << PA1); // CLK 1
      data = data << 1; // Сдвигаем биты
   }
}
   
// Функция вывода 2 разряда
void write_byte_2(char data)
{
   for(char i = 0; i < 8 ; i++)
   {
      if((data & 0x80)!= 0) // Сравниваем 8-й бит с нулем
      PORTA |= (1 << PA0); // DATA 1
      else
      PORTA &= ~(1 << PA0); // DATA 0
      PORTA &= ~(1 << PA1); // CLK 0
      PORTA |= (1 << PA1); // CLK 1
      data = data << 1; // Сдвигаем биты
   }
}
// Функция вывода 3 разряда
void write_byte_3(char data)
{
   for(char i = 0; i < 8 ; i++)
   {
      if((data & 0x80)!= 0) // Сравниваем 8-й бит с нулем
      PORTA |= (1 << PA0); // DATA 1
      else
      PORTA &= ~(1 << PA0); // DATA 0
      PORTA &= ~(1 << PA1); // CLK 0
      PORTA |= (1 << PA1); // CLK 1
      data = data << 1; // Сдвигаем биты
   }
}

ISR (WDT_vect)
{
   
   tc++;
   
   if (tc==54)
   {
      tm++;
      tc=0;
      
   }
   if (tm==60)
   {
      th++;
      tm=0;
      tc=0;
      
   }
   if (th==24)
   {
      th=0;
      tm=0;
      tc=0;
      
   }
   
   if ((PINB&(1<<PB0))==0)
   {
      th++;
   }
   
   if ((PINB&(1<<PB1))==0)
   {
      th--;
   }
   if (th>24)
   {
      th=0;
   }
   if ((3<=th)&&(th<=5))
   {
      PORTB |= (1 << PB2);
   
   }
   else
   {
       PORTB &= ~(1 << PB2);
   }
   
   
   WDTCSR |= (1 << WDIE);
   
   
}


int main(void)
{
   DDRB = 0b00000100;
   PORTB = 0b00000011;
   DDRA = 0b00011111;
   PORTA = 0b00000000;
   wdt_reset(); // сбрасываем
   wdt_enable(WDTO_1S); // разрешаем прерывания по ватчдогу. Иначе будет резет.
   WDTCSR |= (1<<WDIE);
   sei(); // разрешаем прерывания
   
   while(1)
    {
       write_byte_1(SEGMENTE[th%100/10]);
       PORTA |= (1 << PA2); // Выводим 1 разряд
       _delay_us(5000);
        PORTA &= ~(1 << PA2);
       write_byte_2((SEGMENTE[th%10])|0x80); // Выводим 2 разряд
       PORTA |= (1 << PA3); // Включаем индикатор
       _delay_us(5000);
        PORTA &= ~(1 << PA3);
       write_byte_3(SEGMENTE[tm%100/10]); // Выводим 3 разряд
        PORTA |= (1 << PA4); // Включаем индикатор
       _delay_us(5000);
        PORTA &= ~(1 << PA4);
                
    }
}

_________________
Электроника -очень точная наука, бубен необходимо держать в левой руке!!!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Таймеры/счётчики в AVR
СообщениеДобавлено: Сб фев 24, 2018 10:42:17 
Мудрый кот

Карма: 34
Рейтинг сообщений: 288
Зарегистрирован: Вс ноя 15, 2009 23:13:59
Сообщений: 1817
Откуда: Харьков
Рейтинг сообщения: 0
Существует ли достаточно мелкий AVR контроллер (чтобы не совать M88), который имеет минимум два независимых таймера с ШИМ-выходами? Нужно именно два отдельных таймера - мне надо выдавать две частоты одновременно. Лучше, если хотя бы один из них будет 16-битным, но это не столь критично.

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Таймеры/счётчики в AVR
СообщениеДобавлено: Сб фев 24, 2018 12:25:39 
Это не хвост, это антенна

Карма: 4
Рейтинг сообщений: 141
Зарегистрирован: Ср июн 25, 2008 15:19:44
Сообщений: 1384
Рейтинг сообщения: 0
Ищите в поисковике сводную таблицу мк авр.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Таймеры/счётчики в AVR
СообщениеДобавлено: Сб фев 24, 2018 12:43:15 
Друг Кота
Аватар пользователя

Карма: 46
Рейтинг сообщений: 2030
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Сообщений: 6618
Откуда: Сердце Пармы
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
тини 25: 8 ног два таймера по 8 бит, по два ШИМ выхода ADC, AC, внешние прерывания... (по памяти, на всяк скачай ДШ, проверь)

_________________
Просто не учи физику в школе, и вся твоя жизнь будет наполнена чудесами и волшебством :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Таймеры/счётчики в AVR
СообщениеДобавлено: Сб фев 24, 2018 13:03:42 
Мудрый кот

Карма: 34
Рейтинг сообщений: 288
Зарегистрирован: Вс ноя 15, 2009 23:13:59
Сообщений: 1817
Откуда: Харьков
Рейтинг сообщения: 0
Да, это была первая мысль, но немного не хватает ног. В крайнем случае придётся на этом, не получится - тогда на 2313.

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Таймеры/счётчики в AVR
СообщениеДобавлено: Сб фев 24, 2018 13:08:02 
Друг Кота
Аватар пользователя

Карма: 46
Рейтинг сообщений: 2030
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Сообщений: 6618
Откуда: Сердце Пармы
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
тини 24 побольше ног...

Добавлено after 1 minute 2 seconds:
а с 2313й по размерам уже и мега 8 сравнится (даже мельче будет)

_________________
Просто не учи физику в школе, и вся твоя жизнь будет наполнена чудесами и волшебством :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 1322 ]     ... , , , 44, , , ...  

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: Varlakotam и гости: 16


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y