генерация на 24мгрц

fsdb
Offline
Зарегистрирован: 24.10.2015

Ребята, дали пример генерации частоты 24мгц. это я так понял чисты С? помогите понять как здесь формируется эта частота

void init() 



DDRB = (1 « PB1);  // -нога в которую давим частоту???

PORTB = 0;  //- начальное значение в 0?



TCCR1A = (1 « COM1A1) | (0 « COM1A0) | (1 « WGM11) | (0 « WGM10);  //какой то таймер не пойму какой

TCCR1B = (1 « WGM13) | (1 « WGM12) | (0 « CS11) | (0 « CS12) | (1 « CS10); 

ICR1 = 0xFFFF;  //??????





int main(void) 





init(); 



while(1) 



OCR1A = 0x4000;  //вызов таймера? зачем в цикле?

_delay_ms(500);   //зачем именно 500мс? 



}

b707
Offline
Зарегистрирован: 26.05.2017

Контроллер какой для начала? Собственная частота стандартной дуины - 16 МГЦ, так что на ней 24 МГц ну никак не сгенеришь.

fsdb
Offline
Зарегистрирован: 24.10.2015

b707 - спасибо. вот это проясняет ситуацию. т.е. быстрее не может быть чем сам кварц? Микроконтроллер - Atmega16

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

fsdb, тот кто вам дал этот пример разбирается не лучше вас :)

b707
Offline
Зарегистрирован: 26.05.2017

fsdb пишет:

b707 - спасибо. вот это проясняет ситуацию. т.е. быстрее не может быть чем сам кварц? Микроконтроллер - Atmega16

Не совсем так. Частота кварца здесь непричем, частота кварца необзательно равна частоте ядра, в ядре может стоять как делитель частоты, так и умножитель. Но максимальная частота. прописанная производителем для Атмеги16 - 16МГЦ. значит без оверклокинга(не знаю, возможен ли) 24 МГц никак.

fsdb
Offline
Зарегистрирован: 24.10.2015

да, я уточнился. мне необходимо получить 24грц.

не могли бы помочь хотя бы этот не совсем корректный пример разобрать.

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

ulis
ulis аватар
Offline
Зарегистрирован: 09.03.2011

fsdb пишет:

да, я уточнился. мне необходимо получить 24грц.

не могли бы помочь хотя бы этот не совсем корректный пример разобрать.

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

Неделя на изучение книги А.В. Евстифеев "Микроконтроллеры AVR семейств Tiny и Mega фирмы ATMEL" и у вас отпадут все вопросы. Можно скачать в инете

fsdb
Offline
Зарегистрирован: 24.10.2015

согласен, но хотелось бы все равно получить хотя бы примерное объяснение если кто может. хоть в общих словах.

b707
Offline
Зарегистрирован: 26.05.2017

ulis пишет:

Неделя на изучение книги А.В. Евстифеев "Микроконтроллеры AVR семейств Tiny и Mega фирмы ATMEL" и у вас отпадут все вопросы. Можно скачать в инете

если поискать в инете статьи "что такое таймеры МК и как ими пользоваться" - с общими принципами можно разобраться за один вечер (при наличии базовых программистких знаний, конечно).  А дальше открываем даташит на нужный МК и ищем описания режимов таймера и значения констант настройки.

 

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

fsdb, на обычных МК вы не сможете получить частоты выше чем тактовая/2.  Нужен МК с PLL синтезатором, например attiny85 тактируясь от внутреннего 8МГц rc-генератора может выдать через таймер до 32МГц, если включить PLL синтезатор..  Правда 24МГц всё равно не получить т.к. 24 не получается целочисленным делением от тактовой 64.  Тут лучше взять stm32f103c8t6 ,с ним 24МГц точно можно.

ulis
ulis аватар
Offline
Зарегистрирован: 09.03.2011

b707 пишет:

если поискать в инете статьи "что такое таймеры МК и как ими пользоваться" - с общими принципами можно разобраться за один вечер (при наличии базовых программистких знаний, конечно).  А дальше открываем даташит на нужный МК и ищем описания режимов таймера и значения констант настройки.

Это вы мне советуете? :)

fsdb
Offline
Зарегистрирован: 24.10.2015
dimax, да я понял. моя ошибка 24герца нужно было.
как я понял нужен таймер. при помощи флагов мы устанавливаем разрядность? переодичность?
таймер один раз вызывают или каждый раз? зачем паузу поставили в цикле?
b707
Offline
Зарегистрирован: 26.05.2017

fsdb пишет:

согласен, но хотелось бы все равно получить хотя бы примерное объяснение если кто может. хоть в общих словах.

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

В общем словах тут запускается таймер1, устанавливается его режим (какой - надо смотреть в ДШ) и потом устанавливается делитель частоты. По задумке автора таймер должен генерить сигнал на ноге PB1.

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

b707
Offline
Зарегистрирован: 26.05.2017

ulis пишет:

Это вы мне советуете? :)

да нет, конечно. Это не совет вам, а рассуждения на основе ваших слов....

fsdb
Offline
Зарегистрирован: 24.10.2015

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

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

fsdb пишет:

согласен, но хотелось бы все равно получить хотя бы примерное объяснение если кто может. хоть в общих словах.

В интернете куча статей по аппаратным таймерам - https://www.google.com/search?q=avr+таймеры

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

fsdb пишет:

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

Вы внимательно прочли мои  предыдущие ответы? Скетч из топика не решит вашу задачу, даже если вы осмыслите каждую его строчку.  Разбираться с таймерами вам конечно нужно, в идеале, но применительно к данной задаче нет смысла, ибо 24МГц вы всё равно не получите, по крайней мере на AVR. Купите готовый кварцевый генератор, благо на 24 Мгц выпускаются. Ну или делать на  СТМ32.

fsdb
Offline
Зарегистрирован: 24.10.2015

dimax, да спасибо,  внимательно - на сколько это возможно в это время суток) я ошибся 1 посте написал про 24мгерца хотя имел ввиду 24герца. я усвоил из Ваших слов что больше чем /2 не получу. спасибо.

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

fsdb, 24 герца можно на чём угодно получить , и с таймерами и без таймеров..

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

fsdb, в самом простейшем случае откройте из примеров blink.ino, замените там в delay константу на 21 и получите примеоно то, что Вы хотите. Если нужна более высокая точность и возможность выполнять какую-либо другую работу, смотрите в сторону таймеров (как Вам уже посоветовали).

ulis
ulis аватар
Offline
Зарегистрирован: 09.03.2011

fsdb пишет:

dimax, да спасибо,  внимательно - на сколько это возможно в это время суток) я ошибся 1 посте написал про 24мгерца хотя имел ввиду 24герца. я усвоил из Ваших слов что больше чем /2 не получу. спасибо.

Я не совсем понимаю, зачем использовать ардуино для получения столь простого результата? Простейший мультивибратор на двух мп-шках, 555-й таймер, ну уж если нужна стабильность - генератор с кварцем 32768 на 176 микросхеме и делитель на 1365 - на выходе будем иметь 24.006 герца

b707
Offline
Зарегистрирован: 26.05.2017

ulis пишет:

Я не совсем понимаю, зачем использовать ардуино для получения столь простого результата? Простейший мультивибратор на двух мп-шках, 555-й таймер, ну уж если нужна стабильность - генератор с кварцем 32768 на 176 микросхеме и делитель на 1365 - на выходе будем иметь 24.006 герца

ну хотя бы затем, что например для меня ардуина куда доступнее, чем "генератор на 176 микросхеме с кварцем 32768". Ни микрухи 176 (что это вообще?:), ни кварца у меня нет, а ардуин всяких - мешок :)

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Ни чё так автор ашибси .. поправьте кто-нибудь название темы, дабы в ступор народ не вводить. :)

ulis
ulis аватар
Offline
Зарегистрирован: 09.03.2011

b707 пишет:

ну хотя бы затем, что например для меня ардуина куда доступнее, чем "генератор на 176 микросхеме с кварцем 32768". Ни микрухи 176 (что это вообще?:), ни кварца у меня нет, а ардуин всяких - мешок :)

У вас нет кварца???? Тогда мы идем к вам! :)