logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Jak zapisać dane do pamięci EEPROM AT24C08 przez I2C?

MARIO159 10 Kwi 2004 18:40 1605 6
REKLAMA
  • #1 589608
    MARIO159
    Poziom 12  
    Posty: 61
    Pomógł: 1
    czytałem już kilka postów na ten temat lecz wszystkie odnoszą się do bascoma. Mianowicie niemoge zapisać do pamięci eeprom swojej danej. zapisuje do at24c08. Wiem ze aby zapisać musze podać adres 16 bitowy po podaniu adresu kości. Tylko moje wątpliwości tyczą się tego jak mam to zrobić. format i2c przewiduje wysłanie 8 bitów + potwierdzenia. Czy mam utworzyć funkcje która bedzie przesyłać 16 bitów+potwierdzenie?
  • REKLAMA
  • #2 589962
    marmur99
    Poziom 17  
    Posty: 285
    Pomógł: 5
    Ocena: 4
    Potwierdzenie po każdych 8 bitach.

    Marmur99
  • REKLAMA
  • #3 590095
    Nemo
    Poziom 31  
    Posty: 2078
    Pomógł: 9
    Ocena: 72
    Układ 24C08 ma 1kB EEPROM pogrupowany w 4 strony po 256 bajtów każda. Adresujesz tak naprawdę 4 układy 24C02. To znaczy, że każdy z nich ma swój fizyczny adres na I2C. Zobacz dokładnie w nocie katalogowej 24C08. Adresujesz tak samo, jak i 24C02 - adres układu (jednej z czterech stron), potem 8 bitowy adres i możesz zapisywać. Podczas odczytu dokładnie tak samo (poza oczywistymi różnicami...).
    Dopiero układy od 24C32 do 24C512 adresowane są 16 bitowo (dwa razy po 8 bitów). Po szczegóły odsyłam do not katalogowych.
    Pozdrawiam.
  • #4 590188
    MARIO159
    Poziom 12  
    Posty: 61
    Pomógł: 1
    dzięki znalazłem note i masz rację następnym razem najpierw sięgne po note:)
  • REKLAMA
  • #5 590644
    Ziele6
    Poziom 14  
    Posty: 168
    Ocena: 3
    Swego czasu tez mialem z tym problemy ale wymyśliłaem coś takiego. Na początek trzeba podać początkowy adres.
    
    Sub Read_eeprom(byval Adres As Word , Dana As Byte)
    
        Adres_zapis2 = Adres_zapis
        Adres_odczyt2 = Adres_odczyt
        Adr = Adres
        If Adres > 255 Then
          Adr = Adres - 256
          Adres_zapis2 = Adres_zapis + 2
          Adres_odczyt2 = Adres_odczyt + 2
        End If
        If Adres > 511 Then
          Adr = Adres - 512
          Adres_zapis2 = Adres_zapis + 4
          Adres_odczyt2 = Adres_odczyt + 4
    
        End If
        If Adres > 767 Then
          Adr = Adres - 768
          Adres_zapis2 = Adres_zapis + 6
          Adres_odczyt2 = Adres_odczyt + 6
    
        End If
        If Adres > 1023 Then
          Adr = Adres - 1024
          Adres_zapis2 = Adres_zapis + 8
          Adres_odczyt2 = Adres_odczyt + 8
    
        End If
        If Adres > 1279 Then
          Adr = Adres - 1280
          Adres_zapis2 = Adres_zapis + 10
          Adres_odczyt2 = Adres_odczyt + 10
    
        End If
        If Adres > 1535 Then
          Adr = Adres - 1536
          Adres_zapis2 = Adres_zapis + 12
          Adres_odczyt2 = Adres_odczyt + 12
    
        End If
        If Adres > 1791 Then
          Adr = Adres - 1792
          Adres_zapis2 = Adres_zapis + 14
          Adres_odczyt2 = Adres_odczyt + 14
    
        End If
        I2cstart
        I2cwbyte Adres_zapis2
        I2cwbyte Adr
        I2cstart
        I2cwbyte Adres_odczyt2
        I2crbyte Dana , Nack
        I2cstop
    End Sub
    


    Działa dobrze ale czy ma ktos moze sposób mniejszy objętościowo?
  • REKLAMA
  • #7 594077
    slawko_k
    Poziom 35  
    Posty: 2928
    Pomógł: 253
    Ocena: 235
    Dokładne dane na temat obsługi pamięci znajdziesz w każdej dokumentacji producenta (pdf)
    pozdrawiam

Podsumowanie tematu

✨ Pamięć EEPROM AT24C08 o pojemności 1 kB jest podzielona na 4 strony po 256 bajtów, co odpowiada adresowaniu czterech układów 24C02 z różnymi fizycznymi adresami I2C. W przeciwieństwie do większych układów (24C32 i wyższych), AT24C08 używa 8-bitowego adresu wewnętrznego, a nie 16-bitowego. Adresowanie polega na podaniu adresu układu (w zależności od strony) oraz 8-bitowego adresu pamięci wewnętrznej. Protokół I2C wymaga potwierdzenia (ACK) po każdej przesłanej paczce 8 bitów. W praktyce oznacza to, że nie przesyła się 16-bitowego adresu jako jednego ciągu, lecz adresowanie odbywa się przez odpowiednie ustawienie adresu układu i 8-bitowego offsetu. Przykładowa implementacja funkcji obsługującej zapis uwzględnia przesunięcia adresów w zależności od zakresu, aby poprawnie adresować poszczególne strony pamięci. Dokumentacja producenta jest kluczowa dla prawidłowego zrozumienia i implementacji komunikacji z pamięcią AT24C08.
Podsumowanie wygenerowane przez AI na podstawie treści dyskusji.
REKLAMA