PIC18F25K83 CAN-BUS

rms

Yeni Üye
Katılım
9 Ekim 2024
Mesajlar
9
Herkese merhaba,
PIC18F25K83 ile kendimi PIC mikrodenetleyiciler hakkında geliştirmek için bir proje yapıyorum. Sorunum hiçbir şekilde TX pininden data çıkışı yok. Logic analizör ile baktığımda TX pininden bir çıktı göremedim. PPS registerı ile RB2 pinini CAN0-TX, RB3 pinini (default) CAN0-RX olarak ayarlıyorum:
pin-init:
CANRXPPS = 0x0B;
RB2PPS = 0x33;

aşağıdaki fonksiyon ECAN init kodu:
ecan-init:
void ECAN_Initialize(void) {
        
    // Enter CAN module into config mode
    CANCON = 0x00;    //REQOP<2:0>=100
    CANCONbits.REQOP = 0x04;
    while(!(CANSTATbits.OPMODE ==0x04));
    
    ECANCON = 0x00;
    
        // Initialize CAN Timing 
    if (F_ECAN_100==1)
    {
        //  100 Kbps @ 64MHz 
        BRGCON1 = 0x93; //0001 1111     //SJW=3TQ     BRP  19
        BRGCON2 = 0xB8; //1011 1000     //SEG2PHTS 1    sampled once  PS1=8TQ  PropagationT 1TQ 
        BRGCON3 = 0x05; //0000 0101     //PS2  6TQ
    }
    else if (F_ECAN_125==1)
    {
        //  125 Kbps @ 64MHz
        BRGCON1 = 0x8F; //0000 0111     //SJW=3TQ     BRP  15
        BRGCON2 = 0xB8; //1011 1000     //SEG2PHTS 1    sampled once  PS1=8TQ  PropagationT 1TQ 
        BRGCON3 = 0x05; //0000 0101     //PS2  6TQ
    }
    else if (F_ECAN_500==1)
    {
        //  500 Kbps @ 64MHz
        BRGCON1 = 0x83; //0000 0111     //SJW=3TQ     BRP  3
        BRGCON2 = 0xB8; //1011 1000     //SEG2PHTS 1    sampled once  PS1=8TQ  PropagationT 1TQ 
        BRGCON3 = 0x05; //0000 0101     //PS2  6TQ
    }
    else if (F_ECAN_1000==1)
    {
        //  1   Mbps @ 64MHz 
        BRGCON1 = 0x81; //0000 0011     //SJW=3TQ     BRP  1
        BRGCON2 = 0xB8; //1011 1000     //SEG2PHTS 1    sampled once  PS1=8TQ  PropagationT 1TQ 
        BRGCON3 = 0x05; //0000 0101     //PS2  6TQ
    }
    else
    {
        //  100 Kbps @ 64MHz 
        BRGCON1 = 0x93; //0001 1111     //SJW=3TQ     BRP  31
        BRGCON2 = 0xB8; //1010 0000     //SEG2PHTS 1    sampled once  PS1=8TQ  PropagationT 1TQ 
        BRGCON3 = 0x05; //0000 0010     //PS2  6TQ
    }
    
    // Initialize Receive Masks
    //  The first mask is used that accepts all SIDs and no EIDs
    RXM0EIDH = 0x00;    //
    RXM0EIDL = 0x00;
    RXM0SIDH = 0xFF;    // Standard ID FILTER
    RXM0SIDL = 0xE0;
    
    //  The second mask is used to ignore all SIDs and EIDs
    RXM1EIDH = 0x00;    // 0's for EID and SID
    RXM1EIDL = 0x00;
    RXM1SIDH = 0xFF;
    RXM1SIDL = 0xE0;
    
    // Enable Filters
    //  Only using two filters
    RXFCON0 = 0x03;     //Disable all
    RXFCON1 = 0x00;     //Disable all
    
    RXF0EIDH = 0x00;
    RXF0EIDL = 0x00;
    RXF0SIDH = 0x32;
    RXF0SIDL = 0xC0;

    RXF2EIDH = 0x00;
    RXF2EIDL = 0x00;
    RXF2SIDH = 0x33;
    RXF2SIDL = 0xC0;
    
    CANCON = 0x00;
    while(CANSTATbits.OPMODE==0x00);
    
    // Set Receive Mode for buffers
    RXB0CON = 0x00;
    RXB1CON = 0x00;
}

transmit fonksiyonu da aşağıdaki şekilde:
ecan-transmit:
void ECAN_Transmit(void)
{   
    TXB0EIDH = 0x00;
    TXB0EIDL = 0x00;
    
    //0x35E    0110 1011 110
    TXB0SIDH = 0x6B;
    TXB0SIDL = 0xC0;

    TXB0DLC = 0x03;
    TXB0D0 = 0xAA;
    TXB0D1 = 0xCC;
    TXB0D2 = 0x55;
    TXB0D3 = 0x00;
    TXB0D4 = 0x00;
    TXB0D5 = 0x00;
    TXB0D6 = 0x00;
    TXB0D7 = 0x00;
    
    TXB0CONbits.TXREQ = 1; //Set the buffer to transmit
}

fonksiyonları microchip mplab example projelerinden aldım.
 

Forum istatistikleri

Konular
6,876
Mesajlar
117,477
Üyeler
2,783
Son üye
atakanbora

Son kaynaklar

Son profil mesajları

hakan8470 wrote on Dede's profile.
1717172721760.png
Dedecim bu gul mu karanfil mi? Gerci ne farkeder onu da anlamam. Gerci bunun anlamini da bilmem :gulus2:
Lyewor_ wrote on hakan8470's profile.
Takip edilmeye başlanmışım :D ❤️
Merhaba elektronik tutsakları...
Lyewor_ wrote on taydin's profile.
Merhabalar. Elektrik laboratuvarınız varsa bunun hakkında bir konunuz var mı acaba? Sizin laboratuvarınızı merak ettim de :)
Lyewor_ wrote on taydin's profile.
Merhabalar forumda yeniyim! Bir sorum olacaktı lcr meterler hakkında. Hem bobini ölçen hemde bobin direnci ölçen bir lcr meter var mı acaba?
Back
Top