communication CAN avec affichage sur console

Dependencies:   mbed

Committer:
bouaziz
Date:
Thu Feb 17 13:28:35 2011 +0000
Revision:
0:79662ac4d61a

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
bouaziz 0:79662ac4d61a 1 #include "mbed.h"
bouaziz 0:79662ac4d61a 2 #include "CAN.h"
bouaziz 0:79662ac4d61a 3
bouaziz 0:79662ac4d61a 4 LocalFileSystem local("local");
bouaziz 0:79662ac4d61a 5
bouaziz 0:79662ac4d61a 6 Ticker ticker;
bouaziz 0:79662ac4d61a 7
bouaziz 0:79662ac4d61a 8 DigitalOut led1(LED1);
bouaziz 0:79662ac4d61a 9 DigitalOut led2(LED2);
bouaziz 0:79662ac4d61a 10 DigitalOut led3(LED3);
bouaziz 0:79662ac4d61a 11 DigitalOut led4(LED4);
bouaziz 0:79662ac4d61a 12
bouaziz 0:79662ac4d61a 13
bouaziz 0:79662ac4d61a 14 // CAN_RS pin at Philips PCA82C250 can bus controller.
bouaziz 0:79662ac4d61a 15 // activate transceiver by pulling this pin to GND.
bouaziz 0:79662ac4d61a 16 // (Rise and fall slope controlled by resistor R_s)
bouaziz 0:79662ac4d61a 17 // (+5V result in tranceiver standby mode)
bouaziz 0:79662ac4d61a 18 // For further information see datasheet page 4
bouaziz 0:79662ac4d61a 19 //DigitalOut can_Pca82c250SlopePin(p28);
bouaziz 0:79662ac4d61a 20
bouaziz 0:79662ac4d61a 21 // second can controller on these pins. Not used here.
bouaziz 0:79662ac4d61a 22 // CAN can1(p9, p10);
bouaziz 0:79662ac4d61a 23
bouaziz 0:79662ac4d61a 24 // We use can on mbed pins 29(CAN_TXD) and 30(CAN_RXD).
bouaziz 0:79662ac4d61a 25 CAN can2(p30, p29);
bouaziz 0:79662ac4d61a 26 Serial pc(p13,p14);
bouaziz 0:79662ac4d61a 27
bouaziz 0:79662ac4d61a 28 FILE *fp ;
bouaziz 0:79662ac4d61a 29 unsigned int flag=0;
bouaziz 0:79662ac4d61a 30
bouaziz 0:79662ac4d61a 31 void send() {
bouaziz 0:79662ac4d61a 32 static char counter = 0;
bouaziz 0:79662ac4d61a 33 if (can2.write(CANMessage(0x200, &counter, 1))) {
bouaziz 0:79662ac4d61a 34
bouaziz 0:79662ac4d61a 35 // LPC_CAN2->CMR &= 0xEF; // stop back Tx
bouaziz 0:79662ac4d61a 36 pc.printf("CanTx--> id: 0x200 dlc: 1 data: %x\n\r", counter);
bouaziz 0:79662ac4d61a 37 counter++;
bouaziz 0:79662ac4d61a 38 }
bouaziz 0:79662ac4d61a 39 // toggle led1 after every transmission
bouaziz 0:79662ac4d61a 40 led1 = !led1;
bouaziz 0:79662ac4d61a 41
bouaziz 0:79662ac4d61a 42 }
bouaziz 0:79662ac4d61a 43
bouaziz 0:79662ac4d61a 44 int main() {
bouaziz 0:79662ac4d61a 45 // 500kbit/s
bouaziz 0:79662ac4d61a 46 can2.frequency(500000);
bouaziz 0:79662ac4d61a 47 // every 500ms
bouaziz 0:79662ac4d61a 48 ticker.attach(&send, 0.5);
bouaziz 0:79662ac4d61a 49 /// create message object for message reception
bouaziz 0:79662ac4d61a 50 CANMessage can_MsgRx;
bouaziz 0:79662ac4d61a 51 pc.baud(38400);
bouaziz 0:79662ac4d61a 52 pc.format(8,Serial::None,1);
bouaziz 0:79662ac4d61a 53 while (1) {
bouaziz 0:79662ac4d61a 54 // send received messages to the pc via serial line (9k6, 8n1)
bouaziz 0:79662ac4d61a 55 if (can2.read(can_MsgRx)) {
bouaziz 0:79662ac4d61a 56
bouaziz 0:79662ac4d61a 57 led3= can_MsgRx.data[0]&0x01;
bouaziz 0:79662ac4d61a 58 led4= (can_MsgRx.data[0]&0x02)>>1;
bouaziz 0:79662ac4d61a 59 // any incoming message: toggle led2
bouaziz 0:79662ac4d61a 60 pc.printf("Receive %3x %2u\n\r",can_MsgRx.id,can_MsgRx.len);
bouaziz 0:79662ac4d61a 61 led2 = !led2;
bouaziz 0:79662ac4d61a 62 }
bouaziz 0:79662ac4d61a 63 }
bouaziz 0:79662ac4d61a 64 }