publish

Dependencies:   mbed SDFileSystem

Committer:
rempig
Date:
Wed Jul 22 10:39:55 2020 +0000
Revision:
0:b5e10c69bd3e
commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
rempig 0:b5e10c69bd3e 1 // Wire Master Reader
rempig 0:b5e10c69bd3e 2 // by Ronan S. Empig
rempig 0:b5e10c69bd3e 3 #include "mbed.h"
rempig 0:b5e10c69bd3e 4 #include "SDFileSystem.h"
rempig 0:b5e10c69bd3e 5
rempig 0:b5e10c69bd3e 6
rempig 0:b5e10c69bd3e 7 I2C i2c(I2C_SDA, I2C_SCL);
rempig 0:b5e10c69bd3e 8 Serial pc(SERIAL_TX, SERIAL_RX);
rempig 0:b5e10c69bd3e 9
rempig 0:b5e10c69bd3e 10 SDFileSystem sd(D11, D12, D13, D10, "sd"); // MOSI, MISO, SCK, CS
rempig 0:b5e10c69bd3e 11 FILE *fp;
rempig 0:b5e10c69bd3e 12
rempig 0:b5e10c69bd3e 13
rempig 0:b5e10c69bd3e 14 //State Machine
rempig 0:b5e10c69bd3e 15 int STATEMACHINE = 0;
rempig 0:b5e10c69bd3e 16 const int IDLESTATE = 0;
rempig 0:b5e10c69bd3e 17 const int FWVERSIONMIN = 1;
rempig 0:b5e10c69bd3e 18 const int UIBC5VENB = 2;
rempig 0:b5e10c69bd3e 19 const int UIBCDISPENB = 3;
rempig 0:b5e10c69bd3e 20 const int UIBCDISPENB2 = 4;
rempig 0:b5e10c69bd3e 21 const int UIBCAUXTOUCHENABLE = 5;
rempig 0:b5e10c69bd3e 22 const int UIBCBACKLIGHTDUTY = 6;
rempig 0:b5e10c69bd3e 23
rempig 0:b5e10c69bd3e 24 //Variables
rempig 0:b5e10c69bd3e 25 char c;
rempig 0:b5e10c69bd3e 26 int addr1 = 0;
rempig 0:b5e10c69bd3e 27 int addr2 = 0;
rempig 0:b5e10c69bd3e 28 int serbuff = 0;
rempig 0:b5e10c69bd3e 29
rempig 0:b5e10c69bd3e 30
rempig 0:b5e10c69bd3e 31 void read8080(int faddress, int flength) {
rempig 0:b5e10c69bd3e 32 pinMode(D0X, INPUT);
rempig 0:b5e10c69bd3e 33 pinMode(D1X, INPUT);
rempig 0:b5e10c69bd3e 34 pinMode(D2X, INPUT);
rempig 0:b5e10c69bd3e 35 pinMode(D3X, INPUT);
rempig 0:b5e10c69bd3e 36 pinMode(D4X, INPUT);
rempig 0:b5e10c69bd3e 37 pinMode(D5X, INPUT);
rempig 0:b5e10c69bd3e 38 pinMode(D6X, INPUT);
rempig 0:b5e10c69bd3e 39 pinMode(D7X, INPUT);
rempig 0:b5e10c69bd3e 40 digitalWrite(CSX, LOW);
rempig 0:b5e10c69bd3e 41 digitalWrite(DCX, LOW);
rempig 0:b5e10c69bd3e 42 digitalWrite(WRX, HIGH);
rempig 0:b5e10c69bd3e 43 digitalWrite(RDX, LOW);
rempig 0:b5e10c69bd3e 44 }
rempig 0:b5e10c69bd3e 45
rempig 0:b5e10c69bd3e 46 void write8080(int faddress, int flength) {
rempig 0:b5e10c69bd3e 47 pinMode(D0X, OUTPUT);
rempig 0:b5e10c69bd3e 48 pinMode(D1X, OUTPUT);
rempig 0:b5e10c69bd3e 49 pinMode(D2X, OUTPUT);
rempig 0:b5e10c69bd3e 50 pinMode(D3X, OUTPUT);
rempig 0:b5e10c69bd3e 51 pinMode(D4X, OUTPUT);
rempig 0:b5e10c69bd3e 52 pinMode(D5X, OUTPUT);
rempig 0:b5e10c69bd3e 53 pinMode(D6X, OUTPUT);
rempig 0:b5e10c69bd3e 54 pinMode(D7X, OUTPUT);
rempig 0:b5e10c69bd3e 55 STATE8080 = SIDLE;
rempig 0:b5e10c69bd3e 56
rempig 0:b5e10c69bd3e 57
rempig 0:b5e10c69bd3e 58 while (STATE8080 != SDONE) {
rempig 0:b5e10c69bd3e 59 switch (STATE8080) {
rempig 0:b5e10c69bd3e 60 case SIDLE:
rempig 0:b5e10c69bd3e 61 digitalWrite(CSX, LOW);
rempig 0:b5e10c69bd3e 62 STATE8080 = SCOMMAND;
rempig 0:b5e10c69bd3e 63 delay(100);
rempig 0:b5e10c69bd3e 64 break;
rempig 0:b5e10c69bd3e 65
rempig 0:b5e10c69bd3e 66 case SCOMMAND1:
rempig 0:b5e10c69bd3e 67 digitalWrite(DCX, LOW);
rempig 0:b5e10c69bd3e 68 digitalWrite(CSX, LOW);
rempig 0:b5e10c69bd3e 69 digitalWrite(WRX, LOW);
rempig 0:b5e10c69bd3e 70 digitalWrite(RDX, HIGH);
rempig 0:b5e10c69bd3e 71 STATE8080 = SDATA;
rempig 0:b5e10c69bd3e 72 delay(100);
rempig 0:b5e10c69bd3e 73 break;
rempig 0:b5e10c69bd3e 74
rempig 0:b5e10c69bd3e 75 case SCOMMAND2:
rempig 0:b5e10c69bd3e 76 digitalWrite(WRX, HIGH);
rempig 0:b5e10c69bd3e 77 digitalWrite(D0X, bitRead();
rempig 0:b5e10c69bd3e 78 digitalWrite(D1X, LOW);
rempig 0:b5e10c69bd3e 79 digitalWrite(D2X, LOW);
rempig 0:b5e10c69bd3e 80 digitalWrite(D3X, LOW);
rempig 0:b5e10c69bd3e 81 digitalWrite(D4X, LOW);
rempig 0:b5e10c69bd3e 82 digitalWrite(D5X, LOW);
rempig 0:b5e10c69bd3e 83 digitalWrite(D6X, LOW);
rempig 0:b5e10c69bd3e 84 digitalWrite(D7X, LOW);
rempig 0:b5e10c69bd3e 85 STATE8080 = SDATA;
rempig 0:b5e10c69bd3e 86 delay(100);
rempig 0:b5e10c69bd3e 87 break;
rempig 0:b5e10c69bd3e 88
rempig 0:b5e10c69bd3e 89 case SDATA:
rempig 0:b5e10c69bd3e 90 digitalWrite(CSX, LOW);
rempig 0:b5e10c69bd3e 91 digitalWrite(DCX, LOW);
rempig 0:b5e10c69bd3e 92 digitalWrite(CSX, LOW);
rempig 0:b5e10c69bd3e 93 digitalWrite(WRX, LOW);
rempig 0:b5e10c69bd3e 94 digitalWrite(RDX, HIGH);
rempig 0:b5e10c69bd3e 95 STATE8080 = SDONE;
rempig 0:b5e10c69bd3e 96 delay(100);
rempig 0:b5e10c69bd3e 97 break;
rempig 0:b5e10c69bd3e 98
rempig 0:b5e10c69bd3e 99 case SDONE:
rempig 0:b5e10c69bd3e 100
rempig 0:b5e10c69bd3e 101 STATE8080 = SCOMMAND;
rempig 0:b5e10c69bd3e 102 delay(100);
rempig 0:b5e10c69bd3e 103 break;
rempig 0:b5e10c69bd3e 104
rempig 0:b5e10c69bd3e 105 default:
rempig 0:b5e10c69bd3e 106
rempig 0:b5e10c69bd3e 107 break;
rempig 0:b5e10c69bd3e 108 }
rempig 0:b5e10c69bd3e 109 }
rempig 0:b5e10c69bd3e 110 }
rempig 0:b5e10c69bd3e 111
rempig 0:b5e10c69bd3e 112
rempig 0:b5e10c69bd3e 113 int main()
rempig 0:b5e10c69bd3e 114 {
rempig 0:b5e10c69bd3e 115 //char data_write[3];
rempig 0:b5e10c69bd3e 116 char data_write[3];
rempig 0:b5e10c69bd3e 117 //char data_wread[2];
rempig 0:b5e10c69bd3e 118 //char data_read[2];
rempig 0:b5e10c69bd3e 119 //char data_counter = 0;
rempig 0:b5e10c69bd3e 120
rempig 0:b5e10c69bd3e 121 pc.baud(115200);
rempig 0:b5e10c69bd3e 122
rempig 0:b5e10c69bd3e 123 while(1) {
rempig 0:b5e10c69bd3e 124 //pc.printf("LOOPING\n");
rempig 0:b5e10c69bd3e 125
rempig 0:b5e10c69bd3e 126 switch (STATEMACHINE) {
rempig 0:b5e10c69bd3e 127
rempig 0:b5e10c69bd3e 128 case IDLESTATE: //Wait for start from the computer
rempig 0:b5e10c69bd3e 129 //pc.printf("IDLE\n");
rempig 0:b5e10c69bd3e 130 addr1 = 0xAA;
rempig 0:b5e10c69bd3e 131 addr2 = 0xAA;
rempig 0:b5e10c69bd3e 132 serbuff = 0;
rempig 0:b5e10c69bd3e 133
rempig 0:b5e10c69bd3e 134 //pc.printf("GOTCHA\n");
rempig 0:b5e10c69bd3e 135 if (pc.readable() ) {
rempig 0:b5e10c69bd3e 136 c = pc.getc();
rempig 0:b5e10c69bd3e 137 if( 'r' == c ) {
rempig 0:b5e10c69bd3e 138 STATEMACHINE = FWVERSIONMIN;
rempig 0:b5e10c69bd3e 139 pc.printf("TRIGGERED\n");
rempig 0:b5e10c69bd3e 140 } else {
rempig 0:b5e10c69bd3e 141 pc.printf("NOTTRIGGERED\n");
rempig 0:b5e10c69bd3e 142 }
rempig 0:b5e10c69bd3e 143 }
rempig 0:b5e10c69bd3e 144
rempig 0:b5e10c69bd3e 145 break;
rempig 0:b5e10c69bd3e 146
rempig 0:b5e10c69bd3e 147 case FWVERSIONMIN:
rempig 0:b5e10c69bd3e 148 /* Wire.beginTransmission(addr2); // transmit to device address
rempig 0:b5e10c69bd3e 149 Wire.write(byte(0x01)); // sends control
rempig 0:b5e10c69bd3e 150 Wire.write(byte(0xFF)); // sends command
rempig 0:b5e10c69bd3e 151 error = Wire.endTransmission(); // stop transmitting
rempig 0:b5e10c69bd3e 152 wait_ms(50);
rempig 0:b5e10c69bd3e 153 Wire.requestFrom(addr2, 1);
rempig 0:b5e10c69bd3e 154 while (Wire.available()) {
rempig 0:b5e10c69bd3e 155 int c = Wire.read(); // receive a byte as character
rempig 0:b5e10c69bd3e 156 //Serial.write(c); //write data read from I2C to serial port for the software to read
rempig 0:b5e10c69bd3e 157 Serial.println(c); //write data read from I2C to serial port for the software to read
rempig 0:b5e10c69bd3e 158 }
rempig 0:b5e10c69bd3e 159 */
rempig 0:b5e10c69bd3e 160 // data_wread[0] = 0x01;
rempig 0:b5e10c69bd3e 161 // data_wread[1] = 0xFF;
rempig 0:b5e10c69bd3e 162 // data_wread[0] = 0xFF;
rempig 0:b5e10c69bd3e 163 // i2c.write(addr2, data_wread, 1, 0);
rempig 0:b5e10c69bd3e 164 // i2c.read(addr2, data_read, 1, 0);
rempig 0:b5e10c69bd3e 165 // pc.printf("Version Min: ");
rempig 0:b5e10c69bd3e 166 // pc.printf("Character: %c\n", data_read[0]);
rempig 0:b5e10c69bd3e 167
rempig 0:b5e10c69bd3e 168 STATEMACHINE = UIBC5VENB;
rempig 0:b5e10c69bd3e 169 break;
rempig 0:b5e10c69bd3e 170
rempig 0:b5e10c69bd3e 171
rempig 0:b5e10c69bd3e 172 case UIBC5VENB: //power on the panel
rempig 0:b5e10c69bd3e 173 /*
rempig 0:b5e10c69bd3e 174 Wire.beginTransmission(addr1); // transmit to device 0x2C
rempig 0:b5e10c69bd3e 175 Wire.write(byte(0x00)); // sends control
rempig 0:b5e10c69bd3e 176 Wire.write(byte(0x1E)); // sends command
rempig 0:b5e10c69bd3e 177 Wire.write(byte(0xFF)); // sends data
rempig 0:b5e10c69bd3e 178 error = Wire.endTransmission(); // stop transmitting
rempig 0:b5e10c69bd3e 179 */
rempig 0:b5e10c69bd3e 180 pc.printf("UIBC5VENB\n");
rempig 0:b5e10c69bd3e 181 data_write[0] = 0x00;
rempig 0:b5e10c69bd3e 182 data_write[1] = 0x06 << 1; //shl 0x06 with 1
rempig 0:b5e10c69bd3e 183 data_write[2] = 0xFF;
rempig 0:b5e10c69bd3e 184 // data_write[0] = 0x06;
rempig 0:b5e10c69bd3e 185 // data_write[1] = 0xFF;
rempig 0:b5e10c69bd3e 186 i2c.write(addr2, data_write, 3, 0);
rempig 0:b5e10c69bd3e 187
rempig 0:b5e10c69bd3e 188 // i2c.write(addr2, data_write, 2, 0);
rempig 0:b5e10c69bd3e 189 wait_ms(1000);
rempig 0:b5e10c69bd3e 190 STATEMACHINE = UIBCDISPENB;
rempig 0:b5e10c69bd3e 191 break;
rempig 0:b5e10c69bd3e 192
rempig 0:b5e10c69bd3e 193 case UIBCDISPENB: //get panel button address from software
rempig 0:b5e10c69bd3e 194 pc.printf("UIBCDISPENB\n");
rempig 0:b5e10c69bd3e 195 data_write[0] = 0x00;
rempig 0:b5e10c69bd3e 196 data_write[1] = 0x02 << 1; //shl 0x02 with 1
rempig 0:b5e10c69bd3e 197 data_write[2] = 0xFF;
rempig 0:b5e10c69bd3e 198 // data_write[0] = 0x02;
rempig 0:b5e10c69bd3e 199 // data_write[1] = 0xFF;
rempig 0:b5e10c69bd3e 200
rempig 0:b5e10c69bd3e 201 i2c.write(addr2, data_write, 3, 0);
rempig 0:b5e10c69bd3e 202 // i2c.write(addr2, data_write, 2, 0);
rempig 0:b5e10c69bd3e 203 wait_ms(1000);
rempig 0:b5e10c69bd3e 204 STATEMACHINE = UIBCDISPENB2;
rempig 0:b5e10c69bd3e 205
rempig 0:b5e10c69bd3e 206 break;
rempig 0:b5e10c69bd3e 207
rempig 0:b5e10c69bd3e 208 case UIBCDISPENB2:
rempig 0:b5e10c69bd3e 209 pc.printf("UIBCDISPENB2\n");
rempig 0:b5e10c69bd3e 210 data_write[0] = 0x00;
rempig 0:b5e10c69bd3e 211 data_write[1] = 0x05 << 1; //shl 0x05 with 1
rempig 0:b5e10c69bd3e 212 data_write[2] = 0xFF;
rempig 0:b5e10c69bd3e 213 // data_write[0] = 0x05;
rempig 0:b5e10c69bd3e 214 // data_write[1] = 0xFF;
rempig 0:b5e10c69bd3e 215
rempig 0:b5e10c69bd3e 216 i2c.write(addr2, data_write, 3, 0);
rempig 0:b5e10c69bd3e 217 //i2c.write(addr2, data_write, 2, 0);
rempig 0:b5e10c69bd3e 218 wait_ms(1000);
rempig 0:b5e10c69bd3e 219 STATEMACHINE = UIBCAUXTOUCHENABLE;
rempig 0:b5e10c69bd3e 220 break;
rempig 0:b5e10c69bd3e 221
rempig 0:b5e10c69bd3e 222 case UIBCAUXTOUCHENABLE:
rempig 0:b5e10c69bd3e 223 pc.printf("UIBCAUXTOUCHENABLE\n");
rempig 0:b5e10c69bd3e 224 data_write[0] = 0x00;
rempig 0:b5e10c69bd3e 225 data_write[1] = 0x07 << 1; //shl 0x07 with 1
rempig 0:b5e10c69bd3e 226 data_write[2] = 0xFF;
rempig 0:b5e10c69bd3e 227 // data_write[0] = 0x07;
rempig 0:b5e10c69bd3e 228 // data_write[1] = 0xFF;
rempig 0:b5e10c69bd3e 229
rempig 0:b5e10c69bd3e 230 i2c.write(addr2, data_write, 3, 0);
rempig 0:b5e10c69bd3e 231 // i2c.write(addr2, data_write, 2, 0);
rempig 0:b5e10c69bd3e 232 wait_ms(1000);
rempig 0:b5e10c69bd3e 233 STATEMACHINE = UIBCBACKLIGHTDUTY;
rempig 0:b5e10c69bd3e 234 break;
rempig 0:b5e10c69bd3e 235
rempig 0:b5e10c69bd3e 236 case UIBCBACKLIGHTDUTY:
rempig 0:b5e10c69bd3e 237 pc.printf("UIBCBACKLIGHTDUTY\n");
rempig 0:b5e10c69bd3e 238 data_write[0] = 0x10;
rempig 0:b5e10c69bd3e 239 data_write[1] = 0x80 << 1; //shl 0x80 with 1
rempig 0:b5e10c69bd3e 240 data_write[2] = 0xFF;
rempig 0:b5e10c69bd3e 241
rempig 0:b5e10c69bd3e 242 // data_write[0] = 0x80;
rempig 0:b5e10c69bd3e 243 // data_write[1] = 0xFF;
rempig 0:b5e10c69bd3e 244
rempig 0:b5e10c69bd3e 245 i2c.write(addr2, data_write, 3, 0);
rempig 0:b5e10c69bd3e 246 //i2c.write(addr2, data_write, 2, 0);
rempig 0:b5e10c69bd3e 247
rempig 0:b5e10c69bd3e 248 wait_ms(1000);
rempig 0:b5e10c69bd3e 249 STATEMACHINE = IDLESTATE;
rempig 0:b5e10c69bd3e 250
rempig 0:b5e10c69bd3e 251 break;
rempig 0:b5e10c69bd3e 252
rempig 0:b5e10c69bd3e 253
rempig 0:b5e10c69bd3e 254
rempig 0:b5e10c69bd3e 255 default:
rempig 0:b5e10c69bd3e 256
rempig 0:b5e10c69bd3e 257 break;
rempig 0:b5e10c69bd3e 258 }
rempig 0:b5e10c69bd3e 259 }
rempig 0:b5e10c69bd3e 260 }