Elektroda.pl
Elektroda.pl
X
PCBwayPCBway
Proszę, dodaj wyjątek dla 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 14578 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.
    O autorze
    kwito
    Poziom 11  
    Offline 
    Specjalizuje się w: fpga, pic + asm
    kwito napisał 46 postów o ocenie 0, pomógł 1 razy. Mieszka w mieście gdańsk. Jest z nami od 2008 roku.
  • PCBwayPCBway
  • #2
    Majkel903
    Poziom 11  
    Ładnie wykonane... mi sie podoba ale jak jest z dokładnością? tzn. czy czas się rozbiega?
  • #3
    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
    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
    Majkel903
    Poziom 11  
    Dzięki wielkie to ułatwia sprawę:D

    Dodano po 3 [minuty]:

    A w jakim programie zostal PIC zaprogramowany?
  • PCBwayPCBway
  • #7
    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
    kwito
    Poziom 11  
    Wręcz przeciwnie - podłącza się przez RS232 do COM'a.
  • #10
    Majkel903
    Poziom 11  
    Aha dziękuję za pomoc w razie problemów bede pytał...jeżeli to nie przeszkadza oczywiście:)
  • #11
    Majkel903
    Poziom 11  
    Kabel do połączenia programatora z komputerem zrobiłeś czy kupiłeś?
  • #12
    kwito
    Poziom 11  
    kupiony w sklepie komputerowym
  • #13
    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
    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
    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
    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
    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
    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
    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
    Majkel903
    Poziom 11  
    I mam problem z kupnem tego potencjometru... napewno ma być 3,3K? czy może 2,2 albo 2,5?
  • #21
    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
    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
    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
    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
    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
    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
    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
    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
    kwito
    Poziom 11  
    czyli już się udało zaprogramowac?
  • #30
    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: