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

PCF8583 i problem z zasilaniem

21 Maj 2005 12:47 2529 27
  • Poziom 13  
    Witam
    Mam zrobiony zegar elektroniczny z wykorzystaniem PCF8583 i AT89C2051. Czas wyświetlany jest na LCD. Wszystko działa jak narazie dobrze tylko, że po każdym włączeniu (wyłączeniu) zasilania trzeba zegar ustawiać od nowa bo się zeruje. Żeby tego uniknąć do PCF8583 dołączyłem baterię 3V tak, jak na schemacie poniżej.
    Problem polega na tym, że pamięć w zasadzie podtrzymuje tylko, że po włączeniu zasilania zegar trochę podziała (czasem kilka minut, czasem godzinę), a później na LCD pojawią się jakieś "głupoty" i trzeba znowu wł/wył układ. Coś musi być nie tak z tą baterią, ale wydaje mi się, że w dobrze ją podłączyłem.
    Proszę o szybką pomoc, bo ten zegar jest moją pracą dyplomową i muszę go w najbliższych dniach oddać.

    Z góry dziękuję i pozdrawiam
  • Sklep HeluKabelSklep HeluKabel
  • Poziom 42  
    Polok napisał:
    a później na LCD pojawią się jakieś "głupoty"
    A można prosić jaśniej? Opis objawów jest chyba dość ważny do szukania usterki.
  • Poziom 13  
    Jak zegar działa bez baterii to na LCD (2x20) wyświetlane są dane np. takie:
    21:57:34 21.05
    SOBOTA 2005

    A te "głupoty" to np.:
    8@:@5:@5
    "w tej linii nic się nie wyświetla"

    Jak dla mnie ewidentnie mikrokontroler odczytuje błędne dane z PCF8583 i dzieje się tak tylko przy dołączonej baterii, więc gdzieś tu musi leżeć przyczyna.
  • Poziom 15  
    Nie wiem, czy to będzie przyczyną, ale czy maskujesz nie używane (nie istotne) bity z danych, które odczytujesz z pcf8583 - mogą one być różne i jeśli tylko traktujesz to jako kod bcd to tu by leżała przyczyna, a cały układ działa dobrze.
  • Poziom 13  
    Jeśli bym maskował nie używane dane to dlaczego miałoby to wpływ tylko przy dołączeniu baterii do RTC?
    Ale odpowiadam, że nie maskuję tych danych, bo wszystkie wykorzystuję.

    Czy ktoś ma jeszcze jakieś sugestie??
  • VIP Zasłużony dla elektroda
    Zrób układ na CD4066, załączający line magistrali tylko podczas pracy z sieci. Resztki napięć mogą słabo, bo słabo zasilać mikrokontroler tymi liniami i biedaczyna głupieje na takim wikcie... ;)
  • Sklep HeluKabelSklep HeluKabel
  • Poziom 15  
    W sprawie maskowania ale nie danych tylko bitów z danych, które odczytujesz z zegara. Jeżeli przykładowo czytasz godzinę w formacie bcd (dziesiątki godzin i jedności) = ddddjjjj to dla godziny 23 masz xx100011 (x - dowolny stan). Teraz odczytujesz tą godzinę to skąd masz pewność, że w miejsce xx będzie 00. Zaraz po wystartowaniu czas jest zerowany więc w naszym przykładzie będzie 00000000, potem powiedzmy ustawiasz godzinę na 12 więc jest 00010010 i wyświetla poprawnie. Po pewnym jednak czasie dojdzie do przepełnienia dziesiętek godzin i z 0010jjjj przejdzie na 0100jjjj (nie mam 100% pewności, że to będzie akurat ta wartość, może być inna ale też nieprawidłowa). Niestety pcf8583 nie ma korekcji tych starszych bitów i to jest przyczyną takich problemów. Podobnie jest w przypadku minut i sekund. Proponuję byś to sprawdził. U mnie właśnie tak było - też nie maskowałem tych bitów i straciłem mnóstwo czasu na poprawianie procedur i2c, a wystarczyło dodać maskowanie. Aha, objawy były takie jak u Ciebie.
  • Poziom 13  
    Niestety to co sugeruje PJS w moim przypadku nie może być przyczyną, bo prawie całą obsługę mam napisaną w asemblerze i po odczytaniu np. godziny: 2 najstarszych bitów po prostu nie odczytuję.
    Zaś co do sugestii Light'I to nie wiem czy zrobię ten dodatkowy układ, bo w poniedziałek lub wtorek muszę oddać gotową pracę i ciężko będzie jeszcze coś tam dołączyć. Czy nie można tego problemu załatwić "programowo" ?
  • Poziom 33  
    Rozumiem że z baterji zasilasz nie tylko pamieć, ale i procesor.
    Spróbuj dodać funkcje stand by, jaśli będziesz zasilać układ z bateryjki , to zatrzymaj transmisje i wprowadź procek w tryb czuwania.
    Jeśli podasz normalne zasilanie to po prostu obudź procek i zainicjuj transmisje na magistrali.
    Nie mam pewności, jeśli masz zasilanie 3V3 to magistrala moze nie działać poprawnie.
    Dlatego proponuje wstrzymać transmisje na czas zasilania układu z baterji.
    Pozdrawiam
  • Sklep HeluKabelSklep HeluKabel
  • Poziom 13  
    Z baterii zasilam tylko i wyłącznie RTC, czyli po wyłączeniu zasilania pracuje tylko RTC i nic więcej, nie ma też komunikacji z prockiem.
    Proszę o dalsze rady, bo bardzo zależy mi na czasie.
    Pozdrawiam
  • Poziom 33  
    Właśnie to może być przyczyną problemu.
    Poaw się z programowym " usypianiem" procesora.
    Po "wybudzeniu " atmelka pierwsze co powinien zrobić to zainicjowac transmisje i zczytać dane z RTC, dopiero potem wyświetlić je na LCD.
  • Poziom 14  
    A może napisz jaka to bateryjka (ile volt) i jakim napięciem normalnie zailasz PCF'a (z zasilacza)
  • Specjalista - oświetlenie sceniczne
    a czy czasem któraś z diod nie jest uwalona, miałem podobny przypadek jak procesor był chwilami zasilany z tak niskiego napiecia. Po pojawieniu sie prawidłowego napiecia pracowął bynajmniej nie tak jak nalezy ;)
  • Poziom 13  
    Diody są sprawne (tzn sprawdziłem tylko omomierzem). A zasilanie tak jak napisał karlos79 to 5V z zasilacza i 3V z baterii (bateria: CR2032). Powtarzam też, że bateria podłączona jest tylko i wyłącznie do RTC a nie do procka.
    Proszę o dalsze wskazówki
  • Poziom 33  
    No właśnie twietrdze , że robisz błąd zasilając tylko RTC
    z baterji a procka nie zasilasz.
    Przeczytaj artykuł do którego dostałeś link ode mnie, to wyjaśni Ci się kilka spraw.
  • Poziom 39  
    Polok napisał:
    Niestety to co sugeruje PJS w moim przypadku nie może być przyczyną, bo prawie całą obsługę mam napisaną w asemblerze i po odczytaniu np. godziny: 2 najstarszych bitów po prostu nie odczytuję...

    Coś mi się tu nie zgadza :(
    Zakładając , że błędnie odczytamy rejestr godzin np. 0FFH , to po zamaskowaniu ważnych bitów (ANL A,#3FH) , maksymalna wartość godzin może wynieść 3 , a u Ciebie jest 8.Natomiast znak "@" jest nieosiągalny dla jednego półbajtu , gdyż dla cyfr (ORL A,#30H)maksymalna wartość może wynieść najwyżej 3FH ("?").Więc wydaje mi się , że masz jekieś błędy w programie.
    Przykład:
    Code:

    MOV A,#FFH ;zakładam błędy w komunikacji
    ANL A,#3FH  ;ignoruję 2 najstarsze bity
    PUSH ACC
    SWAP A
    ACALL LOP
    POP ACC
    LOP:
    ANL A,#0Fh
    ORL A,#30H ;dla cyfr
    CALL DO_LCD ;wyślij znak na wyświetlacz
    DELAY ILESTAM
    RET

    Nie widzę możliwości wyświetlenia na LCD znaku "@".

    Pozdrawiam

    Piotrek
  • Poziom 13  
    Nie sądzę, żebym miał błędy w programie (na 100% wiedzieć tego nie mogę). Poza tym jak nie ma baterii to zegar działa poprawnie, a takie rzeczy dzieją się tylko gdy dołączę baterię. Zumek mnie też to strasznie dziwi, bo np czasem wyświetli mi się coś takiego:
    __ ???
    Ewidentnie to wina procka, że coś takiego się dzieje. No i w tym momencie cały program się zawiesza ,bo za pomocą przycisków ustawiam czas itd. a gdy coś takiego się pojawi to już nie mogę wejść w tryb ustawiania. Tylko jak już mówiłem dzieje się to tylko przy dołączonej baterii.
  • VIP Zasłużony dla elektroda
    Zrób eksperyment - przetnij magistralę i zastąp te połączenia zworkami. Pobaw się taką konfiguracją i raport na forum... ;)
  • Poziom 13  
    Witam
    Eksperymentu zalecanego przez Light'I nie zdążyłem zrobić, bo całkiem przypadkowo natknąłem się na przyczynę tego dziwnego zachowania. Otóż gniazdo, do którego przykręcone były przewody zasilające 5V, miało pękniętą jedną nóżkę. Nie wiem jak to się mogło stać, ale gniazdo kupiłem nowe, zamieniłem i jak narazie wszystko działa poprawnie. Bardzo mnie dziwi (straszny zbieg okoliczności), że problem ten występował, gdy w układzie była bateria, ale mam nadzieję, że to była prawdziwa przyczyna problemu.
    Pozdrawiam i dziękuję za zainteresowanie problemem.
  • Poziom 17  
    Problem rozwiązany, ale chciałbym skomentować zapędy niektórych tu, żeby zasilać z baterii nie tylko PCFa.
    Otóż nie jest to zbyt szczęśliwy pomysł, gdyż PCF przy uśpionej magistrali I2C pobiera tylko okolo 7uA prądu. Zwykla bateria CR2032 wystarczy zatem na długo. Jeżeli podłączysz do tego jeszcze CPU to już można o tym zapomnieć nawet jeśli wprowadzisz go w uśpienie. Z PCFa na pewno nie ma wycieków przez I2C a już na pewno nie takie powyżej 0,7V, które mogłyby spolaryzować diody na wejściach uC. Przetestowane.

    Z poważaniem,

    Marmur99
  • Poziom 33  
    Zawsze można zastosować akumulator i układ ładowania.
  • Specjalista - oświetlenie sceniczne
    a po co komplikować?
  • Poziom 33  
    Rezystor ograniczający prąd ładowania i dioda zenera, to chyba nie jest wielka komplikacja.
    Pozdrawiam
  • Poziom 16  
    jak podlaczyc zasilanie pcf8583 tak zeby podczas zasialnia sieciowego zasilany byl z zasilacza a gdzy zostanie wylaczone to podtrzymywala go bateria?
  • Poziom 19  
    Ja kiedyś też wykorzystywałem tego PCF'a jednakże zdenerwowałem się na niego. W zamian proponuję DS1307, kosztuje 8zł, ma wejście na baterię (czyli nie ma kłopotów), pobiera 500nA z baterii, posiada zabezpieczenia przeciwko wpisywaniu głupot do rejestrów i obsługuje lata dwu cyfrowo a nie tylko 0..4. Ja już się na niego przeniosłem i polecam to samo wam. Aha, posiada dodatkowo w swojej strukturze kondensator do kwarca (czyli nie jest potrzebny) i jest kompatybilny Pin-to-pin z PCFem (oprócz nóżki Vbat).
  • Poziom 13  
    Problem został rozwiązany, więc temat uważam za skończony.

    Pozdrawiam