Например TDA7294

 Форум РадиоКот • Просмотр темы - Как работать с таймерами ATmega48PA на C/C++ ?
Форум РадиоКот
Здесь можно немножко помяукать :)



Текущее время: Пн авг 20, 2018 10:39:14



Часовой пояс: UTC + 3 часа [ Летнее время ]


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



Начать новую тему Ответить на тему  [ Сообщений: 31 ]  На страницу 1, 2  След.
Автор Сообщение
Не в сети
 Заголовок сообщения: Как работать с таймерами ATmega48PA на C/C++ ?
СообщениеДобавлено: Сб июл 14, 2018 23:46:21 
Открыл глаза

Зарегистрирован: Вт сен 09, 2008 19:17:27
Сообщений: 57
Рейтинг сообщения: -3
Как работать с таймерами ATmega48PA на C/C++ (Atmel Studio 6.2) ?

Нужен пример кода настройки для таймера 0 с прерыванием по сравнению и максимальным коэффициентом деления,
а также самого вектора. (желательно с коментариями)

Или хотя бы для любого другого таймера ATmega48PA.

В сети полно примеров для ATmega8 и ATmega8A, а ATmega48PA как будто не существует!

Даташит:
http://ww1.microchip.com/downloads/en/D ... 02011A.pdf


Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: Как работать с таймерами ATmega48PA на C/C++ ?
СообщениеДобавлено: Вс июл 15, 2018 09:23:11 
Потрогал лапой паяльник
Аватар пользователя

Зарегистрирован: Сб дек 22, 2012 09:17:42
Сообщений: 340
Откуда: Караганда, Казахстан
Рейтинг сообщения: 0
Меги 48-88-168 и 328 отличаются только объемами памяти, периферия у них одинаковая, есть даже общий даташит на все 4 МК.

Я недавно занимался энкодерами с плохими контактами, задачу решал с применением таймера. Начал на 8-й Меге, потом, по просьбе коллеги sunjob спортил это дело на 328-ю, окончательный результат - вот. Там работа с Timer/Counter 2, использован режим Clear Timer on Compare Match (CTC). Может поможет?

_________________
Кто мешает тебе выдумать порох непромокаемый? (К. Прутков, мысль № 133)


Вернуться наверх
 Профиль  
 
JLCPCB, 10 прототипов ПП всего за $2 и 2 дня доставка!

Крупнейший производитель печатных плат в Китае, 300,000+ заказчиков, 10,000+ он-лайн заказов в день.

Рассчитайте цену онлайн:https://jlcpcb.com/quote

Не в сети
 Заголовок сообщения: Re: Как работать с таймерами ATmega48PA на C/C++ ?
СообщениеДобавлено: Вс июл 15, 2018 14:39:18 
Открыл глаза

Зарегистрирован: Вт сен 09, 2008 19:17:27
Сообщений: 57
Рейтинг сообщения: 0
Как бы я не задавал настройки таймера всегда появляется ошибка

expected constructor, destructor, or type conversion before '(' token

В данном примере их даже две, указывают на строки где ISR :


Код:
ISR (TIMER2_COMPA_vect)   // вектор прерывания по совпадению таймера 2
{
_delay_ms(500);   
}

ISR (USART_UDRE_vect)
{
_delay_ms(500);      
}


Что не так?


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

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

Второй конкурс по дизайну печатных плат от PCBWay!
Не в сети
 Заголовок сообщения: Re: Как работать с таймерами ATmega48PA на C/C++ ?
СообщениеДобавлено: Вс июл 15, 2018 16:36:02 
Потрогал лапой паяльник
Аватар пользователя

Зарегистрирован: Сб дек 22, 2012 09:17:42
Сообщений: 340
Откуда: Караганда, Казахстан
Рейтинг сообщения: 0
А #include <avr/interrupt.h> не забыл?

_________________
Кто мешает тебе выдумать порох непромокаемый? (К. Прутков, мысль № 133)


Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: Как работать с таймерами ATmega48PA на C/C++ ?
СообщениеДобавлено: Вс июл 15, 2018 16:53:31 
Друг Кота
Аватар пользователя

Карма: 31
Зарегистрирован: Сб сен 10, 2011 18:46:25
Сообщений: 3030
Рейтинг сообщения: 0
рабочая мигалка (в Протеусе) Мега48, таймер0, GCC AVR


Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: Как работать с таймерами ATmega48PA на C/C++ ?
СообщениеДобавлено: Вс июл 15, 2018 16:54:49 
Потрогал лапой паяльник
Аватар пользователя

Зарегистрирован: Сб дек 22, 2012 09:17:42
Сообщений: 340
Откуда: Караганда, Казахстан
Рейтинг сообщения: 0
Да, кстати, использовать в прерывающей программе любые delay - категорически неправильно.

_________________
Кто мешает тебе выдумать порох непромокаемый? (К. Прутков, мысль № 133)


Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: Как работать с таймерами ATmega48PA на C/C++ ?
СообщениеДобавлено: Вс июл 15, 2018 19:28:40 
Открыл глаза

Зарегистрирован: Вт сен 09, 2008 19:17:27
Сообщений: 57
Рейтинг сообщения: 0
Цитата:
А #include <avr/interrupt.h> не забыл?


afz спасибо, я его не нечаянно закоментировал!


oleg110592, спасибо за код!

Добавлено after 2 hours 28 minutes 43 seconds:
Почему у меня в Протеусе интервал мигания светодиода достигает максимума при значении OCR0A = 130 а потом
при 131...132... и т.д. начинает мигать чаще?

Код:
     // Tt0 = 1/(Fcpu/k) = 1/(8000000/64) = 0,000008s = 0.008ms
     // n = t/Tto - 1 = 1/0,008 - 1 = 124

     // Set the Timer Mode to CTC
     TCCR0A |= ( 1 << WGM01 ); //включаем режим "сброс таймера при совпадении"

     // Set the value that you want to count to
     OCR0A = 130;

     // Set the ISR COMPA vect
     TIMSK0 |= ( 1 << OCIE0A );

     // set prescaler to 64 and start the timer
     TCCR0B |= ( 1 << CS01 ) | ( 1 << CS00 );


Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: Как работать с таймерами ATmega48PA на C/C++ ?
СообщениеДобавлено: Пн июл 16, 2018 09:46:24 
Друг Кота
Аватар пользователя

Карма: 31
Зарегистрирован: Сб сен 10, 2011 18:46:25
Сообщений: 3030
Рейтинг сообщения: 0
при 131...132... и т.д. начинает мигать чаще?

может проделки Протеуса, в AVR Studio симуляторе все нормально:
124:
Изображение
132:
Изображение


Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: Как работать с таймерами ATmega48PA на C/C++ ?
СообщениеДобавлено: Пн июл 16, 2018 10:32:56 
Открыл глаза

Зарегистрирован: Вт сен 09, 2008 19:17:27
Сообщений: 57
Рейтинг сообщения: 0
К сожалению железо будет ехать с Али ещё месяц, если вообще не потеряется!

А кроме Протеуса, есть ещё какие нибудь более продвинутые эмуляторы, например что бы была эмуляция подведения питания к выводам контроллера, эмуляция кварца, и тп.?


Последний раз редактировалось DENIS451 Пн июл 16, 2018 10:39:29, всего редактировалось 1 раз.

Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: Как работать с таймерами ATmega48PA на C/C++ ?
СообщениеДобавлено: Пн июл 16, 2018 10:36:51 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 96
Зарегистрирован: Чт дек 28, 2006 09:19:56
Сообщений: 12090
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
DENIS451 писал(а):
есть ещё какие нибудь более продвинутые эмуляторы
нет даже равных протеусу, про более продвинутые и речь не идет

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


Вернуться наверх
 Профиль WWW  
 
В сети
 Заголовок сообщения: Re: Как работать с таймерами ATmega48PA на C/C++ ?
СообщениеДобавлено: Вт июл 17, 2018 14:56:25 
Потрогал лапой паяльник

Карма: 7
Зарегистрирован: Чт янв 21, 2016 16:59:10
Сообщений: 333
Рейтинг сообщения: 0
Да, кстати, использовать в прерывающей программе любые delay - категорически неправильно.

это почему же? :shock:


Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: Как работать с таймерами ATmega48PA на C/C++ ?
СообщениеДобавлено: Ср июл 18, 2018 00:49:56 
Собутыльник Кота
Аватар пользователя

Карма: 59
Зарегистрирован: Пн май 11, 2009 15:15:00
Сообщений: 2822
Откуда: СПб
Рейтинг сообщения: 0
Медали: 1
Мявтор 3-й степени (1)
Например, в случае с AVR, выполнение других прерываний, флаги которых были установлены во время задержки в прерывании, произойдёт только после окончания задержки. Таким образом, нарушится главная идея работы с прерываниями - мгновенная (почти) реакция на событие.

Да и основной цикл при этом простаивает, МК не выполняет полезной работы. Если задержки в основном цикле, а прерывания короткие, то во время задержек МК сможет выполнять какие-либо операции.

_________________
Этот пост оказался полезен? Не поленись, нажми Изображение слева!
:) :)) :)))
Куплю индикаторы ИТС-1А, ИТС-1Б, ИГВ1-8х5Л, ИГВ1-16/7х5 и подобные.
Куплю тиратроны ТХ3Б (много!)


Вернуться наверх
 Профиль  
 
В сети
 Заголовок сообщения: Re: Как работать с таймерами ATmega48PA на C/C++ ?
СообщениеДобавлено: Ср июл 18, 2018 08:42:24 
Потрогал лапой паяльник

Карма: 7
Зарегистрирован: Чт янв 21, 2016 16:59:10
Сообщений: 333
Рейтинг сообщения: 0
Например, в случае с AVR, выполнение других прерываний, флаги которых были установлены во время задержки в прерывании, произойдёт только после окончания задержки. Таким образом, нарушится главная идея работы с прерываниями - мгновенная (почти) реакция на событие.

а если нет других прерываний?

Да и основной цикл при этом простаивает, МК не выполняет полезной работы. Если задержки в основном цикле, а прерывания короткие, то во время задержек МК сможет выполнять какие-либо операции.

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


Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: Как работать с таймерами ATmega48PA на C/C++ ?
СообщениеДобавлено: Ср июл 18, 2018 08:46:13 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 96
Зарегистрирован: Чт дек 28, 2006 09:19:56
Сообщений: 12090
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
ozonn писал(а):
Но если у тебя одно прерывание, то почему бы там не поставить задержку?
можно придумать 100500 причин сделать плохо, но лучше подумать о том, почему надо делать хорошо.

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

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


Вернуться наверх
 Профиль WWW  
 
В сети
 Заголовок сообщения: Re: Как работать с таймерами ATmega48PA на C/C++ ?
СообщениеДобавлено: Ср июл 18, 2018 10:22:12 
Потрогал лапой паяльник

Карма: 7
Зарегистрирован: Чт янв 21, 2016 16:59:10
Сообщений: 333
Рейтинг сообщения: 0
потому что в других случаях за время задержки может произойти не одно событие,

а если не может?


Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: Как работать с таймерами ATmega48PA на C/C++ ?
СообщениеДобавлено: Ср июл 18, 2018 10:25:50 
Друг Кота
Аватар пользователя

Карма: 76
Зарегистрирован: Вт мар 16, 2010 23:02:27
Сообщений: 8004
Откуда: ДОНЕЦК (ЮГО-ВОСТОК ua/DPR)
Рейтинг сообщения: 0
У Вас ведь Си, а не ассемблер, где все однозначно от программиста зависит и абсолютно контролируется.
8)


Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: Как работать с таймерами ATmega48PA на C/C++ ?
СообщениеДобавлено: Ср июл 18, 2018 10:31:00 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 96
Зарегистрирован: Чт дек 28, 2006 09:19:56
Сообщений: 12090
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
ozonn писал(а):
а если не может?
прочтите все моё сообщение - ответ там был дан

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


Вернуться наверх
 Профиль WWW  
 
Не в сети
 Заголовок сообщения: Re: Как работать с таймерами ATmega48PA на C/C++ ?
СообщениеДобавлено: Чт июл 19, 2018 06:09:32 
Потрогал лапой паяльник
Аватар пользователя

Зарегистрирован: Сб дек 22, 2012 09:17:42
Сообщений: 340
Откуда: Караганда, Казахстан
Рейтинг сообщения: 0
ozonn писал(а):
а если нет других прерываний?
Сейчас нет. Потом, в процессе отладки или доработки понадобится второе, и приплыли. Поэтому лучше сразу привыкать делать все правильно. А правильная работа с прерываниями, по-хорошему, должна строиться на базе очень коротких прерывающих программ. Получил прерывание, снял что-либо из регистров оборудования (ну или выдал что-то в регистры), произвел коротенькие вычисления, (может быть) где-то отметился, и все, выходи. А основная программа должна мониторить те самые переменные, в которых отмечаются прерывающие программы и, при появлении отметки, выполнять какие-то большие действия. В том числе, при нужде, и подождать может, хотя, при грамотном построении всей программы, это можно возложить на таймерное прерывание. Таймерная программа прерывания подсчитывает время, как набежит нужная для задержки величина, таймерная программа отметится где надо, а основная, по получению этой отметки, поймет, что нужное время задержки прошло.

_________________
Кто мешает тебе выдумать порох непромокаемый? (К. Прутков, мысль № 133)


Вернуться наверх
 Профиль  
 
В сети
 Заголовок сообщения: Re: Как работать с таймерами ATmega48PA на C/C++ ?
СообщениеДобавлено: Чт июл 19, 2018 08:46:00 
Потрогал лапой паяльник

Карма: 7
Зарегистрирован: Чт янв 21, 2016 16:59:10
Сообщений: 333
Рейтинг сообщения: -4
Сейчас нет. Потом, в процессе отладки или доработки понадобится второе, и приплыли.

а если и потом не понадобится? :)

я это все к тому, что надо все делать с умом. Делал я как-то ампервольтметр для своего ЛБП. Использовал два прерывания, АЦП и таймер, для индикации. Основной цикл пустой. Теперь вопрос: откуда тут могут взяться еще какие-то прерывания? :)


Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: Как работать с таймерами ATmega48PA на C/C++ ?
СообщениеДобавлено: Чт июл 19, 2018 09:40:54 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 96
Зарегистрирован: Чт дек 28, 2006 09:19:56
Сообщений: 12090
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
ozonn писал(а):
я это все к тому, что надо все делать с умом
в том числе задавать вопросы и высказывать предположения.
есть правильный подход, который ВСЕГДА дает хороший реззультат, а есть подход, который дает результат ЕСЛИ. знать о таком подходе - плюс, а пользоваться им повседневно на регулярной основе - минус.

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


Вернуться наверх
 Профиль WWW  
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 31 ]  На страницу 1, 2  След.



Часовой пояс: UTC + 3 часа [ Летнее время ]


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

Сейчас этот форум просматривают: Аlex, Demiurg, ozonn и гости: 9


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

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


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