Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Elektroda.pl
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

[ATMEGA][BASCOM] problem z RTC PCF8683 i EEPROM 24C16

stozu 01 Apr 2009 01:03 3491 14
  • #1
    stozu
    Level 10  
    Witam, mam taki problem
    podłączyłem sobie równolegle na I2C zegar czasu rzeczywistego PCF8583 oraz eeprom 24C16.
    eeprom ma adres pierwszej strony 160 dla zapisu, dla odczytu 161, kolejne strony to 162/163, 164/165 itd. - łącznie 8 stron pamięci.
    rtc ma też adres 160/161 ewentualnie 162/163.
    Początkowo nie zauważyłem, bo jeden adres miałem zapisany szestnastkowo a drugi dziesiętnie.
    Napisałem sobie program, który zapisywał mi do eeproma dane.
    Teraz mam problem z zegarem, napisałem prosty program dla zegara w BASCOMIE, który wcześniej działał.
    Po prostu dane odczytywane z pcf są złe, tak jakby się nie zmieniały. i nie dizałą już jak zegar, tylko np. sekundy zmieniają się z 40-40-41-40-41 i tak w kółko. Pamięć eeprom jest podłączona równolegle/nie jestem jej w stanie dołaczyć bo jest t smd na dodatek płytka uruchomieniowa jest na gwarancji.



    Czy ktoś może wie co zrobić by "wyzerować" tego PCF-a, żeby zegar działał prawidłowo?? Adresu eeproma nie można zmienić mimo iż posiada A0,A1,A2 pozostają one niepodłączone/sterują stronami.

    Rezystory podciągajace oczywiście mam.

    Pomocy!
  • #2
    arturt134
    Level 27  
    Na jednej szynie to działać nie będzie. Chyba że dasz dodatkowe bramkowanie na linii SCL, tak żeby zrobić coś na kształt Chip select. Prościej jednak będzie poszukać EEPROM-u innego producenta, który będzie miał inny adres.
  • #3
    slawko_k
    Level 34  
    Quote:

    Prościej jednak będzie poszukać EEPROM-u innego producenta, który będzie miał inny adres.

    albo 24C64 lub wyższą która jest zdecydowanie łatwiejsza w obsłudze bo nie ma stron i pracuje na 1 adresie (1 parze adresów)
  • #4
    stozu
    Level 10  
    przeglądnąłem wszystkie noty, i chyba zastosuję AT24C256 kosztuje ok 5zł, adres ma 15bitowy, 512 stron po 64 bajty, i pierwszą część adresu mogę ustawić inną niż 160 np. 166
  • #5
    wicy
    Level 22  
    stozu wrote:
    Witam, mam taki problem

    Miałem dokłądnie identyczny problem.
    Quote:
    Pamięć eeprom jest podłączona równolegle/nie jestem jej w stanie dołaczyć bo jest t smd na dodatek płytka uruchomieniowa jest na gwarancji.

    Co to za moduł? Podaj namiary. Może mamy to samo? :)
  • #6
    Romantello
    Level 14  
    Witam
    Końcówki A0,A1,A2 służa do ustalania adresu na szynie I2C - w Twoim przypadku pamięć zostaw na adresie 160,161 a w zegarze przełącz końcówke A0 do 5V i jego adres zmieni się na 162,163 - to wszystko.
    Wielkość pamięci nie ma tu znaczenia - możesz równie dobrze zastosować 24C16 jak 24C256. Podłączając koncówki adresowe pamięci tak by adres się nie powtarzał, możesz używać do 14 takich pamięci w systemie procesorowych ! ew 13 i zegar.
    Pozdrawiam
  • #7
    slawko_k
    Level 34  
    oj w błędzie jesteś
    przeglądnij pdf'y.
  • #8
    Romantello
    Level 14  
    Faktycznie slawko_k rozpędziłem się.
    Sorki za wprowadzenie w błąd.

    Stosowałem dotychczas tylko at24c128 oraz at24c256 z uwagi na niską cene i z nimi nie ma problemów - mają 2 linie zmiany adresu.
    Radośnie przyjąłem że 3 linie adresowe dają jeszcze większe możliwości ale okazało się że dotyczy to tylko układów at24c01a i at24c02.
    Pozostałe rzeczywiście mają już stronicowanie pamięci a wersja 24c16 i 24c16a nawet brak mozliwości zmiany adresu.
  • #9
    janbernat
    Level 38  
    "płytka uruchomieniowa jest na gwarancji."???
    To na to jest jakaś gwarancja???
    Przecież w taką płytkę to natychmiast "wjeżdżam" lutownicą i zmieniam co chcę.
    Taki EEPROM dość łatwo wylutować normalną lutownicą.
  • #10
    stozu
    Level 10  
    gdybyś miał tą płytkę to byś zobaczył, że nie tak łatwo dobrać siędo tej kości,
    no a po drugie płytkę mam na gwarancji przez rok
    do testów zrobiłem sobie płytkę przystawkę i tam sobie wpinam takie kości na I2C jakie mi pasują.

    Nie ukrywam jednak, że mnie wpienia że tak tą płytkę zaprojektowali.. więc w najbliższym czasie cośz tym zrobię..
  • #11
    wicy
    Level 22  
    Quote:
    gdybyś miał tą płytkę to byś zobaczył, że nie tak łatwo dobrać siędo tej kości

    To jedno, a drugie to fakt, że ścieżki modułu pod kością zostały źle poprowadzone. Nie masz prawdopodobnie połączenia linii I2C zegara z pinami wyjściowymi.
    Ja poradziłem sobie z pamięcią zwykłą transformatorówką Lutoli :) Wstawiłem nową 24c256. Dodatkowo musiałem z zewnątrz nad kościami srebrzanką połączyć SCL pamięci z SCL zegara (brak ścieżki). SDA wymaga połączenia kroplą cyny przelotki przy 5 nodze pamięci z tą nogą (też brak ścieżki)
  • #12
    stozu
    Level 10  
    moduł RTC jest podłączony dobrze i funkcjonował dobrze zanim nie zacząłem bawić się eepromem.
    eeprom ma niepotrzebnie wyprowadzone końcówki do adresowania.

    Prawdopodobnie jak zapisywałem cała pamięć eeprom musiało coś się wpisać do RTC i pomieszało mu... może dlatego teraz to nie działa (to jest jedna z wersji)...
  • #13
    janbernat
    Level 38  
    stozu:
    Daj namiary na tę płytkę.
  • #14
    Mikon_603
    Level 11  
    Witam.
    Nie chciałbym otwierać nowego tematu, więc podczepie się pod ten. Czytałem note katalogową tej pamięci, ale nie wiem, czy dobrze to zrozumiałem, gdyż z angielskim u mnie krucho. Chodzi o adresowanie pamięci. Adresowanie wygląda mniej więcej tak:
    Wysyłamy bitstartu, ACK, następnie 160 (10100000 - zapis do pamięci), ACK, następnie adres komórki w pamięci (jaki maksymalny jest adres tej komórki???), ACK, dane, ACK, bitstopu.
    Podobnie na odczyt z tym, że w adresie wpisujemy 161.
    Czy dobrze myśle??? Ile powinien wynosić czas trwania ACK, a ile czas pomiędzy wysyłaniem kolejnych bitów???
    Z góry dziękuję.
  • #15
    stozu
    Level 10  
    Zamieszczam tu kawałek kodu z BASCOMA, który opracowałem sobie do testów. Myślę że jest czytelny
    Code:

    'Zapis
    Sub Write_eeprom(byval Adres As Byte , Byval Value As Byte , Byval Strona As Byte)
        I2cstart                                                'start
        I2cwbyte Addressw                               'adres zapisu pamieci np. 160
        I2cwbyte Strona                'strona pamięci
        I2cwbyte Adres                                          'adres
        I2cwbyte Value                                          'wartosc do wyslania
        I2cstop                                                 'stop
        Waitms 30                                               'czekaj 30ms
    End Sub


    'Odczyt
    Sub Read_eeprom(byval Adres As Byte , Byval Value As Byte , Byval Strona As Byte)
       I2cstart                                                 'start
       I2cwbyte Addressw                                        'adres zapisu np. 160
       I2cwbyte Strona                                'adres strony pamięci
       I2cwbyte Adres                                           'adres
       I2cstart                                                 'powtórz start
       I2cwbyte Addressr                                        'adres odczytu np. 161
       I2crbyte Value , Nack                                    'odczytane dane
       I2cstop
           Waitms 30                                            'stop
    End Sub