Tu Hoang
/
Test_nucleo_MCUUU_EEPROMTEST
EEPROMTEST
Fork of Test_nucleo_MCUUU by
main.cpp@15:44d291c21362, 2018-05-23 (annotated)
- Committer:
- MockyBirdTwo
- Date:
- Wed May 23 09:19:46 2018 +0000
- Revision:
- 15:44d291c21362
- Parent:
- 14:be6538b80545
- Child:
- 16:c998931f8395
EEPROM werkt
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
xorjoep | 0:952479e15354 | 1 | #include "mbed.h" // Include files and define parameters. |
xorjoep | 0:952479e15354 | 2 | #include "Adafruit_ADS1015.h" |
MockyBirdTwo | 7:65325c237ac5 | 3 | #include <vector> |
MockyBirdTwo | 9:cc559f905411 | 4 | #include <string> |
MockyBirdTwo | 15:44d291c21362 | 5 | |
MockyBirdTwo | 9:cc559f905411 | 6 | using namespace std; |
xorjoep | 0:952479e15354 | 7 | |
MockyBirdTwo | 9:cc559f905411 | 8 | I2C i2c(PB_9, PB_8); // I2C for sensorplate. |
MockyBirdTwo | 9:cc559f905411 | 9 | Adafruit_ADS1115 piezo_resistive_adc1(&i2c, 0x48); // i2c pins, i2c address. |
MockyBirdTwo | 9:cc559f905411 | 10 | Adafruit_ADS1115 piezo_resistive_adc2(&i2c, 0x49); // i2c pins, i2c address. |
MockyBirdTwo | 9:cc559f905411 | 11 | Adafruit_ADS1115 piezo_electric_adc(&i2c, 0x4B); // i2c pins, i2c address. |
MockyBirdTwo | 14:be6538b80545 | 12 | |
MockyBirdTwo | 9:cc559f905411 | 13 | |
xorjoep | 0:952479e15354 | 14 | Serial usb_serial(SERIAL_TX, SERIAL_RX); // tx, rx |
xorjoep | 0:952479e15354 | 15 | |
xorjoep | 0:952479e15354 | 16 | int i2c__frequency = 100000; // I2C Frequency. |
xorjoep | 0:952479e15354 | 17 | int baud_rate = 115200; // Baud rate. |
MockyBirdTwo | 14:be6538b80545 | 18 | const int EEPROM_adr=0xA0 ;//8Bit address for I2C to EEPROM |
xorjoep | 4:fd10d8609295 | 19 | Timer timer; |
xorjoep | 4:fd10d8609295 | 20 | |
MockyBirdTwo | 7:65325c237ac5 | 21 | // array to save sensor data |
MockyBirdTwo | 3:efb3a5b4bc9e | 22 | |
xorjoep | 0:952479e15354 | 23 | DigitalOut myled(LED1); |
MockyBirdTwo | 3:efb3a5b4bc9e | 24 | |
MockyBirdTwo | 8:2875bb7a4e67 | 25 | //Check whether any sensor values are zero |
MockyBirdTwo | 9:cc559f905411 | 26 | void checkzero (vector<int>& sendat, int size){ |
MockyBirdTwo | 9:cc559f905411 | 27 | usb_serial.printf("Zero:"); |
MockyBirdTwo | 7:65325c237ac5 | 28 | for(int i=0;i<size;++i){ |
MockyBirdTwo | 9:cc559f905411 | 29 | if(sendat[i]> -5 & sendat[i] < 5){ |
MockyBirdTwo | 9:cc559f905411 | 30 | sendat[i]=0;} |
MockyBirdTwo | 9:cc559f905411 | 31 | if(sendat[i]!= 0){ |
MockyBirdTwo | 9:cc559f905411 | 32 | usb_serial.printf("%d\n", i);} |
MockyBirdTwo | 9:cc559f905411 | 33 | else{ |
MockyBirdTwo | 9:cc559f905411 | 34 | usb_serial.printf("%d\n", i);} |
MockyBirdTwo | 7:65325c237ac5 | 35 | } |
MockyBirdTwo | 7:65325c237ac5 | 36 | } |
MockyBirdTwo | 12:c0a99de7c6d3 | 37 | //EEPROM |
MockyBirdTwo | 12:c0a99de7c6d3 | 38 | // Device Code Chip Enable RW |
MockyBirdTwo | 12:c0a99de7c6d3 | 39 | //Bit b7 b6 b5 b4 b3 b2 b1 b0 |
MockyBirdTwo | 12:c0a99de7c6d3 | 40 | //Device Select 1 0 1 0 E2 E1 E0 RW |
MockyBirdTwo | 12:c0a99de7c6d3 | 41 | // E0,E1 and E2 are to identify device |
MockyBirdTwo | 9:cc559f905411 | 42 | //Writing EEPROM through I2C |
MockyBirdTwo | 15:44d291c21362 | 43 | void EEPROM_ready(){ |
MockyBirdTwo | 14:be6538b80545 | 44 | int ack; |
MockyBirdTwo | 15:44d291c21362 | 45 | uint8_t waddr[2]; |
MockyBirdTwo | 15:44d291c21362 | 46 | waddr[0] = 0; |
MockyBirdTwo | 15:44d291c21362 | 47 | // Wait end of write |
MockyBirdTwo | 15:44d291c21362 | 48 | do { |
MockyBirdTwo | 15:44d291c21362 | 49 | ack = i2c.write(EEPROM_adr,(char *)waddr,0); |
MockyBirdTwo | 15:44d291c21362 | 50 | } while(ack != 0); |
MockyBirdTwo | 9:cc559f905411 | 51 | } |
MockyBirdTwo | 8:2875bb7a4e67 | 52 | |
MockyBirdTwo | 15:44d291c21362 | 53 | void EEPROM_write(uint32_t Wreg, int8_t EEPROM_dat){ |
MockyBirdTwo | 15:44d291c21362 | 54 | int ack; |
MockyBirdTwo | 15:44d291c21362 | 55 | uint8_t cmd[3]; |
MockyBirdTwo | 15:44d291c21362 | 56 | cmd[0] = (uint8_t) (Wreg >> 8); //Address MSB |
MockyBirdTwo | 15:44d291c21362 | 57 | cmd[1] = (uint8_t) Wreg; //Address LSB |
MockyBirdTwo | 15:44d291c21362 | 58 | cmd[2] = (uint8_t) EEPROM_dat; //Data |
MockyBirdTwo | 15:44d291c21362 | 59 | |
MockyBirdTwo | 15:44d291c21362 | 60 | ack=i2c.write(EEPROM_adr,(char*)cmd,sizeof(cmd)); |
MockyBirdTwo | 15:44d291c21362 | 61 | if(ack != 0) { |
MockyBirdTwo | 15:44d291c21362 | 62 | usb_serial.printf("ERRORwrite\r\n"); |
MockyBirdTwo | 15:44d291c21362 | 63 | } |
MockyBirdTwo | 15:44d291c21362 | 64 | // Wait end of write |
MockyBirdTwo | 15:44d291c21362 | 65 | EEPROM_ready(); |
MockyBirdTwo | 15:44d291c21362 | 66 | } |
MockyBirdTwo | 15:44d291c21362 | 67 | |
MockyBirdTwo | 15:44d291c21362 | 68 | void EEPROM_read(uint32_t Wreg, int8_t& EEPROM_dat){ |
MockyBirdTwo | 15:44d291c21362 | 69 | int ack; |
MockyBirdTwo | 15:44d291c21362 | 70 | uint8_t cmd[2]; |
MockyBirdTwo | 15:44d291c21362 | 71 | |
MockyBirdTwo | 15:44d291c21362 | 72 | cmd[0] = (uint8_t) (Wreg >> 8); |
MockyBirdTwo | 15:44d291c21362 | 73 | cmd[1] = (uint8_t) Wreg; |
MockyBirdTwo | 15:44d291c21362 | 74 | ack = i2c.write(EEPROM_adr,(char*)cmd,2,true); |
MockyBirdTwo | 15:44d291c21362 | 75 | if(ack != 0) { |
MockyBirdTwo | 15:44d291c21362 | 76 | usb_serial.printf("ERRORfakewrite\r\n"); |
MockyBirdTwo | 15:44d291c21362 | 77 | } |
MockyBirdTwo | 15:44d291c21362 | 78 | ack=i2c.read(EEPROM_adr,(char*)&EEPROM_dat,sizeof(EEPROM_dat)); |
MockyBirdTwo | 15:44d291c21362 | 79 | if(ack != 0) { |
MockyBirdTwo | 15:44d291c21362 | 80 | usb_serial.printf("ERRORread\r\n"); |
MockyBirdTwo | 15:44d291c21362 | 81 | } |
MockyBirdTwo | 15:44d291c21362 | 82 | } |
MockyBirdTwo | 14:be6538b80545 | 83 | |
xorjoep | 0:952479e15354 | 84 | int main(){ |
MockyBirdTwo | 14:be6538b80545 | 85 | |
MockyBirdTwo | 9:cc559f905411 | 86 | i2c.frequency(i2c__frequency); // Set frequency for i2c connection to sensorplate (variable is declared in config part). |
MockyBirdTwo | 15:44d291c21362 | 87 | usb_serial.baud(baud_rate); // Set serial USB connection baud rate (variable is declared in config part). |
MockyBirdTwo | 14:be6538b80545 | 88 | |
MockyBirdTwo | 14:be6538b80545 | 89 | // vector<int> S_data(8); |
MockyBirdTwo | 14:be6538b80545 | 90 | |
MockyBirdTwo | 15:44d291c21362 | 91 | uint32_t Wreg= 10; |
MockyBirdTwo | 15:44d291c21362 | 92 | int8_t EEPROM_dat=56; |
MockyBirdTwo | 15:44d291c21362 | 93 | int8_t result=0; |
MockyBirdTwo | 15:44d291c21362 | 94 | |
MockyBirdTwo | 15:44d291c21362 | 95 | usb_serial.printf("Startooo\r\n"); |
MockyBirdTwo | 15:44d291c21362 | 96 | EEPROM_write(Wreg,EEPROM_dat); |
MockyBirdTwo | 15:44d291c21362 | 97 | EEPROM_read(Wreg,result); |
MockyBirdTwo | 15:44d291c21362 | 98 | usb_serial.printf("EEPROMdata = %d\r\n", result); |
MockyBirdTwo | 14:be6538b80545 | 99 | |
MockyBirdTwo | 13:9bd3083f02d4 | 100 | // piezo_resistive_adc1.setGain(GAIN_TWOTHIRDS); // Set ranges of ADC to +/-6.144V (end is marked with #): |
MockyBirdTwo | 13:9bd3083f02d4 | 101 | // piezo_resistive_adc2.setGain(GAIN_TWOTHIRDS); |
MockyBirdTwo | 13:9bd3083f02d4 | 102 | // |
MockyBirdTwo | 13:9bd3083f02d4 | 103 | // usb_serial.printf("Gains set.\n"); |
MockyBirdTwo | 13:9bd3083f02d4 | 104 | // |
MockyBirdTwo | 13:9bd3083f02d4 | 105 | // timer.start(); |
MockyBirdTwo | 13:9bd3083f02d4 | 106 | // while(1){ |
MockyBirdTwo | 13:9bd3083f02d4 | 107 | // while(timer.read_us() < 2000){}; timer.reset(); //Set readout frequency |
MockyBirdTwo | 13:9bd3083f02d4 | 108 | // |
MockyBirdTwo | 14:be6538b80545 | 109 | |
MockyBirdTwo | 13:9bd3083f02d4 | 110 | // //usb_serial.printf("Piezo electric 0_1 dif %d \n", piezo_electric_adc.readADC_Differential_0_1()); // First PE readout. |
MockyBirdTwo | 13:9bd3083f02d4 | 111 | //// usb_serial.printf("Piezo electric 2_3 dif %d \n", piezo_electric_adc.readADC_Differential_2_3()); |
MockyBirdTwo | 13:9bd3083f02d4 | 112 | // |
MockyBirdTwo | 13:9bd3083f02d4 | 113 | // for (uint8_t t=0; t<4; ++t){ //Save sensor data into array |
MockyBirdTwo | 13:9bd3083f02d4 | 114 | // S_data[t] = (int16_t) piezo_resistive_adc1.readADC_SingleEnded(t); //Put first 4 PR sensor data into first 4 S_data array |
MockyBirdTwo | 13:9bd3083f02d4 | 115 | // S_data[t+4]= (int16_t) piezo_resistive_adc2.readADC_SingleEnded(t); //Put next 4 PR sensor data into first 4 S_data array |
MockyBirdTwo | 13:9bd3083f02d4 | 116 | // } |
MockyBirdTwo | 13:9bd3083f02d4 | 117 | // |
MockyBirdTwo | 13:9bd3083f02d4 | 118 | // checkzero(S_data,S_data.size()); //Check whether any sensor values are zero |
MockyBirdTwo | 13:9bd3083f02d4 | 119 | // for (uint8_t k = 0; k < 4; ++k) { |
MockyBirdTwo | 13:9bd3083f02d4 | 120 | // usb_serial.printf("R %d Ar %d: %d\n", k, 1, S_data[k]); // First 4 PR readout. |
MockyBirdTwo | 13:9bd3083f02d4 | 121 | // usb_serial.printf("R %d Ar %d: %d\n", k, 2, S_data[k+4]); // Next 4 PR readout. |
MockyBirdTwo | 13:9bd3083f02d4 | 122 | // } |
MockyBirdTwo | 13:9bd3083f02d4 | 123 | // |
MockyBirdTwo | 13:9bd3083f02d4 | 124 | // |
MockyBirdTwo | 13:9bd3083f02d4 | 125 | // } |
xorjoep | 0:952479e15354 | 126 | } |