Elektroda.pl
Elektroda.pl
X

Wyszukiwarki naszych partnerów

Wyszukaj w ofercie 200 tys. produktów TME
Kategoria: Kamery IP / Alarmy / Automatyka Bram
Montersi
Proszę, dodaj wyjątek elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

PCF8583 - pełna obsługa daty i godziny

Villen 27 Kwi 2010 17:08 14870 68
  • #1 27 Kwi 2010 17:08
    Villen
    Poziom 21  

    Witam!

    Nieco ryzykuję pewnie, bo podobnych tematów było na Elektrodzie juz sporo, ale jak pokazały moje doświadczenia z ostatnich kilku dni, chcąc znaleść coś na prawdę konretnego na temat obslugi daty przez zegar RTC PCF8583 skazujemy się na mękę i raczej pewne niepowodzenie.

    Proponuję utworzenie więc tematu, który dzięki swojej merytorycznej, praktycznej i rzetelnej zawartości nadawałby się do przypięcia i służył jako pomoc-wzór dla innych konstruktorów-amatorów niekoniecznie super obeznanych z programowaniem, nawet w tak prostym języku jak Bascom.

    Jeśli chodzi o odczyt godziny z tego RTC'a to rozwiązań jest mnóstwo, bo i nie jest to rzecz bardzo skomplikowana. Pozwolę sobie przytoczyć przykład:

    Kod: vb
    Zaloguj się, aby zobaczyć kod


    Ten krótki kawałek kodu zapewnia odczytanie z tytułowego układu sekund, minut i godzin w kodzie BCD i zapisanie ich do zmiennych. Aby następnie wartości te przekonwertować na wartości dziesiętne wykonujemy 3 proste polecenia:

    Kod: vb
    Zaloguj się, aby zobaczyć kod


    W efekcie otrzymujemy w trzech zmiennych (Sekundy, Minuty, Godziny) wartość czasu zapisaną w systemie dziesiętnym.

    Jednak obsługa daty nie jest już tak prosta. O ile odczytanie numeru dnia miesiąca i numeru samego miesiąca nie jest wielkim problemem i może wyglądać mniej więcej tak:

    Kod: vb
    Zaloguj się, aby zobaczyć kod


    Co daje nam dodatkowo zmienne z numerem dnia miesiąca i numerem miesiąca w postaci BCD. Ich konwersja wygląda analogowo do konwersji godziny z przykładu powyżej.

    Jednak w wielu wielu przypadkach przydaje się jeszcze rok, a jeszcze bardziej numer dnia tygodnia - np do oprogramowania budzika na każdy dzień tygodnia i wielu innych przydatnych "patentów". Ale z tymi obydwoma wartościami jest problem: PCF8583 zlicza lata tylko do 3, a odczytanie numeru dnia tygodnia wymaga najpierw jego odkrycia, a potem kłopotliwego przesówania bitów.

    Chciałbym więc prosić bardziej doświadczonych forumowiczów o pomoc przy utworzeniu rzetelnej i wartościowej "ściągawki" dla mniej doświadczonych zapaleńców (do których i ja się zaliczam).

    Czy znajdzie się ktoś chętny?

    Janusz

  • #3 27 Kwi 2010 18:12
    Villen
    Poziom 21  

    Tak, jednak jest on chyba najbardziej popularny (można go dostać nawet w małych sklepach) i tani. I choć jest to już stary układ to wciąż trzyma się dobrze.

    I również obsługuje dni tygodnia, choć jest to owszem nieco problematyczne.
    Stąd właśnie moja inicjatywa i prośba o pomoc.

  • #4 27 Kwi 2010 18:23
    tadzik85
    Poziom 38  

    No to tygodnie wyłaniasz z bajtu andem i przesuwasz. Pełen rok? w dodatkowej komórce przechowujesz. Przy każdym odczycie sprawdzasz czy nodulo z roku jest równe temu rokowi już zaimplementowanemu, jeśli nie dodajesz 1 do roku w nowej komórce. Bardzo proste i najlepsze rozwiązanie.
    A jeśli układ ma taka , a nie inna mapę pamięci nic z tym nie zrobisz. Trzeba sobie radzić. Ja zrobiłbym to właśnie tak. Poza tym z tego względu upodobałem sobie PCF8563. Jest jeszcze układy dallasa DS1307 również bardzo popularne. I ona ma wszystkie pozycje daty i godziny pod osobnym adresem. Lecz nie posiada alarmu. Coś za coś.

  • #5 27 Kwi 2010 19:03
    atom1477
    Poziom 43  

    Ja też używam PCF8563. Przecież on jest tańszy od PCF8583 i do tego ma wielokrotnie mniejszy pobór prądu. I popularny też jest.

  • #6 27 Kwi 2010 19:10
    Villen
    Poziom 21  

    Cóż. W moim ulubionym sklepie we Wrocławiu tego układu nie mają.
    A żeby nie było że temat założyłem tylko po to, by ktoś "odrobił za mnie pracę domową" i podał rozwiązanie na tacy - w końcu udało mi się rozgryść odczytywanie numeru dnia tygodnia. Jak tylko sprawdzę jeszcze czy aby na pewno działa wszystko poprawnie postaram się napisać gotowy kod i opatrzyć go komentarzami na tyle obszernymi, by każdy kto nie ma wystarczająco dużo doświadczenia mógł skorzystać z takiego gotowca.

  • #7 23 Maj 2010 02:18
    george2002

    Poziom 17  

    Witam, i jak tam ? udało się koledze Villen poukładać i sprawdzić ten kod od roku w pcf8583 ? jeśli tak to prosiłbym o kod (najlepiej całość z godzinami,dniami,rokiem - żeby nie było znów jakichś niedomówień ;) ) bo na sieci znalazłem tylko takie coś

    Kod: vb
    Zaloguj się, aby zobaczyć kod

    z tego linka: http://and-tech.pl/forum/viewtopic.php?t=1014 ale wg mnie kolega Villen ładniej potrafi opisać co i jak w kodzie za co odpowiada :)

  • #8 23 Maj 2010 08:00
    Villen
    Poziom 21  

    Tak, udało mi się wykorzystać pełne możliwości PCF'a 8583 - łącznie z odczytywaniem numeru dnia tygodnia i obsługą lat przestępnych.
    Postaram się dzisiaj namazać krótkie wyjaśnienie, bo to na prawdę jest proste ;)

  • #9 23 Maj 2010 23:53
    george2002

    Poziom 17  

    heh

    Cytat:
    Tak, udało mi się wykorzystać pełne możliwości PCF'a 8583 - łącznie z odczytywaniem numeru dnia tygodnia i obsługą lat przestępnych.
    Postaram się dzisiaj namazać krótkie wyjaśnienie, bo to na prawdę jest proste Wink

    Mam nadzieję że uda się wersję troszkę dłuższą tzn z kodem i opisem w nim bo to zawsze jest najgorsze :) sam opisów jak to zrobić już czytałem 3 ale nie udało mi się niestety :( były problemy z zapisem do ramu pcf coś mi tam nie chciało zawsze działać :)
    Ja ogólnie jestem zainteresowany najbardziej obsługą roku ale nie pogardzę tym dniem tygodnia :D chociaż w sumie jeśli (a zakładam że tak jest) możesz udostępnić całą obsługę zapisu i odczytu godzin,dni,miesięcy,lat to nie tylko pewnie ja będę wdzięczny :) - oby kod był przejrzysty i w całości ;) poza tym mam rozumieć że wszystko pojawi się w tym temacie czy gdzieś indziej ?

    Pozdrawiam
    George2002

  • #10 24 Maj 2010 20:10
    Villen
    Poziom 21  

    No więc, tak jak obiecałem jakiś czas temu postaram się przybliżyć i wytłumaczyć kwestię programowej obsługi popularnego układu RTC – PCF8583.
    Układ ten ma zarówno zwolenników jak i przeciwników, a jedni i drudzy mają swoje racje. Są układy prostsze w obsłudze programowej, posiadające wszystkie interesujące nas dane w osobnych rejestrach prostych do odczytania/zapisania, lecz często są one cięższe do kupienia w małych sklepach, czasem droższe i bardziej kapryśne niż stary, ale ciągle jary PCF8583. No ale temat ten nie ma na celu dyskutowania nad zaletami i wadami poszczególnych układów!
    Postaram się w miarę jasny i przejrzysty sposób opisać moje boje z tym układem, które ostatecznie doprowadziły do wykorzystania prawie wszystkich jego możliwości. Prawie, dlatego, że układ ten ma jeszcze rejestry odpowiedzialne za alarm (budzik), które w pewnych zastosowaniach również mogą okazać się niezwykle przydatne!
    Noty aplikacyjnej i sposobu podłączania układu do mikrokontrolera nie będę przytaczał, bo informacji na ten temat jest tak dużo, że nawet zupełny amator po obejrzeniu jakiegokolwiek schematu urządzenia około-zegarkowego wykorzystującego ten układ (a projektów takich na elektrodzie jest dużo) będzie wiedział „z czym to się je”.
    Zacznijmy od odrobiny teorii. Na początek proponuję przypomnienie (lub zapoznanie) sobie wiadomości na temat systemu dwójkowego (binarnego) i podstawowego kodu BCD – BCD8421. Informacje na ten temat można znaleźć choćby na Wikipedii, np. w tym artykule: Kod BCD .
    Teraz możemy przystąpić do właściwego tematu.
    Zacznijmy od krótkiego fragmentu programu w BASCOMIE:

    Kod: vb
    Zaloguj się, aby zobaczyć kod


    Kod ten działał będzie tylko wtedy, kiedy nasz RTC jest jedynym układem pracującym i podłączonym do szyny I2C naszego mikrokontrolera. Ale początkujący raczej rzadko stosują więcej niż jeden taki układ i myślę że nie jest to problemem, a ci bardziej zaawansowani raczej nie będą czytać tych moich wypocin :P.

    Przeanalizujmy ten krótki fragment. Poczynając od pierwszej lini:
    1. Inicjujemy szynę I2C,
    2. podajemy adres zapisu do naszego układu (162),
    3. wpisujemy wartość 2, odpowiadającą numerowi rejestru który potem odczytamy, odczyt zacznie się od tego rejestru,
    4. ponownie inicjujemy szynę,
    5. podajemy adres odczytu (163)
    6. odczytujemy wartość rejestru sekund, zapisujemy ją do zmiennej „Sekundy” i kontynuujemy odczytywanie (Ack),
    7. kontynuujemy odczytywanie dla Minut, Godzin, Dnia, Miesiąca – analogicznie do punktu powyżej, po odczytaniu wartości rejestru Miesiąca kończymy transmisję (Nack),
    8. „zatrzymujemy” szynę I2C.

    Po tej operacji mamy w pięciu zmiennych zapisane interesujące nas dane. I teraz przyda się przypomnienie systemu dwójkowego i BCD ;-). Układ PCF8583 operuje właśnie na kodzie BCD i wszystkie odczytywane/zapisywane do niego dane muszą być zapisane właśnie w tym kodzie.
    Aby w pełni zrozumieć sposób działania tego układu, musimy sobie wyobrazić 5 rejestrów, każdy ma po 8 bitów. W trzech pierwszych zapisane są wartości sekund, minut i godzin, oczywiście w kodzie BCD. W rejestrze czwartym zapisany jest numer dnia miesiąca i „zamaskowany” w nim numer roku. I tu uwaga: PCF8583 nie ma „prawdziwego” licznika lat. Numer roku zapisywany jest jedynie na dwóch bitach i przyjmuje wartości od 0 (00) do 3 (11). „Rok” 0 jest rokiem przestępnym, a kolejne 3 są kolejnymi latami w czteroletnim cyklu pomiędzy latami przestępnymi. Ale na razie się tym nie przejmujmy – poradzimy sobie z tym.
    W rejestrze piątym zapisany jest numer miesiąca w roku i również „zamaskowany” numer dnia danego tygodnia. Numer dnia tygodnia przyjmuje wartości od 0 (000) dla poniedziałku do 6 (111) dla niedzieli.
    Myślę że całą sprawę najlepiej wyjaśni prosty rysunek, który przedstawia przykładowe zawartości odczytanych rejestrów, którym przyporządkowałem umowne nazwy, odpowiadające nazwom zmiennym z naszego fragmentu programu:

    PCF8583 - pełna obsługa daty i godziny

    Jak widać (mam nadzieję) rejestry sekund, minut i godzin zawierają po prostu ich wartości w kodzie BCD. W rejestrze dnia natomiast, na dwóch najstarszych bitach jest ukryty numer roku w czteroletnim cyklu o którym wspominałem wyżej. Na dwóch kolejnych bitach zapisane są dziesiętne części numeru dnia miesiąca, a na czterech najmłodszych jedności numeru dnia miesiąca.
    Podobnie sprawa ma się w przypadku rejestru miesiąca. Na trzech najstarszych bitach zapisany jest numer dnia tygodnia, na następnym bicie części dziesiętne numeru miesiąca i na czterech najmłodszych jedności numeru miesiąca.
    Aby teraz wyciągnąć z tego wszystkiego interesujące nas liczby w systemie dziesiętnym, wykonamy kilka prostych operacji. Oto następny fragment programu:

    Kod: vb
    Zaloguj się, aby zobaczyć kod


    I przeanalizujmy:
    1. Zmienną Sekundy konwertujemy z kodu BCD do systemu dziesiętnego,
    2. analogicznie postępujemy ze zmiennymi Minuty i Godziny, ponieważ jak pamiętamy w tych rejestrach zapisane są tylko i wyłącznie te wartości,
    3. pomocniczej zmiennej o nazwie Rok przypisujemy wartość zmiennej Dzien, zawierającej wartość rejestru dnia, w którym ukryty jest również numer roku,
    4. przesuwamy teraz w prawo o 6 bitów naszą zmienną Rok, dzięki czemu „zerujemy” 6 bitów zawierających numer dnia miesiąca i zostają nam 2 bity z numerem roku,
    5. konwertujemy zmienną Rok na system dziesiętny,
    6. teraz bierzemy „na stół” zmienną Dzień, która do tej pory nie była ruszana – zerujemy 2 najstarsze bity (siódmy i szósty) – bity te, jak pamiętamy, zawierają numer roku i nie są nam już potrzebne,
    7. konwertujemy teraz zmienną Dzien do systemu dziesiętnego,
    8. do zmiennej pomocniczej Dzien_tygodnia wpisujemy zawartość zmiennej Miesiąc,
    9. przesuwamy w prawo o pięć miejsc zmienną Dzien_tygodnia – dzięki tej operacji, podobnie jak z numerem roku, zostają nam tylko 3 bity zawierające numer dnia tygodnia,
    10. i ponownie: konwertujemy zmienną Dzien_tygodnia do systemu dziesiętnego,
    11. zerujemy 3 najstarsze bity zmiennej Miesiąc – wymazujemy z niej numer dnia tygodnia,
    12. i możemy ją przekonwertować do systemu dziesiętnego – otrzymujemy numer miesiąca.

    Mam nadzieję że całość opisałem wystarczająco jasno, by każdy mógł zrozumieć. Po tych operacjach otrzymujemy w kilku zmiennych (Sekundy, Minuty, Godziny, Rok, Dzien, Dzien_tygodnia, Miesiąc) wszystko, co potrzebne do pełnej orientacji w czasie ;-).

    A cały program odczytujący te dane z naszego układu i wyświetlający je na ekranie alfanumerycznego wyświetlacza LCD może wyglądać tak:

    Kod: vb
    Zaloguj się, aby zobaczyć kod


    Czy to takie trudne? Wydaje mi się że nie. Zachęcam do eksperymentowania!

    A teraz zajmijmy się zapisem danych do układu – w końcu jakoś ten czas i datę trzeba ustawić! ;-) Tak naprawdę jeśli do tej pory udało się nam do tej pory zrozumieć zasadę odczytu i rozgryźć „co gdzie siedzi” to teraz wystarczy wszystko zrobić w drugą stronę! Zacznę więc od razu z grubej rury i podam fragment programu. Pomijam oczywiście wcześniejsze ustawienie odpowiednich wartości dla naszych zmiennych, ponieważ nie ma na to uniwersalnej reguły – każdy robi to na swój sposób, zależnie od urządzenia nad którym pracujemy – czy to podając wartości liczbowe z pilota/klawiatury, impulsatorem inkrementujemy czy dekrementujemy itp. itd…

    Kod: vb
    Zaloguj się, aby zobaczyć kod


    I znowu przeanalizujmy:
    1. Konwertujemy zmienną Godziny z systemu dziesiętnego na kod BCD,
    2. analogicznie postępujemy ze zmiennymi Minuty i Sekundy
    3. wartość roku (np. 2010) dzielimy przez 4. Reszta z tego działania odpowiada numerowi roku, jaki możemy wpisać do PCF’a – łatwo zauważyć że dzielenie roku przestępnego przez 4 da 0 reszty, a kolejnych lat po nim po kolei da resztę 1, 2 i 3. Nie wierzysz? Sprawdź!
    4. konwertujemy zmienną Rok do kodu BCD,
    5. i przesuwamy ją 6 miejsc w lewo, robiąc miejsce dla numeru dnia w miesiącu,
    6. zmienną Dzien konwertujemy na kod BCD,
    7. teraz zmiennej Dzien przypisujemy sumę logiczną zmiennych Rok i Dzien. Jeśli nie wiesz jak działa suma logiczna (OR) to zapraszam na Wikipedię ,
    8. zmienną Miesiąc konwertujemy do BCD,
    9. zmiennej Dzien_tygodnia przypisujemy wartość zmiennej Miesiąc,
    10. i przesuwamy ją 5 miejsc w lewo, pownie „robiąc miejsce” dla numeru miesiąca,
    11. i na koniec znowu stosujemy sumę logiczną i „łączymy” zmienne Dzien_tygodnia i Miesiąc,
    12. dokonujemy zapisu naszych zmiennych do odpowiednich rejestrów PCF’a8583.

    Trudne? Jeśli tylko nie zamąciłem Ci za bardzo w głowie to na pewno uznasz że nie ;-)

    Jak widać nie taki diabeł straszny jak go malują. Tylko z pozoru wydaje się to trudne – jeśli raz zrozumiesz ideę działania naszego bohatera to na pewno przyznasz mi rację. A mam nadzieję że te moje wypociny Ci w tym pomogą!
    Jeśli tak będzie, to nie obrażę się, jeśli klikniesz przysłowiowe „Pomógł” – taka nagroda bardzo mnie ucieszy i zmobilizuje do dalszej pracy.
    Na „odkrycie” czekają jeszcze rejestry alarmu! ;)

    Powodzenia we własnych eksperymentach!

  • #11 24 Maj 2010 21:31
    george2002

    Poziom 17  

    W skrócie powiem tak:
    R E W E L A C J A !!!
    oby więcej takich ,,Nauczycieli" !!! :D
    Z góry dziękuję za rewelacyjne wytłumaczenie całej obsługi zapisu i odczytu PCF8583 no i oczywiście czekam(y) na dalsze informacje w sprawie ustawienia alarmów - dla mnie osobiście rok w pcf-ie był największym problemem :) ale po takim szczegółowym wyjaśnieniu już nie mam teraz jakichkolwiek wątpliwości co i jak :) dzisiaj już nie sprawdzę jak to wszystko hula ale rozumiem że koledze cały przedstawiony schemat działa od dłuższego czasu :)


    PS
    Oczywiście „Pomógł” kliknięte bo jak najbardziej zasłużone ! :)

    Pozdrawiam dziękując za niesamowite wyjaśnienie
    George2002

  • #12 24 Maj 2010 21:55
    Villen
    Poziom 21  

    UWAGA!
    Dopiero przed chwilą kolega R-MIK zwrócił mi uwagę na jeden błąd tego algorytmu - są problemy przy zmianie roku o 1000. Niby do 3000r daleko, ale to mimo wszystko błąd. Postaram się to rozgryść ;-)

  • #13 24 Maj 2010 22:00
    george2002

    Poziom 17  

    Villen napisał:
    UWAGA!
    Dopiero przed chwilą kolega R-MIK zwrócił mi uwagę na jeden błąd tego algorytmu - są problemy przy zmianie roku o 1000. Niby do 3000r daleko, ale to mimo wszystko błąd. Postaram się to rozgryść ;-)

    Hmm a jednak jeszce jakieś poprawki ;) fajnie że ktoś sprawdza (podziękowania dla kolegi R-MIK za tak szybką analizę :D) ale ja ma takie pytanko bo się chyba zapędziłem z tym „Pomógł” bo przyznam że nie widzę takiej opcji :( a jestem zalogowany :) chyba że mam rozumieć że to była taka przenośnia bo przyznam że od dawna było ofiarowanie punktów czy jakośtak ale opcji „Pomógł” to nie widzę :)

    PS
    Oczywiście oczekujemy update'u z wyeliminowanym błędem ;)

    Pozdrawiam
    George2002

  • #14 24 Maj 2010 22:15
    Villen
    Poziom 21  

    A bo to działa jednak troche inaczej :P Tylko autor tematu może przyznać "Pomógł" komuś, to mu w tym temacie pomoże. A tu sprawa nieco na odwrót działa :P

    A kolega R-MIK podsunął mi tę myśl w innym moim temacie i okazało się że ma rację, choć ciągle mam pewne wątpliwości :P Pozatym, jeśli nikt nie uprze się na siłe, żeby lecieć 990 lat w przód to nawet się na ten błąd nie natknie. W tył, aż do roku 1000 też powinno działać dobrze ;) W każdym bądź razie w obrębie naszego obecnego tysiąclecia będzie w porządku :-D

  • #15 24 Maj 2010 22:17
    utak3r
    Poziom 25  

    Villen napisał:
    A tu sprawa nieco na odwrót działa :P


    Tak... a założenie nowego tematu odbiera punkty. Dlaczego? Administracja nie lubi, gdy ktoś się chce podzielić swoją wiedzą?... Też założyłem tematy w podobnym tonie, jak ten Twój - ale... niesmak pozostaje.

  • #16 24 Maj 2010 22:20
    george2002

    Poziom 17  

    Villen napisał:
    A bo to działa jednak troche inaczej :P Tylko autor tematu może przyznać "Pomógł" komuś, to mu w tym temacie pomoże. A tu sprawa nieco na odwrót działa :P

    A kolega R-MIK podsunął mi tę myśl w innym moim temacie i okazało się że ma rację, choć ciągle mam pewne wątpliwości :P Pozatym, jeśli nikt nie uprze się na siłe, żeby lecieć 990 lat w przód to nawet się na ten błąd nie natknie. W tył, aż do roku 1000 też powinno działać dobrze ;) W każdym bądź razie w obrębie naszego obecnego tysiąclecia będzie w porządku :-D


    Hehe spox w każdym bądź razie jak udało by się zniwelować problem to oczywiście proszę o zamieszczenie w tym temacie o potomni (za 1000 lat :D) byli by na pewno wdzięczni :D a ja sam na pewno jeśli znajdę jeszce jakiegoś „buga” to napiszę tutaj o nim :)

    Pozdrawiam
    George2002

  • #17 25 Maj 2010 10:09
    utak3r
    Poziom 25  

    tadzik85 napisał:
    Jest jeszcze układy dallasa DS1307 również bardzo popularne. I ona ma wszystkie pozycje daty i godziny pod osobnym adresem. Lecz nie posiada alarmu. Coś za coś.


    Zawsze jest DS1337 - ma 2 alarmy :) a jest może ze 20 groszy droższy od DS1307.

  • #18 28 Sty 2011 17:42
    Flaman11
    Poziom 17  

    Temat jest dość stary, ale dzięki niemu zrozumiałem i opanowałem obsługę PCF8583.

    Rozwiązanie problemu z rokiem jest następujące:

    Rok w układzie 8583 ma za zadanie liczenie roku przestępnego i dla wartości

    rok=0 - to jest rok przestępny.

    Mamy 2011 następny rok przestępny wypada na 2012, czyli wartość rok należy ustawić na rok=3
    zamiana wartości rok i dzień na wartość 1 bajta:

    Kod: vb
    Zaloguj się, aby zobaczyć kod


    Oczywiście lata ustawiamy poprzez zmienną rok_wart.

    Mam nadzieję, że się komuś przyda.

  • #19 15 Lut 2011 15:01
    tombus
    Poziom 15  

    Witam.
    Mam problem z datą a dokładniej z ustawieniem roku przestępnego. Za każdym razem data jest źle wyświetlana. Nie potrafię sobie z tym poradzić. Prawdopodobnie blok "obsługa roku przestępnego" w funkcji czyt_pcf() jest błędnie napisany. Zapewne jest gdzieś mały błąd wynikający z mojej niewiedzy. Dopiero powoli uczę się języka "C". Poniżej kod pomijający nieistotne fragmenty programu.

    Kod: c
    Zaloguj się, aby zobaczyć kod

  • #21 15 Lut 2011 17:41
    tombus
    Poziom 15  

    Z kodu BCD konwertuję ją w funkcji lcd_gora();

    Kod: c
    Zaloguj się, aby zobaczyć kod

    Faktycznie, nie zmieniam zawartości tablic data[0] i data[1] na BCD, ale jak dodam odpowiednie linijki kodu, to nic się nie zmienia:
    Kod: c
    Zaloguj się, aby zobaczyć kod

  • #22 16 Lut 2011 21:14
    Flaman11
    Poziom 17  

    To jest ten fragment:


    Dzien = Makebcd(dzien) : Rok = Makebcd(rok)
    Shift Rok , Left , 6
    Dzien = Dzien + Rok

    zamień DZIEŃ na bcd, ROK=3 gdyż w następnym roku będzie przestępny zamień na bcd następnie ROK przemnóż przez 64.
    Na końcu DZIEŃ=DZIEŃ+ROK

    Teraz masz prawidłowo zawarty rok w rejestrze dnia. Mam nadzieję, że pomogłem :)

  • #23 17 Lut 2011 20:53
    tombus
    Poziom 15  

    No nie bardzo. Nie potrafię sobie z tym poradzić. Do tematu podchodzę z każdej strony i nic nie działa. Zaczynam tracić cierpliwość.

  • #24 17 Lut 2011 23:40
    Flaman11
    Poziom 17  

    Nie znam języka c, ale jeśli próbowałeś mojej metody a wciąż nie działa to znaczy, że gdzieś popełniłeś błąd. Być może ten błąd jest przy konwersji z kodu dec na bcd. Stosuję wyżej wymienioną metodę i jest wszystko znią w porządku. W każdym razie nie poddawaj się i próbuj.

  • #25 19 Lut 2011 19:16
    tombus
    Poziom 15  

    Dobra. Poradziłem już sobie z tym:) Problemem była moja zła interpretacja używanych przeze mnie funkcji.

  • #26 15 Mar 2011 16:11
    007mirek
    Poziom 10  

    Witam

    Czy nie miał by może ktoś jakiegoś gotowego kodu dla PFC8583 oraz AT91SAM7S64.
    Przerobiłem jakis kod pod atmegę ale coś mi nie chce działać i już sam nie wiem, czy układ jest padnięty czy co.

  • #28 15 Mar 2011 18:27
    007mirek
    Poziom 10  

    Proszę bardzo:

    Kod: c
    Zaloguj się, aby zobaczyć kod

  • #29 26 Kwi 2011 16:16
    007mirek
    Poziom 10  

    Witam

    Udało mi rozwiązać się część problemów z PCF8583 ale pojawiły się kolejne.
    Może się ktoś spotkał z taką sytuacją: ustawiam godzinę 01:01 do PCF-a a odczytuje 20:20 (podobnie 02:02 odczytuje 40:40)
    Pisze w C, AT91SAM7S

    Pozdrawiam

  • #30 26 Kwi 2011 16:22
    tombus
    Poziom 15  

    A zamieniasz ustawiane wartości na i z kodu BCD?

 
Promocja -20%
Zamknij 
Wyszukaj w ofercie 200 tys. produktów TME
tme