Форум Микро-Чип
Поиск и заказ электронных компонентов
 

Вернуться   Форум Микро-Чип > Вопросы начинающих

Вопросы начинающих Прежде чем задать вопрос, стоит воспользоваться поиском

Ответ
 
Опции темы Опции просмотра
Старый 30.09.2011, 19:02   #1
erg6regr5
Junior Member
 
Регистрация: 30.09.2011
Возраст: 31
Сообщений: 8
Вес репутации: 100/0
erg6regr5 will become famous soon enougherg6regr5 will become famous soon enough
Post Генерирование сигнала с частотой 1Мгц

Имеется PIC18F2550, кварц 20Мгц. Требуется на ноге сделать частоту 1Мгц от таймера. Как это реализовать?Состряпал вот такой код (компилятор ccs):
Код:
 
#include <18F2455.h>
#fuses HSPLL,NOWDT,NOLVP,NODEBUG,PLL5,CPUDIV1,VREGEN
#use delay(clock=20000000)
#int_TIMER1
TIMER1_isr()
{
 output_toggle(PIN_B7);
}
void main()
{
 setup_timer_1(T1_EXTERNAL|T1_DIV_BY_1|T1_CLK_OUT);
 enable_interrupts(INT_TIMER1);
 enable_interrupts(GLOBAL);
 while(1);
}
При таком раскладе тактов ваще нету. Если поставить setup_timer_1(T1_INTERNAL); то появится частота 90Гц. Кда копать?
Заранее спасибо.
erg6regr5 вне форума   Ответить с цитированием
Старый 30.09.2011, 19:37   #2
Вова
Senior Member
 
Регистрация: 20.09.2008
Адрес: Гродно, Беларусь
Возраст: 33
Сообщений: 1,681
Вес репутации: 2043/80
Вова has a reputation beyond reputeВова has a reputation beyond reputeВова has a reputation beyond reputeВова has a reputation beyond reputeВова has a reputation beyond reputeВова has a reputation beyond reputeВова has a reputation beyond reputeВова has a reputation beyond reputeВова has a reputation beyond reputeВова has a reputation beyond reputeВова has a reputation beyond repute
По умолчанию Re: Генерирование сигнала с частотой 1Мгц

Цитата:
Сообщение от erg6regr5 Посмотреть сообщение
Имеется PIC18F2550, кварц 20Мгц. Требуется на ноге сделать частоту 1Мгц от таймера. Как это реализовать?Состряпал вот такой код (компилятор ccs):
Код:
 
#include <18F2455.h>
#fuses HSPLL,NOWDT,NOLVP,NODEBUG,PLL5,CPUDIV1,VREGEN
#use delay(clock=20000000)
#int_TIMER1
TIMER1_isr()
{
 output_toggle(PIN_B7);
}
void main()
{
 setup_timer_1(T1_EXTERNAL|T1_DIV_BY_1|T1_CLK_OUT);
 enable_interrupts(INT_TIMER1);
 enable_interrupts(GLOBAL);
 while(1);
}
При таком раскладе тактов ваще нету. Если поставить setup_timer_1(T1_INTERNAL); то появится частота 90Гц. Кда копать?
Заранее спасибо.
А вы вообще понимаете, что делаете? Чем различаются T1_EXTERNAL и T1_INTERNAL? И где настройка порта на выход?
__________________
Железяка должна быть такой: нажал кнопку — работает
Вова вне форума   Ответить с цитированием
Старый 30.09.2011, 19:52   #3
xDriver
Senior Member
 
Аватар для xDriver
 
Регистрация: 24.03.2008
Адрес: msk
Сообщений: 542
Вес репутации: 412/55
xDriver is just really nicexDriver is just really nicexDriver is just really nicexDriver is just really nicexDriver is just really nice
Отправить сообщение для xDriver с помощью ICQ
По умолчанию Re: Генерирование сигнала с частотой 1Мгц

Цитата:
Сообщение от erg6regr5 Посмотреть сообщение
Имеется PIC18F2550, кварц 20Мгц. Требуется на ноге сделать частоту 1Мгц от таймера. Как это реализовать?Состряпал вот такой код (компилятор ccs):
Код:
 
#include <18F2455.h>
#fuses HSPLL,NOWDT,NOLVP,NODEBUG,PLL5,CPUDIV1,VREGEN
#use delay(clock=20000000)
#int_TIMER1
TIMER1_isr()
{
 output_toggle(PIN_B7);
}
void main()
{
 setup_timer_1(T1_EXTERNAL|T1_DIV_BY_1|T1_CLK_OUT);
 enable_interrupts(INT_TIMER1);
 enable_interrupts(GLOBAL);
 while(1);
}
При таком раскладе тактов ваще нету. Если поставить setup_timer_1(T1_INTERNAL); то появится частота 90Гц. Кда копать?
Заранее спасибо.
T1_EXTERNAL !! Вы что таймер из вне тактируете ?
Путаете наверно полупериод с периодом
При том что вы привели (при учете T1_INTERNAL) период = 183,10547 Гц

Надо еще в прерывании загружать таймер

Код:
 
#include <18F2455.h>
#fuses HSPLL,NOWDT,NOLVP,NODEBUG,PLL5,CPUDIV1,VREGEN
#use delay(clock=20000000)
#int_TIMER1
TIMER1_isr()
{
 output_toggle(PIN_B7);
 set_timer1(65524); // Частота 1Мгц, период 1 us;
}
void main()
{
 setup_timer_1(T1_EXTERNAL|T1_DIV_BY_1|T1_CLK_OUT);
 enable_interrupts(INT_TIMER1);
 enable_interrupts(GLOBAL);
 while(1);
}
xDriver вне форума   Ответить с цитированием
Старый 30.09.2011, 19:54   #4
erg6regr5
Junior Member
 
Регистрация: 30.09.2011
Возраст: 31
Сообщений: 8
Вес репутации: 100/0
erg6regr5 will become famous soon enougherg6regr5 will become famous soon enough
По умолчанию Re: Генерирование сигнала с частотой 1Мгц

Параметрами T1_EXTERNAL и T1_INTERNAL задается внешний или внутренний тактовый сигнал. Настройка порта сдесь вроде не нужна. По крайней мере если сделать так:
Код:
 
void main()
{
 while(1)
 {
     output_toggle(PIN_B7);
 }
}
то получаем 1,4Мгц на ноге B7. Вот мне бы их от таймера получить.. Подскажите пожалуйста как сконфигурировать таймер.. желательно на прямую записывая значения в T0CON или T1CON, а не используя эту хрень в виде T1_EXTERNAL..
erg6regr5 вне форума   Ответить с цитированием
Старый 30.09.2011, 19:55   #5
xDriver
Senior Member
 
Аватар для xDriver
 
Регистрация: 24.03.2008
Адрес: msk
Сообщений: 542
Вес репутации: 412/55
xDriver is just really nicexDriver is just really nicexDriver is just really nicexDriver is just really nicexDriver is just really nice
Отправить сообщение для xDriver с помощью ICQ
По умолчанию Re: Генерирование сигнала с частотой 1Мгц

Цитата:
Сообщение от Вова Посмотреть сообщение
И где настройка порта на выход?
В CCS она не нужна по умолчанию, если только не использовать
Код:
#use FAST_IO(B)
xDriver вне форума   Ответить с цитированием
Старый 30.09.2011, 20:08   #6
erg6regr5
Junior Member
 
Регистрация: 30.09.2011
Возраст: 31
Сообщений: 8
Вес репутации: 100/0
erg6regr5 will become famous soon enougherg6regr5 will become famous soon enough
По умолчанию Re: Генерирование сигнала с частотой 1Мгц

Прошил это:
Код:
 
#include <18F2455.h>
#fuses HSPLL,NOWDT,NOLVP,NODEBUG,PLL5,CPUDIV1,VREGEN
#use delay(clock=20000000)
#int_TIMER1
TIMER1_isr()
{
output_toggle(PIN_B7);
set_timer1(65524); // Частота 1Мгц, период 1 us;
}
void main()
{
setup_timer_1(T1_EXTERNAL|T1_DIV_BY_1|T1_CLK_OUT);
enable_interrupts(INT_TIMER1);
enable_interrupts(GLOBAL);
while(1);
}
На ноге 1Гц Если поставить setup_timer_1(T1_INTERNAL|T1_DIV_BY_1|T1_CLK_OUT); то частота 62кГц. Кварц подключен к выводам 9-OSC1,10-OSC2. Куда еще копать?
ЗЫ: Девайсина исправна: работают АЦП и пересылка данных на комп по USB
erg6regr5 вне форума   Ответить с цитированием
Старый 30.09.2011, 20:42   #7
PICstone
Senior Member
 
Аватар для PICstone
 
Регистрация: 30.04.2008
Адрес: 51° 46' северной широты 55° 6' восточной долготы
Сообщений: 413
Вес репутации: 1356/63
PICstone has much to be proud ofPICstone has much to be proud ofPICstone has much to be proud ofPICstone has much to be proud ofPICstone has much to be proud ofPICstone has much to be proud ofPICstone has much to be proud ofPICstone has much to be proud ofPICstone has much to be proud ofPICstone has much to be proud of
По умолчанию Re: Генерирование сигнала с частотой 1Мгц

Код:
#include <18F2455.h>
#fuses HS,NOWDT,NOLVP,NODEBUG
#use delay(clock=20000000)

#int_TIMER1
void TIMER1_isr(void)
  {
    clear_interrupt(int_timer1);
    output_toggle(PIN_B7);
    set_timer1(65531); 
 }
void main()
{
    setup_timer_1 (T1_INTERNAL|T1_DIV_BY_1);
    set_tris_b(0b00000000);
    enable_interrupts(INT_TIMER1);
    enable_interrupts(GLOBAL);
   while(1);
}
PICstone вне форума   Ответить с цитированием
Старый 30.09.2011, 20:50   #8
erg6regr5
Junior Member
 
Регистрация: 30.09.2011
Возраст: 31
Сообщений: 8
Вес репутации: 100/0
erg6regr5 will become famous soon enougherg6regr5 will become famous soon enough
По умолчанию Re: Генерирование сигнала с частотой 1Мгц

Цитата:
Сообщение от PICstone Посмотреть сообщение
Код:
#include <18F2455.h>
#fuses HS,NOWDT,NOLVP,NODEBUG
#use delay(clock=20000000)
 
#int_TIMER1
void TIMER1_isr(void)
  {
    clear_interrupt(int_timer1);
    output_toggle(PIN_B7);
    set_timer1(65531); 
 }
void main()
{
    setup_timer_1 (T1_INTERNAL|T1_DIV_BY_1);
    set_tris_b(0b00000000);
    enable_interrupts(INT_TIMER1);
    enable_interrupts(GLOBAL);
   while(1);
}
62кГц.. проверяю на живом девайсе и в Proteus.
erg6regr5 вне форума   Ответить с цитированием
Старый 30.09.2011, 21:31   #9
PICstone
Senior Member
 
Аватар для PICstone
 
Регистрация: 30.04.2008
Адрес: 51° 46' северной широты 55° 6' восточной долготы
Сообщений: 413
Вес репутации: 1356/63
PICstone has much to be proud ofPICstone has much to be proud ofPICstone has much to be proud ofPICstone has much to be proud ofPICstone has much to be proud ofPICstone has much to be proud ofPICstone has much to be proud ofPICstone has much to be proud ofPICstone has much to be proud ofPICstone has much to be proud of
По умолчанию Re: Генерирование сигнала с частотой 1Мгц

20мГц/4 = 5мГц или 0,2 uS
5 тактов и получилась 1uS(1МГц).
Не успевает.
PICstone вне форума   Ответить с цитированием
Старый 30.09.2011, 23:02   #10
xDriver
Senior Member
 
Аватар для xDriver
 
Регистрация: 24.03.2008
Адрес: msk
Сообщений: 542
Вес репутации: 412/55
xDriver is just really nicexDriver is just really nicexDriver is just really nicexDriver is just really nicexDriver is just really nice
Отправить сообщение для xDriver с помощью ICQ
По умолчанию Re: Генерирование сигнала с частотой 1Мгц

Цитата:
На ноге 1Гц Если поставить setup_timer_1(T1_INTERNAL|T1_DIV_BY_1|T1_CLK_OUT); то частота 62кГц. Кварц подключен к выводам 9-OSC1,10-OSC2. Куда еще копать?
ЗЫ: Девайсина исправна: работают АЦП и пересылка данных на комп по USB
блин, конечно !
Код:
setup_timer_1 (T1_INTERNAL|T1_DIV_BY_1);
копипаст проклятый !
сейчас гляну в протезе, макетку неохота ворошить


Цитата:
Сообщение от PICstone Посмотреть сообщение
Код:
#include <18F2455.h>
#fuses HS,NOWDT,NOLVP,NODEBUG
#use delay(clock=20000000)

#int_TIMER1
void TIMER1_isr(void)
  {
    clear_interrupt(int_timer1);
    output_toggle(PIN_B7);
    set_timer1(65531); 
 }
void main()
{
    setup_timer_1 (T1_INTERNAL|T1_DIV_BY_1);
    set_tris_b(0b00000000);
    enable_interrupts(INT_TIMER1);
    enable_interrupts(GLOBAL);
   while(1);
}
почитаете мануал по CCS
да не нужен там
Код:
clear_interrupt(int_timer1);
если только не объявить так
Код:
#int_TIMER1 NOCLEAR
и
Код:
set_tris_b(0b00000000);
тоже не нужен, выше писал, сам CCS TRISB настроит перед тем как что нибудь с пином делать.

Последний раз редактировалось xDriver; 30.09.2011 в 23:14.
xDriver вне форума   Ответить с цитированием
Старый 03.10.2011, 11:02   #11
erg6regr5
Junior Member
 
Регистрация: 30.09.2011
Возраст: 31
Сообщений: 8
Вес репутации: 100/0
erg6regr5 will become famous soon enougherg6regr5 will become famous soon enough
По умолчанию Re: Генерирование сигнала с частотой 1Мгц

В итоге так ничего и не работает. Может кто подскажет как настроить таймер для генерации сигнала с частотой 1Мгц? Я уже все перепробовал
erg6regr5 вне форума   Ответить с цитированием
Старый 03.10.2011, 11:07   #12
CERGEI
Senior Member
 
Аватар для CERGEI
 
Регистрация: 11.07.2009
Возраст: 38
Сообщений: 526
Вес репутации: 183/47
CERGEI has a spectacular aura aboutCERGEI has a spectacular aura about
По умолчанию Re: Генерирование сигнала с частотой 1Мгц

Цитата:
Сообщение от erg6regr5 Посмотреть сообщение
В итоге так ничего и не работает. Может кто подскажет как настроить таймер для генерации сигнала с частотой 1Мгц? Я уже все перепробовал
И что даже с помощью wizard-a не можеш? Он все сделает,нужную задержку срабатывания выставит.Конечно без знания даташифта очень тяжко.
Если не разберешся сделаю завтра пример.
CERGEI вне форума   Ответить с цитированием
Старый 03.10.2011, 12:56   #13
xDriver
Senior Member
 
Аватар для xDriver
 
Регистрация: 24.03.2008
Адрес: msk
Сообщений: 542
Вес репутации: 412/55
xDriver is just really nicexDriver is just really nicexDriver is just really nicexDriver is just really nicexDriver is just really nice
Отправить сообщение для xDriver с помощью ICQ
По умолчанию Re: Генерирование сигнала с частотой 1Мгц

Цитата:
Сообщение от erg6regr5 Посмотреть сообщение
В итоге так ничего и не работает. Может кто подскажет как настроить таймер для генерации сигнала с частотой 1Мгц? Я уже все перепробовал
Вечером, будет в руках макетка с 18F2550, попробую, в Протезе максимум что получилось 12 us (~83 кГц).
xDriver вне форума   Ответить с цитированием
Старый 03.10.2011, 13:06   #14
CERGEI
Senior Member
 
Аватар для CERGEI
 
Регистрация: 11.07.2009
Возраст: 38
Сообщений: 526
Вес репутации: 183/47
CERGEI has a spectacular aura aboutCERGEI has a spectacular aura about
По умолчанию Re: Генерирование сигнала с частотой 1Мгц

Цитата:
Сообщение от xDriver Посмотреть сообщение
Вечером, будет в руках макетка с 18F2550, попробую, в Протезе максимум что получилось 12 us (~83 кГц).
А построить графами сигнал?
CERGEI вне форума   Ответить с цитированием
Старый 03.10.2011, 13:26   #15
xDriver
Senior Member
 
Аватар для xDriver
 
Регистрация: 24.03.2008
Адрес: msk
Сообщений: 542
Вес репутации: 412/55
xDriver is just really nicexDriver is just really nicexDriver is just really nicexDriver is just really nicexDriver is just really nice
Отправить сообщение для xDriver с помощью ICQ
По умолчанию Re: Генерирование сигнала с частотой 1Мгц

Цитата:
Сообщение от CERGEI Посмотреть сообщение
А построить графами сигнал?
дык, так и делал
xDriver вне форума   Ответить с цитированием
Старый 03.10.2011, 15:32   #16
canis
Senior Member
 
Аватар для canis
 
Регистрация: 04.08.2010
Адрес: Москва
Сообщений: 105
Вес репутации: 174/40
canis has a spectacular aura aboutcanis has a spectacular aura about
Отправить сообщение для canis с помощью ICQ Отправить сообщение для canis с помощью Skype™
По умолчанию Re: Генерирование сигнала с частотой 1Мгц

Почему именно 18F2550? USB то на нем при этом не нужен? Просто учебная задача?

20 МГц, 4 такта на 1 строку ассемблерного кода. Итого ассемблерные команды выполняются с частотой 5 МГц. Нужно отдрыгать 1 МГц по задаче. Итого 5 команд на 2 дрыга ногой (туда-сюда дрыгнуть же надо). Может дергать прямо в линейном коде? Все равно в оставшиеся такты ничего полезного уложить не получится.
Или я чего-то не понял в постановке вопроса?

Последний раз редактировалось canis; 03.10.2011 в 15:39.
canis вне форума   Ответить с цитированием
Старый 03.10.2011, 15:49   #17
xDriver
Senior Member
 
Аватар для xDriver
 
Регистрация: 24.03.2008
Адрес: msk
Сообщений: 542
Вес репутации: 412/55
xDriver is just really nicexDriver is just really nicexDriver is just really nicexDriver is just really nicexDriver is just really nice
Отправить сообщение для xDriver с помощью ICQ
По умолчанию Re: Генерирование сигнала с частотой 1Мгц

Цитата:
Сообщение от canis Посмотреть сообщение
Почему именно 18F2550? USB то на нем при этом не нужен? Просто учебная задача?

20 МГц.....
там PLL задействован, ядро тактируется от 48 мГц.

Последний раз редактировалось xDriver; 03.10.2011 в 15:56.
xDriver вне форума   Ответить с цитированием
Старый 03.10.2011, 15:55   #18
Art!P
Senior Member
 
Аватар для Art!P
 
Регистрация: 07.07.2008
Адрес: Татарстан
Возраст: 39
Сообщений: 627
Вес репутации: 175/52
Art!P has a spectacular aura aboutArt!P has a spectacular aura about
Отправить сообщение для Art!P с помощью ICQ
По умолчанию Re: Генерирование сигнала с частотой 1Мгц

Цитата:
Сообщение от canis Посмотреть сообщение
Почему именно 18F2550? USB то на нем при этом не нужен? Просто учебная задача?

20 МГц, 4 такта на 1 строку ассемблерного кода.
4 такта генератора или один такт МК.
на одну строку ассемблерного кода может уйти, не поверите, аж 8 тактов генератора. GOTO например.

erg6regr5 А точность очень нужна?
Тут теоретики конечно рассчитают довольно точно и еще надо сделать поправку на погрешность + поправку на пролетающую над головой тучку, температура воздуха, магнитное поле земли, октябрьскую индексацию пенсии и т.д.
Art!P вне форума   Ответить с цитированием
Старый 03.10.2011, 16:11   #19
canis
Senior Member
 
Аватар для canis
 
Регистрация: 04.08.2010
Адрес: Москва
Сообщений: 105
Вес репутации: 174/40
canis has a spectacular aura aboutcanis has a spectacular aura about
Отправить сообщение для canis с помощью ICQ Отправить сообщение для canis с помощью Skype™
По умолчанию Re: Генерирование сигнала с частотой 1Мгц

Верю, я так и не сумел подобрать адекватный перевод к instruction cycle )

48 МГц. 12 МГц после деления на 4. 12 instruction cycles на то, чтобы 2 раза дернуть ногой. Глобально лучше от PLL ничего не стало. Хотя 8 лучше, чем 1.

Последний раз редактировалось canis; 03.10.2011 в 16:20.
canis вне форума   Ответить с цитированием
Старый 03.10.2011, 17:35   #20
2AplusA
Senior Member
 
Аватар для 2AplusA
 
Регистрация: 26.02.2007
Адрес: Penza
Возраст: 39
Сообщений: 1,383
Вес репутации: 1267/75
2AplusA has much to be proud of2AplusA has much to be proud of2AplusA has much to be proud of2AplusA has much to be proud of2AplusA has much to be proud of2AplusA has much to be proud of2AplusA has much to be proud of2AplusA has much to be proud of2AplusA has much to be proud of
По умолчанию Re: Генерирование сигнала с частотой 1Мгц

Цитата:
Сообщение от xDriver Посмотреть сообщение
там PLL задействован, ядро тактируется от 48 мГц.
Юзайте CCP, и будет Вам счастье. Вроде есть такой режим, инверсия выходного пина по совпадению таймера с регистрами CCP. Руками дергать ножкой слишком накладно на частоту 1 МГц.
__________________
Лучше день потерять, потом за час долететь!
2AplusA вне форума   Ответить с цитированием
Старый 03.10.2011, 20:12   #21
xDriver
Senior Member
 
Аватар для xDriver
 
Регистрация: 24.03.2008
Адрес: msk
Сообщений: 542
Вес репутации: 412/55
xDriver is just really nicexDriver is just really nicexDriver is just really nicexDriver is just really nicexDriver is just really nice
Отправить сообщение для xDriver с помощью ICQ
По умолчанию Re: Генерирование сигнала с частотой 1Мгц

Цитата:
Сообщение от 2AplusA Посмотреть сообщение
Юзайте CCP, и будет Вам счастье. Вроде есть такой режим, инверсия выходного пина по совпадению таймера с регистрами CCP. Руками дергать ножкой слишком накладно на частоту 1 МГц.
Вы это...., как бы не ко мне...
xDriver вне форума   Ответить с цитированием
Старый 07.10.2011, 23:22   #22
xDriver
Senior Member
 
Аватар для xDriver
 
Регистрация: 24.03.2008
Адрес: msk
Сообщений: 542
Вес репутации: 412/55
xDriver is just really nicexDriver is just really nicexDriver is just really nicexDriver is just really nicexDriver is just really nice
Отправить сообщение для xDriver с помощью ICQ
По умолчанию Re: Генерирование сигнала с частотой 1Мгц

Цитата:
Сообщение от erg6regr5 Посмотреть сообщение
В итоге так ничего и не работает. Может кто подскажет как настроить таймер для генерации сигнала с частотой 1Мгц? Я уже все перепробовал
вообщем так и есть
если просто дергать ногой
Код:
	for (;;) output_toggle(PIN_A0);
частота 1.4 мГц

при использование таймера (TIMER1 или TIMER2 без разницы)
Код:
#INT_TIMER1
void int_timer1(void)
{
	output_toggle(PIN_A0);
	set_timer1(65535);
}
частота 64 кГЦ.
попробовал в железе
что там CCS генерит на асме не смотрел и не буду
xDriver вне форума   Ответить с цитированием
Старый 07.10.2011, 23:58   #23
xDriver
Senior Member
 
Аватар для xDriver
 
Регистрация: 24.03.2008
Адрес: msk
Сообщений: 542
Вес репутации: 412/55
xDriver is just really nicexDriver is just really nicexDriver is just really nicexDriver is just really nicexDriver is just really nice
Отправить сообщение для xDriver с помощью ICQ
По умолчанию Re: Генерирование сигнала с частотой 1Мгц

Хотя посмотрел ...
код:
Код:
#include <18F2550.h>
#case
#device adc=10

#fuses NOWDT
#fuses NOPROTECT
#fuses NOLVP
#fuses NODEBUG
#fuses HSPLL
#fuses USBDIV
#fuses PLL5
#fuses CPUDIV1
#fuses VREGEN
#fuses NOFCMEN
#fuses NOIESO
#fuses NOPUT
#fuses NOBROWNOUT
#fuses NOPBADEN
#fuses MCLR
#fuses NOSTVREN
#fuses NOLVP
#fuses NOPROTECT
#fuses NOCPB
#fuses NOCPD
#fuses NOWRT
#fuses NOWRT
#fuses NOWRTB
#fuses NOWRTD
#fuses NOEBTR
#fuses NOEBTRB

#use delay(clock=48000000)

//******************************************************************************
// дефайны
//******************************************************************************
#DEFINE LED1 PIN_A0


//******************************************************************************
//  Прерывание от таймера №1 
//******************************************************************************
#INT_TIMER1
void int_timer1(void)
{
	output_toggle(LED1);
	set_timer1(65535);
}
//-------------------------------------------------------------------------------------------------------------------------
// Инициализация контролера
//-------------------------------------------------------------------------------------------------------------------------
void Init(void) {

   setup_timer_1(T1_INTERNAL | T1_DIV_BY_1);

   setup_comparator(NC_NC_NC_NC);
	
   enable_interrupts(INT_TIMER1);
   enable_interrupts(GLOBAL);
}
//-------------------------------------------------------------------------------------------------------------------------
// MAIN
//-------------------------------------------------------------------------------------------------------------------------
void main() {

	Init();
	for (;;);
//		output_toggle(LED1);
//
//   если просто дергать ногой без таймера частота 1.4 мГц
//   иначе 64 кГц 
//

}
Листинг:

Код:
CCS PCH C Compiler, Version 4.124, 5967               07-окт-11 23:44


               ROM used: 252 bytes (1%)
                         Largest free fragment is 32512
               RAM used: 25 (1%) at main() level
                         25 (1%) worst case
               Stack:    2 worst case (1 in main + 1 for interrupts)

*
0000:  GOTO   00E0
*
0008:  MOVWF  04
000A:  MOVFF  FD8,05
000E:  MOVFF  FE0,06
0012:  MOVLB  0
0014:  MOVFF  FE9,0C
0018:  MOVFF  FEA,07
001C:  MOVFF  FE1,08
0020:  MOVFF  FE2,09
0024:  MOVFF  FD9,0A
0028:  MOVFF  FDA,0B
002C:  MOVFF  FF3,12
0030:  MOVFF  FF4,13
0034:  MOVFF  FFA,14
0038:  MOVFF  FF5,15
003C:  MOVFF  FF6,16
0040:  MOVFF  FF7,17
0044:  MOVFF  00,0E
0048:  MOVFF  01,0F
004C:  MOVFF  02,10
0050:  MOVFF  03,11
0054:  BTFSS  F9D.0
0056:  GOTO   0060
005A:  BTFSC  F9E.0
005C:  GOTO   00AE
0060:  MOVFF  0E,00
0064:  MOVFF  0F,01
0068:  MOVFF  10,02
006C:  MOVFF  11,03
0070:  MOVFF  0C,FE9
0074:  MOVFF  07,FEA
0078:  BSF    07.7
007A:  MOVFF  08,FE1
007E:  MOVFF  09,FE2
0082:  MOVFF  0A,FD9
0086:  MOVFF  0B,FDA
008A:  MOVFF  12,FF3
008E:  MOVFF  13,FF4
0092:  MOVFF  14,FFA
0096:  MOVFF  15,FF5
009A:  MOVFF  16,FF6
009E:  MOVFF  17,FF7
00A2:  MOVF   04,W
00A4:  MOVFF  06,FE0
00A8:  MOVFF  05,FD8
00AC:  RETFIE 0
.................... #include <18F2550.h> 
.................... //////// Standard Header file for the PIC18F2550 device //////////////// 
.................... #device PIC18F2550 
.................... #list 
....................  
.................... #case 
.................... #device adc=10 
....................  
.................... #fuses NOWDT 
.................... #fuses NOPROTECT 
.................... #fuses NOLVP 
.................... #fuses NODEBUG 
.................... #fuses HSPLL 
.................... #fuses USBDIV 
.................... #fuses PLL5 
.................... #fuses CPUDIV1 
.................... #fuses VREGEN 
.................... #fuses NOFCMEN 
.................... #fuses NOIESO 
.................... #fuses NOPUT 
.................... #fuses NOBROWNOUT 
.................... #fuses NOPBADEN 
.................... #fuses MCLR 
.................... #fuses NOSTVREN 
.................... #fuses NOLVP 
.................... #fuses NOPROTECT 
.................... #fuses NOCPB 
.................... #fuses NOCPD 
.................... #fuses NOWRT 
.................... #fuses NOWRT 
.................... #fuses NOWRTB 
.................... #fuses NOWRTD 
.................... #fuses NOEBTR 
.................... #fuses NOEBTRB 
....................  
.................... #use delay(clock=48000000) 
....................  
.................... //****************************************************************************** 
.................... // дефайны 
.................... //****************************************************************************** 
.................... #DEFINE LED1 PIN_A0 
....................  
....................  
.................... //****************************************************************************** 
.................... //  Прерывание от таймера №1  
.................... //****************************************************************************** 
.................... #INT_TIMER1 
.................... void int_timer1(void) 
.................... { 
.................... 	output_toggle(LED1); 
00AE:  BCF    F92.0
00B0:  BTG    F89.0
.................... 	set_timer1(65535); 
00B2:  SETF   FCF
00B4:  SETF   FCE
.................... } 
.................... //------------------------------------------------------------------------------------------------------------------------- 
.................... // Инициализация контролера 
.................... //------------------------------------------------------------------------------------------------------------------------- 
00B6:  BCF    F9E.0
00B8:  GOTO   0060
.................... void Init(void) { 
.................... // TImer1 used for system ticks = 1 ms 
....................    setup_timer_1(T1_INTERNAL | T1_DIV_BY_1); 
00BC:  MOVLW  85
00BE:  MOVWF  FCD
....................  
....................    setup_comparator(NC_NC_NC_NC); 
00C0:  MOVLW  07
00C2:  MOVWF  FB4
00C4:  MOVF   F92,W
00C6:  MOVWF  F92
00C8:  MOVLW  27
00CA:  MOVWF  00
00CC:  DECFSZ 00,F
00CE:  BRA    00CC
00D0:  BRA    00D2
00D2:  MOVF   FB4,W
00D4:  BCF    FA1.6
.................... 	 
....................    enable_interrupts(INT_TIMER1); 
00D6:  BSF    F9D.0
....................    enable_interrupts(GLOBAL); 
00D8:  MOVLW  C0
00DA:  IORWF  FF2,F
.................... } 
00DC:  GOTO   00F8 (RETURN)
.................... //------------------------------------------------------------------------------------------------------------------------- 
.................... // MAIN 
.................... //------------------------------------------------------------------------------------------------------------------------- 
.................... void main() { 
00E0:  CLRF   FF8
00E2:  BCF    FD0.7
00E4:  BSF    07.7
00E6:  CLRF   FEA
00E8:  CLRF   FE9
00EA:  MOVF   FC1,W
00EC:  ANDLW  C0
00EE:  IORLW  0F
00F0:  MOVWF  FC1
00F2:  MOVLW  07
00F4:  MOVWF  FB4
....................  
.................... 	Init(); 
00F6:  BRA    00BC
.................... 	for (;;); 
00F8:  BRA    00F8
.................... 		output_toggle(LED1); 
00FA:  BCF    F92.0
00FC:  BTG    F89.0
.................... } 
00FE:  SLEEP 

Configuration Fuses:
   Word  1: 0E24   PLL5 CPUDIV1 USBDIV HSPLL NOFCMEN NOIESO
   Word  2: 1E39   NOPUT NOBROWNOUT BORV20 VREGEN NOWDT WDT32768
   Word  3: 8500   CCP2C1 NOPBADEN LPT1OSC MCLR
   Word  4: 0080   NOSTVREN NOLVP NOXINST NODEBUG
   Word  5: C00F   NOPROTECT NOCPB NOCPD
   Word  6: E00F   NOWRT NOWRTC NOWRTB NOWRTD
   Word  7: 400F   NOEBTR NOEBTRB

то есть при выходе из прерывания выполняется еще куча команд
Код:
0060:  MOVFF  0E,00
0064:  MOVFF  0F,01
0068:  MOVFF  10,02
006C:  MOVFF  11,03
0070:  MOVFF  0C,FE9
0074:  MOVFF  07,FEA
0078:  BSF    07.7
007A:  MOVFF  08,FE1
007E:  MOVFF  09,FE2
0082:  MOVFF  0A,FD9
0086:  MOVFF  0B,FDA
008A:  MOVFF  12,FF3
008E:  MOVFF  13,FF4
0092:  MOVFF  14,FFA
0096:  MOVFF  15,FF5
009A:  MOVFF  16,FF6
009E:  MOVFF  17,FF7
00A2:  MOVF   04,W
00A4:  MOVFF  06,FE0
00A8:  MOVFF  05,FD8
00AC:  RETFIE 0
надо смотреть манул по CCS
чтобы он по умолчанию не генерил добавочный код, настраивать самому TRIS, использовать
Код:
#use FAST_IO
делать самому
Код:
clear_interrupt(int_timer1);
и т.д.
я дал наводку, времени разбираться нет !

Последний раз редактировалось xDriver; 08.10.2011 в 00:05.
xDriver вне форума   Ответить с цитированием
Старый 08.10.2011, 00:15   #24
dosikus
Senior Member
 
Аватар для dosikus
 
Регистрация: 05.06.2007
Возраст: 48
Сообщений: 3,808
Вес репутации: 6357/150
dosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond repute
По умолчанию Re: Генерирование сигнала с частотой 1Мгц

Код:
#INT_GLOBAL
void int_timer_1(void)
{
   output_toggle(PIN_A0);
   set_timer1(65535);
   clear_interrupt(INT_TIMER1);
}
dosikus вне форума   Ответить с цитированием
Старый 08.10.2011, 01:07   #25
dosikus
Senior Member
 
Аватар для dosikus
 
Регистрация: 05.06.2007
Возраст: 48
Сообщений: 3,808
Вес репутации: 6357/150
dosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond repute
По умолчанию Re: Генерирование сигнала с частотой 1Мгц

set_timer1(65534);
dosikus вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Анализ и генерация ИК сигнала SomlicH Вопросы начинающих 5 24.02.2009 09:40


Часовой пояс GMT +3, время: 04:15.


Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, Jelsoft Enterprises Ltd. Перевод: zCarot