[elektro] dspic CAN lelki teher
Ferenc Toth
toferi2 at freemail.hu
Thu Oct 30 20:41:51 CET 2008
Sziasztok.
Segijjen lécci valaki,mert nem boldogulok a CAN modullal .
Összekapcsoltam egy 30f4013 és egy 30f6014 -et CAN on keresztül és nem
látják egymást.Eloször azt hittem,hogy a baud rate nem stimmel,de azonos
órajel (és nincs pll szorzó sem) egyforma konfigokat használok SJW BRP
SEG2PHTS SEG2PH meg még egy csomó regiszter.......már odáig jutottam ,hogy
bemásoltam a forditóba mindkét konfigot igy még csak el sem irhattam.A baud
rate 125kbps -re számoltam ki ,ráakasztottam egy CAN tracert ,de ecceruen
nincs rajta kommunikáció.Látok szkóppal CAN jelet,de mintha mindig ugyanaz
jönne ismétlodve ,viszont a vevo látszólag nem vesz semmit és a logger sem
tud rászinkronizálódni.....naszóval ha valaki tudna segíteni akkor nagyon
megköszönném .
igy néz ki a progi ezzel egy ismétlodo adatot küldök ki a hálózatra:
a kiküldendo adat : RxTx_Data[8]
az id :Tx_ID = 455;
és 125kbps / 8MHz es órajellel
unsigned int Can_Init_Flags, Can_Send_Flags, Can_Rcv_Flags; // can flags
unsigned int Rx_Data_Len; // received
data length in bytes
char RxTx_Data[8]; // can rx/tx
data buffer
char Msg_Rcvd; // reception
flag
unsigned long Tx_ID, Rx_ID; // can rx and
tx ID
void main() {
ADPCFG = 0xFFFF;
PORTB = 0;
TRISB = 0;
trisd=0;
Can_Init_Flags = 0; //
Can_Send_Flags = 0; // clear flags
Can_Rcv_Flags = 0; //
Can_Send_Flags = CAN_TX_PRIORITY_3 & // Form value to be used
CAN_TX_XTD_FRAME & // with CAN1Write
CAN_TX_NO_RTR_FRAME;
Can_Init_Flags = CAN_CONFIG_SAMPLE_ONCE & // Form value to be
used
CAN_CONFIG_PHSEG2_PRG_ON & // with CAN1Initialize
CAN_CONFIG_XTD_MSG &
CAN_CONFIG_DBL_BUFFER_ON &
CAN_CONFIG_MATCH_MSG_TYPE &
CAN_CONFIG_LINE_FILTER_OFF;
RxTx_Data[8] = 0X6B,0X76,0XA5,0XBC,0X0E,0X4C,0X00,0X00;
// set initial data to be sent
// CAN1Initialize(1,3,5,5,1,Can_Init_Flags); // initialize CAN1
CAN1Initialize(4,24,6,6,4,Can_Init_Flags); // initialize CAN1
CAN1SetOperationMode(CAN_MODE_CONFIG,0xFF); // set CONFIGURATION mode
C1CTRL.F11=1;
CAN1SetOperationMode(CAN_MODE_NORMAL,0xFF);
// set NORMAL mode
portd.F9=1; //a power led ON állásba
Tx_ID = 455;
// set transmit ID
portb=0xffff;
delay_ms(1000);
while(1)
{ //
endless loop
Msg_Rcvd = CAN1Write(Tx_ID, RxTx_Data, 8, Can_Send_Flags);
if ( Msg_Rcvd==0xFFFF) portd.F3=1; // egy led a kimeneten
else portd.F+=0;
// portd.f3=C1CTRL.F11;
delay_ms(10);
//if (Msg_Rcvd==0X00) PORTD.F3=1;
// Msg_Rcvd = CAN1Read(&Rx_ID , RxTx_Data , &Rx_Data_Len, &Can_Rcv_Flags);
// PORTB = (((RxTx_Data[1])<<8 )| RxTx_Data[2]);
}
}//~!
More information about the Elektro
mailing list