Dependencies:   mbed

Committer:
bouguereau
Date:
Wed Aug 24 09:47:13 2011 +0000
Revision:
0:96c0a1b1070f

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
bouguereau 0:96c0a1b1070f 1 #include "mbed.h"
bouguereau 0:96c0a1b1070f 2 #include "CAN.h"
bouguereau 0:96c0a1b1070f 3
bouguereau 0:96c0a1b1070f 4 Ticker ticker;
bouguereau 0:96c0a1b1070f 5
bouguereau 0:96c0a1b1070f 6 DigitalOut led1(LED1);
bouguereau 0:96c0a1b1070f 7 DigitalOut led2(LED2);
bouguereau 0:96c0a1b1070f 8
bouguereau 0:96c0a1b1070f 9 LocalFileSystem local("local");
bouguereau 0:96c0a1b1070f 10
bouguereau 0:96c0a1b1070f 11 // CAN_RS pin at Philips PCA82C250 can bus controller.
bouguereau 0:96c0a1b1070f 12 // activate transceiver by pulling this pin to GND.
bouguereau 0:96c0a1b1070f 13 // (Rise and fall slope controlled by resistor R_s)
bouguereau 0:96c0a1b1070f 14 // (+5V result in tranceiver standby mode)
bouguereau 0:96c0a1b1070f 15 // For further information see datasheet page 4
bouguereau 0:96c0a1b1070f 16 DigitalOut can_Pca82c250SlopePin(p28);
bouguereau 0:96c0a1b1070f 17
bouguereau 0:96c0a1b1070f 18 // second can controller on these pins. Not used here.
bouguereau 0:96c0a1b1070f 19 CAN can2(p9, p10);
bouguereau 0:96c0a1b1070f 20
bouguereau 0:96c0a1b1070f 21 // We use can on mbed pins 29(CAN_TXD) and 30(CAN_RXD).
bouguereau 0:96c0a1b1070f 22 // CAN can2(p30, p29);
bouguereau 0:96c0a1b1070f 23
bouguereau 0:96c0a1b1070f 24 void send() {
bouguereau 0:96c0a1b1070f 25 static char counter = 0;
bouguereau 0:96c0a1b1070f 26 if (can2.write(CANMessage(0x300, &counter, 1))) {
bouguereau 0:96c0a1b1070f 27 printf("CanTx--> id: 0x200 dlc: 1 data: %x\n\r", counter);
bouguereau 0:96c0a1b1070f 28 counter++;
bouguereau 0:96c0a1b1070f 29 }
bouguereau 0:96c0a1b1070f 30 // toggle led1 after every transmission
bouguereau 0:96c0a1b1070f 31 led1 = !led1;
bouguereau 0:96c0a1b1070f 32 }
bouguereau 0:96c0a1b1070f 33
bouguereau 0:96c0a1b1070f 34 int main() {
bouguereau 0:96c0a1b1070f 35
bouguereau 0:96c0a1b1070f 36 FILE *test1 = fopen("/local/test.txt", "w");
bouguereau 0:96c0a1b1070f 37
bouguereau 0:96c0a1b1070f 38 bool flag = false;
bouguereau 0:96c0a1b1070f 39 int i =0 ;
bouguereau 0:96c0a1b1070f 40
bouguereau 0:96c0a1b1070f 41 // 500kbit/s
bouguereau 0:96c0a1b1070f 42 can2.frequency(500000);
bouguereau 0:96c0a1b1070f 43 // activate external can transceiver
bouguereau 0:96c0a1b1070f 44 can_Pca82c250SlopePin = 0;
bouguereau 0:96c0a1b1070f 45 // every 500ms
bouguereau 0:96c0a1b1070f 46 ticker.attach(&send, 0.5);
bouguereau 0:96c0a1b1070f 47 /// create message object for message reception
bouguereau 0:96c0a1b1070f 48 CANMessage can_MsgRx;
bouguereau 0:96c0a1b1070f 49 while(i<10)
bouguereau 0:96c0a1b1070f 50 {
bouguereau 0:96c0a1b1070f 51 while (flag!=true)
bouguereau 0:96c0a1b1070f 52 {
bouguereau 0:96c0a1b1070f 53 // send received messages to the pc via serial line (9k6, 8n1)
bouguereau 0:96c0a1b1070f 54 if (can2.read(can_MsgRx))
bouguereau 0:96c0a1b1070f 55 {
bouguereau 0:96c0a1b1070f 56 led2 = !led2;
bouguereau 0:96c0a1b1070f 57 flag = true;
bouguereau 0:96c0a1b1070f 58 }
bouguereau 0:96c0a1b1070f 59
bouguereau 0:96c0a1b1070f 60
bouguereau 0:96c0a1b1070f 61 }
bouguereau 0:96c0a1b1070f 62
bouguereau 0:96c0a1b1070f 63 fprintf(test1,"%d-%d-%c%c%c%c%c%c%c%c\r",can_MsgRx.len,can_MsgRx.id,can_MsgRx.data[0],can_MsgRx.data[1],can_MsgRx.data[2],can_MsgRx.data[3],can_MsgRx.data[4],can_MsgRx.data[5],can_MsgRx.data[6],can_MsgRx.data[7]);
bouguereau 0:96c0a1b1070f 64 flag = false ;
bouguereau 0:96c0a1b1070f 65 i++;
bouguereau 0:96c0a1b1070f 66 }
bouguereau 0:96c0a1b1070f 67 fclose(test1);
bouguereau 0:96c0a1b1070f 68 }