Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры Atmega AVR
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
inquisitor
15 / 6 / 16
Регистрация: 22.12.2015
Сообщений: 1,763
1

Управляемый делитель частоты

08.12.2018, 22:47. Просмотров 828. Ответов 11
Метки нет (Все метки)

Суть проста:хочу программно задавать от 10 до 1000 коэффициент деления,а диапазон частот 0.1 -20 Кгц. Инструментальная погрешность до 2%. Выбор коэффициента деления -программно . Схема нужна в Proteus(подскажи в PNG буду благодарен и сам перерисую) что бы по нажатию на кнопку можно было программно задать коэффициент деления. Также нужно измерить выходную частоту. Тип сигнала не важен.
Микроконтроллер - Arduino Uno.
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.12.2018, 22:47
Ответы с готовыми решениями:

Делитель частоты 2:3
Необходимо обработать сигнал (генерируемый таймером 2 на одной из ног МК), и генерить подобный с...

Делитель частоты (Си, ATmega8A)
Здравствуйте. Совсем недавно стал изучать микроконтроллеры семейства AVR. Мне дали задание -...

ATTiny2313. Управляемый таймер
Ребята помогите очень нужна программа на attiny2313! При включении света запускается таймер...

Частотомер. Добавить делитель.
Приветствую. Делаю устройство, для использования на мопеде. Пафоса ради повесил большой экран...

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

11
inquisitor
15 / 6 / 16
Регистрация: 22.12.2015
Сообщений: 1,763
08.12.2018, 23:53  [ТС] 2
Управляемый делитель частоты

нашел,способ поделить частоту ШИм.Но на выходе не те частоты,что нужны мне.Подскажите можно ли целиком программно реализовать и пример скетча.Буду очень благодарен. К тому же непонятно,как читается запись
C
1
2
TCCR1A = TCCR1A & 0xe0|1;
TCCR1B = TCCR1B & 0xe0|0x09;
TCCR1A и TCCR1B таймеры счетчики
0
inquisitor
15 / 6 / 16
Регистрация: 22.12.2015
Сообщений: 1,763
09.12.2018, 13:12  [ТС] 3
Мне нужно Мк оставить работать на 16 Мгц,а снять дискретный(цифровой) сигнал от 0.1 до 20 Кгц. Ничего аппаратно не требуется. Только программно,что то в скетче записать. Форма сигнала не важна.
Atmel-42735-8-bit-AVR-Microcontroller-ATmega328-328P_Datasheet.pdf
0
Grey
Тутошний я
1690 / 858 / 150
Регистрация: 03.11.2009
Сообщений: 2,587
Записей в блоге: 1
09.12.2018, 14:10 4
настрой таймер, чтоб он 40 или 80 кГц выдавал. или 160. чем больше тем точнее будет.
в программе отсчитываешь нужное количество тактов и меняешь сигнал на выводе.
1
inquisitor
15 / 6 / 16
Регистрация: 22.12.2015
Сообщений: 1,763
09.12.2018, 14:29  [ТС] 5
Цитата Сообщение от Grey Посмотреть сообщение
настрой таймер, чтоб он 40 или 80 кГц выдавал. или 160. чем больше тем точнее будет.
в программе отсчитываешь нужное количество тактов и меняешь сигнал на выводе.
Можно пожалуйста пример.
Вот нашел библиотеку возможно в ней есть методы решающие мою задачу?
0
Grey
Тутошний я
1690 / 858 / 150
Регистрация: 03.11.2009
Сообщений: 2,587
Записей в блоге: 1
09.12.2018, 16:38 6
примера нету. да и врятли поможет. я в AlgorithmBuilder пишу.
они там наоборот сделали. взяли наименьшую частоту. потом её делят.
делить сложнее чем складывать. поэтому мой вариант лучше.
1
inquisitor
15 / 6 / 16
Регистрация: 22.12.2015
Сообщений: 1,763
09.12.2018, 19:09  [ТС] 7
C
1
2
TCCR1A = 10;
TCCR1B = 2500;
0
Grey
Тутошний я
1690 / 858 / 150
Регистрация: 03.11.2009
Сообщений: 2,587
Записей в блоге: 1
09.12.2018, 22:26 8
Лучший ответ Сообщение было отмечено inquisitor как решение

Решение

где ты такие значения берешь? для программного шима аппаратный не нужен.
берём частоту 40 кГц. это период будет 0,000025 секунды.
включаем делитель таймера на 1 или на 8. возмем на 8.
чтоб получать наш период, частоту кварца разделим на делитель и умножим на период.
16000000/8*0,000025=50
настраиваем прерывание первого таймера на переполнение.
счётчик в 1 таймере 2 байтный. от FFFF отнимем наши 50 получим FFCD. Это значение запишем в TCNT1. и каждый раз при прерывании записываем. это всё чтоб таймер ровно 40 кГц давал.
также при каждом прерывании инкрементируем переменную-счётчик и сравниваем её с
Цитата Сообщение от inquisitor Посмотреть сообщение
хочу программно задавать от 10 до 1000 коэффициент деления
если совпадает с коэффициентом, сбрасываем счетчик и переключаем вывод.

хотя я так подумал возможно 40 кГц не подойдет. и нужно будет брать другую кратную частоту.
1
inquisitor
15 / 6 / 16
Регистрация: 22.12.2015
Сообщений: 1,763
09.12.2018, 22:44  [ТС] 9
Цитата Сообщение от Grey Посмотреть сообщение
хотя я так подумал возможно 40 кГц не подойдет. и нужно будет брать другую кратную частоту.
у меня по заданию от 0.1 до 20 Кгц.А делитель от 10 до 1000. а же делитель таким может быть если он
prescaler =1 : F / 1
prescaler =2 : F/ 8
prescaler =3 : F/64
prescaler =4 : F/256
prescaler =5 : F/1024
Я вот записал значение 10 и тоже работает. А по документации так нельзя.
0
Grey
Тутошний я
1690 / 858 / 150
Регистрация: 03.11.2009
Сообщений: 2,587
Записей в блоге: 1
09.12.2018, 23:04 10
конечно нельзя. поэтому из частоты кварца делаем опорную частоту 40 кГц.
а уже её своим делителем программно делишь.

Добавлено через 4 минуты
в принципе и частоту кварца можно сразу программно делить. но значение может в переменную не поместиться. (я не уверен, но не хочу сейчас считать.)
поэтому сперва таймером делим.
1
inquisitor
15 / 6 / 16
Регистрация: 22.12.2015
Сообщений: 1,763
09.12.2018, 23:05  [ТС] 11
Цитата Сообщение от Grey Посмотреть сообщение
конечно нельзя. поэтому из частоты кварца делаем опорную частоту 40 кГц.
а уже её своим делителем программно делишь.
Значит мы замедляем работу самого Мк?
Я то думал,что программно генерим меандр на одном из PWM пинов без ущерба основной частоте.
0
Grey
Тутошний я
1690 / 858 / 150
Регистрация: 03.11.2009
Сообщений: 2,587
Записей в блоге: 1
10.12.2018, 00:25 12
не а. ядро все на тех же 16 МГц останется работать.

Добавлено через 1 час 15 минут
надо бы тебе почитать про устройство и работу МК.
на ядро и на периферию будет поступать частота кварца. если ядро не отправляем в сон, то и основной цикл loop или main(это от компилятора зависит) будет работать на 16 МГц.
это условно говоря на выходе 1 таймера будет 40 кГц. и с этой частотой будет обновляться переменная-счётчик. всего лишь.
почему 40 кГц? а её период равен полупериоду 20 кГц очень доходчиво. в это время будем переключать вывод для формирования 20 кГц.
если нужны коэффициенты на 3 и 5, нужно предделитель таймера взять 1, а опорную частоту 120 кГц.
0
10.12.2018, 00:25
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.12.2018, 00:25

множитель частоты
Здравствуйте, только начал изучать atmega8 и CodeVisionAVR как реализовать, на ногу 23 подаю...

Изменние частоты на ATmega
Здравствуйте, Подскажите пожалуйста по такому вопросу: Вот есть Atmega256 и кварц на 256 МГц....

Точное определение частоты.
Пытаюсь сделать бюджетный гитарный контроллер к синтезатору, то есть устройство на входе которого...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru