Таймеры/счётчики в AVR

Обсуждаем контроллеры компании Atmel.
u-Art
Родился
Сообщения: 3
Зарегистрирован: Пн янв 26, 2015 20:15:32

Re: Таймеры/счётчики в AVR

Сообщение u-Art »

while (1)
{
PORTB.0 = 1;
PORTB.0 = 0;
#asm
nop
... (Всего 12 nop)
nop
#endasm
}

Пока сделал так, в качестве эксперимента, странно, что скважность не более 7, если верить протеусу, видимо включение порта и отключение происходит более, чем за 2 такта.
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Re: Таймеры/счётчики в AVR

Сообщение Gudd-Head »

u-Art писал(а):Так, чтобы была возможность 2 такта держать лапку в 1, затем 8 тактов на лапке 0 и возврат к началу счета.
Вроде это режим Fast PWM top=OCR0A...
Когда мне надо было 1 такт "1" и 2 такта "0", мне посоветовали режим СТС.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Аватара пользователя
Pink-Pank
Опытный кот
Сообщения: 721
Зарегистрирован: Ср июн 11, 2014 09:43:13
Откуда: США
Контактная информация:

Re: Таймеры/счётчики в AVR

Сообщение Pink-Pank »

А как у Вы предлагаете организовать это в режиме СТС?
Единственный вариант я вижу через прерывания, используя второй регистр сравнения, но при таком количестве тактов прерывания замутить нереально..
Изображение
Вложения
CTC.png
(64.17 КБ) 833 скачивания
Fucking static initialization order fiasco
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Таймеры/счётчики в AVR

Сообщение ARV »

люди, вы что, с нового года не отошли?! :shock: :shock: :shock:
Fast PWM timer mode элементарно решает проблему 2 такта единичка 8 тактов нолик!!!

Код: Выделить всё

#include <avr/io.h>
#include <avr/interrupt.h>

int main(void){
   OCR0A = 10;
   OCR0B = 2;
   TCCR0A = _BV(COM0B1) | _BV(WGM00) | _BV(WGM01);
   TCCR0B = _BV(WGM02) | _BV(CS00);
   DDRB = 0xFF;
   while(1);
}
Изображение
Вложения
fast_pwm.jpg
(101.22 КБ) 846 скачиваний
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Re: Таймеры/счётчики в AVR

Сообщение Gudd-Head »

Да я в таймерах плаваю...
_BV это установить бит?
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Таймеры/счётчики в AVR

Сообщение ARV »

#define _BV(x) (1<<(x))
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
Pink-Pank
Опытный кот
Сообщения: 721
Зарегистрирован: Ср июн 11, 2014 09:43:13
Откуда: США
Контактная информация:

Re: Таймеры/счётчики в AVR

Сообщение Pink-Pank »

ARV писал(а):Fast PWM timer mode элементарно решает проблему 2 такта единичка 8 тактов нолик!!!

Да, действительно. Но это если есть расширенная настройка таймера, как здесь:
Изображение
А если таймер упрощенный, то только эмуляцией
Вложения
PWM.png
(77 КБ) 878 скачиваний
Fucking static initialization order fiasco
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Таймеры/счётчики в AVR

Сообщение ARV »

снова фантазии на отвлеченную тему? речь шла о тини13, не так ли? можно было бы еще сказать, что MCS51 в классическом исполнении вообще не позволяют таймеру тактироваться на частоте 9,6 МГц - а чо, это ведь так?

и далее - в каких именно AVR реализован "упрощенный" таймер без Fast PWM с регулируемым "верхом" (т.е. с изменяемой разрядностью счетчика ШИМ)? что-то память подводит...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
u-Art
Родился
Сообщения: 3
Зарегистрирован: Пн янв 26, 2015 20:15:32

Re: Таймеры/счётчики в AVR

Сообщение u-Art »

ARV Благодарю за ответ!

Я правильно понимаю, что в таком режиме таймера можно занять контроллер другими операциями?

Код немного смущает, это видимо не codevisionavr?
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Таймеры/счётчики в AVR

Сообщение ARV »

ШИМ реализуется аппаратно, поэтому ядро МК свободно полностью. Но таймер занят, и по вашим условиям даже нормальный обработчик прерываний на него не повесить.

код WinAVR, но в конкретном примере нет ничего, что не было бы совместимо с любыми иными компиляторами (макрос _BV раскрыл ранее).
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
alexan9er
Открыл глаза
Сообщения: 54
Зарегистрирован: Пт окт 03, 2014 14:41:16

Re: Таймеры/счётчики в AVR

Сообщение alexan9er »

ARV, а на скриншоте что за осцилограф? Из протеуса какой-то инструмент?
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Re: Таймеры/счётчики в AVR

Сообщение Gudd-Head »

alexan9er писал(а): осцилограф Из протеуса
Он самый
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
FAIR
Родился
Сообщения: 6
Зарегистрирован: Пн мар 02, 2015 15:16:00

Re: Таймеры/счётчики в AVR

Сообщение FAIR »

Здравствуйте. Подскажите, пожалуйста, реально ли сделать так, чтобы таймер\счетчик 2 в Atmega88, считал импульсы так,как делает это таймер\счетчик 0 с пина T0, с переключением OCRx при совпадении?
Если я правильно понимаю, то это можно реализовать с помощью асинхронного режима, подключив мой прямоугольный сигнал к TOSC1. К сожалению, мои попытки так сделать в Proteus не увенчались успехом :dont_know: . Может кто сталкивался с такой задачей. :)
Последний раз редактировалось FAIR Пн мар 02, 2015 19:47:29, всего редактировалось 1 раз.
Аватара пользователя
rxstart1
Вымогатель припоя
Сообщения: 508
Зарегистрирован: Пт фев 22, 2013 18:00:43
Откуда: Беларусь, г. Гомель

Re: Таймеры/счётчики в AVR

Сообщение rxstart1 »

Глупость пишите таймер не считает импульсы он просто тикает :))
FAIR
Родился
Сообщения: 6
Зарегистрирован: Пн мар 02, 2015 15:16:00

Re: Таймеры/счётчики в AVR

Сообщение FAIR »

Хорошо, можно ли сделать так, чтобы счетчик 2 считал импульсы с внешнего генератора?
Аватара пользователя
rxstart1
Вымогатель припоя
Сообщения: 508
Зарегистрирован: Пт фев 22, 2013 18:00:43
Откуда: Беларусь, г. Гомель

Re: Таймеры/счётчики в AVR

Сообщение rxstart1 »

да настроить таймер скажем по совпадению на пол секунды и в обработчике запустить счетчик, скажем count++, а в обработчике прерывания работать с результатом count=0; rez=count как то так
interrupt [EXT_INT0] void ext_int0_isr(void)
{
IntCount++; // Колличество прерываний увеличиваем на 1
}
//_____
//
// Обработчик прерывание TIMER1 по достижении 0.5 сек
//_____
interrupt [TIM1_COMPA] void timer1_compa_isr(void)
{
FTaho=IntCount; // Запомнить в FTaho текущее колличествво прерываний
IntCount=0; // Обнулить счетчик количества прерываний
TCNT1=0; // Сбросить счетчик TIMER1
}
FAIR
Родился
Сообщения: 6
Зарегистрирован: Пн мар 02, 2015 15:16:00

Re: Таймеры/счётчики в AVR

Сообщение FAIR »

Если я правильно понял, то таймер будет каждые, например, пол секунды, вызывать прерывание, в котором будет считаться количество таких прерываний. А заставить счетчик 2 именно считать импульсы с внешнего генератора никак нельзя? :roll: Я не знаю точно с какой частотой будут идти импульсы.
Аватара пользователя
rxstart1
Вымогатель припоя
Сообщения: 508
Зарегистрирован: Пт фев 22, 2013 18:00:43
Откуда: Беларусь, г. Гомель

Re: Таймеры/счётчики в AVR

Сообщение rxstart1 »

Блин еще раз попробую растолковать :))
таймер постоянно тикает ноги подвешеные на INT0 INT1 могут быть обработаны обработчиком прерываний и тут 2 варианта:
1. есть прерывание на ноге сохраняем показания счетчика таймера и сбрасываем его
2. есть событие прошло время захвата возвращаем колличество прерываний
так понятно???
если частота не известна, все ровно должен быть определен интервал от и до. Если и это неизвестно, то советую настроить совпадение по прошествию 1 сек
FAIR
Родился
Сообщения: 6
Зарегистрирован: Пн мар 02, 2015 15:16:00

Re: Таймеры/счётчики в AVR

Сообщение FAIR »

Это я понимаю. Дело в том, что мне принципиально важно, чтобы счетчик 2 считал импульсы с внешнего генератора без использования внешних прерываний INT0 и INT1. Просто чтобы он работал, как счетчик импульсов внешнего генератора, в режиме по совпадению переключал пин OCx при совпадении. :)
Аватара пользователя
rxstart1
Вымогатель припоя
Сообщения: 508
Зарегистрирован: Пт фев 22, 2013 18:00:43
Откуда: Беларусь, г. Гомель

Re: Таймеры/счётчики в AVR

Сообщение rxstart1 »

типа такой конструкции if (pind.4==state) {CNT2=0;}
Ответить

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