Pamięc EEPROM

To forum jest dla wszystkich pasjonatów wiecznie młodych mikrokontrolerów '51. Wymiana doświadczeń i pomoc dla początkujących w pisaniu programów zarówno w C, Asemblerze jak i BASCOM. Zapraszam znawców tematu, aby pomogli wszystkim początkującym!
ODPOWIEDZ
Awatar użytkownika
grysek67
Użytkownik
Posty: 315
Rejestracja: 27 cze 2007, 6:34
Lokalizacja: Limanowa
Kontakt:

Pamięc EEPROM

Post autor: grysek67 » 12 kwie 2008, 20:16

Witam!
Jak zapisać bajt to określonej komórki w pamięci EEPROM większej niz 256 bajtów skoro wszystkie dane wysyłane przez I2C muszą byc typu BYTE?? A gdybym miał pamięć np 512 bajtów i chciałbym zapisac do np. 300 komórki??
Załączniki
HLP.jpg
Strona z HELPU o mówiąca o wysyłaniu bajtu prze I2c

Awatar użytkownika
Ertew
Użytkownik
Posty: 1418
Rejestracja: 03 lip 2005, 10:36
Lokalizacja: Leszno
Kontakt:

Post autor: Ertew » 12 kwie 2008, 21:59

Z instrukcji zamieszczonej w tym pliku (pdf) wynika, że pierwszy bajt ma postać:

Kod: Zaznacz cały

1, 0, 1, 0, A2, A1, A0, R/W
dla pamięci 128B i 256B (co oznacza 128B = 128*8b = 1Kb, 256B = 256*8b = 2Kb).
Dla pamięci 512B (4Kb) pierwszy bajt ma postać:

Kod: Zaznacz cały

1, 0, 1, 0, A2, A1, P0, R/W
Przy czym końcówka oznaczona jako A0 jest nie podłączona.
Pamięć taka ma 2 strony (po 256B), które zmienia się bitem oznaczonym jako P0 w pierwszym bajcie (adresowym).
Pamięć można traktować jak 2 pamięci (2Kb każda) z identycznie podłączonymi A2 i A1, natomiast pinem A0 połączonym w jednej z nich do + , a w drógiej do - .
Dla pamięci 8Kb mamy tylko pin A2, natomiast wyprowadzenia A1 i A0 nie są podłączone, i analogicznie mamy 4 strony pamięci do wyboru adresem.
Następna w kolejności jest ostatnia pamięć 16Kb, ponieważ w przypadku większych pamięci mamy do czynienia z dwoma bajtami wyboru adresu pamięci.

Awatar użytkownika
gwozdex
Użytkownik
Posty: 879
Rejestracja: 24 lut 2006, 10:04
Lokalizacja: Czechowice-Dziedzice
Kontakt:

Post autor: gwozdex » 13 kwie 2008, 0:02

Kod: Zaznacz cały

Sub Zap_eeprom(byval Adres As Word , Byval Dana As Byte)    'procedura zapisu danej do EEPROM
  Adr_h = High(adres)                                       'zapis do Adr_h bardziej znaczacej polowki adresu
  Adr_l = Low(adres)                                        'zapis do Adr_l mniej znaczacej polowki adresu
  I2cstart                                                  'start transmisji
  I2cwbyte Adr_w                                            'zapis adresu ukladu pamieci do zapisu
  I2cwbyte Adr_h                                            'bardziej znaczacy adres komorki pamieci
  I2cwbyte Adr_l                                            'mniej znaczacy adres komorki pamieci
  I2cwbyte Dana                                             'zapis danej
  I2cstop                                                   'koniec transmisji
  Waitms 7                                                  'opoznienie 7 ms
End Sub                                                     'koniec procedury
Powyżej masz podaną procedurę do zapisu jednej komórki do pamięci AT24C256. Jak widać adres komórki jest "podawany" w dwóch bajtach- bardziej i mniej znaczącym.

Awatar użytkownika
grysek67
Użytkownik
Posty: 315
Rejestracja: 27 cze 2007, 6:34
Lokalizacja: Limanowa
Kontakt:

Post autor: grysek67 » 13 kwie 2008, 10:23

To ile w takim razie muszą wynosic Adr_h i Adr_l gdybym chciał zapisac do 512 komórki pamięci??

[ Dodano: 2008-04-13, 11:54 ]
Aha już wiem... Wszystko jest ok :cool:
Dla komórki np. z numerem 536 zmienna Adr_h będzie wynosiła 2 (2 * 256 = 512), a zmienna Adr_l będzie 24 (536 - 512 = 24) :grin:

Serdeczne dzięki i pozdrowienia

ODPOWIEDZ