Pushkar Gejji / Mbed 2 deprecated PROJ_ITER1
Committer:
gpushkar
Date:
Mon Dec 13 21:22:07 2010 +0000
Revision:
0:6ecb1db6315e

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
gpushkar 0:6ecb1db6315e 1 #include "mbed.h"
gpushkar 0:6ecb1db6315e 2 #include "extra.h"
gpushkar 0:6ecb1db6315e 3
gpushkar 0:6ecb1db6315e 4 #define MARK 125 // 2000Hz
gpushkar 0:6ecb1db6315e 5 #define SPACE 250 //1000Hz
gpushkar 0:6ecb1db6315e 6 #define BAUD 300
gpushkar 0:6ecb1db6315e 7 #define BIT_PERIOD_US 1/BAUD
gpushkar 0:6ecb1db6315e 8
gpushkar 0:6ecb1db6315e 9 //DigitalOut led(LED1);
gpushkar 0:6ecb1db6315e 10 PwmOut led(p21);
gpushkar 0:6ecb1db6315e 11 int output=0;
gpushkar 0:6ecb1db6315e 12 int buf_mod[10]={0};
gpushkar 0:6ecb1db6315e 13 int buf_index = 0;
gpushkar 0:6ecb1db6315e 14 Timeout stop;
gpushkar 0:6ecb1db6315e 15 Serial bt(p9, p10); // tx, rx
gpushkar 0:6ecb1db6315e 16
gpushkar 0:6ecb1db6315e 17
gpushkar 0:6ecb1db6315e 18 void stop_pwm(void);
gpushkar 0:6ecb1db6315e 19 void read_serial(void);
gpushkar 0:6ecb1db6315e 20 int main() {
gpushkar 0:6ecb1db6315e 21
gpushkar 0:6ecb1db6315e 22 int i;
gpushkar 0:6ecb1db6315e 23 pc.baud(115200);
gpushkar 0:6ecb1db6315e 24 bt.baud(115200);
gpushkar 0:6ecb1db6315e 25 pc.attach(&read_serial);
gpushkar 0:6ecb1db6315e 26 bt.attach(&read_serial);
gpushkar 0:6ecb1db6315e 27 timerSetup();
gpushkar 0:6ecb1db6315e 28 int bit_index = 0;
gpushkar 0:6ecb1db6315e 29 float period;
gpushkar 0:6ecb1db6315e 30 state = IDLE;
gpushkar 0:6ecb1db6315e 31
gpushkar 0:6ecb1db6315e 32 while (1) {
gpushkar 0:6ecb1db6315e 33
gpushkar 0:6ecb1db6315e 34
gpushkar 0:6ecb1db6315e 35 if (output==0 && buf_mod[0] != 0) {
gpushkar 0:6ecb1db6315e 36 if (!bit_index) {
gpushkar 0:6ecb1db6315e 37
gpushkar 0:6ecb1db6315e 38 led=0.5;
gpushkar 0:6ecb1db6315e 39 led.period_us(SPACE);
gpushkar 0:6ecb1db6315e 40 //pc.printf("start bit\n");
gpushkar 0:6ecb1db6315e 41 stop.attach_us(&stop_pwm,1000000*(float)BIT_PERIOD_US);
gpushkar 0:6ecb1db6315e 42 bit_index++;
gpushkar 0:6ecb1db6315e 43 output=1;
gpushkar 0:6ecb1db6315e 44 continue;
gpushkar 0:6ecb1db6315e 45 }
gpushkar 0:6ecb1db6315e 46 period = ( 0x01 & (buf_mod[0] >> (bit_index-1)))? MARK:SPACE ;
gpushkar 0:6ecb1db6315e 47 led = 0.5;
gpushkar 0:6ecb1db6315e 48 pc.printf("Bit=%c", (period == MARK)?'H':'L' );
gpushkar 0:6ecb1db6315e 49
gpushkar 0:6ecb1db6315e 50 led.period_us(period);
gpushkar 0:6ecb1db6315e 51 stop.attach_us(&stop_pwm,1000000*(float)BIT_PERIOD_US);
gpushkar 0:6ecb1db6315e 52
gpushkar 0:6ecb1db6315e 53 bit_index++;
gpushkar 0:6ecb1db6315e 54 output = 1;
gpushkar 0:6ecb1db6315e 55
gpushkar 0:6ecb1db6315e 56 //Transmission complete
gpushkar 0:6ecb1db6315e 57 if (bit_index == 9) {
gpushkar 0:6ecb1db6315e 58
gpushkar 0:6ecb1db6315e 59 bit_index = 0;
gpushkar 0:6ecb1db6315e 60 buf_index--;
gpushkar 0:6ecb1db6315e 61 i=0;
gpushkar 0:6ecb1db6315e 62 led.period_us(MARK);
gpushkar 0:6ecb1db6315e 63 //while (buf[i] != 0) {
gpushkar 0:6ecb1db6315e 64 while (i <= buf_index) {
gpushkar 0:6ecb1db6315e 65 buf_mod[i] = buf_mod[i+1];
gpushkar 0:6ecb1db6315e 66 i++;
gpushkar 0:6ecb1db6315e 67 }
gpushkar 0:6ecb1db6315e 68 buf_mod[buf_index]=0;
gpushkar 0:6ecb1db6315e 69
gpushkar 0:6ecb1db6315e 70 }
gpushkar 0:6ecb1db6315e 71 }
gpushkar 0:6ecb1db6315e 72
gpushkar 0:6ecb1db6315e 73
gpushkar 0:6ecb1db6315e 74 // DEMOD:
gpushkar 0:6ecb1db6315e 75 if ( state == IDLE && n_long_periods == 3 ) {
gpushkar 0:6ecb1db6315e 76 pc.printf("START ");
gpushkar 0:6ecb1db6315e 77 state = READING;
gpushkar 0:6ecb1db6315e 78 buf = 0;
gpushkar 0:6ecb1db6315e 79 bit_count=0;
gpushkar 0:6ecb1db6315e 80 n_long_periods = 0;
gpushkar 0:6ecb1db6315e 81 } else if (state == READING ) {
gpushkar 0:6ecb1db6315e 82 if (n_short_periods > 150 ) {
gpushkar 0:6ecb1db6315e 83 // Error condition : You ve missed a bit
gpushkar 0:6ecb1db6315e 84 state = IDLE;
gpushkar 0:6ecb1db6315e 85 pc.printf("\n Error buf = %d",buf);
gpushkar 0:6ecb1db6315e 86 buf = 0;
gpushkar 0:6ecb1db6315e 87 bit_count = 0;
gpushkar 0:6ecb1db6315e 88 continue;
gpushkar 0:6ecb1db6315e 89 }
gpushkar 0:6ecb1db6315e 90
gpushkar 0:6ecb1db6315e 91 if (n_short_periods == 90) {
gpushkar 0:6ecb1db6315e 92 pc.printf("MARK ");
gpushkar 0:6ecb1db6315e 93 buf = (0x80 | (buf >>1));
gpushkar 0:6ecb1db6315e 94 bit_count++;
gpushkar 0:6ecb1db6315e 95
gpushkar 0:6ecb1db6315e 96
gpushkar 0:6ecb1db6315e 97 }
gpushkar 0:6ecb1db6315e 98 if (n_short_periods >100 ) {
gpushkar 0:6ecb1db6315e 99 n_short_periods = 0;
gpushkar 0:6ecb1db6315e 100 }
gpushkar 0:6ecb1db6315e 101
gpushkar 0:6ecb1db6315e 102 if (n_long_periods == 4 ) {
gpushkar 0:6ecb1db6315e 103
gpushkar 0:6ecb1db6315e 104 pc.printf("SPACE ");
gpushkar 0:6ecb1db6315e 105 buf = buf >>1;
gpushkar 0:6ecb1db6315e 106 bit_count++;
gpushkar 0:6ecb1db6315e 107 n_long_periods=0;
gpushkar 0:6ecb1db6315e 108 }
gpushkar 0:6ecb1db6315e 109
gpushkar 0:6ecb1db6315e 110 if (bit_count == 8 ) {
gpushkar 0:6ecb1db6315e 111 // all bits received
gpushkar 0:6ecb1db6315e 112 pc.printf("\n Rx from UE = %c",buf);
gpushkar 0:6ecb1db6315e 113 bt.putc(buf);
gpushkar 0:6ecb1db6315e 114 state = IDLE;
gpushkar 0:6ecb1db6315e 115 buf = 0;
gpushkar 0:6ecb1db6315e 116 bit_count=0 ;
gpushkar 0:6ecb1db6315e 117 }
gpushkar 0:6ecb1db6315e 118 }
gpushkar 0:6ecb1db6315e 119 }
gpushkar 0:6ecb1db6315e 120 }
gpushkar 0:6ecb1db6315e 121 void read_serial(void) {
gpushkar 0:6ecb1db6315e 122
gpushkar 0:6ecb1db6315e 123 if (pc.readable()) {
gpushkar 0:6ecb1db6315e 124
gpushkar 0:6ecb1db6315e 125 buf_mod[buf_index++] = (int)pc.getc();
gpushkar 0:6ecb1db6315e 126 //pc.printf("%d",buf[buf_index-1]);
gpushkar 0:6ecb1db6315e 127 //buf[buf_index++]=171;
gpushkar 0:6ecb1db6315e 128 buf_mod[buf_index]= 0;
gpushkar 0:6ecb1db6315e 129 }
gpushkar 0:6ecb1db6315e 130 if (bt.readable()) {
gpushkar 0:6ecb1db6315e 131
gpushkar 0:6ecb1db6315e 132 buf_mod[buf_index++] = (int)bt.getc();
gpushkar 0:6ecb1db6315e 133 //pc.printf("%d",buf[buf_index-1]);
gpushkar 0:6ecb1db6315e 134 //buf[buf_index++]=171;
gpushkar 0:6ecb1db6315e 135 buf_mod[buf_index]= 0;
gpushkar 0:6ecb1db6315e 136 }
gpushkar 0:6ecb1db6315e 137 }
gpushkar 0:6ecb1db6315e 138 void stop_pwm(void) {
gpushkar 0:6ecb1db6315e 139 output = 0;
gpushkar 0:6ecb1db6315e 140 //led = 0;
gpushkar 0:6ecb1db6315e 141 }