logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.
REKLAMA
  • #1 510511
    robusta
    Poziom 15  
    Witam,
    po raz pierwszy w życiu mam potrzebę użycia zewnętrznej pamięci eeprom (szeregowej) np. typu 24c02.
    Zakładając sytuację, że mam do 90s2313 podłączony układ pcf8583 i na wyświetlaczu lcd wyświetlam aktualną godzinę i do portu d.6 mam podłączony przycisk zwierający do masy, to w sytuacji gdy zewrę ten przycisk o godzinie 12:30 a nazwałem ten przycisk kodem 1234 to w jaki sposób wysłać t takie dane do eeproma? (interesowało by mnie 8 cyfr, tzn. 12301234) - i o ile z dostępnych mi przykładów potrafiłbym chyba to zrobić to już wogóle nie wiem jak wysłać kolejne informację, że ten przycisk był zwierany kolejno o 12:31, 12:45 itd. aż do końca pamięci...
    Puki co próbuje to zrozumieć na przykładzie z helpa bascoma..., mam jednak problemy ze zrozumieniem jak w eepromie jest to zapisywane a ze względu jeszcze na moją nieangielskojęzyczność śledzę jedynie datasheety eepromów


    Dim A As Byte 
    Const Adresw = 174 'write of 2404 
    Const Adresr = 175 'read address of 2404 
    I2cstart 'generate start 
    I2cwbyte Adresw 'send slave address 
    I2cwbyte 1 'send address of EEPROM 
    I2cwbyte 3 'send a value 
    I2cstop 'generate stop 
    Waitms 10 'wait 10 mS because that is the time that the chip needs to write the data 
    
    '----------------now read the value back into the var a ------------------- 
    I2cstart 'generate start 
    I2cwbyte Adresw 'write slave address 
    I2cwbyte 1 'write address of EEPROM to read 
    I2cstart 'generate repeated start 
    I2cwbyte Adresr 'write slave address of EEPROM 
    I2crbyte A , Nack 'receive value into a. nack means last byte to receive 
    I2cstop 'generate stop 
    Print A 'print received value 
    End 
    


    Proszę, pomóżcie mi to zrozumieć....
    Pozdrawiam
    Przemo


    Przeniesiono z Programowanie Ogólne. - arnoldziq
  • REKLAMA
  • #2 510866
    BoskiDialer
    Poziom 34  
    Niewiem czego tu nierozumieć..

    I2cstart ; Rozpoczęcie transmisji
    I2cwbyte Adresw ; Wprowadzenie adresu układu do zapisu danyh
    I2cwbyte 1 ; Wprowadzenie adresu w pamięci
    I2cwbyte 3 ; Wprowadzenie wartości
    I2cstop ; Zakończenie transmisji

    I2cstart ; Rozpoczęcie transmisji
    I2cwbyte Adresw ; Wysłanie adresu do układu do zapisu danyh
    I2cwbyte 1 ; Wprowadzenie adresu w pamięci
    I2cstart ; Powtórne wytworzenie sygnału START aby nieprzerywać
    aktualnej transmisji, zmieniając kierunek przepływu danyh
    I2cwbyte Adresr ; Adresu układu do odczytu
    I2crbyte A , Nack ; Odebranie sygnału NACK... według mnie niejest to potrzebne..
    I2cstop ; Zakończenie transmisji..

    Podczas odczytu następuje I2cStart z tego względu.. że układ niewie czy master hce go odczytać czy coś do niego zapisać.. podczas tej samej
    transmisji danyh zostaje zmieniony kierunek przepływy danyh na:
    Slave->Master
    Adres Kości EEPROM jest taki: 1 0 1 0 A2 A1 A0 W/R
    Gdzie A2 odpowiada stanowi wyjścia pinu A2 w kości eeprom itd...
    W/R... 1 Oznacza zapisz a 0 oznacza odczyt
  • REKLAMA
  • #3 510998
    robusta
    Poziom 15  
    serdeczne dzięki, jednak nie wiem niestety pewnie podstawy - w jaki sposób zapisać coś kolejnego, tzn. jeśli np. chce wysłać to moje 12301234 do eeprom
    I2cstart
    I2cwbyte Adresw
    I2cwbyte 1
    I2cwbyte 3 (czy tu można wpisać 12301234) ??
    I2cstop

    i dalej - jeśli teraz chce zapisać wartość 14501234 jako następną wartość w eepromie to nie wiem jaką kolejną wolną komórkę zapisać - jak to się wylicza (czy należy to przekonwertować na hexa czy binarny i zobaczyć ile kolejnych komórek zajmuje i która następna wolna?? )

    Dzięki i pozdrawiam
    Przemo
  • #4 511463
    BoskiDialer
    Poziom 34  
    Wyraźnie ci pisze "I2cwbite" czyli zapis jednego BAJTU..
    w EEPROM'ie I2C komórka ma 8 bajtów.. jeśli chcesz zapisać jakąś
    zmienną która zajmuje więcej niż bajt to niema zmiłuj sie..
    musisz podzielić na bajty...
    np takie coś:

    dim A as word
    A = 12345
    '---------
    I2cstart
    I2cwbyte adresw
    I2cwbyte adres_komórki
    i2cwbyte hi(A)
    I2cstop
    '---------
    I2cstart
    I2cwbyte adresw
    I2cwbyte adres_komórki+1
    i2cwbyte lo(A)
    I2cstop
    '--------

    adres tesz może być wysyłany tylko w bajtah.. w kościah które mają więcej niż 256 bajtów pojemności trzeba używać adresu składającego
    sie z dwóh bajtów np

    I2cstart
    I2cwbyte adresw
    I2cwbyte Hi(adres_komórki)
    I2cwbyte Lo(adres_komórki)
    i2cwbyte dana
    I2cstop

    w odczycie sprawa ma sie podobnie.... tylko że wtedy bajty trzeba
    ze sobą połączyć....
REKLAMA