1

Dependencies:   mbed

Committer:
meric
Date:
Mon Jul 09 09:12:38 2018 +0000
Revision:
0:2a01c5a56ed1
1

Who changed what in which revision?

UserRevisionLine numberNew contents of line
meric 0:2a01c5a56ed1 1 #ifndef _I2C_H_
meric 0:2a01c5a56ed1 2 #define _I2C_H_
meric 0:2a01c5a56ed1 3 /*
meric 0:2a01c5a56ed1 4 ****************************************************************************
meric 0:2a01c5a56ed1 5 ****************************************************************************
meric 0:2a01c5a56ed1 6 ** DEVINT BİLİŞİM YAZILIM DONANIM TİC. LTD. ŞTİ. TARAFINDAN GELİŞTİRİLMİŞTİR
meric 0:2a01c5a56ed1 7 ** İzmir / TÜRKİYE
meric 0:2a01c5a56ed1 8 **
meric 0:2a01c5a56ed1 9 ** (C) 2015
meric 0:2a01c5a56ed1 10 ****************************************************************************
meric 0:2a01c5a56ed1 11 ****************************************************************************
meric 0:2a01c5a56ed1 12 *************************************************************** K A M B O **
meric 0:2a01c5a56ed1 13 */
meric 0:2a01c5a56ed1 14
meric 0:2a01c5a56ed1 15 // FONKSIYON PROTOTİPLERİ
meric 0:2a01c5a56ed1 16 void eeprom_write(uint8_t eepromtype, uint16_t memory_address, uint8_t value);
meric 0:2a01c5a56ed1 17 //******************************************************************************
meric 0:2a01c5a56ed1 18
meric 0:2a01c5a56ed1 19 uint8_t eeprom_read(uint8_t eepromtype, uint16_t memory_address);
meric 0:2a01c5a56ed1 20 //******************************************************************************
meric 0:2a01c5a56ed1 21
meric 0:2a01c5a56ed1 22 bool io_send(uint8_t first_byte, uint8_t second_byte);
meric 0:2a01c5a56ed1 23 //******************************************************************************
meric 0:2a01c5a56ed1 24
meric 0:2a01c5a56ed1 25 //
meric 0:2a01c5a56ed1 26 void eeprom_write(uint8_t eepromtype, uint16_t memory_address, uint8_t val)
meric 0:2a01c5a56ed1 27 {
meric 0:2a01c5a56ed1 28 if (eepromtype == 1) { // 1 bayt adresleme
meric 0:2a01c5a56ed1 29
meric 0:2a01c5a56ed1 30 fnode.edata2[0] = memory_address;
meric 0:2a01c5a56ed1 31 fnode.edata2[1] = val;
meric 0:2a01c5a56ed1 32 i2c.write(EEPROM_ADDRESS, fnode.edata2, 2, false);
meric 0:2a01c5a56ed1 33 wait_ms(10);
meric 0:2a01c5a56ed1 34
meric 0:2a01c5a56ed1 35 } else { // 2 bayt adresleme
meric 0:2a01c5a56ed1 36
meric 0:2a01c5a56ed1 37 fnode.edata3[0] = memory_address >> 8;
meric 0:2a01c5a56ed1 38 fnode.edata3[1] = memory_address & 0xFF;
meric 0:2a01c5a56ed1 39 fnode.edata3[2] = val;
meric 0:2a01c5a56ed1 40 i2c.write(EEPROM_ADDRESS, fnode.edata3, 3, false);
meric 0:2a01c5a56ed1 41 wait_ms(10);
meric 0:2a01c5a56ed1 42
meric 0:2a01c5a56ed1 43 }
meric 0:2a01c5a56ed1 44 }
meric 0:2a01c5a56ed1 45
meric 0:2a01c5a56ed1 46 //
meric 0:2a01c5a56ed1 47 uint8_t eeprom_read(uint8_t eepromtype, uint16_t memory_address)
meric 0:2a01c5a56ed1 48 {
meric 0:2a01c5a56ed1 49 if (eepromtype == 1) { // 1 bayt adresleme
meric 0:2a01c5a56ed1 50
meric 0:2a01c5a56ed1 51 fnode.edata = memory_address;
meric 0:2a01c5a56ed1 52 i2c.write(EEPROM_ADDRESS, &fnode.edata, 1, true);
meric 0:2a01c5a56ed1 53 wait_ms(5);
meric 0:2a01c5a56ed1 54 i2c.read(EEPROM_ADDRESS, &fnode.value, 1, false);
meric 0:2a01c5a56ed1 55 wait_ms(10);
meric 0:2a01c5a56ed1 56
meric 0:2a01c5a56ed1 57 return (uint8_t)fnode.value;
meric 0:2a01c5a56ed1 58
meric 0:2a01c5a56ed1 59 } else { // 2 bayt adresleme
meric 0:2a01c5a56ed1 60
meric 0:2a01c5a56ed1 61 fnode.edata2[0] = memory_address >> 8;
meric 0:2a01c5a56ed1 62 fnode.edata2[1] = memory_address & 0xFF;
meric 0:2a01c5a56ed1 63 i2c.write(EEPROM_ADDRESS, fnode.edata2, 2, true);
meric 0:2a01c5a56ed1 64 wait_ms(5);
meric 0:2a01c5a56ed1 65 i2c.read(EEPROM_ADDRESS, &fnode.value, 1, false);
meric 0:2a01c5a56ed1 66 wait_ms(10);
meric 0:2a01c5a56ed1 67
meric 0:2a01c5a56ed1 68 return (uint8_t)fnode.value;
meric 0:2a01c5a56ed1 69
meric 0:2a01c5a56ed1 70 }
meric 0:2a01c5a56ed1 71 }
meric 0:2a01c5a56ed1 72
meric 0:2a01c5a56ed1 73 //
meric 0:2a01c5a56ed1 74 //
meric 0:2a01c5a56ed1 75 bool io_send(uint8_t first_byte, uint8_t second_byte)
meric 0:2a01c5a56ed1 76 {
meric 0:2a01c5a56ed1 77 bool _success = false;
meric 0:2a01c5a56ed1 78
meric 0:2a01c5a56ed1 79 fnode.iodata[0] = first_byte;
meric 0:2a01c5a56ed1 80 fnode.iodata[1] = second_byte;
meric 0:2a01c5a56ed1 81
meric 0:2a01c5a56ed1 82 // Try max. 3 times
meric 0:2a01c5a56ed1 83 for (uint8_t i = 0; i < 3; i++) {
meric 0:2a01c5a56ed1 84
meric 0:2a01c5a56ed1 85 if (i2c.write(IO_EXPANDER_ADDRESS, fnode.iodata, 2) == 0) {
meric 0:2a01c5a56ed1 86 _success = true;
meric 0:2a01c5a56ed1 87 }
meric 0:2a01c5a56ed1 88
meric 0:2a01c5a56ed1 89 if (_success == true) {
meric 0:2a01c5a56ed1 90 break;
meric 0:2a01c5a56ed1 91 }
meric 0:2a01c5a56ed1 92 }
meric 0:2a01c5a56ed1 93
meric 0:2a01c5a56ed1 94 return _success;
meric 0:2a01c5a56ed1 95 }
meric 0:2a01c5a56ed1 96 #endif