JongYong Park / Mbed 2 deprecated NUCLEO-F767_LIFI_4CH_os2_v2

Dependencies:   mbed

Committer:
JongYongPark
Date:
Mon Apr 08 01:14:04 2019 +0000
Revision:
17:847e9b792c72
Parent:
16:c551ee1092f5
Child:
21:82b5759f5047
Child:
26:26474003e443
fix lenght

Who changed what in which revision?

UserRevisionLine numberNew contents of line
JongYongPark 11:8ffa8a36126f 1 #ifndef __LIFI_TRANCEIVER_HEADER__
JongYongPark 11:8ffa8a36126f 2 #define __LIFI_TRANCEIVER_HEADER__
JongYongPark 0:488aa8153e15 3
JongYongPark 0:488aa8153e15 4 /*
JongYongPark 0:488aa8153e15 5 LiFi Emitter and Receiver
JongYongPark 0:488aa8153e15 6 The purpose of this demos is to demonstrate data communication using a pair of blue LED (one led as emitter one led as receiver).
JongYongPark 0:488aa8153e15 7 Communication can go at up to 600bs (can depend on led quality)
JongYongPark 0:488aa8153e15 8 Receiver hardware :
JongYongPark 0:488aa8153e15 9 |----1Mohm-----|
JongYongPark 0:488aa8153e15 10 A3 ------|--- +led- ----|-------GND
JongYongPark 0:488aa8153e15 11 A byte is sent as follow :
JongYongPark 0:488aa8153e15 12 Start(0) 8bit data Stop(1), LSB first : 0 b0 b1 b2 b3 b4 b5 b6 b7 1
JongYongPark 0:488aa8153e15 13
JongYongPark 0:488aa8153e15 14 Each bit is coded in manchester with
JongYongPark 0:488aa8153e15 15 time is from left to right
JongYongPark 0:488aa8153e15 16 0 -> 10
JongYongPark 0:488aa8153e15 17 1 -> 01
JongYongPark 0:488aa8153e15 18 A data frame is formatted as follow :
JongYongPark 0:488aa8153e15 19 0xAA : sent a number of time to help the receiver compute a signal average for the thresholding of analog values
JongYongPark 0:488aa8153e15 20 0xD5 : synchronization byte to indicate start of a frame, breaks the regularity of the 0x55 pattern to be easily
JongYongPark 0:488aa8153e15 21 0x02 : STX start of frame
JongYongPark 0:488aa8153e15 22 N times Effective data excluding command symbols, max length 32 bytes
JongYongPark 0:488aa8153e15 23 0x03 : ETX end of frame
JongYongPark 0:488aa8153e15 24 */
JongYongPark 0:488aa8153e15 25
JongYongPark 17:847e9b792c72 26 #define USE_MIMO_4CH 1 // feature
JongYongPark 17:847e9b792c72 27 #define LIFI_ACTUAL_MAX_CHANNEL_NUM (1) // 1 -minumum 4 - full
JongYongPark 17:847e9b792c72 28 #define LIFI_ACTUAL_MAX_CHANNEL_NUM_INDEX (LIFI_ACTUAL_MAX_CHANNEL_NUM - 1)
JongYongPark 17:847e9b792c72 29 #define LIFI_PACKET_USE_LENGTH 1
JongYongPark 17:847e9b792c72 30
JongYongPark 17:847e9b792c72 31
JongYongPark 17:847e9b792c72 32 ////////////////
JongYongPark 0:488aa8153e15 33
JongYongPark 0:488aa8153e15 34 #define FRAME_BUFFER_SIZE (60)
JongYongPark 0:488aa8153e15 35 #define PDU_BUFFER_SIZE (40)
JongYongPark 0:488aa8153e15 36 #define NUM_TO_STRING_BUFFER_SIZE (40)
JongYongPark 0:488aa8153e15 37
JongYongPark 0:488aa8153e15 38 // pjr mask out - because sensor is inverted
JongYongPark 0:488aa8153e15 39 //#define INT_REF /* Commen this to use AVCC reference voltage. To be used when the receiver LED generate low levels */
JongYongPark 0:488aa8153e15 40 // solar panel에서는 adc 값을 작게 설정해야 충분하게 분석할 수 있다.
JongYongPark 0:488aa8153e15 41 #define LIFI_RX_EDGE_THRESHOLD 100 // 500mv //20 //100 - not works on 400us Sample Frequency // 16 ~ 934 [min 0 - max 1000]
JongYongPark 0:488aa8153e15 42 //#define LIFI_RX_EDGE_THRESHOLD 4 /* Defines the voltage difference between two samples to detect a rising/falling edge. Can be increased depensing on the environment */
JongYongPark 0:488aa8153e15 43
JongYongPark 0:488aa8153e15 44 /////////////////////////////////////
JongYongPark 0:488aa8153e15 45 //#ifdef USE_SLOW_TXRX_DEMO
JongYongPark 0:488aa8153e15 46 //#define LIFI_RX_SYMBOL_PERIOD_US 10000 /* 10 ms = 0.01 sec */
JongYongPark 0:488aa8153e15 47 //#else
JongYongPark 0:488aa8153e15 48 //static long LIFI_RX_SYMBOL_PERIOD_US = 500;
JongYongPark 0:488aa8153e15 49 // menchester OOK - 1 bit - 2 symbol
JongYongPark 0:488aa8153e15 50 // half bit - every 500us
JongYongPark 0:488aa8153e15 51 // bit - every 1000us (1ms)
JongYongPark 0:488aa8153e15 52 // bitrate - bit/sec = 1 bit /1 ms = 1000 bits / 1 sec = 1000 sps
JongYongPark 0:488aa8153e15 53 // symbol rate - sym / sec = 1 sym / 0.5 ms = 2000 bps
JongYongPark 0:488aa8153e15 54 // CPS (charector) = bitrate/ word_lenght = 1000 / 10 = 100 cps
JongYongPark 0:488aa8153e15 55 // PPS (packet) = CPS / (AAAAAA+SYNC+STX+DATA(n)+ETX = CPS /10 = 10 pps <= when sending 1 byte data.
JongYongPark 0:488aa8153e15 56 //#endif
JongYongPark 0:488aa8153e15 57
JongYongPark 0:488aa8153e15 58 // menchester OOK - 1 bit - 2 symbol
JongYongPark 0:488aa8153e15 59 // half bit - every 500us
JongYongPark 0:488aa8153e15 60 // bit - every 1000us (1ms)
JongYongPark 0:488aa8153e15 61 // bitrate - bit/sec = 1 bit /1 ms = 1000 bits / 1 sec = 1000 sps
JongYongPark 0:488aa8153e15 62 // symbol rate - sym / sec = 1 sym / 0.5 ms = 2000 bps
JongYongPark 0:488aa8153e15 63 // CPS (charector) = bitrate/ word_lenght = 1000 / 10 = 100 cps
JongYongPark 0:488aa8153e15 64 // PPS (packet) = CPS / (AAAAAA+SYNC+STX+DATA(n)+ETX = CPS /10 = 10 pps <= when sending 1 byte data.
JongYongPark 0:488aa8153e15 65 //#endif
JongYongPark 0:488aa8153e15 66
JongYongPark 0:488aa8153e15 67
JongYongPark 0:488aa8153e15 68 // for Android Flash Camera
JongYongPark 0:488aa8153e15 69 //static long LIFI_RX_SYMBOL_PERIOD_US = 40000;
JongYongPark 0:488aa8153e15 70 // for Arduino LED
JongYongPark 0:488aa8153e15 71 //static long LIFI_RX_SYMBOL_PERIOD_US = 500;
JongYongPark 0:488aa8153e15 72 //#define LIFI_RX_SYMBOL_PERIOD_US 2000;
JongYongPark 0:488aa8153e15 73 // for direct fast test
JongYongPark 0:488aa8153e15 74 //static long LIFI_RX_SYMBOL_PERIOD_US = 50;
JongYongPark 0:488aa8153e15 75
JongYongPark 0:488aa8153e15 76 //#define LIFI_RX_SYMBOL_PERIOD_US 2000;
JongYongPark 0:488aa8153e15 77
JongYongPark 0:488aa8153e15 78 // 100ms
JongYongPark 0:488aa8153e15 79 //#define LIFI_RX_SYMBOL_PERIOD_US (100000) // solar : get sync but invalid data
JongYongPark 0:488aa8153e15 80 //#define LIFI_RX_SYMBOL_PERIOD_SEC (0.1)
JongYongPark 0:488aa8153e15 81
JongYongPark 2:e1fd30fce2f8 82 // 10 ms = works 정상동작 <===================== PD : works / solar panel : works == send data failure - adject TX periode => fixed by LifiTx_IsBusy() - works well
JongYongPark 2:e1fd30fce2f8 83 //#define LIFI_RX_SYMBOL_PERIOD_US (10000)
JongYongPark 2:e1fd30fce2f8 84 //#define LIFI_RX_SYMBOL_PERIOD_SEC (0.01)
JongYongPark 0:488aa8153e15 85
JongYongPark 2:e1fd30fce2f8 86 // 4 ms = works 정상동작 <======================== PD : works / solar panel : works well
JongYongPark 3:ae1f53883bc0 87 #define LIFI_RX_SYMBOL_PERIOD_US (4000)
JongYongPark 3:ae1f53883bc0 88 #define LIFI_RX_SYMBOL_PERIOD_SEC (0.004)
JongYongPark 0:488aa8153e15 89
JongYongPark 0:488aa8153e15 90 // 2 ms = works 정상동작 <======================== PD : works / solar panel : works - sometimes get wrong data <==best
JongYongPark 3:ae1f53883bc0 91 // 손전등으로 바꾼후 거리가 멀어져서 잘 동작안함. - 이것은 아무래도 반사가 커서 상호영향을 미친것으로 보임, 가변저항을 돌려서 밝기를 약간 줄미연 잘 동작함.
JongYongPark 3:ae1f53883bc0 92
JongYongPark 3:ae1f53883bc0 93 //efine LIFI_RX_SYMBOL_PERIOD_US (2000)
JongYongPark 3:ae1f53883bc0 94 //efine LIFI_RX_SYMBOL_PERIOD_SEC (0.002)
JongYongPark 0:488aa8153e15 95 // circuit
JongYongPark 0:488aa8153e15 96 // Solar ---- R 1M -- to mpu ADC ---- R 1M -- ---- R 1M -- GND
JongYongPark 0:488aa8153e15 97 // |
JongYongPark 0:488aa8153e15 98 // |------ C 100uf/50v ---- R 1M -- GND
JongYongPark 0:488aa8153e15 99 // 1M ohm
JongYongPark 0:488aa8153e15 100 // 0.1 uF 50 v = 반반 정도
JongYongPark 0:488aa8153e15 101 // 100 uF 16 v = 모두 +
JongYongPark 0:488aa8153e15 102 // 100 uf 60 v = 반반
JongYongPark 0:488aa8153e15 103
JongYongPark 0:488aa8153e15 104 // 1 ms = works 정상동작 <======================== PD : works / solar panel : not works => signal broken
JongYongPark 0:488aa8153e15 105 //#define LIFI_RX_SYMBOL_PERIOD_US (1000)
JongYongPark 0:488aa8153e15 106 //#define LIFI_RX_SYMBOL_PERIOD_SEC (0.001)
JongYongPark 0:488aa8153e15 107
JongYongPark 0:488aa8153e15 108 // 1 ms = works 정상동작 <======================== PD : not works => signal broken / solar panel : not works => signal broken
JongYongPark 0:488aa8153e15 109 // 400us = 동작하지 않는다. 오실로 스코프로 찍어보면 파형이 많이 깨진다.
JongYongPark 0:488aa8153e15 110 // 파형을 정제하는 부분이 필요하다.
JongYongPark 0:488aa8153e15 111 //#define LIFI_RX_SYMBOL_PERIOD_US (400)
JongYongPark 0:488aa8153e15 112 //#define LIFI_RX_SYMBOL_PERIOD_SEC (0.0004)
JongYongPark 0:488aa8153e15 113
JongYongPark 0:488aa8153e15 114
JongYongPark 0:488aa8153e15 115 // 100us = not works
JongYongPark 0:488aa8153e15 116 //#define LIFI_RX_SYMBOL_PERIOD_US (100)
JongYongPark 0:488aa8153e15 117
JongYongPark 0:488aa8153e15 118 // 10ms
JongYongPark 0:488aa8153e15 119 //#define LIFI_RX_SYMBOL_PERIOD_US (10)
JongYongPark 0:488aa8153e15 120
JongYongPark 0:488aa8153e15 121
JongYongPark 0:488aa8153e15 122
JongYongPark 0:488aa8153e15 123 // 1ms
JongYongPark 0:488aa8153e15 124 //#define LIFI_RX_SYMBOL_PERIOD_US (1000);
JongYongPark 0:488aa8153e15 125 //#define LIFI_RX_SYMBOL_PERIOD_SEC (0.0001)
JongYongPark 0:488aa8153e15 126
JongYongPark 0:488aa8153e15 127 // 1ms
JongYongPark 0:488aa8153e15 128 //#define LIFI_RX_SYMBOL_PERIOD_US (1000);
JongYongPark 0:488aa8153e15 129 //#define LIFI_RX_SYMBOL_PERIOD_SEC (0.0001)
JongYongPark 0:488aa8153e15 130
JongYongPark 0:488aa8153e15 131
JongYongPark 0:488aa8153e15 132
JongYongPark 0:488aa8153e15 133 #define LIFI_RX_SAMPLE_PER_SYMBOL (4)
JongYongPark 0:488aa8153e15 134
JongYongPark 0:488aa8153e15 135 #define LIFI_RX_SYMBOL_SAMPLE_PERIOD_US ((LIFI_RX_SYMBOL_PERIOD_US / LIFI_RX_SAMPLE_PER_SYMBOL))
JongYongPark 0:488aa8153e15 136 #define LIFI_RX_SYMBOL_SAMPLE_PERIOD_MS ((LIFI_RX_SYMBOL_PERIOD_MS / LIFI_RX_SAMPLE_PER_SYMBOL))
JongYongPark 0:488aa8153e15 137 #define LIFI_RX_SYMBOL_SAMPLE_PERIOD_SEC ((LIFI_RX_SYMBOL_PERIOD_SEC / LIFI_RX_SAMPLE_PER_SYMBOL))
JongYongPark 0:488aa8153e15 138 //#define LIFI_RX_SYMBOL_SAMPLE_PERIOD_SEC (LIFI_RX_SYMBOL_PERIOD_SEC>>2)
JongYongPark 0:488aa8153e15 139
JongYongPark 0:488aa8153e15 140 #define LIFI_MIMO_CHANNEL_NUM (4)
JongYongPark 0:488aa8153e15 141 #define LIFI_MIMO_CHANNEL_NUM_INDEX (LIFI_MIMO_CHANNEL_NUM - 1)
JongYongPark 0:488aa8153e15 142
JongYongPark 0:488aa8153e15 143 #define LIFI_CHANNEL_1 (0)
JongYongPark 0:488aa8153e15 144 #define LIFI_CHANNEL_2 (1)
JongYongPark 0:488aa8153e15 145 #define LIFI_CHANNEL_3 (2)
JongYongPark 0:488aa8153e15 146 #define LIFI_CHANNEL_4 (3)
JongYongPark 0:488aa8153e15 147 #define LIFI_CHANNEL_ALL (4)
JongYongPark 0:488aa8153e15 148 /////////////////
JongYongPark 17:847e9b792c72 149
JongYongPark 0:488aa8153e15 150
JongYongPark 0:488aa8153e15 151 #define LIFI_DEMO_TX_PERIOD_SEC (2) // 1 sec
JongYongPark 0:488aa8153e15 152 //#define LIFI_DEMO_TX_PERIOD_SEC (LIFI_RX_SYMBOL_PERIOD_SEC*2*8*(PDU_BUFFER_SIZE/LIFI_ACTUAL_MAX_CHANNEL_NUM+6) + 1) // 1 sec
JongYongPark 0:488aa8153e15 153 // LIFI_RX_SYMBOL_PERIOD_SEC*2*8 = 1 symbol *2 = 1 bit * 8 = 1 byte
JongYongPark 0:488aa8153e15 154 // PDU_BUFFER_SIZE + 6 ( AAAAAA SYNC STX ... ETX )
JongYongPark 0:488aa8153e15 155 // 1 => minimum 1 sec delay
JongYongPark 0:488aa8153e15 156 //#define LIFI_DEMO_TX_PERIOD_SEC (0) // no wait
JongYongPark 0:488aa8153e15 157
JongYongPark 0:488aa8153e15 158
JongYongPark 17:847e9b792c72 159
JongYongPark 16:c551ee1092f5 160
JongYongPark 0:488aa8153e15 161
JongYongPark 0:488aa8153e15 162 //#define DEBUG_ANALOG
JongYongPark 0:488aa8153e15 163 //#define DEBUG_EDGE
JongYongPark 0:488aa8153e15 164 //#define DEBUG_FRAME
JongYongPark 0:488aa8153e15 165 //#define DEBUG_RECEIVED_CHAR
JongYongPark 0:488aa8153e15 166
JongYongPark 0:488aa8153e15 167 #define TX_DEBUG_TIMER_INT 1
JongYongPark 0:488aa8153e15 168 #define TX_DEBUG_FRAME 1
JongYongPark 0:488aa8153e15 169 #define TX_DEBUG_MAIN_LOOP 1
JongYongPark 0:488aa8153e15 170
JongYongPark 0:488aa8153e15 171 ////////////
JongYongPark 0:488aa8153e15 172 #define RX_DEBUG_ANALOG_SENSOR_VALUE 0
JongYongPark 0:488aa8153e15 173 /////////////
JongYongPark 0:488aa8153e15 174 #define RX_RX_DEBUG_EDGE 0
JongYongPark 0:488aa8153e15 175 #define RX_DEBUG_BIN 0
JongYongPark 0:488aa8153e15 176 /////////////////////
JongYongPark 13:80e8347b2f6d 177 #define RX_DEBUG_FRAME 1 // 1
JongYongPark 0:488aa8153e15 178 #define RX_DEBUG_MAIN_LOOP 1 //1
JongYongPark 0:488aa8153e15 179
JongYongPark 0:488aa8153e15 180 //https://os.mbed.com/forum/bugs-suggestions/topic/28244/?page=1#comment-53612
JongYongPark 1:502e5a0c14c3 181 #define USE_LIFI_RX_CHECK_QUEUE 1
JongYongPark 1:502e5a0c14c3 182 // 이것을 하면 RX가 더 효과적임. 중요함. 0으로 하면 잘 안됨.
JongYongPark 0:488aa8153e15 183
JongYongPark 0:488aa8153e15 184 enum Lifi_RxTx_Mode {
JongYongPark 0:488aa8153e15 185 Lifi_Tx_Mode = 0,
JongYongPark 0:488aa8153e15 186 Lifi_Rx_Mode = 1
JongYongPark 0:488aa8153e15 187 };
JongYongPark 0:488aa8153e15 188
JongYongPark 0:488aa8153e15 189
JongYongPark 0:488aa8153e15 190 ///////////////// TX
JongYongPark 0:488aa8153e15 191 /////////////////////////
JongYongPark 0:488aa8153e15 192 //extern void to_manchester(unsigned char data, unsigned long int * data_manchester);
JongYongPark 0:488aa8153e15 193 extern void LifiTx_OokEmitHalfBit();
JongYongPark 0:488aa8153e15 194 //extern void init_frame(unsigned char * frame);
JongYongPark 11:8ffa8a36126f 195 //extern int create_frame(char * data, uint16_t data_size, unsigned char * frame);
JongYongPark 0:488aa8153e15 196 //extern void init_emitter();
JongYongPark 0:488aa8153e15 197 extern void LifiTx_Init();
JongYongPark 0:488aa8153e15 198 extern void LifiTx_SendHelloMsg();
JongYongPark 0:488aa8153e15 199 extern bool LifiTx_IsBusy();
JongYongPark 0:488aa8153e15 200 ///////////////// RX
JongYongPark 0:488aa8153e15 201 extern void LifiRx_Init();
JongYongPark 0:488aa8153e15 202 extern void LifiRx_SampleSignalEdge();
JongYongPark 0:488aa8153e15 203 extern void LifiRx_LoopOOK();
JongYongPark 0:488aa8153e15 204
JongYongPark 0:488aa8153e15 205 ///////////////////
JongYongPark 0:488aa8153e15 206 extern bool Lifi_IsChannelAvailable(int channel_num);
JongYongPark 0:488aa8153e15 207 extern bool Lifi_IsLastChannel(int channel_num);
JongYongPark 0:488aa8153e15 208 #endif
JongYongPark 0:488aa8153e15 209 #if 0
JongYongPark 0:488aa8153e15 210 저항
JongYongPark 0:488aa8153e15 211 ---------
JongYongPark 0:488aa8153e15 212 18
JongYongPark 0:488aa8153e15 213 100
JongYongPark 0:488aa8153e15 214 1k
JongYongPark 0:488aa8153e15 215 2.2k
JongYongPark 0:488aa8153e15 216 4.7k
JongYongPark 0:488aa8153e15 217 5
JongYongPark 0:488aa8153e15 218 8.2k
JongYongPark 0:488aa8153e15 219 10k
JongYongPark 0:488aa8153e15 220 12k
JongYongPark 0:488aa8153e15 221 27k
JongYongPark 0:488aa8153e15 222 18k
JongYongPark 0:488aa8153e15 223 100k
JongYongPark 0:488aa8153e15 224 470k
JongYongPark 0:488aa8153e15 225 220k
JongYongPark 0:488aa8153e15 226 1M
JongYongPark 0:488aa8153e15 227
JongYongPark 0:488aa8153e15 228 가변저항
JongYongPark 0:488aa8153e15 229 ---------
JongYongPark 0:488aa8153e15 230 10k
JongYongPark 0:488aa8153e15 231
JongYongPark 0:488aa8153e15 232 MOSFET
JongYongPark 0:488aa8153e15 233 ---------
JongYongPark 0:488aa8153e15 234 IRLR3715ZPBF - n channel
JongYongPark 0:488aa8153e15 235
JongYongPark 0:488aa8153e15 236
JongYongPark 0:488aa8153e15 237 다이오드
JongYongPark 0:488aa8153e15 238 제너다이오드
JongYongPark 0:488aa8153e15 239
JongYongPark 0:488aa8153e15 240
JongYongPark 0:488aa8153e15 241
JongYongPark 0:488aa8153e15 242 캐패시터
JongYongPark 0:488aa8153e15 243 ----------
JongYongPark 0:488aa8153e15 244 5.6p
JongYongPark 0:488aa8153e15 245 100n
JongYongPark 0:488aa8153e15 246 0.1u
JongYongPark 0:488aa8153e15 247
JongYongPark 0:488aa8153e15 248
JongYongPark 0:488aa8153e15 249
JongYongPark 0:488aa8153e15 250 트랜지스터
JongYongPark 0:488aa8153e15 251 -----------
JongYongPark 0:488aa8153e15 252 bc547
JongYongPark 0:488aa8153e15 253 2N2222
JongYongPark 0:488aa8153e15 254 BC547A
JongYongPark 0:488aa8153e15 255
JongYongPark 0:488aa8153e15 256 PD
JongYongPark 0:488aa8153e15 257 ---------
JongYongPark 0:488aa8153e15 258 BPW32
JongYongPark 0:488aa8153e15 259 BPW21R
JongYongPark 0:488aa8153e15 260
JongYongPark 0:488aa8153e15 261 AGC
JongYongPark 0:488aa8153e15 262 ---------
JongYongPark 0:488aa8153e15 263 TL026CD
JongYongPark 0:488aa8153e15 264
JongYongPark 0:488aa8153e15 265 OPAMP
JongYongPark 0:488aa8153e15 266 ---------
JongYongPark 0:488aa8153e15 267 UA741CD
JongYongPark 0:488aa8153e15 268 741
JongYongPark 0:488aa8153e15 269 UA471P
JongYongPark 0:488aa8153e15 270 LM158
JongYongPark 0:488aa8153e15 271 LM358N
JongYongPark 0:488aa8153e15 272 TL082
JongYongPark 0:488aa8153e15 273 #endif
JongYongPark 0:488aa8153e15 274