Committer:
bouguereau
Date:
Wed Aug 24 09:46:22 2011 +0000
Revision:
0:615f7fbcd604

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
bouguereau 0:615f7fbcd604 1 #include "mbed.h"
bouguereau 0:615f7fbcd604 2 #include "CAN.h"
bouguereau 0:615f7fbcd604 3
bouguereau 0:615f7fbcd604 4 Ticker ticker;
bouguereau 0:615f7fbcd604 5
bouguereau 0:615f7fbcd604 6 DigitalOut led1(LED1);
bouguereau 0:615f7fbcd604 7 DigitalOut led2(LED2);
bouguereau 0:615f7fbcd604 8 DigitalOut led3(LED3);
bouguereau 0:615f7fbcd604 9 DigitalOut led4(LED4);
bouguereau 0:615f7fbcd604 10
bouguereau 0:615f7fbcd604 11 LocalFileSystem local("local");
bouguereau 0:615f7fbcd604 12
bouguereau 0:615f7fbcd604 13 // CAN_RS pin at Philips PCA82C250 can bus controller.
bouguereau 0:615f7fbcd604 14 // activate transceiver by pulling this pin to GND.
bouguereau 0:615f7fbcd604 15 // (Rise and fall slope controlled by resistor R_s)
bouguereau 0:615f7fbcd604 16 // (+5V result in tranceiver standby mode)
bouguereau 0:615f7fbcd604 17 // For further information see datasheet page 4
bouguereau 0:615f7fbcd604 18 DigitalOut can_Pca82c250SlopePin(p28);
bouguereau 0:615f7fbcd604 19
bouguereau 0:615f7fbcd604 20 // second can controller on these pins. Not used here.
bouguereau 0:615f7fbcd604 21 CAN can2(p9, p10);
bouguereau 0:615f7fbcd604 22
bouguereau 0:615f7fbcd604 23 // We use can on mbed pins 29(CAN_TXD) and 30(CAN_RXD).
bouguereau 0:615f7fbcd604 24 CAN can1(p30, p29);
bouguereau 0:615f7fbcd604 25
bouguereau 0:615f7fbcd604 26 /* void send1() {
bouguereau 0:615f7fbcd604 27 static char counter1 = 0;
bouguereau 0:615f7fbcd604 28 if (can1.write(CANMessage(0x200, &counter1, 1))) {
bouguereau 0:615f7fbcd604 29 printf("CanTx--> id: 0x200 dlc: 1 data: %x\n\r", counter1);
bouguereau 0:615f7fbcd604 30 counter1++;
bouguereau 0:615f7fbcd604 31 }
bouguereau 0:615f7fbcd604 32 // toggle led1 after every transmission
bouguereau 0:615f7fbcd604 33 led1 = !led1;
bouguereau 0:615f7fbcd604 34 }*/
bouguereau 0:615f7fbcd604 35
bouguereau 0:615f7fbcd604 36 /* void send2() {
bouguereau 0:615f7fbcd604 37 static char counter2 = 0;
bouguereau 0:615f7fbcd604 38 if (can2.write(CANMessage(0x300, &counter2, 1))) {
bouguereau 0:615f7fbcd604 39 printf("CanTx--> id: 0x300 dlc: 2 data: %x\n\r", counter2);
bouguereau 0:615f7fbcd604 40 counter2++;
bouguereau 0:615f7fbcd604 41 }
bouguereau 0:615f7fbcd604 42 // toggle led2 after every transmission
bouguereau 0:615f7fbcd604 43 led2 = !led2;
bouguereau 0:615f7fbcd604 44 }*/
bouguereau 0:615f7fbcd604 45
bouguereau 0:615f7fbcd604 46 void send() {
bouguereau 0:615f7fbcd604 47 static char counter = 0;
bouguereau 0:615f7fbcd604 48 if (can2.write(CANMessage(0x300, &counter, 1))) {
bouguereau 0:615f7fbcd604 49 printf("CanTx--> id: 0x300 dlc: 2 data: %x\n\r", counter);
bouguereau 0:615f7fbcd604 50 counter++;
bouguereau 0:615f7fbcd604 51 }
bouguereau 0:615f7fbcd604 52 if (can1.write(CANMessage(0x200, &counter, 2))) {
bouguereau 0:615f7fbcd604 53 printf("CanTx--> id: 0x300 dlc: 2 data: %x\n\r", counter);
bouguereau 0:615f7fbcd604 54 counter++;
bouguereau 0:615f7fbcd604 55 }
bouguereau 0:615f7fbcd604 56 // toggle led2 after every transmission
bouguereau 0:615f7fbcd604 57 led2 = !led2;
bouguereau 0:615f7fbcd604 58 }
bouguereau 0:615f7fbcd604 59
bouguereau 0:615f7fbcd604 60 int main() {
bouguereau 0:615f7fbcd604 61
bouguereau 0:615f7fbcd604 62 FILE *test1 = fopen("/local/test1.txt", "w");
bouguereau 0:615f7fbcd604 63 FILE *test2 = fopen("/local/test2.txt","w");
bouguereau 0:615f7fbcd604 64
bouguereau 0:615f7fbcd604 65 bool flag1 = false;
bouguereau 0:615f7fbcd604 66 bool flag2 = false;
bouguereau 0:615f7fbcd604 67 int i =0 ;
bouguereau 0:615f7fbcd604 68
bouguereau 0:615f7fbcd604 69 // 500kbit/s
bouguereau 0:615f7fbcd604 70 can1.frequency(500000);
bouguereau 0:615f7fbcd604 71 can2.frequency(500000);
bouguereau 0:615f7fbcd604 72 // activate external can transceiver
bouguereau 0:615f7fbcd604 73 can_Pca82c250SlopePin = 0;
bouguereau 0:615f7fbcd604 74 // every 500ms
bouguereau 0:615f7fbcd604 75 ticker.attach(&send, 0.5);
bouguereau 0:615f7fbcd604 76 // create message object for message reception
bouguereau 0:615f7fbcd604 77 // CANMessage can_MsgRx;
bouguereau 0:615f7fbcd604 78
bouguereau 0:615f7fbcd604 79 CANMessage can_MsgRx1;
bouguereau 0:615f7fbcd604 80 CANMessage can_MsgRx2;
bouguereau 0:615f7fbcd604 81 //------------------------RECEPTION--------------------------------------\\
bouguereau 0:615f7fbcd604 82 while(i<10)
bouguereau 0:615f7fbcd604 83 {
bouguereau 0:615f7fbcd604 84
bouguereau 0:615f7fbcd604 85 while (flag1!=true)
bouguereau 0:615f7fbcd604 86
bouguereau 0:615f7fbcd604 87
bouguereau 0:615f7fbcd604 88 // send received messages to the pc via serial line (9k6, 8n1)
bouguereau 0:615f7fbcd604 89 if (can1.read(can_MsgRx1))
bouguereau 0:615f7fbcd604 90 {
bouguereau 0:615f7fbcd604 91 led3 = !led3;
bouguereau 0:615f7fbcd604 92 flag1 = true;
bouguereau 0:615f7fbcd604 93 }
bouguereau 0:615f7fbcd604 94
bouguereau 0:615f7fbcd604 95 while ( flag2!=true )
bouguereau 0:615f7fbcd604 96
bouguereau 0:615f7fbcd604 97 if (can2.read(can_MsgRx2))
bouguereau 0:615f7fbcd604 98 {
bouguereau 0:615f7fbcd604 99 led4 = !led4;
bouguereau 0:615f7fbcd604 100 flag2 = true;
bouguereau 0:615f7fbcd604 101 }
bouguereau 0:615f7fbcd604 102
bouguereau 0:615f7fbcd604 103
bouguereau 0:615f7fbcd604 104
bouguereau 0:615f7fbcd604 105
bouguereau 0:615f7fbcd604 106 fprintf(test1,"%d-%d-%c%c%c%c%c%c%c%c\r",can_MsgRx1.len,can_MsgRx1.id,can_MsgRx1.data[0],can_MsgRx1.data[1],can_MsgRx1.data[2],can_MsgRx1.data[3],can_MsgRx1.data[4],can_MsgRx1.data[5],can_MsgRx1.data[6],can_MsgRx1.data[7]);
bouguereau 0:615f7fbcd604 107 fprintf(test2,"%d-%d-%c%c%c%c%c%c%c%c\r",can_MsgRx2.len,can_MsgRx2.id,can_MsgRx2.data[0],can_MsgRx2.data[1],can_MsgRx2.data[2],can_MsgRx2.data[3],can_MsgRx2.data[4],can_MsgRx2.data[5],can_MsgRx2.data[6],can_MsgRx2.data[7]);
bouguereau 0:615f7fbcd604 108 flag1 = false ;
bouguereau 0:615f7fbcd604 109 flag2 = false ;
bouguereau 0:615f7fbcd604 110 i++;
bouguereau 0:615f7fbcd604 111 }
bouguereau 0:615f7fbcd604 112
bouguereau 0:615f7fbcd604 113
bouguereau 0:615f7fbcd604 114 fclose(test1);
bouguereau 0:615f7fbcd604 115 fclose(test2);
bouguereau 0:615f7fbcd604 116 }