Перейти к содержанию

    

помогите запустить модель PIC24f16ka101 в Proteus

Доброго времени суток

Необходимо запустить модель 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 к питанию

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Теперь возникла другая проблема

 

Активировал UART1 и UART2. Со скоростью обмена 4800 бод. В Proteus в терминале только абры кадабры.

Увеличил скорость передачи до 19200 бод на контроллере и только тогда в терминале Proteus увидел передаваемые данные.

Такое впечатление что контроллер не выходит на заданную тактовую частоту.

 

Как правильно настроить микроконтроллер

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Необходимо запустить модель PIC24f16ka101 в Proteus

А вам это в качестве демонстрации студентам, или для работы?

Если для работы, то может ну его, этот Proteus, лучше на реальном МК попробовать :rolleyes:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для работы Спасибо

Я уже разобрался с вопросом Оказалось необходимо дополнительно прописать CLKDIV = 0x0000; Посткалер в 0.

И выбираем внутренний генератор Fast RC

 

Однако уже другая проблема возникла с реальным чипом.

После прошивки он не подает признаков жизни. Пока найти причину что случилось не удается.

 

 

Разобрался Спасибо

Изменено пользователем csm7

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Доброго времени суток!

Появилась проблема при работе с реальным 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");
                        }
                     }
}

 

где грабли

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Появилась проблема при работе с реальным PIC24f16ka101 Не могу включить прерывания по UART2

где грабли

Конфигурационный регистр FICD правильно установлен?

По умолчанию ножки U2TX/U2RX заняты под PGC1/PGD1

 

Ну и UART2_Init(4800) отсутствует. Может там чего не хватает.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

          UART1_Init(4800); // GSM
            Delay_ms(1);
              UART2_Init(4800); // GPS
                Delay_ms(1);

 

Оба UART-а инициализировал

А вот PGC1/PGD1 - кажись сработало Но завтра перепроверю более тщательно

 

Спасибо большое за хороший совет :cheers:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Оба UART-а инициализировал

Я имел ввиду: покажите код функции UART2_Init()

Это ваша функция или из какой-то библиотеки?

 

з.ы. просто интересно - у вас какой компилятор? Такого определения функции прерывания не встречал.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

компилятор mikroC

UART2_Init() из его библиотеки

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Интересный случай реальная модель микроконтроллера обрабатывает прерывания по последовательному порту а модель микроконтроллера в Proteus никак не хочет работать с прерываниями. Толи что-то не так настроено или модель микроконтроллера PIC24f16ka101 в Proteus урезанная.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация