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

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> Высокостабильный генератор на PIC
Epikur
сообщение Sep 18 2007, 08:03
Сообщение #16


Частый гость
**

Группа: Свой
Сообщений: 90
Регистрация: 17-04-05
Из: Минск
Пользователь №: 4 215



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

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

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


ЗЫ. Прошу прощения. Операнд " while n < 256" не создаёт 16-битную переменную - он просто не компилируется. Так что и код просто не работает.
Go to the top of the page
 
+Quote Post
Guest_=AVR=_*
сообщение Sep 18 2007, 11:59
Сообщение #17





Guests






Я бы ОЧЕНЬ попросил не учить меня тому, что я в силу ряда причин знаю в ТЫСЯЧИ раз лучше тебя - в данном случае ассемблеру. 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
Go to the top of the page
 
+Quote Post
Epikur
сообщение Sep 18 2007, 12:17
Сообщение #18


Частый гость
**

Группа: Свой
Сообщений: 90
Регистрация: 17-04-05
Из: Минск
Пользователь №: 4 215



Ок, признаю ошибку - эта дурацкая реализация действительно работает.
Однако у меня нет причин говорить с вами на "ты" и попрошу сохранять в этом взаимность.
Go to the top of the page
 
+Quote Post
Guest_=AVR=_*
сообщение Sep 18 2007, 13:24
Сообщение #19





Guests






Цитата
Однако у меня нет причин говорить с вами на "ты" и попрошу сохранять в этом взаимность.
Да у меня вообще не было причин с тобой говорить, пока ты не начал гнать дезинформацию читающим эту конфу людям. Обеспечь отсутствие дезы, взвешивай и перепроверяй свои утверждения ДО их появления в конфе - и я просто одобрительно промолчу. А вот с кем как говорить - я решал, решаю, и буду решать сам, уж не обессудь - мое "выканье" сначала придется заслужить тем или иным способом. Вон =GM= уже заслужил, например - ask him how smile.gif
Go to the top of the page
 
+Quote Post
Евгений Германов...
сообщение Sep 18 2007, 15:57
Сообщение #20


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

Группа: Свой
Сообщений: 1 079
Регистрация: 24-06-07
Из: г.Екатеринбург
Пользователь №: 28 654



Давайте жить дружно.Сколько бы нибыло строк,а так же столбцов и диагоналей,ничего путнего ,речь идет о генераторе не получится.,ибо генераторы на процессоре это нонсенс.,я исключаю очень низкие частоты.Самым разумным решением является предложение Epikur,если только импортное слово и ПЛИС это одно и тоже.Хотя схемы реальных генераторов намного сложнее,задержку между 2 выходами обычно подстраивают,если необходимо точное согласование.Или можно применить ЭСЛ логику.
Go to the top of the page
 
+Quote Post
MaxPIC
сообщение Sep 18 2007, 16:36
Сообщение #21


специалист
***

Группа: Свой
Сообщений: 279
Регистрация: 3-05-07
Из: г. Москва
Пользователь №: 27 506



Ну тогда уж для PIC18F4550 не 10 МГц, а 12 МГц частота ядра. Выдержка из ДШ на PIC со встроенным USB.
Go to the top of the page
 
+Quote Post
Guest_=AVR=_*
сообщение Sep 18 2007, 16:49
Сообщение #22





Guests






Цитата(Евгений Германович @ Sep 18 2007, 19:57) *
Самым разумным решением является предложение Epikur,если только импортное слово и ПЛИС это одно и тоже.Хотя схемы реальных генераторов намного сложнее,задержку между 2 выходами обычно подстраивают,если необходимо точное согласование.Или можно применить ЭСЛ логику.
А что, режимы таймеров МК типа Waveform/Clock Generator Mode уже забанили? И с какого перепоя "генератор на PIC", о котором спрашивал автор ветки, должен делаться на CPLD или на ЭСЛ-логике? Или просто явить миру поток сознания не терпелось?
Go to the top of the page
 
+Quote Post
Евгений Германов...
сообщение Sep 19 2007, 13:35
Сообщение #23


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

Группа: Свой
Сообщений: 1 079
Регистрация: 24-06-07
Из: г.Екатеринбург
Пользователь №: 28 654



Во первых не хами.Во вторых 20МГЦ все равно не вытянуть(вместе с 10)читайте задание.В третьих генераторы "на пик" на пик не делают.Не "на пик" тоже.
Go to the top of the page
 
+Quote Post

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

 


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


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