реклама на сайте
подробности

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> генератор импульсов на ATmega16
mempfis_
сообщение Jan 22 2009, 08:29
Сообщение #16


Профессионал
*****

Группа: Свой
Сообщений: 1 001
Регистрация: 27-06-06
Пользователь №: 18 409



Цитата
Получается так... задающая частота 10 МГц... Через prescaler делю её на 1024, получается 9765,625 Гц - это частота с которой будет работать таймер. Далее мне нужно, например, чтобы он махал ногой с частотой 1 Гц. Т.е. я должен вычислить число, с которым будет сравниваться значение таймера и по совпадению инвертировать уровень на ноге. Как мне вычислить это значение?


Fсист - системная тактовая частота,
Кдел - коэф. деления предделителя
Fтс=Fсист/Кдел - тактовая частота ТС
Fуст - необходимая частота
Fтс/Fуст=Кпер (Кпер - коэф. пересчёта в режиме СТС)
N=Кпер/2=Fтс/(2*Fуст)=Fсист/(2*Кдел*Fуст) - число заносимое в регистр сравнения для заданной частоты

N=Fсист/(2*Кдел*Fуст)
N=10000000/(2*512*1)=9765,625
N=9765 - занеся такое число в регист сравнения при 10МГц и Кдел=512 получите 1,000064 Гц на выходе

Цитата(neurox @ Jan 22 2009, 11:22) *
memphis_, внутренний RC подойдет для этой цели? Т.З. можно поменять... отсутствие частот от 1 до 10 Герц не критично.

Лучше используйте внешний кварц. Внутренний RC-генератор врятли подойдёт. Его нужно калибровать, параметры могут плавать от температуры. Но можете проверить опытным путём.
Go to the top of the page
 
+Quote Post
Палыч
сообщение Jan 22 2009, 08:44
Сообщение #17


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(neurox @ Jan 22 2009, 11:22) *
внутренний RC подойдет для этой цели?
При использовании внутреннего RC - о точности речи тогда не ведите вообще...
Go to the top of the page
 
+Quote Post
neurox
сообщение Jan 22 2009, 08:45
Сообщение #18


Участник
*

Группа: Участник
Сообщений: 21
Регистрация: 30-06-08
Пользователь №: 38 638



Палыч, mempfis_ спасибо! blink.gif сижу вникаю...
Go to the top of the page
 
+Quote Post
Палыч
сообщение Jan 22 2009, 09:57
Сообщение #19


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



В продолжение к написанному выще
Чтобы не нагружать МК проверками: во сколько бит влезает результат деления Fclk/Foc, можно просчитать заранее (типа на бумажке, поскольку Fclk - вроде извесна) для разных Foc и определить диапазоны Foc и соотвествующие им значения пределителя. Тогда вместо "если Х помещается" будет "если Foc в диапазоне (т.е. Foc > Значение)"
Go to the top of the page
 
+Quote Post
GDI
сообщение Jan 22 2009, 11:01
Сообщение #20


Профессионал
*****

Группа: Свой
Сообщений: 1 235
Регистрация: 14-05-05
Из: Санкт-Петербург
Пользователь №: 5 008



Можно еще каскадно соединить 2 таймера. Т.е. один таймер(Т1) работает как управляемый прескалер и выдает частоту на порт, затем, эта ножка порта аппаратно(проводником) соединяется со входом внешнего тактирования асинхронного таймера Т0, таким образом можно расширить разрядность до 24 бит.


--------------------
http://www.embedders.org Блоги разработчиков электроники.
Go to the top of the page
 
+Quote Post
Палыч
сообщение Jan 22 2009, 11:20
Сообщение #21


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(GDI @ Jan 22 2009, 14:01) *
таким образом можно расширить разрядность до 24 бит.
Ну, это Вы чего-то напутали...
Если А - это делитель одного таймера (8-ми разрядного), В - делитель другого (16-ти разрядного), то общий делитель будет С=A*B, а не С=A*2^16+B как это было бы в случае двадцатичетырёхбитного таймера. Для решения задачи автора вопроса достаточно 16-ти битного таймера с пределителем, и городить ещё что-то не имеет смысла
Go to the top of the page
 
+Quote Post
Maik-vs
сообщение Jan 22 2009, 11:22
Сообщение #22


Местный
***

Группа: Участник
Сообщений: 246
Регистрация: 4-12-06
Пользователь №: 23 101



Здесь читали?
Go to the top of the page
 
+Quote Post
Палыч
сообщение Jan 22 2009, 11:33
Сообщение #23


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(Maik-vs @ Jan 22 2009, 14:22) *
Здесь читали?
Проекты Леонида Ивановича - все очень качественные и для начинающих разработчиков его работы - образец для подражания, но в данном случае автору вопроса нужны прямоугольные импульсы в меньшем диапазоне и с более грубым шагом. Можно сделать этот проект - гораздо проще, чем у Леонида Ивановича...
Go to the top of the page
 
+Quote Post
GDI
сообщение Jan 22 2009, 12:23
Сообщение #24


Профессионал
*****

Группа: Свой
Сообщений: 1 235
Регистрация: 14-05-05
Из: Санкт-Петербург
Пользователь №: 5 008



Цитата
Ну, это Вы чего-то напутали...
Если А - это делитель одного таймера (8-ми разрядного), В - делитель другого (16-ти разрядного), то общий делитель будет С=A*B, а не С=A*2^16+B как это было бы в случае двадцатичетырёхбитного таймера.
А подскажите, как каскадируют двоичные счетчики?


--------------------
http://www.embedders.org Блоги разработчиков электроники.
Go to the top of the page
 
+Quote Post
Палыч
сообщение Jan 22 2009, 12:41
Сообщение #25


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(GDI @ Jan 22 2009, 15:23) *
А подскажите, как каскадируют двоичные счетчики?
Двоичными счетчиками исходную частоту делят на 2^N, где N - номер выхода счетчика. С помощью таймера в AVR исходную частоту можно разделить на 2*Х, где Х - шестнадцатибитовое число (любое, а не только степень двойки).
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Jan 22 2009, 12:47
Сообщение #26


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Цитата(Палыч @ Jan 22 2009, 14:20) *
Если А - это делитель одного таймера (8-ми разрядного), В - делитель другого (16-ти разрядного), то общий делитель будет С=A*B

А вот интересно, какую разрядность имеет произведение 8р на 16р? Разве не 24?


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
Палыч
сообщение Jan 22 2009, 12:55
Сообщение #27


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(MrYuran @ Jan 22 2009, 15:47) *
А вот интересно, какую разрядность имеет произведение 8р на 16р? Разве не 24?
А вот, попробуйте представить (записать) все двадцатичетырёхразрядные числа в виде произведения двух чисел - одного 8-ми, а второго 16-ти разрядных.
Go to the top of the page
 
+Quote Post
GDI
сообщение Jan 22 2009, 13:25
Сообщение #28


Профессионал
*****

Группа: Свой
Сообщений: 1 235
Регистрация: 14-05-05
Из: Санкт-Петербург
Пользователь №: 5 008



Цитата
А вот, попробуйте представить (записать) все двадцатичетырёхразрядные числа в виде произведения двух чисел - одного 8-ми, а второго 16-ти разрядных.
А если представить(а так оно и есть) что на вход 8битного таймера-счетчика поступает частота деленная на 2^16(максимальное значение 16битного таймера)? Мы опустим возможность получения некоторых промежуточных значений несколькими комбинациями обоих таймеров - нам ни к чему лишние сложности.
Другое дело, что меняя период первого таймера мы на выходе второго будем получать частоту первого таймера деленную пополам, т.к. второй таймер нам даст минимальное деление на 2, т.о. мы не получим чистые 24 бита, будет только 23, но это все равно лучше чем 16 с программным последующим делением, т.к. решение будет аппаратное и не будет большого дрожания фазы.
Может мы из-за бита спорим? smile.gif


--------------------
http://www.embedders.org Блоги разработчиков электроники.
Go to the top of the page
 
+Quote Post
Палыч
сообщение Jan 22 2009, 13:44
Сообщение #29


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(GDI @ Jan 22 2009, 16:25) *
... но это все равно лучше чем 16 с программным последующим делением, т.к. решение будет аппаратное и не будет большого дрожания фазы.
А, кто тут говорил о программном делении? Для решения этой задачи (генерации меандра с частотой от 1 до 10000 Гц) достаточно аппаратных средств шестнадцатиразрядного таймера. Конечно, значения, которые заносятся в регистры таймера, для конкретной выходной частоты необходимо программно расчитывать. Но без этого не обойтись при любом построении генератора с задаваемой (изменяющейся) частотой с шагом 1 Гц, спроектированного на МК.
Go to the top of the page
 
+Quote Post

2 страниц V  < 1 2
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 1st July 2025 - 08:02
Рейтинг@Mail.ru


Страница сгенерированна за 0.01494 секунд с 7
ELECTRONIX ©2004-2016