Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Sterownik pompy do pieca (89c2051 + 24c02, adresowanie).

galeksiejuk 05 Lip 2008 10:25 2021 3
  • #1 05 Lip 2008 10:25
    galeksiejuk
    Poziom 10  

    Witam wszystkich.
    Podjąłem się wykonania projektu sterownika pompy wymuszającej obieg wody w centralnym. Projekt prawie już zakończyłem, zostało mi wykonać blok zapamiętujący dwie wartości (temperaturę załączenia i wyłączenia pompy). Pamięć będzie podłączona za pomocą lini P3.0 i P3.1. Procedury zapisu i odczytu rozumiem (tak mi się wydaje) lecz w jaki sposób mam to zapisać. Ta kostka pamięci ma 2k pamięci czyli 256 bajtów, tak zrozumiałem z jej dokumentacji.
    Jak powinienem się odwołać do 1 bajtu jej pamięci?

    Czy prawidłowo będzie jak napiszę:

    Code:
    I2CSTART
    

    I2CWBYTE 0
    I2CWBYTE WARTOSC1 , ACK '(np temperatura zalaczenia)

    I2CWBYTE 1
    I2CWBYTE WARTOSC2 , NACK '(np temperatura wylaczenia)

    I2CSTOP


    Z książki zrozumiałem, że podajemy najpierw adres komórki a potem wartość jaką mamy zapisać bądź odczytać. A takich wartości możemy zapisać 256 (0-255).

    Proszę o pomoc ewentualnie o prawidłowy kod z opisem co i skąd się bierze i dlaczego?
    Z góry bardzo dziękuję.

    0 3
  • #2 05 Lip 2008 11:05
    damiano713
    Poziom 14  

    Witam!

    Twój program nie będzie działać.

    Ogólnie nie zajmuje się Bascom ale mogę ci pokazać ogólne założenia transmisji z tym scalakiem.

    Każdy EEPROM I2C ma swój adres. Jest on wyznaczany na podstawie stanów na nóżkach A2...A0.
    Jeśli podpiąłeś wszystkie te nóżki do masy to adres jest: 0b1010 - stała sekwencja, A2=0, A1=0, A0=0, R/W.
    Podsumowując: 0b10100001 - adres jeśli chcemy odczytywać
    0b10100000 - adres jeśli chcemy zapisywać.

    Transmisja dla zapisu:

    Code:
    START - sekwencja startu
    
    ADRES UKŁADU I2C wraz z ACK
    ADRES KOMÓRKI PAMIĘCI wraz z ACK
    DANE DO ZAPISU (1B) wraz z ACK
    STOP - sekwencja stopu


    Transmisja dla odczytu 1B:
    Code:
    START - sekwencja startu
    
    ADRES UKŁADU I2C wraz z ACK
    ADRES KOMÓRKI PAMIĘCI DO ODCZYTU wraz z ACK
    START - sekwencja startu
    ADRES UKŁADU I2C wraz z ACK
    ODCZYT DANYCH (1B) bez ACK
    STOP


    Transmisja dla odczytu paru bajtów pod rząd:
    Code:
    START - sekwencja startu
    
    ADRES UKŁADU I2C wraz z ACK
    ADRES KOMÓRKI PAMIĘCI DO ODCZYTU wraz z ACK
    START - sekwencja startu
    ADRES UKŁADU I2C wraz z ACK
    ODCZYT DANYCH PIERWSZY BAJT wraz z ACK
    ODCZYT DANYCH DRUGI BAJT wraz z ACK
    ODCZYT DANYCH TRZECI BAJT wraz z ACK
    ODCZYT DANYCH OSTATNI BAJT bez ACK
    STOP


    Co do adresowania komórek to adresowania zaczyna się od 0 i kończy na 255 (dla małych pamięci), dla dużych podajesz współrzędne x y (każdy max 255).

    Pozdrawiam!

    0
  • #3 05 Lip 2008 16:12
    galeksiejuk
    Poziom 10  

    Dzięki, za pomoc. Już wszystko działa. Jeśli chodzi o ACK to chyba są zbędne bo nie chce się kompilować.

    Zmieściłem się na styk z kodem. Sporo jest w nim tekstu (STRING) gdyż jest on z wyświetlaczem LCD 16*1a i postanowiłem dać mu nawigację tekstową.

    Mam nadzieję że funkcja GETAD2051() będzie prawidłowo działać, jest już zaimplementowana w kodzie tylko muszę zrobić odpowiednie podłączenia.

    Jak wszystko będzie działać i zaprojektuje już płytkę to opublikuje to.

    0
  • #4 05 Lip 2008 17:12
    damiano713
    Poziom 14  

    U mnie też jest taki sprzęcik zrobiony, tylko nie do pompy a do dmuchawy.
    Kod pisany w C. Procesor 2313. Czujnik DS18B20.

    Pozdrawiam!

    0