Таймеры/счётчики в AVR
Re: Таймеры/счётчики в AVR
while (1)
{
PORTB.0 = 1;
PORTB.0 = 0;
#asm
nop
... (Всего 12 nop)
nop
#endasm
}
Пока сделал так, в качестве эксперимента, странно, что скважность не более 7, если верить протеусу, видимо включение порта и отключение происходит более, чем за 2 такта.
{
PORTB.0 = 1;
PORTB.0 = 0;
#asm
nop
... (Всего 12 nop)
nop
#endasm
}
Пока сделал так, в качестве эксперимента, странно, что скважность не более 7, если верить протеусу, видимо включение порта и отключение происходит более, чем за 2 такта.
- Gudd-Head
- Друг Кота
- Сообщения: 20092
- Зарегистрирован: Чт сен 18, 2008 12:27:21
- Откуда: Столица Мира Санкт-Петербург
Re: Таймеры/счётчики в AVR
Когда мне надо было 1 такт "1" и 2 такта "0", мне посоветовали режим СТС.u-Art писал(а):Так, чтобы была возможность 2 такта держать лапку в 1, затем 8 тактов на лапке 0 и возврат к началу счета.
Вроде это режим Fast PWM top=OCR0A...
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
- Pink-Pank
- Опытный кот
- Сообщения: 721
- Зарегистрирован: Ср июн 11, 2014 09:43:13
- Откуда: США
- Контактная информация:
Re: Таймеры/счётчики в AVR
А как у Вы предлагаете организовать это в режиме СТС?
Единственный вариант я вижу через прерывания, используя второй регистр сравнения, но при таком количестве тактов прерывания замутить нереально..

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

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
Да я в таймерах плаваю...
_BV это установить бит?
_BV это установить бит?
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Таймеры/счётчики в AVR
#define _BV(x) (1<<(x))
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- Pink-Pank
- Опытный кот
- Сообщения: 721
- Зарегистрирован: Ср июн 11, 2014 09:43:13
- Откуда: США
- Контактная информация:
Re: Таймеры/счётчики в AVR
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
снова фантазии на отвлеченную тему? речь шла о тини13, не так ли? можно было бы еще сказать, что MCS51 в классическом исполнении вообще не позволяют таймеру тактироваться на частоте 9,6 МГц - а чо, это ведь так?
и далее - в каких именно AVR реализован "упрощенный" таймер без Fast PWM с регулируемым "верхом" (т.е. с изменяемой разрядностью счетчика ШИМ)? что-то память подводит...
и далее - в каких именно AVR реализован "упрощенный" таймер без Fast PWM с регулируемым "верхом" (т.е. с изменяемой разрядностью счетчика ШИМ)? что-то память подводит...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Re: Таймеры/счётчики в AVR
ARV Благодарю за ответ!
Я правильно понимаю, что в таком режиме таймера можно занять контроллер другими операциями?
Код немного смущает, это видимо не codevisionavr?
Я правильно понимаю, что в таком режиме таймера можно занять контроллер другими операциями?
Код немного смущает, это видимо не codevisionavr?
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Таймеры/счётчики в AVR
ШИМ реализуется аппаратно, поэтому ядро МК свободно полностью. Но таймер занят, и по вашим условиям даже нормальный обработчик прерываний на него не повесить.
код WinAVR, но в конкретном примере нет ничего, что не было бы совместимо с любыми иными компиляторами (макрос _BV раскрыл ранее).
код WinAVR, но в конкретном примере нет ничего, что не было бы совместимо с любыми иными компиляторами (макрос _BV раскрыл ранее).
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Re: Таймеры/счётчики в AVR
ARV, а на скриншоте что за осцилограф? Из протеуса какой-то инструмент?
- Gudd-Head
- Друг Кота
- Сообщения: 20092
- Зарегистрирован: Чт сен 18, 2008 12:27:21
- Откуда: Столица Мира Санкт-Петербург
Re: Таймеры/счётчики в AVR
Он самыйalexan9er писал(а): осцилограф Из протеуса
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Re: Таймеры/счётчики в AVR
Здравствуйте. Подскажите, пожалуйста, реально ли сделать так, чтобы таймер\счетчик 2 в Atmega88, считал импульсы так,как делает это таймер\счетчик 0 с пина T0, с переключением OCRx при совпадении?
Если я правильно понимаю, то это можно реализовать с помощью асинхронного режима, подключив мой прямоугольный сигнал к TOSC1. К сожалению, мои попытки так сделать в Proteus не увенчались успехом
. Может кто сталкивался с такой задачей. 
Если я правильно понимаю, то это можно реализовать с помощью асинхронного режима, подключив мой прямоугольный сигнал к TOSC1. К сожалению, мои попытки так сделать в Proteus не увенчались успехом
. Может кто сталкивался с такой задачей.
Последний раз редактировалось FAIR Пн мар 02, 2015 19:47:29, всего редактировалось 1 раз.
- rxstart1
- Вымогатель припоя
- Сообщения: 508
- Зарегистрирован: Пт фев 22, 2013 18:00:43
- Откуда: Беларусь, г. Гомель
Re: Таймеры/счётчики в AVR
Глупость пишите таймер не считает импульсы он просто тикает 
Re: Таймеры/счётчики в AVR
Хорошо, можно ли сделать так, чтобы счетчик 2 считал импульсы с внешнего генератора?
- rxstart1
- Вымогатель припоя
- Сообщения: 508
- Зарегистрирован: Пт фев 22, 2013 18:00:43
- Откуда: Беларусь, г. Гомель
Re: Таймеры/счётчики в AVR
да настроить таймер скажем по совпадению на пол секунды и в обработчике запустить счетчик, скажем 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
}
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
}
Re: Таймеры/счётчики в AVR
Если я правильно понял, то таймер будет каждые, например, пол секунды, вызывать прерывание, в котором будет считаться количество таких прерываний. А заставить счетчик 2 именно считать импульсы с внешнего генератора никак нельзя?
Я не знаю точно с какой частотой будут идти импульсы.
- rxstart1
- Вымогатель припоя
- Сообщения: 508
- Зарегистрирован: Пт фев 22, 2013 18:00:43
- Откуда: Беларусь, г. Гомель
Re: Таймеры/счётчики в AVR
Блин еще раз попробую растолковать
таймер постоянно тикает ноги подвешеные на INT0 INT1 могут быть обработаны обработчиком прерываний и тут 2 варианта:
1. есть прерывание на ноге сохраняем показания счетчика таймера и сбрасываем его
2. есть событие прошло время захвата возвращаем колличество прерываний
так понятно???
если частота не известна, все ровно должен быть определен интервал от и до. Если и это неизвестно, то советую настроить совпадение по прошествию 1 сек
таймер постоянно тикает ноги подвешеные на INT0 INT1 могут быть обработаны обработчиком прерываний и тут 2 варианта:
1. есть прерывание на ноге сохраняем показания счетчика таймера и сбрасываем его
2. есть событие прошло время захвата возвращаем колличество прерываний
так понятно???
если частота не известна, все ровно должен быть определен интервал от и до. Если и это неизвестно, то советую настроить совпадение по прошествию 1 сек
Re: Таймеры/счётчики в AVR
Это я понимаю. Дело в том, что мне принципиально важно, чтобы счетчик 2 считал импульсы с внешнего генератора без использования внешних прерываний INT0 и INT1. Просто чтобы он работал, как счетчик импульсов внешнего генератора, в режиме по совпадению переключал пин OCx при совпадении. 
- rxstart1
- Вымогатель припоя
- Сообщения: 508
- Зарегистрирован: Пт фев 22, 2013 18:00:43
- Откуда: Беларусь, г. Гомель
Re: Таймеры/счётчики в AVR
типа такой конструкции if (pind.4==state) {CNT2=0;}