1

Dependencies:   mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers i2c.h Source File

i2c.h

00001 #ifndef _I2C_H_
00002 #define _I2C_H_
00003 /*
00004     ****************************************************************************
00005     ****************************************************************************
00006     ** DEVINT BİLİŞİM YAZILIM DONANIM TİC. LTD. ŞTİ. TARAFINDAN GELİŞTİRİLMİŞTİR
00007     ** İzmir / TÜRKİYE
00008     **
00009     ** (C) 2015
00010     ****************************************************************************
00011     ****************************************************************************
00012     *************************************************************** K A M B O ** 
00013 */
00014 
00015 // FONKSIYON PROTOTİPLERİ
00016 void eeprom_write(uint8_t eepromtype, uint16_t memory_address, uint8_t value);
00017 //******************************************************************************
00018 
00019 uint8_t eeprom_read(uint8_t eepromtype, uint16_t memory_address);
00020 //******************************************************************************
00021 
00022 bool io_send(uint8_t first_byte, uint8_t second_byte);
00023 //******************************************************************************
00024 
00025 //
00026 void eeprom_write(uint8_t eepromtype, uint16_t memory_address, uint8_t val)
00027 {
00028     if (eepromtype == 1) {                          // 1 bayt adresleme
00029     
00030         fnode.edata2[0] = memory_address;
00031         fnode.edata2[1] = val;
00032         i2c.write(EEPROM_ADDRESS, fnode.edata2, 2, false);
00033         wait_ms(10);
00034 
00035     } else {                                        // 2 bayt adresleme
00036     
00037         fnode.edata3[0] = memory_address >> 8;
00038         fnode.edata3[1] = memory_address & 0xFF;
00039         fnode.edata3[2] = val;
00040         i2c.write(EEPROM_ADDRESS, fnode.edata3, 3, false);
00041         wait_ms(10);
00042         
00043     }
00044 }
00045 
00046 //
00047 uint8_t eeprom_read(uint8_t eepromtype, uint16_t memory_address)
00048 {
00049     if (eepromtype == 1) {                          // 1 bayt adresleme
00050     
00051         fnode.edata = memory_address;
00052         i2c.write(EEPROM_ADDRESS, &fnode.edata, 1, true);
00053         wait_ms(5);
00054         i2c.read(EEPROM_ADDRESS, &fnode.value, 1, false);
00055         wait_ms(10);
00056         
00057         return (uint8_t)fnode.value;
00058 
00059     } else {                                        // 2 bayt adresleme
00060     
00061         fnode.edata2[0] = memory_address >> 8;
00062         fnode.edata2[1] = memory_address & 0xFF;
00063         i2c.write(EEPROM_ADDRESS, fnode.edata2, 2, true);
00064         wait_ms(5);
00065         i2c.read(EEPROM_ADDRESS, &fnode.value, 1, false);
00066         wait_ms(10);
00067 
00068         return (uint8_t)fnode.value;
00069         
00070     }
00071 }
00072 
00073 //
00074 //
00075 bool io_send(uint8_t first_byte, uint8_t second_byte)
00076 {
00077     bool _success = false;
00078 
00079     fnode.iodata[0] = first_byte;
00080     fnode.iodata[1] = second_byte;
00081 
00082     // Try max. 3 times
00083     for (uint8_t i = 0; i < 3; i++) {
00084 
00085         if (i2c.write(IO_EXPANDER_ADDRESS, fnode.iodata, 2) == 0) {
00086             _success = true;
00087         }
00088 
00089         if (_success == true) {
00090             break;
00091         }
00092     }
00093 
00094     return _success;
00095 }
00096 #endif