Witojcie dobrzy ludzie!
Mam pewien problemik. Otoz napisalem pewien programik na atmege, ktory zapisuje na zew eepromie jakis kawalek strony internetowej, a nastepnie odczytuje to. Oto wycinek programu:
Funkcja eeprom_write zapisuje pojedynczo, nie stronami. Wszystko pieknie dziala, zero bledow, lecz w momencie kiedy odczytuje na terminalu dostaje wszystko tak jak zapisano, tylko, ze po 30 znaku zamiast moich literek wystepuje wartosc 0x04 a nastepnie 0x01.
I wszedzie tak jest, zawsze na 31 i 32 pozycji. Poniewaz eeprom ma 32 bajtowe strony to mysle sobie moze to jakies znaki konca strony w eepromie, ktore sa nadawane automatycznie. Ale niestety nie moge nigdzie o tym znalezc informacji w datasheet.
Aha... i nie jest to wina odczytu, bo jak zaczne odczytywanie nie od zera, ale np od 5 to te znaki pojawiaja sie na 26 i 27 pozycji.
Orientujecie sie o co moze chodzic?
Pozdrawiam!
Proszę poprawić pisownię!
Robak
Mam pewien problemik. Otoz napisalem pewien programik na atmege, ktory zapisuje na zew eepromie jakis kawalek strony internetowej, a nastepnie odczytuje to. Oto wycinek programu:
int main(void)
{
char *tekst = PSTR("<html><!-- <img src=\"star.png\" width=\"15\" height=\"15\" alt=\"\"> --><head><META NAME=\"konwerter\" CONTENT=\"Ogonki97 1.3\"><META HTTP-EQUIV=\"content-type\" CONTENT=\"text/html; CHARSET=windows-1250\"><title>COStAM</title><link rel=\"shortcut icon\" href=\"favicon.ico\"><style type=\"text/css\"></style>");
...
uint16_t adreso = 0;
TWBR = 32;
TWSR = 0;
TWCR = (1 << TWINT) | (1 << TWEN);
...
while(1)
{
while((znak = pgm_read_byte(tekst++))){
kod_bledu = eeprom_write(EEPROM1, adreso++, &znak);
if(kod_bledu != 1) {send_txt("\n Eeprom 1 Blad zapisu!!"); send_data(kod_bledu);break;}
}
_delay_ms(500);
adreso = 0;
for(int i=0; i<1000; i++){
kod_bledu = eeprom_read(EEPROM1,adreso+i, &znak);
if(kod_bledu != 1) {send_txt("\n Eeprom 1 Blad odczytu!!"); send_data(kod_bledu);}
else {send_data(znak);}
}
while(1){
PORTB = 0x00;
_delay_ms(1000);
PORTB = 0x01;
_delay_ms(1000);
}
}
}
Funkcja eeprom_write zapisuje pojedynczo, nie stronami. Wszystko pieknie dziala, zero bledow, lecz w momencie kiedy odczytuje na terminalu dostaje wszystko tak jak zapisano, tylko, ze po 30 znaku zamiast moich literek wystepuje wartosc 0x04 a nastepnie 0x01.
I wszedzie tak jest, zawsze na 31 i 32 pozycji. Poniewaz eeprom ma 32 bajtowe strony to mysle sobie moze to jakies znaki konca strony w eepromie, ktore sa nadawane automatycznie. Ale niestety nie moge nigdzie o tym znalezc informacji w datasheet.
Aha... i nie jest to wina odczytu, bo jak zaczne odczytywanie nie od zera, ale np od 5 to te znaki pojawiaja sie na 26 i 27 pozycji.
Orientujecie sie o co moze chodzic?
Pozdrawiam!
Proszę poprawić pisownię!
Robak