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.

Zegar binarny na PIC16F84A - asm

kwito 01 Mar 2009 23:43 14224 44
  • Zegar binarny na PIC16F84A - asm
    Jest to zwyczajny zegar binarny, jakich wiele już było na elektrodzie, jedyne co odróżnia go od pozostałych to wykonanie na mikrokontrolerze PIC16F84A - wsad napisany w assemblerze.
    Odkąd pierwszy raz w internecie wypatrzyłem zegar binarny chcialem takowy posiadać, dlatego jako pierwszy projekt wybrałem właśnie to urządzenie (zwłaszcza, że jest stosunkowo proste). Zegarek powstawał z przerwami przez jakieś 2 m-ce, chociaż gdyby się spiąć, to powstałby zapewne w tydzień.
    Problemy zaczęły się już przy projekcie płytki pod diody - używam pakietu PADS w wersji studenckiej, który ma ograniczenie do 30 elementów w schemacie i po wstawieniu 20 diod mogłem wstawić już tylko 10 elementów, co było trochę przymało. Dlatego też wymyśliłem, że stworzę własny element (20 diod jako element w jednej obudowie, odpowienio zaprojektowanej) - taki mały 'myk' ale pozwolił na dokończenie płytki. Tak wygląda schemat:
    Zegar binarny na PIC16F84A - asm
    Następnie wykonana została płytka i po wlutowaniu elementów wyklądała następująco:
    Zegar binarny na PIC16F84A - asm
    (celowo razem z diodami na tej płytce umieściłem tranzystory i rezystory, aby zostało więcej elementów do dyspozycji na płytce z układem).
    Pierwsza wersja układu została wykonana na płytce uniwersalnej i zaczęło się pisanie programu, w międzyczasie zakupiłem obudowę i przygotowałem panel przedni:
    Zegar binarny na PIC16F84A - asm Zegar binarny na PIC16F84A - asm
    Szybko okazało się, że użyte najtańsze czerwone ledy po pierwsze różniły się jasnością świecenia przy identycznych warunkach pracy, a po drugie świeciły na tyle słabo, że w słoneczny dzień nie było nic widać.




    Zamówiłem niebieskie ledy, a w oczekiwaniu na przesyłkę czerwone zostały wylutowane i postanowiłem dać podstawki pod ledami, żeby trochę je podnieść - wcześniej były niewiele wyższe od tranzystorów i był problem z obudowaniem. Po włożeniu niebieskich ledów okazało się, że zegarek bardziej nadawał się na lampkę nocną, gdyż diody świeciły bardzo mocno, więc musiałem dorzucić regulację jasności. Taśma podłączeniowa została przepleciona na drugą stronę, bo wyłamywały się kabelki. Efekt zmian był następujący:
    Zegar binarny na PIC16F84A - asm Zegar binarny na PIC16F84A - asm
    Zegarek chodził tak sobie przez miesiąc zanim powstała płytka pod układ i dokończona obudowa. Okazało się że tracił 1 sekundę co 4 godziny, więc w kodzie wprowadziłem małą korektę - co godzinę jeden cykl timera był skrócony o 1/4 cyklu i od tego momentu zegarek chodził niemalże idealnie.
    Po miesiącu powstała płytka pod układ:
    Zegar binarny na PIC16F84A - asm Zegar binarny na PIC16F84A - asm Zegar binarny na PIC16F84A - asm Zegar binarny na PIC16F84A - asm
    (tym razem jako, że miałem już w ręku obudowę, to płytka została wymiarami do niej dopasowana już w czasie projektu)
    Do obudowy postanowiłem wcisnąć transformator, gdyż nie chciałem tracić jedynego zasilacza gniazdkowego, aby pracował ciągle z zegarkiem. Poszukałem w szufladzie i znalazłem najmniejszy wymiarowo transformator, który na wyjściu miał 22V (dużo więcej niż potrzebowałem, ale innego nie było). Żeby zmieścić transformator musiałem przerobić obudowę - kupiłem drugą, mniejszą obudowę i 'dokleiłem' do pierwszej, aby zmieścić na wysokość trafo:
    Zegar binarny na PIC16F84A - asm
    Powstał problem jak je zamocować, chociaż nawet bez mocowania trzymało się nieźle z boków ograniczone obudową gniazda i ścianką obudowy, a od góry krawędzią płytki układu. Ostatecznie zrobiłem prowizoryczną 'pseudoobejmę' dociskającą go dość dobrze do obudowy.
    Na koniec kilka zdjęć z ostatecznego montażu i składania w całość (obudowa została jeszcze dodatkowo zmatowana):
    Zegar binarny na PIC16F84A - asm Zegar binarny na PIC16F84A - asm Zegar binarny na PIC16F84A - asm
    Zegar binarny na PIC16F84A - asm Zegar binarny na PIC16F84A - asm
    Po złożeniu w całość okazało się, że zegarek zaczął tracić sekundę co 20 godzin, więc wprowadziłem kolejną korektę timera, następnie tracił 1s na 80 godzin i potem co 120 godzin - ostatecznie raz na godzinę jedna sekunda jest skracana o 81/256 (dla obserwatora jest to prawie nie do zauważenia). Po wszystkich korektach teraz chodzi prawidłowo.

    Lista użytych elementów:

    Płytka z ledami:
    tranzystory: 6x BC557
    Rezystory: 6x 10k, 4x 150
    Ledy: 20x LED-AL-50B

    Płytka z układem:
    mostek prostowniczy: 1x W06M
    stabilizator: L7805
    kondensatory: 1000u (25V), 100u (16V), 100n, 2x 100p
    rezystory: 3x 10k
    potencjometr: 3k3 jednoobrotowy, leżący
    przełączniki: 2x micro-switch
    kwarc: zegarkowy 32.768kHz
    podstawka: DIP-18
    procek: PIC16F84A
    listwa kołkowa prosta 5pin

    Przybliżony koszt:
    diody 8,80 zł
    PIC 8,00 zł
    obudowy (Z5,Z24A) 8,00 zł
    gniazdo zas. 2,00 zł
    laminaty 5,00 zł
    drobnica 8,00 zł

    w sumie ~ 40zł

    W załącznikach znajduje się kod programu w pliku asm oraz skompilowany hex, a także wzory płytek drukowanych i nadruków na płytki w plikach pdf w skali 1:1.

    Będę wdzięczny za wszelką krytykę, aby wiedzieć jakich błędów nie popełniać w przyszłych konstrukcjach.


    Fajne! Ranking DIY
    Potrafisz napisać podobny artykuł? Wyślij do mnie a otrzymasz kartę SD 64GB.
  • #2 02 Mar 2009 21:20
    Majkel903
    Poziom 11  

    Ładnie wykonane... mi sie podoba ale jak jest z dokładnością? tzn. czy czas się rozbiega?

  • #3 03 Mar 2009 00:17
    kwito
    Poziom 11  

    Zegar synchronizowałem ze stoperem z komórki (było to jedyne źródło czasu z sekundami jakie posiadam). Tak jak pisałem wprowadzałem kolejne korekty - początkowo tracił sekundę na 4 godziny, potem na 20, 80 i 120 godzin, po wszystkich korektach sprawdzałem przez kilkanaście dni i nie zgubił przez ten czas pełnej sekundy, więc wyszło na to, że opóźnienie było stałe i korektą cyklu timera udało się je wyeliminować z zadowalającą dokładnością.

  • #4 03 Mar 2009 17:43
    Majkel903
    Poziom 11  

    To ładnie... jak dasz radę to zamieśc jakis opis jak podłączyć PIC16F84A do komputera bo mam w planach zrobić ten zegar jako projekt do szkoły i przydało by się już powoli za to wziąć. Z góry wielkie dzięki i pozdrawiam.

  • #6 03 Mar 2009 21:55
    Majkel903
    Poziom 11  

    Dzięki wielkie to ułatwia sprawę:D

    Dodano po 3 [minuty]:

    A w jakim programie zostal PIC zaprogramowany?

  • #7 04 Mar 2009 01:38
    kwito
    Poziom 11  

    Programowałem w programie WinPic, zamiennie używam też ICPROG, jeśli będziesz szukał też kompilatora to używam MPASMWIN z pakietu MPLAB dostępnego za free ze strony microchip'a.

  • #9 05 Mar 2009 18:43
    kwito
    Poziom 11  

    Wręcz przeciwnie - podłącza się przez RS232 do COM'a.

  • #10 05 Mar 2009 19:00
    Majkel903
    Poziom 11  

    Aha dziękuję za pomoc w razie problemów bede pytał...jeżeli to nie przeszkadza oczywiście:)

  • #11 07 Mar 2009 12:29
    Majkel903
    Poziom 11  

    Kabel do połączenia programatora z komputerem zrobiłeś czy kupiłeś?

  • #12 08 Mar 2009 14:04
    kwito
    Poziom 11  

    kupiony w sklepie komputerowym

  • #13 11 Mar 2009 15:26
    Majkel903
    Poziom 11  

    Na jakim napięciu pracuje zegar?... bo mówiłeś że dodałeś transformator którego ja nie bede miał i mostek prostowniczy na jaki prąd i napięcie?

    Dodano po 2 [godziny] 7 [minuty]:

    Nie znam się kompletnie na tych mokrokontrolerach i mam dość głupie pytanie czy jest różnica pomiędzy PIC16F84A a PIC16F84? Czy to A na końcu to rodzaj obudowy czy co?

  • #14 11 Mar 2009 17:49
    kwito
    Poziom 11  

    Użyty stabilizator 7805 - ma 5V na wyjściu, zasilać musisz conajmniej 8V (stabilizator potrzebuje większego napięcia na wejściu niż daje na wyjściu), jeżeli nie zamierzasz zasilać z sieci 230V tylko z zasilacza to mostek prostowniczy jest ci niepotrzebny.
    Pic16f84 nie jest już produkowany - został zastąpiony nowszym PIC16F84A, który spełnia nowe normy (PB free) i ma też więcej pamięci programu. Polecam poczytać trochę na stronie producenta i w dokumentacjach układów są odpowiedzi na wszystkie twoje pytania.

  • #15 12 Mar 2009 18:54
    Majkel903
    Poziom 11  

    Pytam o tą różnicę bo w skepie spotkała mnie taka sytuacja że gdzy poprosiłem o PIC16F84A to sprzedawca powiedział mi że ma tylko coś takiego PIC16F84-04 i trochę mnie to zmieszało bo teraz nie wiem czy to -04 na końcu to ich numer wpisany do komputera np. oznaczający ilość sztuk czy to dokładny model PIC'a?


    to że tam pisało -04 na koncu to jest pewne na 80% bo moja pamięć troche zawodzi:)

  • #16 15 Mar 2009 14:59
    Majkel903
    Poziom 11  

    Aaa juz zakumałem... ale troche to dziwne bo mówiłeś że PIC16F84 już nie produkują a u mnie w sklepie go mają;/ no ale mniejsza o to dorwałem opis:)

  • #17 21 Mar 2009 10:31
    Majkel903
    Poziom 11  

    Witam
    Jak juz mówiłem talentu do programowania mi brak i dlatego mam problem na samym początku. Mianowicie gdzie mam wkleić zawartość pliku asm oraz jak poustawiać w programie Winpic np. Vdd, typ interfejsu, konfigurację pamięci i wszystkie potrzebne parametry do zaprogramowania układu.

    Z góry wielkie dzięki:) i pozdrawiam.

  • #18 23 Mar 2009 19:56
    kwito
    Poziom 11  

    Do programu to wrzucasz plik hex (plik asm trzeba najpierw skompilować, aby uzyskać hexa, ale ja załączylem do pierwszego posta gotowy hex).
    typ interfejsu ja ustawiam na 'COM84 programmer for serial port' (wszystkie inne opcje w tej zakładce nie zaznaczone)
    w option 'raise vdd before....' niezaznaczone
    reszta ustawień domyślna
    bity konfiguracji procka są już zdefiniowane w kodzie programu, więc w winpic'u już nic nie trzeba ustawiać

  • #19 23 Mar 2009 21:00
    Majkel903
    Poziom 11  

    Nie wiem czy to dobry znak ale po zaprogramowaniu pokazło mi coś takiego


    Zegar binarny na PIC16F84A - asm

    Dodano po 2 [minuty]:

    Przepraszam ze takie duze mogłem obciąć:)

    Dodano po 52 [sekundy]:

    To znaczy chodzi o te zaznaczone na czerwono czy to dobrze czy źle że tak pokazało?

  • #20 24 Mar 2009 17:21
    Majkel903
    Poziom 11  

    I mam problem z kupnem tego potencjometru... napewno ma być 3,3K? czy może 2,2 albo 2,5?

  • #21 26 Mar 2009 01:13
    kwito
    Poziom 11  

    'to czerwone' to błędy - nie powinno ich być, a skoro są to albo nie docisnąłeś procka w podstawce, albo programator jest walnięty, albo procek uszkodzony.

    Potencjometr może być większy. Jak układ miałem jeszcze na płytce uniwersalnej złożony to używałem potencjometru 10k i też było dobrze, ale jak składałem na gotowo to potrzebowałem leżącego. Miałem tylko 3k3 to wsadziłem taki.

    No i przy potencjometrze jest jedna mała poprawka (której nie ma na schemacie) - ta nóżka potencjometru która nie była podłączona, po poprawce jest podłączona do masy (akurat ścieżka masowa przechodzi obok więc bez problemu można połączyć), widać to na tym zdjęciu: Zegar binarny na PIC16F84A - asm

  • #22 06 Kwi 2009 12:29
    Nietoper237
    Poziom 11  

    Witam,
    Sam również chciałbym zrobić taki układ i mam kilka pytań, ale najpierw chce pogratulować autorowi dobrej roboty, naprawdę świetnie to wygląda.
    Mógłbyś mi powiedzieć czy program który wrzuciłeś uwzględnia wszystkie poprawki (chodzi mi o dokładność) czy też trzeba jeszcze coś poprawiać? I jeszcze jakie jest optymalne zasilanie układu? bo ty zastosowałeś 22V i piszesz że wystarczy mniejsze napięcie i czy przy mniejszym napięci nie trzeba będzie zmieniać wartości elementów? A trzecie pytanie jest może trochę mniej związane z tym układem, ale bardzo podoba nie się ta metoda. Jak to zrobiłeś że masz od strony laminatu te wszystkie elementy zaznaczone, podpisane itd.

    I jeszcze jedno, kolego Majkel903, nie pisało tam czasem PIC16F84A-04/P ? W tych sprawach znawcą nie jestem ale to chyba ten sam mikro kontroler ;)

  • #23 07 Kwi 2009 19:25
    kwito
    Poziom 11  

    witam, miło mi, że kolejna osoba zainteresowała się projektem ;)
    W kodzie programu - dokładnie linia 262 jest wartość wpisywana do timera, żeby skrócić jego cykl raz na godzinę, pewnie jest możliwość, że w innych warunkach, na innym kwarcu u kogo innego będzie się trochę spieszył / późnił - wtedy można modyfikować tamtą wartość. W komentarzu jest trochę opisane jak ja to robiłem. (jednak różnice są rzędu np. kilku sekund na tydzień, co też nie jest tragedią)
    Ale można po prostu wgrać gotowego hexa i jeśli będzie zadowalająco dokładny to nic nie trzeba poprawiać ;)
    Co do zasilania wystarczy transformator dający 9V na wyjściu, (a dokładniej >8V po wyprostowaniu i żadnych elementów nie trzeba zmieniać)
    Podpisy elementów to poprostu wydruk zrobiony na samoprzylepnym papierze do drukarek (pliki pdf w skali 1:1 z nadrukami załączałem już w pierwszym poście - w pliku cam_files.rar)

    pozdrawiam

  • #24 08 Kwi 2009 13:36
    Nietoper237
    Poziom 11  

    dziękuje za tak szybką odpowiedz, w najbliższym czasie wezmę się za tworzenie tego układu, najpierw muszę jednak skompletować wszystkie elementy :)

  • #25 19 Kwi 2009 18:27
    Majkel903
    Poziom 11  

    Tak pisało PIC16F84A-04/P jaki mówiłeś.

    Cały czas mam problem z zaprogramowaniem układu. Próbowałem na 3 układach (poniewarz zakupiłem 3 sztuki) i na każdym występuje ten sam błąd;/

  • #26 20 Kwi 2009 07:59
    Nietoper237
    Poziom 11  

    Ja kupiłem już prawie wszystkie elementy (niektórych niestety niema u mnie w sklepie), płytki wytrawione i nie mam czasu na najtrudniejszą część czyli wiercenie otworów :P ale w tym tygodniu może znajdę czas, a potem to już z górki :) Jak skończę robić to powiem Ci czy mi działa (mam nadzieje że zadziała)

    A jeszcze Majkel903 jaki masz programator? I czy podłączasz go do laptopa jak programujesz czy do PC? Bo w niektórych laptopach masz za małe napięcie, może to jest przyczyną problemu.....

  • #27 20 Kwi 2009 16:55
    Majkel903
    Poziom 11  

    Ja używam programatora którego link jest parę postów wyżej... a wczoraj zrobiłem ten programator http://pic16f84.hit.bg/ i też mi nie działa... wyskakuje błąd i nie rozpoczyna programowania... podobno jest error w pliku hex:cry:


    a programuje na PC

    Dodano po 3 [godziny] 23 [minuty]:

    Przepraszam małe sprostowanie... nie ma błędu w pliku hex tylko pisze ze ,,there where errors writing to the PIC".

  • #28 21 Kwi 2009 17:16
    Majkel903
    Poziom 11  

    chyba znalazłem problem a mianowicie:

    Loaded translation file "C:\Program Files\WinPic\translations\polish.txt" .
    Informacja: Odczyt ustawień dla "PIC16F84A" z C:\Program Files\WinPic\devices.ini .
    Info: PIC16F84A added and tested by FENG3
    Nie mogę znaleźć "C:\Program Files\WinPic\devices\PIC16F84A.dev ", proszę borrow/copy z MPLAB !
    Błędny odczyt z lini DATA (HIGH) !
    UWAGA: Nie można zainicjować programatora !
    Testowanie: opóźnienie (500ms) jest 0.50 sekundy, timer_freq=3.5795 MHz ... ok

  • #29 21 Kwi 2009 18:41
    kwito
    Poziom 11  

    czyli już się udało zaprogramowac?

  • #30 25 Kwi 2009 13:47
    Majkel903
    Poziom 11  

    No właśnie się nie udało bo dalej pisze że nie widzi programatora ale jak go podłącze to dioda power się świeci a jak rozpoczne programowanie to pomarańczowa też się zapala no i teraz już nie wiem co mam z tym robić:cry: