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

 
 
 
Reply to this topicStart new topic
> Научите генерировать 40 кГц, PIC
Urvin
сообщение Nov 23 2009, 16:58
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 37
Регистрация: 23-09-09
Из: Москва
Пользователь №: 52 540



Научите генерировать 40 кГц на пике =) Надо изменять уровень сигнала на цифровой ножке.
40 кГц - это меандр, т.е. изменять само значение, по сути, надо с частотой в два раза больше.

Дело в том, что мой счетчик для таймера может максимально выдать 23437 Гц - как-то грустно
Go to the top of the page
 
+Quote Post
kamil_yaminov
сообщение Nov 23 2009, 17:07
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 395
Регистрация: 15-02-08
Из: Новосибирск
Пользователь №: 35 064



Подробности о том, что за счетчик и как он 23кГц выдает, в студию!
Go to the top of the page
 
+Quote Post
Urvin
сообщение Nov 23 2009, 17:14
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 37
Регистрация: 23-09-09
Из: Москва
Пользователь №: 52 540



Ну я когда-то набросал в экселе табличку для расчета количества итераций (прерываний) таймера на определенное время.
Так вот максимальное число итераций на секунду я могу добиться только с кварцем 48 МГц и делителем 2. Ну вот такую частоту он мне и предлагает.

Хотя смотрю на промышленную плату, которую мне предстоит повторить и модифицировать, где используется авр-ка с 12МГц датчиком.

Сообщение отредактировал Urvin - Nov 23 2009, 17:14
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Nov 23 2009, 17:40
Сообщение #4


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(Urvin @ Nov 23 2009, 20:14) *
Ну я когда-то набросал в экселе табличку для расчета количества итераций (прерываний) таймера на определенное время.
Так вот максимальное число итераций на секунду я могу добиться только с кварцем 48 МГц и делителем 2. Ну вот такую частоту он мне и предлагает.

Ничего не понимаю ! cranky.gif
Go to the top of the page
 
+Quote Post
Urvin
сообщение Nov 23 2009, 17:45
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 37
Регистрация: 23-09-09
Из: Москва
Пользователь №: 52 540



В общем... специальная программа (на пк) мне сказала, что мой максимум частоты -- это если я совместно с мк буду использовать кварц 48 МГц, делитель частоты 2 (как наиболее мелкий). Частота - 23437 прерываний в секунду.

Мне надо 80000 прерываний в секунду - как это делают?

Сообщение отредактировал Urvin - Nov 23 2009, 17:56
Go to the top of the page
 
+Quote Post
kamil_yaminov
сообщение Nov 23 2009, 17:58
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 395
Регистрация: 15-02-08
Из: Новосибирск
Пользователь №: 35 064



Казалось бы берем и тактируем таймер через делитель частоты, скажем равный 8 => 6МГц. 6МГц/40кГц = 150 - это искомый период таймера. Так как нужен меандр 40кГц, то период таймера должен быть в два раза меньше - 75.
Go to the top of the page
 
+Quote Post
Urvin
сообщение Nov 23 2009, 18:04
Сообщение #7


Участник
*

Группа: Участник
Сообщений: 37
Регистрация: 23-09-09
Из: Москва
Пользователь №: 52 540



Только вот таймер работает не так wink.gif
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Nov 23 2009, 18:07
Сообщение #8


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(Urvin @ Nov 23 2009, 20:45) *
В общем... специальная программа мне сказала...23437 прерываний в секунду.

Она Вас еще и обманула - 23437,5 этих самых прерываний biggrin.gif

Цитата
Мне надо 80000 прерываний в секунду - как это делают?


1. Считаете число, которое надо загрузить в 8-битный таймер, исходя из данных о тактовой частоте (до сих пор ничего не понятно - какой пик, какой кварц итд) и значении предделителя. Допустим
Код
F_CPU = 2 MHz
F_out = 80 kHz
N = F_CPU / F_out = 25 - столько машинных циклов должно прокрутиться в таймере
                                     до наступления прерывания.
N_tmr = 256 - 25 = 231 - это число надо изначально загрузить в таймер.
Кроме того, при возникновении прерывания, надо не загружать его, а прибавлять к существующему содержимому регистра таймера/счетчика, для устранения или хотя бы минимизации джиттера


2. Овнопрограмму - в корзину biggrin.gif
Go to the top of the page
 
+Quote Post
Urvin
сообщение Nov 23 2009, 18:18
Сообщение #9


Участник
*

Группа: Участник
Сообщений: 37
Регистрация: 23-09-09
Из: Москва
Пользователь №: 52 540



Программа числа округляет и мне не хотелось пугать общественность еще и дробями.

МК будет что-то типа 18f2550. Используя внутренний PLL и биты настроек получим частоту процессора 24 МГц (судя по даташиту)
Пусть таймер выставлен в 8 бит.

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

т.е. вместо
TMR0 = 231;
в теле прерывании я должен записать
TMR0 = TMR0 + 255;
так?

В целом идея понятна)
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Nov 23 2009, 18:20
Сообщение #10


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(Urvin @ Nov 23 2009, 21:18) *
т.е. вместо
TMR0 = 231;
в теле прерывании я должен записать
TMR0 = TMR0 + 255;
так?
В целом идея понятна)

TMR0 = TMR0 + 231;
Код
#define TMR0_reload 231
movlw TMR0_reload
addwf TMR0,f
Go to the top of the page
 
+Quote Post
Urvin
сообщение Nov 23 2009, 18:30
Сообщение #11


Участник
*

Группа: Участник
Сообщений: 37
Регистрация: 23-09-09
Из: Москва
Пользователь №: 52 540



Спасибо!
Буду пробовать.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 8th May 2024 - 21:07
Рейтинг@Mail.ru


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