csm7 0 30 января, 2018 Опубликовано 30 января, 2018 · Жалоба Доброго времени суток Необходимо запустить модель PIC24f16ka101 в Proteus Все время выдает ошибку [PIC24KA SETUP] PC=0x000002. Clock 16.0MHz specified in schematic component is ignored for oscillator mode 'FRCDIV'. [u1] [PIC24KA SETUP] PC=0x000002. Input clock frequency (1.00MHz) for clock type FRCDIV is not in range 8.00M-32.0MHz. [u1] Спасибо Разобрался Необходимо подтянуть MCLR к питанию Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
csm7 0 31 января, 2018 Опубликовано 31 января, 2018 · Жалоба Теперь возникла другая проблема Активировал UART1 и UART2. Со скоростью обмена 4800 бод. В Proteus в терминале только абры кадабры. Увеличил скорость передачи до 19200 бод на контроллере и только тогда в терминале Proteus увидел передаваемые данные. Такое впечатление что контроллер не выходит на заданную тактовую частоту. Как правильно настроить микроконтроллер Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Baser 5 31 января, 2018 Опубликовано 31 января, 2018 · Жалоба Необходимо запустить модель PIC24f16ka101 в Proteus А вам это в качестве демонстрации студентам, или для работы? Если для работы, то может ну его, этот Proteus, лучше на реальном МК попробовать :rolleyes: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
csm7 0 31 января, 2018 Опубликовано 31 января, 2018 (изменено) · Жалоба Для работы Спасибо Я уже разобрался с вопросом Оказалось необходимо дополнительно прописать CLKDIV = 0x0000; Посткалер в 0. И выбираем внутренний генератор Fast RC Однако уже другая проблема возникла с реальным чипом. После прошивки он не подает признаков жизни. Пока найти причину что случилось не удается. Разобрался Спасибо Изменено 31 января, 2018 пользователем csm7 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
csm7 0 1 февраля, 2018 Опубликовано 1 февраля, 2018 · Жалоба Доброго времени суток! Появилась проблема при работе с реальным PIC24f16ka101 Не могу включить прерывания по UART2 прописал void intUART2() iv IVT_ADDR_U2RXINTERRUPT ics ICS_AUTO { if (U2RXIF_bit == 1) { // If interrupt is generated by RCIF txt[i] = UART2_Read(); // Read data and store it to txrt string i++; // Increment string index if (i > 100) { // If index = 768, i = 0; // set it to zero ready = 1; // Ready for parsing GPS data } U2RXIF_bit = 0; // Set RCIF to 0 } } void main() { AD1PCFG = 0xffff; // initialize all A/D pins as Digital pins //CLKdiv.RCDIV_0_bit = 0; CM1CON = 0; CM2CON = 0; CLKDIV &= 0xF800; //äåëèòåëü â 0 TRISA = 0x0000; // Initial port A how output TRISB = 0x0000; // Initial port B how output LATA = 0; LATB = 0; TRISBbits.TRISB0 = 0; // Pin 1 RB0 U2TX Output GPS TRISBbits.TRISB1 = 1; //Pin 2 RB1 U2RX Input GPS TRISBbits.TRISB2 = 1; // Pin 3 RB2 U1RX Input GSM Ïîìåíÿòü ìåñòàìè Pin3 Pin8 TRISBbits.TRISB7 = 0; //Pin 8 RB7 U2TX Output GSM UART1_Init(4800); // GSM Delay_ms(1); UART2_Init(4800); // GPS Delay_ms(1); //U1MODEbits.ALTIO = 1; LATA.B1 ^= 1; Delay_ms(5); LATA.B1 ^= 1; URXISEL_1_U2STA_bit = 0; NSTDIS_bit = 1; // no nesting of interrupts U2RXIF_bit = 0; // ensure interrupt not pending U2RXIE_bit = 1; // Enable USART Receiver interrupt while(1) { OERR_bit = 0; // Set OERR to 0 FERR_bit = 0; // Set FERR to 0 if (ready == 1) { ready = 0; string = strstr(txt,"$GPGGA"); //NMEA message with coordinates is "$GPGGA" /see datasheet if(string != 0) { // If txt array contains "$GPGGA" string we proceed... // if(string[43] == '1') { // If "$GPGGA" NMEA message have '1' sign in the 43-th // position it means that the GPS receiver has FIXed position! latitude = (string[18]-48)*10 + (string[19]-48); longitude = (string[30]-48)*100 + (string[31]-48)*10 + (string[32]-48); if(string[28] == 'S') { // if the latitude is in the South direction it has minus sign latitude = 0 - latitude; } if(string[41] == 'W') { // if the longitude is in the West direction it has minus sign longitude = 0 - longitude; // } } //UART1_Write_Text("Test GPS Ok"); // Latitude UART2_Write_Text(latitude); // Latitude UART2_Write_Text(longitude); // Longitude } UART1_Write_Text("Test GPS Ok"); } } } где грабли Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Baser 5 1 февраля, 2018 Опубликовано 1 февраля, 2018 · Жалоба Появилась проблема при работе с реальным PIC24f16ka101 Не могу включить прерывания по UART2 где грабли Конфигурационный регистр FICD правильно установлен? По умолчанию ножки U2TX/U2RX заняты под PGC1/PGD1 Ну и UART2_Init(4800) отсутствует. Может там чего не хватает. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
csm7 0 1 февраля, 2018 Опубликовано 1 февраля, 2018 · Жалоба UART1_Init(4800); // GSM Delay_ms(1); UART2_Init(4800); // GPS Delay_ms(1); Оба UART-а инициализировал А вот PGC1/PGD1 - кажись сработало Но завтра перепроверю более тщательно Спасибо большое за хороший совет :cheers: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Baser 5 1 февраля, 2018 Опубликовано 1 февраля, 2018 · Жалоба Оба UART-а инициализировал Я имел ввиду: покажите код функции UART2_Init() Это ваша функция или из какой-то библиотеки? з.ы. просто интересно - у вас какой компилятор? Такого определения функции прерывания не встречал. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
csm7 0 2 февраля, 2018 Опубликовано 2 февраля, 2018 · Жалоба компилятор mikroC UART2_Init() из его библиотеки Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
csm7 0 8 февраля, 2018 Опубликовано 8 февраля, 2018 · Жалоба Интересный случай реальная модель микроконтроллера обрабатывает прерывания по последовательному порту а модель микроконтроллера в Proteus никак не хочет работать с прерываниями. Толи что-то не так настроено или модель микроконтроллера PIC24f16ka101 в Proteus урезанная. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться