Таймер счетчик в ардуино

Обсуждаем контроллеры компании Atmel.
Ответить
Говорящий с текстолитом
Аватара пользователя
Сообщения: 1644
Зарегистрирован: Сб фев 18, 2012 15:42:29
Откуда: Курск

Сообщение mixon46 »

Подскажите в библиотеке управления сервоприводом какой стоит предделитель частоты для генератора. И можно ли подключать серву к выходам второго таймера 8 битного T2. Или он должен быть подключен к выходам 16 битного таймера T1. Атмега 328 используется.
Реклама
Поставщик валерьянки для Кота
Сообщения: 1978
Зарегистрирован: Ср июл 17, 2013 13:55:57

Сообщение NStorm »

Библиотека servo выдает периоды в 20мс, т.е. 50 Гц. Она не использует ШИМ функционал МК для этого афаик, таймер1 используется ей для подсчета нужных интервалов, а пин дергается "ногодрыгом".
Вообще если вы собираетесь делать на Arduino, то делайте на Arduino. Зачем вы вообще о таймерах и предделителе там думаете? Там уже всё написано за вас.
Реклама
Друг Кота
Аватара пользователя
Сообщения: 15593
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

Конкретные денные по методам библиотеки Servo library содержатся в оффлайн хелпе ардуиноIDE
file:///C:/Program%20Files/Arduino/reference/www.arduino.cc/en/Reference/Servo.html
(это в моей ХР размещение - в другой ОС может как-то иначе).
Все что касается работ именно с ардуиноIDE в рамках референса находится в том хэлпе.
Все что "хочется сверх того" - или в режиме онлайн - с сайта https://www.arduino.cc (- автоматически перескочит туда при наличии подключенного инета)
или вот тут к примеру:
http://doc.arduino.ua/ru/prog/Servo
или тут:
http://arduino.ru/Reference
или за пределами IDE - допустим в том же Си (АВРстудио) искать надо.
8)
Говорящий с текстолитом
Аватара пользователя
Сообщения: 1644
Зарегистрирован: Сб фев 18, 2012 15:42:29
Откуда: Курск

Сообщение mixon46 »

[uquote="NStorm",url="/forum/viewtopic.php?p=3904742#p3904742"]Библиотека servo выдает периоды в 20мс, т.е. 50 Гц. Она не использует ШИМ функционал МК для этого афаик, таймер1 используется ей для подсчета нужных интервалов, а пин дергается "ногодрыгом".
Вообще если вы собираетесь делать на Arduino, то делайте на Arduino. Зачем вы вообще о таймерах и предделителе там думаете? Там уже всё написано за вас.[/uquote]
Мне нужно прерывание по таймеру. Для этого предделитель надо на 1024
Реклама
Эиком - электронные компоненты и радиодетали
Поставщик валерьянки для Кота
Сообщения: 1978
Зарегистрирован: Ср июл 17, 2013 13:55:57

Сообщение NStorm »

mixon46, зачем вам прерывание по таймеру в ардуино? В среде ардуино вредно это. Прерывания уже могут быть заняты ядром и библиотеками. Та же либа Servo использует timer1.
Для тайминга в арудино используются обычно millis() и micros(). См. пример blink without delay.
Реклама
Говорящий с текстолитом
Аватара пользователя
Сообщения: 1644
Зарегистрирован: Сб фев 18, 2012 15:42:29
Откуда: Курск

Сообщение mixon46 »

[uquote="NStorm",url="/forum/viewtopic.php?p=3904944#p3904944"]mixon46, зачем вам прерывание по таймеру в ардуино? В среде ардуино вредно это. Прерывания уже могут быть заняты ядром и библиотеками. Та же либа Servo использует timer1.
Для тайминга в арудино используются обычно millis() и micros(). См. пример blink without delay.[/uquote]
Как зачем. Для того что это необходимость в моей программе. И мне надо знать не влияет ли прерывание которое я добавил на другие части программы. Не могу отследить
Реклама
Поставщик валерьянки для Кота
Сообщения: 1978
Зарегистрирован: Ср июл 17, 2013 13:55:57

Сообщение NStorm »

mixon46, ничего не понятно что вам нужно и что вы хотите получить. Опишите подробнее вашу задачу, что пытаетесь сделать, какое прерывание используете, зачем и для чего, что еще используете и т.д.
Друг Кота
Аватара пользователя
Сообщения: 15593
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

Если работа в рамках ардуино IDE то вероятнее всего влияние будет иметь место.
Правда есть одна лазейка - применение прерывания по совпадению - это единственно возможный вариант.
Но там свои нюансы/ограничения.
Так что или принимаем ограничения референсом и работаем как с "чистой ардуиноподобной" или работаем а "чистом Си/ассемблере с полным доступом к аппаратным средствам МК, который на платке установлен.
8)
Говорящий с текстолитом
Аватара пользователя
Сообщения: 1644
Зарегистрирован: Сб фев 18, 2012 15:42:29
Откуда: Курск

Сообщение mixon46 »

[uquote="NStorm",url="/forum/viewtopic.php?p=3905015#p3905015"]mixon46, ничего не понятно что вам нужно и что вы хотите получить. Опишите подробнее вашу задачу, что пытаетесь сделать, какое прерывание используете, зачем и для чего, что еще используете и т.д.[/uquote]
Хочу сделать прерывание раз в секунд 6. Для пид регулятора. Таймер T2 8 бит. Максимальное время с предделителем 1024 16 мск. Дополнительно поставил счетчик с функцией подсчета промежутков времени. Записал туда самое большое число в int. Но функция пид как выполнялась очень с большой скоростью так и осталась. У меня так же библиотеки wire.h servo.h liquidcrystal_i2c.h adafriut_ads1015.h
Поставщик валерьянки для Кота
Сообщения: 1978
Зарегистрирован: Ср июл 17, 2013 13:55:57

Сообщение NStorm »

mixon46, если на PD3, PB3 (пины 3 и 11 ардуино) не делаете analogWrite(), то Timer2 должен быть незадействован. Ядро использует timer0, Servo - timer1. timer2 только под ШИМ на его каналах включается.
Если это так, показывайте ваш код, где настраиваете таймер и прерывание + обработчик прерывания.
Хотя опять же на ардуино подобные вещи обычно решаются с помощью millis().
Говорящий с текстолитом
Аватара пользователя
Сообщения: 1644
Зарегистрирован: Сб фев 18, 2012 15:42:29
Откуда: Курск

Сообщение mixon46 »

[uquote="NStorm",url="/forum/viewtopic.php?p=3905243#p3905243"]mixon46, если на PD3, PB3 (пины 3 и 11 ардуино) не делаете analogWrite(), то Timer2 должен быть незадействован. Ядро использует timer0, Servo - timer1. timer2 только под ШИМ на его каналах включается.
Если это так, показывайте ваш код, где настраиваете таймер и прерывание + обработчик прерывания.
Хотя опять же на ардуино подобные вещи обычно решаются с помощью millis().[/uquote]
Все сделал. Работает. Предделитель не настраивал. Надо было просто разрешить прерывание по сравнению и все. Только не известно с какой частотой выходят прерывания
Друг Кота
Аватара пользователя
Сообщения: 15593
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

Для "независимого" параллельного процесса именно "в рамках референса" есть более корректное (но относительно ресурсозатратное) решение.
Используется пара - tone() в качестве генератора (один вывод платки) и подсчет пришедших с него импульсов на одном из внешних прерываний (D2/int0/ или D3/int1/) с последующим счетчиком на... сколько пожелается.
:wink:
Говорящий с текстолитом
Аватара пользователя
Сообщения: 1644
Зарегистрирован: Сб фев 18, 2012 15:42:29
Откуда: Курск

Сообщение mixon46 »

Всем спасибо. Программа работает мое устройство готово
Ответить

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