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

[AVR][GCC]PCF8583-odczyt danych

Piotrek_P 14 Kwi 2011 17:27 3558 15
REKLAMA
  • #1 9400426
    Piotrek_P
    Poziom 18  
    Witam,

    Będąc na tym forum od ponad ośmiu lat, głupio mi trochę pisać ten post (szukajka nie do końca zawsze pomaga). Wcześniej nie potrzebowałem korzystać z zegarka PCF8583 i mam teraz zagwozdkę. O co chodzi? Robię przygotówkę do projektu gdzie na karcie SD będą tworzone katalogi i pliki chronologicznie (typowy loger). Stąd potrzeba zaprzęgnięcia do pracy jakiegoś zegara z kalendarzem. Bazując na kodzie z książki kolegi mirekk36 spróbowałem uruchomić zegarek, ale efekt jest taki że dane z zegarka są chyba źle pobierane lub konwertowane. Po podaniu napięcia na układ wyświetlana jest sekwencja sekund: 0101234567 i znowu 010123 itd i tak w kółko. Dodam że przerwanie z INT PCF'a przychodzi bo mam podpiętego leda na pin PDx i ładnie mryga (xor) co sekundę.
    Wiele osób uruchamiało ten układ to może ktoś coś podpowie :)

    Pozdrawiam
    Piotrek
  • REKLAMA
  • #3 9400614
    Piotrek_P
    Poziom 18  
    Wyciąłem tylko obsługę EEPROM bo mi to nie potrzebne. Jak by ktoś mógł by się przyjrzeć to był bym wdzięczny.

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • REKLAMA
  • #4 9400912
    mirekk36
    Poziom 42  
    A jaką częstotliwością taktowany jest procek ? Może nie ustawiona jest prędkość transmisji po I2C? Więc przy dużym taktowaniu może się PCF w ogóle nie wyrabiać jeśli nie ustawimy w odpowiednich rejestrach prędkości.
  • #5 9404314
    Piotrek_P
    Poziom 18  
    Procka taktuję 8 MHz z wewnętrznego oscylatora. W rejestrach TWI ustawienia są standardowe czyli jak rozumiem z datasheet'a, transfer to 100 kHz. Spróbuję jeszcze powalczyć z rejestrami TWBR i TWCR.

    Dziękuję za zainteresowanie tematem i pozdrawiam
    Piotrek
  • #6 9404364
    krru
    Poziom 33  
    Procedura ustawiania zegarka jest błędna. Pierwszym bajtem powinien być numer rejestru, od ktorego zaczyna sie zapis.
    Podobnie odczyt - najpierw trzeba wykonać zapis numeru rejestru, a potem odczytać dane. Można to połączyć w jedną transmisję z repeated-start.

    Rejestr sekund ma numer 2.
  • #7 9405609
    adi84_84
    Poziom 14  
    Ja dodam że kod działa w 100% bo też korzystam z kodu Mirka :)
  • REKLAMA
  • #8 9405708
    krru
    Poziom 33  
    Wygląda, że funkcje TWI_read_buf/TWI_write_buf są już dostosowane do 8583 i ustawiają startowy adres - jest on chyba przekazywany jako drugi parametr. Niestety pytający nie załączył tych funkcji w pokazanym kodzie. W takiej sytuacji może faktycznie działać nieco lepiej, jednak dlaczego czytane są tylko 3 bajty zaczynając od dziesiętnych częsci sekundy? Wydaje mi się, że powinny być 4 (tak jak to jest napisane w komentarzu).

    A tak przy okazji - autor coś wspomniał o EEPROMIE. Czy on też jest na I2C? Jaki to typ?
    Niektóre działają na adresie 0xA0 i wchodzą w kolizję z PCF8583.
  • #9 9405732
    adi84_84
    Poziom 14  
    Skoro chciałeś wyciąć tylko zapisy do eeprom to po co zmieniasz inne rzeczy np:
    I2C_read_buf( PCF8583_ADDR, 0x01, 4, bufor );


    Dodano po 2 [minuty]:

    Może spróbuj najpierw odczytać poprawnie czas nie usuwając nic z kodu
  • #10 9406342
    Piotrek_P
    Poziom 18  
    adi84_84: Jeżeli chodzi o adres PCF'ki to zmieniłem go po kilku nieudanych próbach uruchomienia układu, gdyż spod adresu 0xA2 jaki jest w oryginalnym kodzie Mirka, PCF nie odpowiadał. Po zmianie na 0xA0 mam odpowiedź, ale jak pisałem dane są przekłamane. Może chodzi właśnie o ustawienie preskalera TWI. Będę się z tym bawił jak znajdę trochę czasu.

    Pozdrawiam
    Piotrek
  • REKLAMA
  • #11 9407252
    krru
    Poziom 33  
    Ja bawiłem się płytką uruchomieniową (fabryczną), która ma PCF8583 i EEPROM 24C16.
    Niestety, akurat ten EEPROM zawsze ma kolizję z tym zegarkiem. Dodatkowo sposób obsługi zegarka jest dokładnie taki sam jak EEPROMA. Dopóki pamięć była czysta (0xFF) zegarek odczytywał się poprawnie (iloczyn na drucie). Jak coś chciałem zapisać do RTC, zapisało się równocześnie do EEPROMa i potem wychodziły krzaki.
  • #12 9407787
    Piotrek_P
    Poziom 18  
    krru: To może być dobry trop bo używam właśnie fabrycznej płytki ( z Gotronik) gdzie RTC i EEPROM wiszą razem bez możliwości ich rozłączenia :cry: Dzięki za podpowiedź.

    Pozdrawiam
    Piotrek
  • #13 9407836
    krru
    Poziom 33  
    Właśnie tą płytke posiadam. Ogólnie jest w porządku, tylko początkowo była zaplanowana na mniejsze EEPROMY - stąd są tam jumperki do ustalania adresu EEPROMA. Tyle że coraz większe EEPROMY po prostu zajmują więcej adresów I2C i akurat 24C16 zajmuje wszystkie 8 adresów i w jego przypadku już nie można nic ustawić. Kolejny większy EEPROM ma już 2 bajtowy adres wewnętrzny (ten transmitowany na początku danych).
    Napisałem maila do Gotronika,że mają błąd w konstrukcji, ale nie dostałem jeszcze odpowiedzi.

    Problem można obejść trochę ręcznie - na czas zapisu do zegarka ręcznie przestawiać zworkę ustawiającą adres RTC w jedną pozycję, a na odczyt w drugą. Wtedy śmiecie idą do tej części EEPROMA, która wchodzi w kolizję z zapisem - a to jest niegroźne.

    Ja po prostu wymieniłem EEPROMA na większy (akurat taki mi się trafił).
  • #14 9407855
    piotrva
    VIP Zasłużony dla elektroda
    Polecam śrubokręt i wyjmujemy eeprom z podstawki i sprawdzamy co się dzieje, bo oba układy na 90% będą ze sobą kolidowały i to w bliżej nieokreślony sposób.
    No niestety nie jest dla mnie jasne kto taki mądry daje na płytkę 2 kolidujące ze sobą adresowo układy...
    Daj znać co będzie się działo jak wyjmiesz EEPROM
    jeśli zadziała to polecam zmianę pamięci na at24c08 i zwarcie jej pinu A2 (noga numer 3) do vcc
    [AVR][GCC]PCF8583-odczyt danych
    EDIT:
    czyli Ty sam wymieniłeś tego eeprom'a na 24c16 ?
  • #15 9407979
    Piotrek_P
    Poziom 18  
    piotrva: Śrubokrętem na tej konkretnej płytce z Gotronik to można sobie dla zabawy gdzieniegdzie zwarcia porobić żeby się wyżyć jak ciśnienie podskoczy. Oprócz głównego procka wszystko jest w SMD. Pisałem już kiedyś na tym forum o problemach z tą płytką a teraz pojawiły się kolejne z PCF. Ogólnie nie polecam.

    Pozdrawiam
    Piotrek
REKLAMA