Группа: Участник
Сообщений: 63
Регистрация: 22-12-08
Пользователь №: 42 674
Доброго времени суток Необходимо запустить модель 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 к питанию
Группа: Участник
Сообщений: 63
Регистрация: 22-12-08
Пользователь №: 42 674
Теперь возникла другая проблема
Активировал UART1 и UART2. Со скоростью обмена 4800 бод. В Proteus в терминале только абры кадабры. Увеличил скорость передачи до 19200 бод на контроллере и только тогда в терминале Proteus увидел передаваемые данные. Такое впечатление что контроллер не выходит на заданную тактовую частоту.
Группа: Участник
Сообщений: 63
Регистрация: 22-12-08
Пользователь №: 42 674
Для работы Спасибо Я уже разобрался с вопросом Оказалось необходимо дополнительно прописать CLKDIV = 0x0000; Посткалер в 0. И выбираем внутренний генератор Fast RC
Однако уже другая проблема возникла с реальным чипом. После прошивки он не подает признаков жизни. Пока найти причину что случилось не удается.
Разобрался Спасибо
Сообщение отредактировал csm7 - Jan 31 2018, 12:08
Группа: Участник
Сообщений: 63
Регистрация: 22-12-08
Пользователь №: 42 674
Доброго времени суток! Появилась проблема при работе с реальным 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
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"); } } }
Группа: Участник
Сообщений: 63
Регистрация: 22-12-08
Пользователь №: 42 674
Интересный случай реальная модель микроконтроллера обрабатывает прерывания по последовательному порту а модель микроконтроллера в Proteus никак не хочет работать с прерываниями. Толи что-то не так настроено или модель микроконтроллера PIC24f16ka101 в Proteus урезанная.