Форум РадиоКот https://radiokot.ru/forum/ |
|
PIC24FJ64GA002 настройка осциллятора https://radiokot.ru/forum/viewtopic.php?f=58&t=160720 |
Страница 1 из 1 |
Автор: | Кот Павел [ Вс фев 10, 2019 21:19:27 ] |
Заголовок сообщения: | PIC24FJ64GA002 настройка осциллятора |
Добрый день форумчане! Изучаю новый контроллер, столкнулся с проблемой настройки тактовой частоты. Первая задача - мигать светодиодом. Светодиод мигает, но вместо периода в 1 сек я получил почему то 2 сек. Вот мой код: Код: #pragma config POSCMOD = NONE // Primary Oscillator Select->Primary oscillator disabled #pragma config I2C1SEL = PRI // I2C1 Pin Location Select->Use default SCL1/SDA1 pins #pragma config IOL1WAY = ON // IOLOCK Protection->Once IOLOCK is set, cannot be changed #pragma config OSCIOFNC = ON // Primary Oscillator Output Function->OSC2/CLKO/RC15 functions as port I/O (RC15) #pragma config FCKSM = CSECMD // Clock Switching and Monitor->Clock switching is enabled, Fail-Safe Clock Monitor is disabled #pragma config FNOSC = FRC // Oscillator Select->FRC #pragma config SOSCSEL = SOSC // Sec Oscillator Select->Default Secondary Oscillator (SOSC) #pragma config WUTSEL = LEG // Wake-up timer Select->Legacy Wake-up Timer #pragma config IESO = ON // Internal External Switch Over Mode->IESO mode (Two-Speed Start-up) enabled // CONFIG1 #pragma config WDTPS = PS32768 // Watchdog Timer Postscaler->1:32768 #pragma config FWPSA = PR128 // WDT Prescaler->Prescaler ratio of 1:128 #pragma config WINDIS = ON // Watchdog Timer Window->Standard Watchdog Timer enabled,(Windowed-mode is disabled) #pragma config FWDTEN = OFF // Watchdog Timer Enable->Watchdog Timer is disabled #pragma config ICS = PGx1 // Comm Channel Select->Emulator EMUC1/EMUD1 pins are shared with PGC1/PGD1 #pragma config BKBUG = OFF // Background Debug->Device resets into Operational mode #pragma config GWRP = OFF // General Code Segment Write Protect->Writes to program memory are allowed #pragma config GCP = OFF // General Code Segment Code Protect->Code protection is disabled #pragma config JTAGEN = OFF // JTAG Port Enable->JTAG port is disabled #include <xc.h> #define FCY 32000000UL #include <libpic30.h> int main() { OSCCON=0b0001000100000000; CLKDIV=0b0000000000000000; OSCTUN=0; AD1PCFG = 0xffff; TRISA = 0; TRISB = 0; while(1) { _LATA0 = !_LATA0; __delay_ms(1000); } } Кто компетентен в этом вопросе, может видите ошибку невооруженным глазом? Настраивал по даташиту и статьям с простора интернета. |
Автор: | Кот Павел [ Вс фев 10, 2019 21:49:03 ] |
Заголовок сообщения: | Re: PIC24FJ64GA002 настройка осциллятора |
Спасибо за отклик, но использовать переключение осцилляторов - не моя основная задача. Моя проблема в том, что я настраиваю тактирование от внутреннего RC генератора на 8 МГц, подключаю PLL x 4 - по идее контроллер должен работать на 32 МГц. Окей, прописываю определение тактовой частоты для макросов задержки #define FCY 32000000UL. Устанавливаю задержку в главном цикле __delay_ms(1000), но по факту получаю задержку в 2 сек!... Эмпирическим путем установил, что если установить FCY 16000000UL, все работает корректно, но не соответствует установленой мною конфигурации контроллера. Вот и хотел разобраться, где натупил. Неужели определение частоты FCY требует Fosc/2??? На других контроллерах такого не бывало ![]() |
Автор: | Albert_V [ Вс фев 10, 2019 21:55:10 ] |
Заголовок сообщения: | Re: PIC24FJ64GA002 настройка осциллятора |
Всё правильно. При тактовой 32 МГц, контроллер работает максимум на 16 MIPS /читайте документацию/. |
Автор: | КРАМ [ Пн фев 11, 2019 14:54:37 ] |
Заголовок сообщения: | Re: PIC24FJ64GA002 настройка осциллятора |
На других контроллерах такого не бывало ![]() Что не бывало? Какая разница какая частота у осциллятора? Важно какая системная частота. Про 16 МИПС написано даже в шапке даташита. Желаете более высокую производительность - берите либо PIC24H - 40МИПС, либо PIC24ЕР - 70 МИПС. |
Автор: | ViktoMyavr [ Сб мар 02, 2019 13:26:35 ] |
Заголовок сообщения: | Re: PIC24FJ64GA002 настройка осциллятора |
Светодиод мигает, но вместо периода в 1 сек я получил почему то 2 сек. Вот мой код: Код: while(1) { _LATA0 = !_LATA0; __delay_ms(1000); } } Кто компетентен в этом вопросе, может видите ошибку невооруженным глазом? Настраивал по даташиту и статьям с простора интернета. Павел, хотел бы уточнить - период зажигания - время между началом (передний фронт) зажигания светодиода? Если да, то все как раз как вы и заказали по программе: 1.зажигаем светодиод (инвертируем LATA) 2.ждем секунду (+ возврат в начало) 3.гасим светодиод (инвертируем LATA) 4.ждем секунду (+ возврат в начало) т.е. период сигнала как раз 2 секунды. Или под периодом понималось именно время горение светодиода? |
Автор: | Кот Павел [ Пн мар 04, 2019 14:14:04 ] |
Заголовок сообщения: | Re: PIC24FJ64GA002 настройка осциллятора |
Всем спасибо, разобрался, по незнанию попутал тактовую частоту с частотой выполнения кода |
Автор: | ivk87 [ Вс мар 03, 2024 16:57:06 ] |
Заголовок сообщения: | Re: PIC24FJ64GA002 настройка осциллятора |
Не забудьте в Config-е разрешить программные изменения в OSCILLATOR CONFIGURATION. подскажите, пожалуйста, где это задается |
Автор: | xiong048 [ Ср июл 31, 2024 15:15:04 ] |
Заголовок сообщения: | Re: PIC24FJ64GA002 настройка осциллятора |
Похоже, у вас могут быть проблемы с настройкой частоты тактового сигнала и функции задержки. Согласно вашему коду, вы используете внутренний быстрый генератор (FRC) в качестве источника системного тактового сигнала. Рассмотрим несколько шагов для проверки и корректировки параметров, чтобы ваш светодиод мигал так, как ожидалось. Прежде всего, я предлагаю внести следующие изменения и проверки в ваш код: Определение FCY: Убедитесь, что определение FCY верно и соответствует вашей фактической тактовой частоте. Настройка OSCCON и CLKDIV: Проверьте, правильно ли настроены регистры OSCCON и CLKDIV, так как они напрямую влияют на системную тактовую частоту. Использование правильной функции задержки: Убедитесь, что функция задержки __delay_ms() используется с правильными параметрами, зависящими от определения FCY. Пример измененного кодаhttp://www.chipic.ru #pragma config POSCMOD = NONE // Primary Oscillator Mode Select bits -> Primary oscillator disabled #pragma config I2C1SEL = PRI // I2C1 Pin Location Select bit -> Use default SCL1/SDA1 pins #pragma config IOL1WAY = ON // IOLOCK Protection -> Once IOLOCK is set, cannot be changed #pragma config OSCIOFNC = ON // OSCO Pin Configuration -> OSCO/CLKO/RC15 functions as port I/O (RC15) #pragma config FCKSM = CSECMD // Clock Switching and Monitor -> Clock switching is enabled, Fail-Safe Clock Monitor is disabled #pragma config FNOSC = FRC // Oscillator Select -> Fast RC Oscillator (FRC) #pragma config SOSCSEL = SOSC // Secondary Oscillator Select -> Default Secondary Oscillator (SOSC) #pragma config WUTSEL = LEG // Wake-up Timer Select -> Legacy Wake-up Timer #pragma config IESO = ON // Internal External Switchover -> Enabled // CONFIG1 #pragma config WDTPS = PS32768 // Watchdog Timer Postscaler -> 1:32768 #pragma config FWPSA = PR128 // WDT Prescaler -> Prescaler ratio of 1:128 #pragma config WINDIS = ON // Watchdog Timer Window -> Standard WDT enabled, (Window mode is disabled) #pragma config FWDTEN = OFF // Watchdog Timer Enable -> WDT disabled #pragma config ICS = PGx1 // ICD Communication Channel Select -> Communicate on PGEC1 and PGED1 #pragma config BKBUG = OFF // Background Debugger Enable -> Device resets into Operational mode #pragma config GWRP = OFF // General Segment Write Protect -> Writes to program memory are allowed #pragma config GCP = OFF // General Segment Code Protect -> Code protection is disabled #pragma config JTAGEN = OFF // JTAG Port Enable -> JTAG port is disabled #include <xc.h> #define FCY 8000000UL // Предполагается, что частота FRC равна 8 МГц #include <libpic30.h> int main () { // Настройка OSCCON для FRC OSCCON = 0b0001000100000000; CLKDIV = 0b0000000000000000; OSCTUN = 0; AD1PCFG = 0xffff; TRISA = 0; TRISB = 0; while (1) { _LATA0 = !_LATA0; __delay_ms(1000); } } Важные моменты проверки: Частота FCY: Убедитесь, что FCY соответствует вашей фактической частоте циклов команд. Если вы используете внутренний быстрый генератор (FRC), его стандартная частота обычно составляет 8 МГц, что означает, что FCY должна быть установлена на 8 МГц. Настройка OSCCON: Убедитесь, что настройки OSCCON соответствуют вашей аппаратной конфигурации. Если вы используете внутренний быстрый генератор, убедитесь, что соответствующие биты настроены правильно. Функция задержки: Функция __delay_ms() зависит от правильного определения FCY. Если FCY неверна, время задержки также будет неточным. Пожалуйста, убедитесь, что эти настройки проверены на вашем оборудовании, и при необходимости обратитесь к техническому описанию вашего микроконтроллера для получения подробной информации о конфигурации. Эти шаги должны помочь вам решить проблему с неточным временем мигания светодиода. |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |