|
|
  |
PCW и калибровка встроенного генератора |
|
|
|
Mar 4 2009, 08:27
|

Местный
  
Группа: Свой
Сообщений: 224
Регистрация: 23-11-08
Из: Украина, Луганск
Пользователь №: 41 879

|
Вопрос может и дурацкий, но перечитал всё, что в хэлпе было и не нашел, как в 12Fxxx, 16Fxxx калибровочное значение в OSCTUNE загонять. В асме то понятно, но не верится, что типовую процедуру в компилятор не вставили. В мануале только PIC14000 и 18-я серия, но там совсем всё по-другому. Неужели только через #asm_#endasm втыкать?
--------------------
«Чтобы что-то изобрести, вам потребуется хорошее воображение и куча мусора» /Томас Эдисон/
|
|
|
|
|
Mar 4 2009, 10:52
|
Участник

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

|
Может я не понял вопроса, но что мешает просто туда записать значение? типа OSCTUNE = 0x35;
|
|
|
|
|
Mar 4 2009, 10:59
|
Частый гость
 
Группа: Свой
Сообщений: 95
Регистрация: 31-07-05
Из: Полоцк Беларусь
Пользователь №: 7 227

|
В OSCTUNE присваиванием, в OSCCAL типа такого, наверное: Код const unsigned char CALIB @ 0x03FF;
void main(void) { OSCCAL = CALIB; ... }
|
|
|
|
|
Mar 4 2009, 11:19
|
    
Группа: Свой
Сообщений: 1 928
Регистрация: 11-07-06
Пользователь №: 18 731

|
Может так покатит? Код #define OSCCAL_ADDR 0x3ff OSCCAL = (*(unsigned char(*)(void))OSCCAL_ADDR)(); И очень сомневаюсь, что нечто подобное отсутствует в хидерах. А в PCW все SFR переиначены на свой лад?
|
|
|
|
|
Mar 4 2009, 12:01
|

Местный
  
Группа: Свой
Сообщений: 224
Регистрация: 23-11-08
Из: Украина, Луганск
Пользователь №: 41 879

|
Цитата(xemul @ Mar 4 2009, 15:19)  Может так покатит? Код #define OSCCAL_ADDR 0x3ff OSCCAL = (*(unsigned char(*)(void))OSCCAL_ADDR)(); И очень сомневаюсь, что нечто подобное отсутствует в хидерах. А в PCW все SFR переиначены на свой лад? В хидере на тот же 12Ф629 есть только закомментированная строчка: //////// Oscilator Calibration Address: 90 Там идеология не записи в SFR каких-то констант как в асме, а готовые команды типа: Код setup_ccp1(CCP_COMPARE_CLR_ON_MATCH); // Configure CCP1 in COMPARE mode Хотя за неделю знакомства компилятор очень понравился. Сообразительный. Если в программе попадается что-то вроде х/8, он сам вставляет rrf. Код получается очень быстрый и компактный.
--------------------
«Чтобы что-то изобрести, вам потребуется хорошее воображение и куча мусора» /Томас Эдисон/
|
|
|
|
|
Mar 4 2009, 12:47
|
    
Группа: Свой
Сообщений: 1 928
Регистрация: 11-07-06
Пользователь №: 18 731

|
Цитата(Eddy71 @ Mar 4 2009, 15:01)  В хидере на тот же 12Ф629 есть только закомментированная строчка: //////// Oscilator Calibration Address: 90 Занятно. Вы хотите сказать, что объявления типа static bank1 unsigned char OSCCAL @ 0x90; в хидерах отсутствуют? Цитата Там идеология не записи в SFR каких-то констант как в асме, а готовые команды типа: Код setup_ccp1(CCP_COMPARE_CLR_ON_MATCH); // Configure CCP1 in COMPARE mode Надеюсь, что такие обертки - не единственная приятность PCW. Цитата Хотя за неделю знакомства компилятор очень понравился. Сообразительный. Если в программе попадается что-то вроде х/8, он сам вставляет rrf. Код получается очень быстрый и компактный.  Если бы он так не делал, то дорога ему была бы только "ф топку". А как он при этом с CARRY обращается? Чистит/устанавливает перед каждым сдвигом? Или соображает, что можно маской после сдвигов? А во что он компилит x/16? А x/128?
|
|
|
|
|
Mar 4 2009, 13:17
|

Местный
  
Группа: Свой
Сообщений: 224
Регистрация: 23-11-08
Из: Украина, Луганск
Пользователь №: 41 879

|
Цитата(xemul @ Mar 4 2009, 16:47)  Занятно. Вы хотите сказать, что объявления типа static bank1 unsigned char OSCCAL @ 0x90; в хидерах отсутствуют? В том-то и дело, там этого нет. Уже б разобрался.. Цитата Надеюсь, что такие обертки - не единственная приятность PCW. А как он при этом с CARRY обращается? Чистит/устанавливает перед каждым сдвигом? Или соображает, что можно маской после сдвигов? А во что он компилит x/16? А x/128? Вот из того, что вчера писал: Код .................... PauseTimer=PropTone/16; 022E: RRF 39,W 022F: MOVWF 23 0230: RRF 38,W 0231: MOVWF 22 0232: RRF 23,F 0233: RRF 22,F 0234: RRF 23,F 0235: RRF 22,F 0236: RRF 23,F 0237: RRF 22,F 0238: MOVF 22,W 0239: MOVWF 3D Багов при исполнении не обнаружил. Для работы с обдельным битом его обозвать надо: Код #bit CARRY=STATUS.0 Зато флаги хранит в битах: Код int1 Done, Progress, ChargeMode; Документация только кривоватая, а так прикрутился к МПлабу очень даже..
--------------------
«Чтобы что-то изобрести, вам потребуется хорошее воображение и куча мусора» /Томас Эдисон/
|
|
|
|
|
Mar 4 2009, 13:44
|
    
Группа: Свой
Сообщений: 1 928
Регистрация: 11-07-06
Пользователь №: 18 731

|
Цитата(Eddy71 @ Mar 4 2009, 16:17)  Вот из того, что вчера писал: Код .................... PauseTimer=PropTone/16; 022E: RRF 39,W 022F: MOVWF 23 0230: RRF 38,W 0231: MOVWF 22 0232: RRF 23,F 0233: RRF 22,F 0234: RRF 23,F 0235: RRF 22,F 0236: RRF 23,F 0237: RRF 22,F 0238: MOVF 22,W 0239: MOVWF 3D Багов при исполнении не обнаружил. По-видимому, u8_t PauseTimer; u16_t PropTone;? А что будет при PropTone > 2^12-1? Или такое невозможно по условию задачи? Компилятор хоть предупреждение выдает на такую конструкцию? Похоже, сезон сбора шишек у Вас еще впереди  ЗЫЖ компилер (оптимизатор) мог бы и сообразить, что последний сдвиг можно прямо в W сделать.
|
|
|
|
|
Mar 4 2009, 18:29
|

Местный
  
Группа: Свой
Сообщений: 224
Регистрация: 23-11-08
Из: Украина, Луганск
Пользователь №: 41 879

|
Цитата(xemul @ Mar 4 2009, 16:44)  По-видимому, u8_t PauseTimer; u16_t PropTone;? А что будет при PropTone > 2^12-1? Или такое невозможно по условию задачи? Компилятор хоть предупреждение выдает на такую конструкцию? Похоже, сезон сбора шишек у Вас еще впереди  ЗЫЖ компилер (оптимизатор) мог бы и сообразить, что последний сдвиг можно прямо в W сделать. Да, размерность правильная угадана. Только "перегрузки" в данном кусочке не будет - входное значение функции не бывает больше 1023.. С вопросом поспешил: разглядывая листинг с удивлением заметил, что компилятор сам всё уже вставил. Так как он без напоминания это делает, в мануале об этом ничего и не упомянули. Вопрос снят, тема закрыта.
--------------------
«Чтобы что-то изобрести, вам потребуется хорошее воображение и куча мусора» /Томас Эдисон/
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|