Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Высокостабильный генератор на PIC
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Все остальные микроконтроллеры > PIC
KV99
Здравствуйте уважаемые знатоки. Перерыл уже кучу документации по контроллерам микрочип и не нашел (может не понял). Если собрать на базе контроллера генаратор меандра, ну, допустим тактируется контроллер 40МГц. Причем, первый вывод порта запрограммируем на генерацию колебаний частотой 20Мгц, а второй вывод на частоту 10Мгц. Каков будет уход этой частоты от заданной?! Как его подсчитать?! Будет ли временной сдвиг между фронтами сигналов с первого и со второго выводов?!
Евгений Германович
Стабильность частоты определяется параметрами кварцевого генератора.Для вашего случая временной сдвиг можно сделать весьма малым(будет определяться только задержками при переключении выходных портов)Однако ,учитывая,что вам придется программно формировать меандр будет нестабильность периода.Величина нестабильности будет определяться вашей программой.
KV99
Цитата(Евгений Германович @ Sep 9 2007, 17:50) *
Стабильность частоты определяется параметрами кварцевого генератора.Для вашего случая временной сдвиг можно сделать весьма малым(будет определяться только задержками при переключении выходных портов)Однако ,учитывая,что вам придется программно формировать меандр будет нестабильность периода.Величина нестабильности будет определяться вашей программой.

Спасибо. Меня как-раз и интересуют задержки выходных портов?! Не могу найти этой информации sad.gif
Евгений Германович
Я не нашел,но если посмотреть на времена нарастания то получим мах 50 нСек.Кстати вы не получите 20МГц при тактовой 40.не хватит быстродействия.
И 10 не получите.
KV99
Цитата(Евгений Германович @ Sep 9 2007, 19:51) *
Я не нашел,но если посмотреть на времена нарастания то получим мах 50 нСек.Кстати вы не получите 20МГц при тактовой 40.не хватит быстродействия.
И 10 не получите.



movlw 01h ; 25ns
movwf PORTA ; 25ns
movlw 00h ; 25ns
movwf PORTA ; 25ns
; 100ns =10Mhz

Конечно, если я теперь использую goto (2-3такта) мне быстродействия не хватит.... вы правы... придется микроконтроллер обвешивать АГшкой и счетчиком....... спасибо за совет.
Евгений Германович
Цитата(KV99 @ Sep 9 2007, 12:44) *
movlw 01h ; 25ns
movwf PORTA ; 25ns
movlw 00h ; 25ns
movwf PORTA ; 25ns
; 100ns =10Mhz

Конечно, если я теперь использую goto (2-3такта) мне быстродействия не хватит.... вы правы... придется микроконтроллер обвешивать АГшкой и счетчиком....... спасибо за совет.

40 частота кварца,тактовая будет 10
miga
Цитата(Евгений Германович @ Sep 9 2007, 10:50) *
... учитывая,что вам придется программно формировать меандр ...

Читаем внимательно даташит, раздел про ШИМ.
Евгений Германович
Цитата(miga @ Sep 9 2007, 20:28) *
Читаем внимательно даташит, раздел про ШИМ.

Не менее внимательно читаем раздел тактового генератора.Требование автора вопроса тоже.И ,главное,очень внимательно,описание TMR2.
DL36
Цитата(Евгений Германович @ Sep 9 2007, 14:13) *
40 частота кварца,тактовая будет 10

А 10&PLL будет также 10.
Предельная частота 96 mHz.
Евгений Германович
Цитата(DL36 @ Sep 12 2007, 15:29) *
А 10&PLL будет также 10.
Предельная частота 96 mHz.

Поясните пожалуйста про ПЛЛ. и про предельную частоту.
DL36
Цитата(Евгений Германович @ Sep 12 2007, 15:44) *
Поясните пожалуйста про ПЛЛ. и про предельную частоту.


Внимательно читаем ДШ, раздел режимы работы тактового генератора.

Внутренняя схема PLL, включаемая при программировании микроконтроллера позволяет умножить тактовую частоту на 4. При тактовой частоте 10Мгц внутренняя тактовая частота микроконтроллера будет 40Мгц, делим на 4 и получаем частоту ядра 10Мгц.

В новых Пиках режимы работы более сложные, читать ДШ на конкретный кристал.

96МГц предельная частота для флеши, ограничение технологии.
Евгений Германович
Цитата(DL36 @ Sep 12 2007, 17:12) *
Внимательно читаем ДШ, раздел режимы работы тактового генератора.

Внутренняя схема PLL, включаемая при программировании микроконтроллера позволяет умножить тактовую частоту на 4. При тактовой частоте 10Мгц внутренняя тактовая частота микроконтроллера будет 40Мгц, делим на 4 и получаем частоту ядра 10Мгц.

В новых Пиках режимы работы более сложные, читать ДШ на конкретный кристал.

96МГц предельная частота для флеши, ограничение технологии.

Ну и что?ДЛя пиков пока мах 40МГц.
DL36
Цитата(Евгений Германович @ Sep 12 2007, 17:44) *
Ну и что?ДЛя пиков пока мах 40МГц.

Да так просто информация для размышления.

Цитата
The PLL is enabled in HSPLL, XTPLL, ECPLL and
ECPIO Oscillator modes. It is designed to produce a
fixed 96 MHz reference clock from a fixed 4 MHz input.
The output can then be divided and used for both the
USB and the microcontroller core clock. Because the
PLL has a fixed frequency input and output, there are
eight prescaling options to
Epikur
Если взять пики из серии PIC18, то лучшее, что у вас может получится для скважности 50%:

btg LATA, 0
bra $-2

При наиболее высокой частоте (48 Мгц для контроллеров серии PIC18F2455 и других со встроенным USB) период будет составлять 500 наносекунд

Если ориентироваться на контроллеры серии PIC24H, то на них можно получить период 125 нс

Но лучше не парьтесь, а используйте простейшую CPLD микросхему. По стоимости будет примерно то же самое, зато получите на ней всё, что душеньке будет угодно.
=AVR=
Цитата
При наиболее высокой частоте (48 Мгц для контроллеров серии PIC18F2455 и других со встроенным USB) период будет составлять 500 наносекунд
Нет, 167 нс, или 6 МГЦ. Не удивляйся, это ассемблер, несмотря на while и окрестности:

Код
btg_loop:
n=0
  while n < 256
    btg    LATA,0
n+=1
  endw
    bra    btg_loop



Цитата
Если ориентироваться на контроллеры серии PIC24H, то на них можно получить период 125 нс
Опять неправда - 50 нс, или 20 МГЦ:

Код
btg_loop:
    repeat    #16383
    btg    LATA,#0
    bra    btg_loop


Не надо утверждать то, о чем имеешь весьма слабое понятие - ведь могут и поверить smile.gif
Epikur
=AVR=
>> Не удивляйся, это ассемблер, несмотря на while и окрестности
Это не ассемблер, а макроассемблер. Язык немного более высокого уровня, отличается от обычного ассемблера возможностью использовать макросы-конструкции вроде этого же "while". Если вы скомилируете ваш код и посмотрите листинг, то сможете убедиться: период генерации получится раза в 3 длинее. Кроме того, ваш код отличается от предложенного мною нестабильностью периода генерации - 1 раз на 128 периодов период будет ещё немножко длинее (тактов на 5..6), и скважность увеличится вдвое

Ваш код для PIC24 обладает тем же недостатком: нестабильность периода генерации. Хотя сам период у него короче - это правда.

Спасибо, улыбнуло.
Всё же мне кажется, что вы не совсем верно воспринимается логику работы микроконтроллеров.


ЗЫ. Прошу прощения. Операнд " while n < 256" не создаёт 16-битную переменную - он просто не компилируется. Так что и код просто не работает.
=AVR=
Я бы ОЧЕНЬ попросил не учить меня тому, что я в силу ряда причин знаю в ТЫСЯЧИ раз лучше тебя - в данном случае ассемблеру. While применено для того, чтобы ассемблер сгенерировал 256 подряд идущих btg LATA,0 - в том ассемблере, которым пользуется большинство ПИКающих, нет директивы .rept, позволившей бы все это записать одной строкой - rept #FLASHLENGTH/2 (btg LATA,0) и обойтись без зацикливания, вносящего подрагивание меандра. Постить же сюда код, состоящий из 12288 одинаковых строк btg LATA,0 я не стал по, надеюсь, очевидным причинам.

Для особо одаренных, у которых троятся периоды и не компилируется код, а также для желающих поучить других тому, что они не знают сами, привожу ЛИСТИНГ:

Код
MPASM  5.13                           BTG.ASM   9-18-2007  1:04:00         PAGE  1


LOC  OBJECT CODE     LINE SOURCE TEXT
  VALUE

  00000064            00001 LATA = 100
                      00002
000000                00003 BTG_LOOP:
  00000000            00004 N=0
                      00005   WHILE N < 256
000000 7164           00006         BTG     LATA,0
  00000001            00007 N+=1
000002 7164           00006         BTG     LATA,0
  00000002            00007 N+=1
000004 7164           00006         BTG     LATA,0
  00000003            00007 N+=1
000006 7164           00006         BTG     LATA,0
  00000004            00007 N+=1
000008 7164           00006         BTG     LATA,0
  00000005            00007 N+=1
00000A 7164           00006         BTG     LATA,0
  00000006            00007 N+=1
00000C 7164           00006         BTG     LATA,0
  00000007            00007 N+=1
;................................. и так всего 256 раз на 11 страницах листинга
;.................................
;.................................
;.................................
;.................................
;.................................
0001F8 7164           00006         BTG     LATA,0
  000000FD            00007 N+=1
0001FA 7164           00006         BTG     LATA,0
  000000FE            00007 N+=1
0001FC 7164           00006         BTG     LATA,0
  000000FF            00007 N+=1
0001FE 7164           00006         BTG     LATA,0
  00000100            00007 N+=1
                      00008   ENDW
000200 D6FF           00009         BRA     BTG_LOOP
                      00010         END
MPASM  5.13                           BTG.ASM   9-18-2007  1:04:00         PAGE 11


SYMBOL TABLE
  LABEL                             VALUE

BTG_LOOP                          00000000
LATA                              00000064
N                                 00000100
__18F2455                         00000001


MEMORY USAGE MAP ('X' = Used,  '-' = Unused)

0000 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX
0040 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX
0080 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX
00C0 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX
0100 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX
0140 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX
0180 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX
01C0 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX
0200 : XX-------------- ---------------- ---------------- ----------------

All other memory blocks unused.

Program Memory Bytes Used:   514
Program Memory Bytes Free: 32254


Errors   :     0
Warnings :     0 reported,     0 suppressed
Messages :     0 reported,     0 suppressed


Ошибок компиляции, как видишь, нет. КАЖДАЯ инструкция btg LATA,0 выполняется за 1 машинный цикл, полный период меандра формируется каждой последовательной парой btg, поэтому частота меандра при максимально допустимой частоте Fcy, равной 12 МГЦ, составит 6 МГЦ, а период, соответственно составит 167 нс, а не втрое больше или семеро козлят.

По коду для PIC24 - дергание будет раз в 16384 периода, но код состоит всего из трех слов. При развертывании кода BTG на всю Flash и при выключенном WDT получится абсолютно чистый меандр 20 МГЦ. Это пишется тремя строками, но занимает всю Flash:

Код
.rept    FLASHBYTES/3
    btg    LATA,#0
.endr


Обе эти реализации - для PIC18 и для PIC24 - абсолютно дурацкие, и приведены просто для примера, т.к. делают из МК дебильный генератор, загружая тем самым МК на 100%. На практике для этого используют встроенные в МК таймеры, которые позволяют получить и такие относительно высокие частоты без какой-либо загрузки МК.

Какие еще наезды будут, двоешник? smile.gif
Epikur
Ок, признаю ошибку - эта дурацкая реализация действительно работает.
Однако у меня нет причин говорить с вами на "ты" и попрошу сохранять в этом взаимность.
=AVR=
Цитата
Однако у меня нет причин говорить с вами на "ты" и попрошу сохранять в этом взаимность.
Да у меня вообще не было причин с тобой говорить, пока ты не начал гнать дезинформацию читающим эту конфу людям. Обеспечь отсутствие дезы, взвешивай и перепроверяй свои утверждения ДО их появления в конфе - и я просто одобрительно промолчу. А вот с кем как говорить - я решал, решаю, и буду решать сам, уж не обессудь - мое "выканье" сначала придется заслужить тем или иным способом. Вон =GM= уже заслужил, например - ask him how smile.gif
Евгений Германович
Давайте жить дружно.Сколько бы нибыло строк,а так же столбцов и диагоналей,ничего путнего ,речь идет о генераторе не получится.,ибо генераторы на процессоре это нонсенс.,я исключаю очень низкие частоты.Самым разумным решением является предложение Epikur,если только импортное слово и ПЛИС это одно и тоже.Хотя схемы реальных генераторов намного сложнее,задержку между 2 выходами обычно подстраивают,если необходимо точное согласование.Или можно применить ЭСЛ логику.
MaxPIC
Ну тогда уж для PIC18F4550 не 10 МГц, а 12 МГц частота ядра. Выдержка из ДШ на PIC со встроенным USB.
=AVR=
Цитата(Евгений Германович @ Sep 18 2007, 19:57) *
Самым разумным решением является предложение Epikur,если только импортное слово и ПЛИС это одно и тоже.Хотя схемы реальных генераторов намного сложнее,задержку между 2 выходами обычно подстраивают,если необходимо точное согласование.Или можно применить ЭСЛ логику.
А что, режимы таймеров МК типа Waveform/Clock Generator Mode уже забанили? И с какого перепоя "генератор на PIC", о котором спрашивал автор ветки, должен делаться на CPLD или на ЭСЛ-логике? Или просто явить миру поток сознания не терпелось?
Евгений Германович
Во первых не хами.Во вторых 20МГЦ все равно не вытянуть(вместе с 10)читайте задание.В третьих генераторы "на пик" на пик не делают.Не "на пик" тоже.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.