Версия для печати темы
Форум разработчиков электроники ELECTRONIX.ru _ Вопросы системного уровня проектирования _ помогите запустить модель PIC24f16ka101 в Proteus
Автор: csm7 Jan 30 2018, 08:17
Доброго времени суток
Необходимо запустить модель 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 Jan 31 2018, 09:10
Теперь возникла другая проблема
Активировал UART1 и UART2. Со скоростью обмена 4800 бод. В Proteus в терминале только абры кадабры.
Увеличил скорость передачи до 19200 бод на контроллере и только тогда в терминале Proteus увидел передаваемые данные.
Такое впечатление что контроллер не выходит на заданную тактовую частоту.
Как правильно настроить микроконтроллер
Автор: Baser Jan 31 2018, 11:31
Цитата(csm7 @ Jan 30 2018, 10:17)
Необходимо запустить модель PIC24f16ka101 в Proteus
А вам это в качестве демонстрации студентам, или для работы?
Если для работы, то может ну его, этот Proteus, лучше на реальном МК попробовать
Автор: csm7 Jan 31 2018, 13:01
Для работы Спасибо
Я уже разобрался с вопросом Оказалось необходимо дополнительно прописать CLKDIV = 0x0000; Посткалер в 0.
И выбираем внутренний генератор Fast RC
Однако уже другая проблема возникла с реальным чипом.
После прошивки он не подает признаков жизни. Пока найти причину что случилось не удается.
Разобрался Спасибо
Автор: csm7 Feb 1 2018, 14:13
Доброго времени суток!
Появилась проблема при работе с реальным 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 Feb 1 2018, 16:43
Цитата(csm7 @ Feb 1 2018, 16:13)
Появилась проблема при работе с реальным PIC24f16ka101 Не могу включить прерывания по UART2
где грабли
Конфигурационный регистр FICD правильно установлен?
По умолчанию ножки U2TX/U2RX заняты под PGC1/PGD1
Ну и UART2_Init(4800) отсутствует. Может там чего не хватает.
Автор: csm7 Feb 1 2018, 18:45
Код
UART1_Init(4800); // GSM
Delay_ms(1);
UART2_Init(4800); // GPS
Delay_ms(1);
Оба UART-а инициализировал
А вот PGC1/PGD1 - кажись сработало Но завтра перепроверю более тщательно
Спасибо большое за хороший совет
Автор: Baser Feb 1 2018, 21:38
Цитата(csm7 @ Feb 1 2018, 20:45)
Оба UART-а инициализировал
Я имел ввиду: покажите код функции UART2_Init()
Это ваша функция или из какой-то библиотеки?
з.ы. просто интересно - у вас какой компилятор? Такого определения функции прерывания не встречал.
Автор: csm7 Feb 2 2018, 07:18
компилятор mikroC
UART2_Init() из его библиотеки
Автор: csm7 Feb 8 2018, 13:30
Интересный случай реальная модель микроконтроллера обрабатывает прерывания по последовательному порту а модель микроконтроллера в Proteus никак не хочет работать с прерываниями. Толи что-то не так настроено или модель микроконтроллера PIC24f16ka101 в Proteus урезанная.
Русская версия Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)