//---------------------------------------------- // test cteni a zapisu do EEPROM void test_eeprom(void) { zobraz_text(4); // "EEPro" randomSeed(millis()); byte pomprom1; byte pomprom2; for (byte i = 0; i < 5 ; i++) // 5 pokusu o cteni a zapis na ruzna mista eeprom { pomprom1 = EEPROM_read(10000 + (i * 20000UL)); // precte puvodni hodnotu Serial.print(10000 + (i * 20000UL)); // adresa Serial.print(" ... R:"); Serial.print(prednuly(pomprom1,3)); // puvodni hodnota pomprom2 = pomprom1; while (pomprom1 == pomprom2) // vymysli nahodne cislo, ktere je jine nez puvodni { pomprom2 = random(0,256); } Serial.print(" ... W:"); Serial.print(prednuly(pomprom2,3)); // zobrazi ho EEPROM_write(10000 + (i * 20000UL),pomprom2); // a zapise pomprom2 = EEPROM_read(10000 + (i * 20000UL)); // pokusi se ho precist Serial.print(" ... R:"); Serial.print(prednuly(pomprom2,3)); EEPROM_write(10000 + (i * 20000UL),pomprom1); // zapise puvodni Serial.print(" ... W:"); Serial.print(prednuly(pomprom1,3)); pomprom2 = EEPROM_read(10000 + (i * 20000UL)); // a pokusi se ho precist Serial.print(" ... R:"); Serial.println(prednuly(pomprom2,3)); } } //---------------------------------------------- //---------------------------------------------- // zapis jednoho bajtu do externi EEPROM void EEPROM_write(unsigned long adresa, byte data) { if (adresa > 65535UL) // pro adresy vetsi nez 65535 se meni I2C adresy EEPROM { adresa = adresa & 0xFFFF; I2C_ADDR = I2C_ADDR_EEPROM_RW_1; } else { I2C_ADDR = I2C_ADDR_EEPROM_RW_0; } delay(5); Wire.beginTransmission(I2C_ADDR); // zacatek komunikace s EEPROM Wire.write(byte(adresa >> 8)); // MSB z adresy Wire.write(byte(adresa % 256)); // LSB z adresy delay(1); Wire.write(data); // ulozeni hodnoty byte err = Wire.endTransmission(); // konec komunikace if (err > 0) Serial.println("I2C err"); delay(5); } //---------------------------------------------- //---------------------------------------------- // doplneni nul pred cislo odesilane do serioveho monitoru (pouziti ve vypisu EEPROM) unsigned int prednuly(unsigned int vstupni_cislo, byte pocet_mist) { byte puvodni_sirka = 0; unsigned int pomprom = vstupni_cislo; if (pomprom == 0) puvodni_sirka = 1; while (pomprom > 0) { pomprom = pomprom / 10; puvodni_sirka ++; } if (pocet_mist > puvodni_sirka) { for (byte i = 0 ; i < pocet_mist - puvodni_sirka ; i++) { Serial.print('0'); } } return vstupni_cislo; } //---------------------------------------------- //---------------------------------------------- // cteni 1 bajtu z externi EEPROM byte EEPROM_read(unsigned long addr) { if (addr > 65535UL) // pro adresy vetsi nez 65535 se meni I2C adresy EEPROM { addr = addr & 0xFFFF; I2C_ADDR = I2C_ADDR_EEPROM_RW_1; } else { I2C_ADDR = I2C_ADDR_EEPROM_RW_0; } delayMicroseconds(7); Wire.beginTransmission(I2C_ADDR); // zacatek komunikace s EEPROM Wire.write(byte(addr >> 8)); // MSB z adresy Wire.write(byte(addr % 256)); // LSB z adresy byte err = Wire.endTransmission(); // konec komunikace if (err > 0) Serial.println("I2C err"); delayMicroseconds(2); Wire.requestFrom(I2C_ADDR, 1); return Wire.read(); } //----------------------------------------------