Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Eusart problem na PIC18F

[es] :: Elektronika :: Mikrokontroleri :: Eusart problem na PIC18F

[ Pregleda: 1417 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

mnn
sm

Član broj: 85435
Poruke: 723
185.195.237.*



+25 Profil

icon Eusart problem na PIC18F11.04.2020. u 09:40 - pre 48 meseci
Imam problem da mi Eusart "zaglavi" nakon nekog vremena posle pojave interapta INT0. Nakon resetovanja uređaja opet sve radi neko vreme. Pokušao sam da u INT0 stavim rutinu za resetovanje Eusarta nakon nekoliko interapta. Problem se smanjio ali mi se opet dešava samo nakon dužeg perioda.
Od interapta koristim kao High INT0, Eusart RX i TMR1 a od Low interapta TMR6. Nemam nekog dužeg zadržavanja u interaptima osim ovog u low TMR6 koji mi poziva neku funkciju za obradu prijema sa Eusarta.
Tu mi još radi LCD sa I2C komunikacijom, nešto upisa u EEpromi i obradom sa ITN0 i TMR1.
 
Odgovor na temu

goran_68

Član broj: 89012
Poruke: 932
*.dynamic.isp.telekom.rs.



+81 Profil

icon Re: Eusart problem na PIC18F12.04.2020. u 12:46 - pre 48 meseci
Daj bar neki kod i koji ti je to PIC18F.
gorankg
 
Odgovor na temu

mnn
sm

Član broj: 85435
Poruke: 723
91.195.98.*



+25 Profil

icon Re: Eusart problem na PIC18F12.04.2020. u 14:33 - pre 48 meseci
PIC18f47q10

Pretpostavljam da ne stigne da izčita RCREG te da setuje OERR. Fukcija koju generiše Kod konfigurator "ima" generisnau rutinu za resetovane Eusarta koja to "ne radi". Za probu sam reset Eusart-a prebacio u INT0 rutinu i nakon toga nisam primetio da zaglavljuje .

Code:
  void EUSART1_RxDataHandler(void){
   
    /*================================================================================================================================
     *                                                                  Moj kod
     ==================================================================================================================================*/

    kontrola.test = RC1REG; //  upis primljenog bjata
    flag.usart = 1; //  omogucava za u glavnoj rutini upisujemo registre primljenog bajta

    /*===================================================================================================================================
     ===================================================================================================================================*/    
    // use this default receive interrupt handler code
    eusart1RxBuffer[eusart1RxHead++] = RC1REG;
    if(sizeof(eusart1RxBuffer) <= eusart1RxHead)
    {
        eusart1RxHead = 0;
    }
    eusart1RxCount++;
}

void EUSART1_DefaultFramingErrorHandler(void){}

void EUSART1_DefaultOverrunErrorHandler(void){
    // EUSART1 error - restart

    RC1STAbits.CREN = 0;
    RC1STAbits.CREN = 1;

}

Code:
  

void __interrupt() INTERRUPT_InterruptManagerHigh(void) {
    // interrupt handler
    if (PIE0bits.INT0IE == 1 && PIR0bits.INT0IF == 1) // INT0
    {
        //********************** moj kod ********************************************************
        flag.p = 1; //  
        brojac_pu++;
        brojac_po++;
        brojac_tt++;
        pom++;
        if (pom >= 3) {// citamo tek kad se desi n interapta
            total_timer_TMR1 = TMR1_ReadTimer(); /*  citamo stanje tajmera   */
            TMR1_WriteTimer(0); /*  nakon citanja vracamo ga na nulu    */
            pom_brojac_int = broj_interapata_TMR1; //  
            broj_interapata_TMR1 = 0;
            pom = 0;
        }        
        if (RC1STAbits.OERR) {        //    naknadno ubačeno 
            RC1STAbits.CREN = 0;
            RC1STAbits.CREN = 1;
        }
        //*******************************************************************************************
        INT0_ISR();
}

 
Odgovor na temu

goran_68

Član broj: 89012
Poruke: 932
*.dynamic.isp.telekom.rs.



+81 Profil

icon Re: Eusart problem na PIC18F13.04.2020. u 08:37 - pre 48 meseci
Ako koristiš njegov interni oscilator mogle bi da ti se pojave framing greške jer taj oscilator može da ima odstupanja od 5% (Imaš ovo u Errata).
Ovo sa OERR znači da ne stigne da pročita RCREG. Možeš li da smanjiš baud rate? Najverovatnije je da te zeza ovaj INT0. Ne vidim šta radiš u njegovoj obradi a za ovo rešenje sa brisanjem OERR nakon nekoliko INT0 smatram da nije dovoljno dobro.
Jednostavno prekidne rutina treba da se smanje što više i mislim da nećeš imati problema.
Prilikom pisanja u EEPROM treba da se isključe prekidi a podatak na EUSART može da dođe i tad tako da i tu možda bude problema.

gorankg
 
Odgovor na temu

[es] :: Elektronika :: Mikrokontroleri :: Eusart problem na PIC18F

[ Pregleda: 1417 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.