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

Вернуться   Форум Микро-Чип > Продукция MICROCHIP

Продукция MICROCHIP Технические вопросы по всей продукции Microchip

Ответ
 
Опции темы Опции просмотра
Старый 04.01.2008, 13:01   #1
ADL
Member
 
Аватар для ADL
 
Регистрация: 26.02.2007
Адрес: Новосибирск
Возраст: 50
Сообщений: 45
Вес репутации: 100/49
ADL will become famous soon enoughADL will become famous soon enough
По умолчанию Программные задержки в HT-PICC18

Использую MPLAB IDE + HT-PICC18. Для корректной работы программных задержек необходимо указать частоту тактового генератора:
* Set the crystal frequency in the CPP predefined symbols list
* on the PICC-18 commmand line, e.g.
* picc18 -DXTAL_FREQ=4MHZ
Не могу разобраться где должна находиться данная директива препроцессора и что означает командная строка PICC-18?
ADL вне форума   Ответить с цитированием
Старый 04.01.2008, 14:03   #2
Bill
Senior Member
 
Аватар для Bill
 
Регистрация: 26.02.2007
Адрес: Челябинск
Возраст: 69
Сообщений: 2,215
Вес репутации: 1898/88
Bill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant future
По умолчанию Ну, наверное, можно в заголовочном файле

Цитата:
Сообщение от ADL Посмотреть сообщение
Использую MPLAB IDE + HT-PICC18. Для корректной работы программных задержек необходимо указать частоту тактового генератора:
* Set the crystal frequency in the CPP predefined symbols list
* on the PICC-18 commmand line, e.g.
* picc18 -DXTAL_FREQ=4MHZ
Не могу разобраться где должна находиться данная директива препроцессора и что означает командная строка PICC-18?
с использованием оператора препроцессора #define.
Или нет?
PS: А строка то и означает, что определение (definition) константы XTAL_FREQ.

Последний раз редактировалось Bill; 04.01.2008 в 14:09.
Bill вне форума   Ответить с цитированием
Старый 04.01.2008, 14:04   #3
Greg
Super Moderator
 
Регистрация: 25.02.2007
Адрес: Moscow, ODBS
Сообщений: 6,925
Вес репутации: 5709/174
Greg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond repute
По умолчанию Re: Программные задержки в HT-PICC18

Цитата:
Сообщение от ADL Посмотреть сообщение
Использую MPLAB IDE + HT-PICC18. Для корректной работы программных задержек необходимо указать частоту тактового генератора:
* Set the crystal frequency in the CPP predefined symbols list
* on the PICC-18 commmand line, e.g.
* picc18 -DXTAL_FREQ=4MHZ
Не могу разобраться где должна находиться данная директива препроцессора и что означает командная строка PICC-18?
в "delay.h", но она всю жизнь глючила
Greg вне форума   Ответить с цитированием
Старый 04.01.2008, 14:18   #4
ADL
Member
 
Аватар для ADL
 
Регистрация: 26.02.2007
Адрес: Новосибирск
Возраст: 50
Сообщений: 45
Вес репутации: 100/49
ADL will become famous soon enoughADL will become famous soon enough
По умолчанию Re: Программные задержки в HT-PICC18

Это я с командной строкой заглючил.
Вообще там написано:
Код:
/*
 * Delay functions for HI-TECH C on the PIC18
 *
 * Functions available:
 *  DelayUs(x) Delay specified number of microseconds
 *  DelayMs(x) Delay specified number of milliseconds
 *
 * Note that there are range limits: 
 * - on small values of x (i.e. x<10), the delay becomes less
 * accurate. DelayUs is accurate with xtal frequencies in the
 *  range of 4-16MHZ, where x must not exceed 255. 
 * For xtal frequencies > 16MHz the valid range for DelayUs
 * is even smaller - hence affecting DelayMs.
 * To use DelayUs it is only necessary to include this file.
 * To use DelayMs you must include delay.c in your project.
 *
 * Set the crystal frequency in the CPP predefined symbols list
 * on the PICC-18 commmand line, e.g.
 * picc18 -DXTAL_FREQ=4MHZ
 *
 * or
 * picc18 -DXTAL_FREQ=100KHZ
 * 
 * Note that this is the crystal frequency, the CPU clock is
 * divided by 4.
 *
 * MAKE SURE this code is compiled with full optimization!!!
*/
#define MHZ *1
#ifndef XTAL_FREQ
#define XTAL_FREQ 8MHZ  /* Crystal frequency in MHz */
#endif
#if XTAL_FREQ < 8MHZ
#define uS_CNT  238   /* 4x to make 1 mSec */
#endif
#if XTAL_FREQ == 8MHZ
#define uS_CNT  244
#endif
#if XTAL_FREQ > 8MHZ
#define uS_CNT  246
#endif
#define FREQ_MULT (XTAL_FREQ)/(4MHZ)
#define DelayUs(x) { unsigned char _dcnt; \
     if(x>=4) _dcnt=(x*(FREQ_MULT)/2); \
     else _dcnt=1; \
     while(--_dcnt > 0) \
    {\
    asm("nop");\
    asm("nop");\
    continue; }\
  } 
extern void DelayMs(unsigned char);
Смотрю в симуляторе и получаю задержу в 2,5 раза больше указанной.
Хочу работать с LCD без использования вывода R/W, поэтому и нужны программные задержки.
ADL вне форума   Ответить с цитированием
Старый 04.01.2008, 14:20   #5
ADL
Member
 
Аватар для ADL
 
Регистрация: 26.02.2007
Адрес: Новосибирск
Возраст: 50
Сообщений: 45
Вес репутации: 100/49
ADL will become famous soon enoughADL will become famous soon enough
По умолчанию Re: Программные задержки в HT-PICC18

Может быть уже самому писать задержки в АСМ?
ADL вне форума   Ответить с цитированием
Старый 04.01.2008, 14:25   #6
Bill
Senior Member
 
Аватар для Bill
 
Регистрация: 26.02.2007
Адрес: Челябинск
Возраст: 69
Сообщений: 2,215
Вес репутации: 1898/88
Bill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant future
По умолчанию С одинаковым успехом самому можно

Цитата:
Сообщение от ADL Посмотреть сообщение
Может быть уже самому писать задержки в АСМ?
и на Си написать.
Bill вне форума   Ответить с цитированием
Старый 04.01.2008, 14:26   #7
Greg
Super Moderator
 
Регистрация: 25.02.2007
Адрес: Moscow, ODBS
Сообщений: 6,925
Вес репутации: 5709/174
Greg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond repute
По умолчанию Re: Программные задержки в HT-PICC18

Цитата:
Сообщение от ADL Посмотреть сообщение
Может быть уже самому писать задержки в АСМ?
да эти подправить (величину XTAL), всё ведь уже написано.
А самое лучшее к таймеру какому подвязаться.
Greg вне форума   Ответить с цитированием
Старый 04.01.2008, 14:49   #8
DL36
Senior Member
 
Регистрация: 25.02.2007
Адрес: Херсон
Сообщений: 3,642
Вес репутации: 1983/103
DL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant future
По умолчанию Re: Программные задержки в HT-PICC18

Цитата:
Сообщение от ADL Посмотреть сообщение
Может быть уже самому писать задержки в АСМ?
Поищи объяснение на на старом форуме
Это работает с ошибкой ~1% но при частоте 40мГц не более 50мкс
макрос XTAL_FREQ должен быть определен ранне
Код:
//delay.h
#ifndef XTAL_FREQ
#define XTAL_FREQ   4MHZ        /* Crystal frequency in MHz */
#endif

#define MHZ *1000L              /* number of kHz in a MHz */
#define KHZ *1                  /* number of kHz in a kHz */

#define DelayUs(x)  { unsigned char _dcnt;   \
_dcnt = (((long)(x))*(long)(XTAL_FREQ))/(long)(12MHZ);  \
        while(--_dcnt != 0) \
        continue; }

/*
#define    DelayUs1v(x) \
{\
    unsigned char _dcnt; \
    _dcnt = (unsigned char)((x)*((XTAL_FREQ*1.0)/(12MHZ))); \
    while(--_dcnt != 0) continue;\
}
*/
extern void DelayMs(unsigned char);
#endif
DL36 вне форума   Ответить с цитированием
Старый 16.02.2008, 12:39   #9
ADL
Member
 
Аватар для ADL
 
Регистрация: 26.02.2007
Адрес: Новосибирск
Возраст: 50
Сообщений: 45
Вес репутации: 100/49
ADL will become famous soon enoughADL will become famous soon enough
По умолчанию Re: Программные задержки в HT-PICC18

Подумав, я пришёл к выводу, что написать универсальные программные задержки, работающие с высокой точностью на любой тактовой частоте невозможно (может быть я и ошибаюсь). Тогда я написал программу микросекундных задержек для тактовой частоты 8 МГц. Вот что у меня получилось:

Код:
 /* Файл: deley_8MHZ.h
 * Функции программных задержек для HI-PICC18
 * для тактовой частоты 8 МГЦ
 * Микросекундные задержки от 1 до 515 мкс
*/
void delay_2(void)
 {}
void delay_3(void)
{
 asm("nop");
 asm("nop");
}
void delay_x(unsigned char x)
{
 while (--x>0)
 {
 asm("nop");
 }
 asm("nop");
}
#define DelayUs(x) {\
     if(x==0)\
     { }\
     else\
     if(x==1)\
     {\
      asm ("nop");\
      asm ("nop");\
     }\
      else\
      if(x==2)\
       delay_2();\
      else\
      if(x==3)\
       delay_3();\
      else\
      if(x==4)\
     {\
       delay_3();\
       asm("nop");\
       asm("nop");\
     }\
      else\
      if(x%2==0)\
     {\
       delay_x((x-(x-5)+(x-6)/2)-4);\
       asm("nop");\
       asm("nop");\
     }\
      else\
     {\
       delay_x(x-(x-5)/2-4);\
     }\
     }
Работает со 100% точностью. Есть мысль написать подобные файлы для набора дискретных тактовых частот. Напомню, что это мои первые шаги в СИ. Прошу высказать свои замечания и предложения.
ADL вне форума   Ответить с цитированием
Старый 16.02.2008, 12:46   #10
Bill
Senior Member
 
Аватар для Bill
 
Регистрация: 26.02.2007
Адрес: Челябинск
Возраст: 69
Сообщений: 2,215
Вес репутации: 1898/88
Bill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant future
По умолчанию А макроопределение обязательно использовать?

Почему не в виде функции реализовать? Требования к объему памяти сразу уменьшатся.
Bill вне форума   Ответить с цитированием
Старый 16.02.2008, 12:55   #11
ADL
Member
 
Аватар для ADL
 
Регистрация: 26.02.2007
Адрес: Новосибирск
Возраст: 50
Сообщений: 45
Вес репутации: 100/49
ADL will become famous soon enoughADL will become famous soon enough
По умолчанию Re: Программные задержки в HT-PICC18

По сути здесь содержится макроопределение, управляющее подстановкой нужного кода. Здесь как раз и сделано при помощи функций. Сколько голову не ломал, но этот вариант показался мне самым оптимальным. Есть другие конкретные сображения?
ADL вне форума   Ответить с цитированием
Старый 16.02.2008, 13:10   #12
Bill
Senior Member
 
Аватар для Bill
 
Регистрация: 26.02.2007
Адрес: Челябинск
Возраст: 69
Сообщений: 2,215
Вес репутации: 1898/88
Bill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant future
По умолчанию Ну, например, так:

Код:
DelayUs(x) 
     {
     if(x==0)
        { }
     else if(x==1)
      {
      asm ("nop");
      asm ("nop");
      }
     else if(x==2)
       delay_2();
     else if(x==3)
        delay_3();
     else if(x==4)
       {
       delay_3();
       asm("nop");
       asm("nop");
       }
     else if(x%2==0)
       {
       delay_x((x-(x-5)+(x-6)/2)-4);
       asm("nop");
       asm("nop");
       }
     else
       {
       delay_x(x-(x-5)/2-4);
       }
     }
Bill вне форума   Ответить с цитированием
Старый 16.02.2008, 13:20   #13
ADL
Member
 
Аватар для ADL
 
Регистрация: 26.02.2007
Адрес: Новосибирск
Возраст: 50
Сообщений: 45
Вес репутации: 100/49
ADL will become famous soon enoughADL will become famous soon enough
По умолчанию Re: Программные задержки в HT-PICC18

Оно конечно выглядит намного короче, но здесь получится, что все if будет обслуживать не препроцессор, а рабочая программа. Если это так, то получится каша. Может быть я не прав?
ADL вне форума   Ответить с цитированием
Старый 16.02.2008, 13:26   #14
Bill
Senior Member
 
Аватар для Bill
 
Регистрация: 26.02.2007
Адрес: Челябинск
Возраст: 69
Сообщений: 2,215
Вес репутации: 1898/88
Bill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant future
По умолчанию Препроцессор вообще ничего не обслуживает.

Цитата:
Сообщение от ADL Посмотреть сообщение
Оно конечно выглядит намного короче, но здесь получится, что все if будет обслуживать не препроцессор, а рабочая программа. Если это так, то получится каша. Может быть я не прав?
Он просто заменяет один фрагмент текста на другой и передает результат компилятору. Стало быть, каждый раз когда Вы обращаетесь к DelayuS() компилятор будет генерировать всю последовательность операторов. Этим макроопределение отличается от функции, при обращении к которым компилятор просто генериркет команду вызова этой функции call.
Bill вне форума   Ответить с цитированием
Старый 16.02.2008, 13:39   #15
ADL
Member
 
Аватар для ADL
 
Регистрация: 26.02.2007
Адрес: Новосибирск
Возраст: 50
Сообщений: 45
Вес репутации: 100/49
ADL will become famous soon enoughADL will become famous soon enough
По умолчанию Re: Программные задержки в HT-PICC18

У меня происходит макроподстановка вызова функции. Я попробовал вызвать одну задержку и вызвать две задержки подряд. Размер кода отличается на 4 байта, т. е. на две команды: MOVLW и RCALL. Следовательно получается не подстановка макроса, а подстановка вызова функции с аргументом, рассчитанным препроцессором при компиляции.
ADL вне форума   Ответить с цитированием
Старый 16.02.2008, 13:48   #16
Bill
Senior Member
 
Аватар для Bill
 
Регистрация: 26.02.2007
Адрес: Челябинск
Возраст: 69
Сообщений: 2,215
Вес репутации: 1898/88
Bill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant future
По умолчанию Ну, тогда я совсем ничего не понимаю.

Цитата:
Сообщение от ADL Посмотреть сообщение
У меня происходит макроподстановка вызова функции. Я попробовал вызвать одну задержку и вызвать две задержки подряд. Размер кода отличается на 4 байта, т. е. на две команды: MOVLW и RCALL. Следовательно получается не подстановка макроса, а подстановка вызова функции с аргументом, рассчитанным препроцессором при компиляции.
Прошу извинить.
Bill вне форума   Ответить с цитированием
Старый 16.02.2008, 13:53   #17
DL36
Senior Member
 
Регистрация: 25.02.2007
Адрес: Херсон
Сообщений: 3,642
Вес репутации: 1983/103
DL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant future
По умолчанию Re: Программные задержки в HT-PICC18

Цитата:
Сообщение от ADL Посмотреть сообщение
Подумав, я пришёл к выводу, что написать универсальные программные задержки, работающие с высокой точностью на любой тактовой частоте невозможно (может быть я и ошибаюсь). Тогда я написал программу микросекундных задержек для тактовой частоты 8 МГц. Вот что у меня получилось:
Что касается точности, так это все относительно.
А пример написан берите пользуйтесь.
DL36 вне форума   Ответить с цитированием
Старый 16.02.2008, 15:00   #18
Greg
Super Moderator
 
Регистрация: 25.02.2007
Адрес: Moscow, ODBS
Сообщений: 6,925
Вес репутации: 5709/174
Greg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond repute
По умолчанию Re: Программные задержки в HT-PICC18

Цитата:
Сообщение от ADL Посмотреть сообщение
Подумав, я пришёл к выводу, что написать универсальные программные задержки, работающие с высокой точностью на любой тактовой частоте невозможно (может быть я и ошибаюсь). Тогда я написал программу микросекундных задержек для тактовой частоты 8 МГц. Вот что у меня получилось:
Работает со 100% точностью
Есть мысль написать подобные файлы для набора дискретных тактовых частот. Напомню, что это мои первые шаги в СИ. Прошу высказать свои замечания и предложения.
замечания и предложения

не тратьте попусту время на эту хню с задержками (это не связано с Си). В реальной жизни такие функции никогда не находят применения, потому что 100% точности означает, что процессор больше вообще ничего не делает. Единственное применение - какой-то первый шаг на каком-то первом камне в новом компиляторе
Greg вне форума   Ответить с цитированием
Старый 16.02.2008, 15:04   #19
ADL
Member
 
Аватар для ADL
 
Регистрация: 26.02.2007
Адрес: Новосибирск
Возраст: 50
Сообщений: 45
Вес репутации: 100/49
ADL will become famous soon enoughADL will become famous soon enough
По умолчанию Re: Программные задержки в HT-PICC18

Цитата:
Сообщение от Greg Посмотреть сообщение
замечания и предложения

не тратьте попусту время на эту хню с задержками (это не связано с Си). В реальной жизни такие функции никогда не находят применения, потому что 100% точности означает, что процессор больше вообще ничего не делает. Единственное применение - какой-то первый шаг на каком-то первом камне в новом компиляторе
Я как раз и делаю первые шаги в Си. Задержки всё равно нужны. Вы имеете ввиду, что они должны быть аппаратными?
ADL вне форума   Ответить с цитированием
Старый 16.02.2008, 15:09   #20
Greg
Super Moderator
 
Регистрация: 25.02.2007
Адрес: Moscow, ODBS
Сообщений: 6,925
Вес репутации: 5709/174
Greg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond repute
По умолчанию Re: Программные задержки в HT-PICC18

Цитата:
Сообщение от ADL Посмотреть сообщение
Я как раз и делаю первые шаги в Си. Задержки всё равно нужны. Вы имеете ввиду, что они должны быть аппаратными?
те, что вам нужны, уже есть в папке samples компилятора. И точности там хватит за глаза.
Да, я именно это имею в виду, что для генерации задержек необходимо использовать таймеры и связанные с ними модули (capture-compare).

Последний раз редактировалось Greg; 16.02.2008 в 15:14.
Greg вне форума   Ответить с цитированием
Ответ

Метки
delayus(x)


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

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Реализация ЦФ на PIC18 + HT PICC18 VXDRV Общетехнические вопросы 14 05.04.2010 22:08
Знаковые переменные в HT PICC18 9.50 PL3 Sergey Продукция MICROCHIP 5 21.12.2007 08:14


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


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