Prosím o radu ohledně zápisu a následného čtení dat z externí EEPROM 24LC512.
Níže uvedený kod jsem ořezal pro přehlednost na minimum.
V konečném výsledku to má fungovat tak,že na každou 20-tou adresu ukládám 19 znaků.
Jde mi o to proč, když takovýmto způsobem ukládám do paměti data,jde tedy o 19 znaků,
tak na adrese 100 je vše ještě v pořádku,ale od adresy 110 mi znaky od konce pustupně začínají chybět.
Můžete poradit kde mám chybu,resp. jak jí napravit???
Děkuji
M.
V tomto konkrétním příkladě mi chybí na konci 6 znaků....
Kód: Vybrat vše
#include <Wire.h>
// definování adresy EEPROM paměti,
#define eeprom 0x50
// vytvoření proměnné pro uložení zprávy do pole znaků
char zpravaChar[19];
void setup() {
// zahájení komunikace po sériové lince rychlostí 9600 baud
Serial.begin(9600);
// zahájení komunikace po sběrnici I2C
Wire.begin();
//ukázková zpráva
char zprava[19] = "ID01O1R319022018560";
// zapsání vytvořené zprávy na zařízení eeprom, od adresy 115,
// data z proměnné "zprava" o velikosti proměnné "zprava"
eeprom_zapis_zpravu(eeprom, 115, zprava, sizeof(zprava));
// krátká pauza po zápise
delay(10);
Serial.print("Cteni od adresy 115: ");
// načtení zprávy ze zařízení eeprom, od adresy 115,
// data uložíme do proměnné "zpravaChar" o velikosti proměnné "zpravaChar"
eeprom_precti_zpravu(eeprom, 115, zpravaChar, sizeof(zpravaChar));
// vytištění celé zprávy po sériové lince
Serial.print(zpravaChar);
Serial.println(" ");
}
void loop() {
}
// podprogram pro zapsání zprávy
void eeprom_zapis_zpravu( int adresaZarizeni, unsigned int adresaUlozeniZpravy, byte* data, byte delkaDat ) {
Wire.beginTransmission(adresaZarizeni);
Wire.write((int)(adresaUlozeniZpravy >> 8)); // MSB
Wire.write((int)(adresaUlozeniZpravy & 0xFF)); // LSB
byte c;
for ( c = 0; c < delkaDat; c++)
Wire.write(data[c]);
Wire.endTransmission();
}
// podprogram pro přečtení zprávy
void eeprom_precti_zpravu( int adresaZarizeni, unsigned int adresaCteni, byte *buffer, int delkaDat) {
Wire.beginTransmission(adresaZarizeni);
Wire.write((int)(adresaCteni >> 8)); // MSB
Wire.write((int)(adresaCteni & 0xFF)); // LSB
Wire.endTransmission();
Wire.requestFrom(adresaZarizeni,delkaDat);
int c = 0;
for ( c = 0; c < delkaDat; c++ )
if (Wire.available()) buffer[c] = Wire.read();
}