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

Oszczedna wersja zegara Nixie na PIC16F84

bruno4 04 Cze 2007 23:19 326963 1142
  • #241 04 Cze 2007 23:19
    marcinek__85
    Poziom 13  

    hmmmm jeśli sie da to może sprubuje:) no ja tez niestety sesja i zabieram sie po trochu do tego:)w wolnej chwili. a ma może ktoś bardzo dokładny opis jak programować PIC-a? tak od podstaw? sporo stron przewertowałem i marne tego skutki zazwyczaj jest pod inne:/ a pod PIC-a bardzo mało:/ słyszałem o książce "Mikrokontrolery PIC16F8x w praktyce" ale nigdzie niema. moze ktoś ma pdf-a z tego?

    Potrafisz napisać podobny artykuł? Wyślij do mnie a otrzymasz kartę SD 64GB.
  • Megger
  • #242 05 Cze 2007 11:49
    dir3ctor
    Poziom 27  

    Ciezko znalezc jakies materialy dot PICow, ale jak chcesz to moge ci podeslac moj wsad do zegarka (w asm).

  • #243 05 Cze 2007 18:35
    dir3ctor
    Poziom 27  

    Troche lopatologicznie napisane, ale lepiej nie umialem ;-) Acha i nie sugeruj sie wyprowadzeniami pinow, bo moj projekt jest oparty na tym temacie ale lekko przebudowany (+sekundnik).

    Code:

    ;*****ustawianie nazw zmiennych i stalych****
    ;
    ;   XC = 3.2768 MHz
    ;      4
    ;  --------- = 819200 instrukcji/sekunde
    ;  3.2768MHz
    ;
    ; prescaler = 128
    ; 819200 / 128 = 6400 = 256 * 25
    ; TIMER0 ma pojemnosc do 256 wiec musi sie przepelnic 25 razy zeby tyknela 1 sekunda.
    ;

    LIST   P=16F84A   ;rodzaj mikrokontrolera
    radix   hex         ;domyslny system zapisu liczb
    __config 0x3ff1     ;wdt off, XT osc

    STATUS   equ   03h ;Adres rejestru statusu
    TRISA   equ   85h ;Adres konfiguracji portu A
    PORTA   equ 05h ;Adres portu A
    TRISB   equ 86h ;Adres konfiguracji portu B
    PORTB   equ 06h ;Adres portu B
    TIMER   equ   01h ;Adres Timera 0
    GIE      equ   07h ;Bity konfiguracyjne....
    T0IE   equ   05h
    T0IF   equ 02h
    INTCON   equ 0Bh

    ; TABELA ZE ZMIENNYMI PROGRAMOWYMI:
    COUNT1   equ 08h ;Dwie petle opoznienia
    TEMP   equ 09h ;zmienna tymczasowa
    G_1      equ 0x0C ;zmienna z czasem GG:MM:SS
    G_2      equ 0x0D
    M_1      equ 0x0E
    M_2      equ 0x0F
    S_1      equ 0x10
    S_2      equ 0x11
    COUNT2   equ   0x12
    tick   equ .25
    COUNT3   equ 0x13


    org      0x00      ;wyznaczam oryginalny poczatek programu
    goto   Cdalszy

    org      0x04      ;poczatek kodu przerwania
       movwf TEMP      ;kopiuje w do tempa /na wszelki wypadek ;p/

       decfsz COUNT2,1   ;jesli bit = 1 to zmniejsza COUNT2 o 1:
       goto koniec2   ;jesli count2 != 0 ide do konca
                   ;jesli count == 0 kontynuuje i...
       movlw   tick   ;ustawiam tick spowrotem na 4
       movwf   COUNT2

       incf S_2,1      ;...zwiekszamy ilosc sekund o 1   

       ;clrf TIMER      ;czyszcze timer 00000000

       koniec2




       bcf INTCON,T0IF
       movf TEMP,w      ;kopiuje TEMPA do w /przywracam w/
    retfie            ;koniec kodu przerwania

    Cdalszy
    ;****ustawienia portow****
    bsf      STATUS,5   ;Wchodze na Bank1
    movlw   b'00000'      ;Wpisuje 00000 do TRISA,
    movwf   TRISA       ;i ustawiam caly portA jako output
    movlw   b'11000000' ;Wpisuje 00111111 do TRISB
    movwf   TRISB       ;i ustawiam portB jako 6xOutput i 2xInput
    bcf      STATUS,5    ;Wchodze na Bank0

    ;****ustawiena prescalera****
    movlw   b'11010110'      ;Bit   opis   00000110 - prescaler=128
    option               ;0   Prescaler Value
                      ;1   Prescaler Value
                      ;2   Prescaler Value
                      ;3   Prescaler Assignment (0=tmr0, 1=watchdog timer)
                      ;4   tmr0 external edge clock select (0=rising, 1=falling)
                      ;5   tmr0 clock source (0=internal instruction cycle, 1=external)
                      ;6   Interrupt edge select (0=falling, 1=rising)
                      ;7   Port B Pullup Enable (0=enabled, 1=disabled)
    bsf INTCON,GIE
    bsf INTCON,T0IE
    clrf TIMER

    clrf COUNT1

    movlw   tick    ;wpisuje 25 do conut2
    movwf   COUNT2

    ;***********************************************START PROGRAMU
    Start
       call licz
       call sprawdz_przycisk_min
       call sprawdz_przycisk_godz

       call    L1_akt   ; lampa 1 aktywna Hh:mm:ss
       movf   G_1,w   ; wpisuje G_1 do W
       movwf   PORTA   ; wpisuje W na port A
       call    Delay

       call    L2_akt   ; lampa 2 aktywna Hh:mm:ss
       movf   G_2,w   ; wpisuje G_2 do W
       movwf   PORTA   ; wpisuje W na port A
       call    Delay

       call    L3_akt   ; lampa 3 aktywna Hh:mm:ss
       movf   M_1,w   ; wpisuje M_1 do W
       movwf   PORTA   ; wpisuje W na port A
       call    Delay

       call    L4_akt   ; lampa 4 aktywna Hh:mm:ss
       movf   M_2,w   ; wpisuje M_2 do W
       movwf   PORTA   ; wpisuje W na port A
       call    Delay

       call    L5_akt   ; lampa 5 aktywna Hh:mm:ss
       movf   S_1,w   ; wpisuje S_1 do W
       movwf   PORTA   ; wpisuje W na port A
       call    Delay

       call    L6_akt   ; lampa 6 aktywna Hh:mm:ss
       movf   S_2,w   ; wpisuje S_2 do W
       movwf   PORTA   ; wpisuje W na port A
       call    Delay

    goto Start

    ;****stale fragmenty programu****
    ;zapalanie 1..6 lampy
    L1_akt
       movlw b'00000001'
       movwf PORTB
    return

    L2_akt
       movlw b'00000010'
       movwf PORTB
    return

    L3_akt
       movlw b'00000100'
       movwf PORTB
    return

    L4_akt
       movlw b'00001000'
       movwf PORTB
    return

    L5_akt
       movlw b'00010000'
       movwf PORTB
    return

    L6_akt
       movlw b'00100000'
       movwf PORTB
    return

    ;opoznienie
    Delay
       clrwdt
       Loop1   decfsz   COUNT1,1   ; petla 255x
             goto   Loop1
    return

    Delay2
       clrwdt
       Loop2   decfsz   COUNT1,1   ; petla 255x255
             goto    Loop2
             decfsz   COUNT3,1
             goto   Loop2
    return

    ;ustawianie godziny
    sprawdz_przycisk_min
       BTFSS PORTB,6      ;sprawdz przycisk minut
       goto sprawdz_end   ;jesli nie wcisniety to koncz
       call Delay2         ;jesli wcisniety to czekaj chwile
       BTFSS PORTB,6      ;i jesli dalej wcisniety to zwiekszam minuty o +1
       goto sprawdz_end
       incf M_2,1

       btfss M_2,3      ;jesli  M_2 != 8 to
       goto sprawdz_end; idzie do konca
       btfss M_2,1      ; a jesli jest 8 to sprawdzam czy nie 10 :-)
       goto sprawdz_end; jesli nie to ide do konca
       goto min_2      ; jesli tak to zeruje minuty i dodaje +1 do dziesiatek minut

       sprawdz_end
    return

    sprawdz_przycisk_godz
       BTFSS PORTB,7      ;sprawdz przycisk minut
       goto sprawdz2_end   ;jesli nie wcisniety to koncz
       call Delay2         ;jesli wcisniety to czekaj chwile
       BTFSS PORTB,7      ;i jesli dalej wcisniety to zwiekszam minuty o +1
       goto sprawdz2_end
       incf G_2,1

       btfss G_1,1         ;jesli G_1 != 2 to
       goto cd            ;idzie do konca
       btfss G_2,2         ;jesli G_2 != 4 to
       goto cd   ;idzie do konca albo resetuje godzine
       clrf G_1
       clrf G_2

       cd

       btfss G_2,3         ;jesli  G_2 != 8 to
       goto sprawdz2_end   ;idzie do konca
       btfss G_2,1         ;a jesli jest 8 to sprawdzam czy nie 10 :-)
       goto sprawdz2_end   ;jesli nie to ide do konca
       incf G_1,1         ;jesli tak to dziesiatki godzin +1,
       clrf G_2         ;czyszcze jednostki godzin
                      ;i robie test na 24:00:00...
       sprawdz2_end
    return

    ;liczenie godziny...
    licz
       btfss S_2,3      ;jesli  S_2 != 8 to
       goto koniec      ;idzie do konca
       btfss S_2,1      ;a jesli jest 8 to sprawdzam czy nie 10 :-)
       goto koniec      ;jesli nie to ide do konca
       goto dziesiatki   ;jesli tak to zeruje sekundy i dodaje +1 do dziesiatek sekund

       dziesiatki
       incf S_1,1   ; zwiekszam dziesiatki sekund o +1
       clrf S_2;

       btfss S_1,2 ; jesli S_1 != 4 to
       goto koniec ; idz do konca
       btfss S_1,1   ; a jesli nie to sprawdza czy nie 6 przypadkiem
       goto koniec ; jak nie to koniec
       goto min_1  ; jak tak to skok do labela min_1

       min_1
       clrf S_1   ; czyszcze S_1
       incf M_2,1 ; jednosci minut +1

       btfss M_2,3      ;jesli  M_2 != 8 to
       goto koniec      ; idzie do konca
       btfss M_2,1      ; a jesli jest 8 to sprawdzam czy nie 10 :-)
       goto koniec      ; jesli nie to ide do konca
       goto min_2      ; jesli tak to zeruje minuty i dodaje +1 do dziesiatek minut
       
       min_2
       clrf M_2   ;czyszcze M_2
       incf M_1,1 ; dziesiatki minut +1

       btfss M_1,2 ; jesli M_1 != 4 to
       goto koniec ; idz do konca
       btfss M_1,1   ; a jesli nie to sprawdza czy nie 6 przypadkiem
       goto koniec ; jak nie to koniec
       goto godz_1 ; jak tak to skok do labela godz_1

       godz_1
       clrf M_1   ;czyszcze M_1
       incf G_2,1 ; +1 do godzin

       btfss G_1,1    ; jesli godzina != 2x:xx:xx
       goto kontyn      ; idz do kontynuuj
       btfss G_2,2      ; albo sprawdz czy nie 24:xx:xx
       goto kontyn      ; jesli nie to kontynuuj
       goto resetuj   ; jesli tak to resetuj

       resetuj
       clrf G_1   ;czyszcze G_1
       clrf G_2   ;i G_2
       goto koniec   

       kontyn
       btfss G_2,3      ;jesli  G_2 != 8 to
       goto koniec      ; idzie do konca
       btfss G_2,1      ; a jesli jest 8 to sprawdzam czy nie 10 :-)
       goto koniec      ; jesli nie to ide do konca
       goto godz_2      ; jesli tak to zeruje jednostki i dodaje +1 do dziesiatek godzin

       godz_2
       clrf G_2   ;czyszcze G_2
       incf G_1,1
       koniec
    return

    end

  • #244 05 Cze 2007 21:16
    milypl
    Poziom 13  

    Spytam o cos innego :] mam taki problem, jak podłączam baterie do podtrzymania pamięci to mi zegar zeruje i nic nie idzie ustawic, co może być nie tak??

  • Megger
  • #245 05 Cze 2007 22:17
    Trabi
    Poziom 36  

    A'propos baterii: w moim zegarze bateria się.. wyładowała! Zegar nie ładuje akumulatora w czasie pracy z zasialcza. Więc jak Wam też padnie akumulator, to niestety czeka wyjmowanie go z zegara i ładowanie osobno gdzieś ładowarką :( .

  • #246 05 Cze 2007 22:53
    dir3ctor
    Poziom 27  

    Mi tam elegancko laduje ;P Na poczatku podlaczylem calkiem wyladowana bateryjke z jakiejs starej plyty glownej, zegar ja podladowal i teraz dziala jako podtrzymanie.

  • #249 07 Cze 2007 16:46
    bb84
    Poziom 21  

    Wymieniałem 2 razy. Wymieniałem również elektrolity. Stawiam na diode 1N4936, uwalonego IRF740 albo BC547. Dodam, że regulacja potencjometrem też nic nie zmienia. Na co stawiacie ?

    Pozdrawiam.

  • #250 07 Cze 2007 19:27
    Gonza
    Poziom 27  

    Układ nie jest skomplikowany, skoro część elementów sprawdziłeś to zostały już tylko te tranzystory. A upewniłeś się że są dobrze wlutowane ? Dioda powinna być ok.

  • #251 07 Cze 2007 21:39
    Snikers
    Poziom 24  

    jak masz dostep do oscyloskopu to sprawdz czy 555 generuje cokolwiek. a moze IRF Ci sie nie otwiera

  • #252 08 Cze 2007 14:44
    bb84
    Poziom 21  

    Wymieniłem oba tranzystory i dupa. Dalej wyjściowe na poziomie wejściowego. Nie wiem już co jest grane. Taki efekt może się pojawić przy niewłaściwym dławiku ? Choć wątpię aby koleś w elektroniku sprzedał mi inny niż 100uH. Co jeszcze może być nie tak ?

    Pozdrawiam.

  • #253 08 Cze 2007 18:04
    dir3ctor
    Poziom 27  

    Tobie na wyjscie podaje napiecie wejsciowe. Gdybys mial zly dlawik to po prostu bylo by inne napiecie wyjsciowe (ale na pewno nie w granicach zasilajacego).

    Sprawdz NE555 czy generuje - tak jak sugeruje towarzystwo.

  • #254 08 Cze 2007 18:23
    bb84
    Poziom 21  

    Niestety nie posiadam oscyloskopu, nie mogę sprawdzić NE555. Wymieniłem go natomiast po raz trzeci. Zostaje dioda, rezystory lub 2 kondensatory. Elektrolity wymieniałem.

    Pozdrawiam.

  • #255 08 Cze 2007 18:33
    dir3ctor
    Poziom 27  

    A sciezki wszystkie na pewno cale? Ewentualnie gdzies zwarcie mozesz miec...

  • #256 08 Cze 2007 18:59
    bb84
    Poziom 21  

    Sprawdzałem, polutowałem na uniwersalnej od nowa, wcześniej było na płytce do zegara który robie i dalej to samo.

    Pozdrawiam.

  • #257 08 Cze 2007 19:06
    dir3ctor
    Poziom 27  

    Cholera no... ja mialem takie objawy jak wlutowalem strzelonego elektrolita, ale ty piszesz ze byly wymieniane. Dziwna sprawa ;-)

  • #258 08 Cze 2007 19:15
    bb84
    Poziom 21  

    To moja konstrukcja nad którą pracuję https://www.elektroda.pl/rtvforum/viewtopic.ph...&start=0&sid=b76faeb19cd400d4b05eddbe351f356c

    Wszystko zaczęło się od złożenia przetwornicy na płytce z kontrolerem. Przez złą polaryzacje strzeliły elektrolity. To była pierwsza rzecz jaką wymieniłem. Okazało się, że dławik osiowy się nie nadaje. Wtedy już na wejściu było tyle samo co na wyjściu. Później dostałem dławik pionowy, wymieniłem, nic. Złożyłem wszystko na płytce uniwersalnej - dalej nic. Wymieniłem NE555 - nic. Dzisiaj kombinowałem z wymianą tranzystorów -nic. Płakać się chce. Tranzystory napewno są w dobrej pozycji bo sprawdzałem z datashitami. Czyli zostaje dioda, kondy, albo rezystory. Dodam jeszcze, że kręcenie potencjometrem nic nie daje.

    Pozdrawiam.

  • #259 08 Cze 2007 19:36
    dir3ctor
    Poziom 27  

    A jak elektrolity strzelily to nie skopciles diody? Sprawdz no ja jakims multimetrem.

  • #262 12 Cze 2007 18:06
    bb84
    Poziom 21  

    Dir3ctor ładny zegar. A projekt mojego stoi w miejscu ...

    Wymieniłem wszystkie elementy. Dioda była dobra, rezystory i kondy też. I dalej to samo. Zastanawiam się jeszcze nad potencjometrem czy nie jest zwalony, ponieważ kręce, kręce i nic. Zauważyłem na tym schemacie http://bruno.netstrefa.com.pl/radio/projekt/nixiepower/ podwójny R2. Jeden R2 ma 1k, a drugi R2 ma 10k. Więc jak w końcu ? U mnie R3 to 1K, a R2 10K. Dobrze ? Nerwy mi puszczają. Kombinuje już któryś tydzień i ... nic. :cry:

    Pozdrawiam.

  • #263 12 Cze 2007 22:31
    dir3ctor
    Poziom 27  

    Zerknij na zdjecie gotowej przetwornicy, na kolorowe paski na oporach i dowiesz sie ktory jest ktory ;-)

  • #264 12 Cze 2007 23:42
    Trabi
    Poziom 36  

    bb84 napisał:
    ...Więc jak w końcu ?...

    Oszczedna wersja zegara Nixie na PIC16F84

    I wszystko jasne :)

  • #266 14 Cze 2007 20:01
    Kira Yamato
    Poziom 11  

    Mam mały problem a więc i pytanka:
    #1. Jaki w końcu ma być tranzystor w tym zegarze: BUZ73 czy IRF730 bo wlutowałem IRF i na emiterze mam zaledwie 1mV wogóle mi to niepracuje

    #2. Czy jeśli wszystko jest sprawnie zaprogramowane to bez zaprogramowanego procka zacznie świecic ta neonówka zeby chociaż wiedzieć czy sprawnie wszystko chodzi.

  • #268 14 Cze 2007 21:52
    bb84
    Poziom 21  

    A nie IRF740 ?

    Wracając do mojego problemu, polutowałem przetwornice na płytce z uC na nowych podzespołach i dalej to samo, czyli < 12V. Ręce opadają. Dioda to 1N4936, na 1N4007 to samo. Skończyły mi się pomysły. Bardzo prosze o sugestie.

    przepraszam za zawracanie gitary ;)

    Pozdrawiam.

  • #269 14 Cze 2007 22:06
    Kira Yamato
    Poziom 11  

    kto wie może mamy dokładnie ten sam problem z tą przetwornicą:| spróbuję wlutować IRF740 (gdzieś powinien jeden się szwendać:D). Narazie jeszcze nie pochwalę się swoim zegarem póki nie zadziała, pozatym nie chcę was straszyć tymi płytkami :?

  • #270 15 Cze 2007 00:01
    Trabi
    Poziom 36  

    bb84, nie ma siły - coś musisz mieć skopane z elementami ew. źle druk zrobiony, może gdzieś masz mikroskopijne przewy w druku (ja miałem takich przerw chyba 7!). Sprawdź miernikiem WSZYSTKIE ściezki. Sprawdź czy nie wstawiłęś jakiegoś elementu nie tak jak powinien być. Wielu ten zegar startuje za 1-szym razem; sam też popełniłem wiele błędów zanim zobaczyłem coś na wyświetlaczach (nie ten kwarc, nie ta cewka, przerwy w druku itp.). Ale w końcu ruszył - i działa świetnie!

    Głowa do góry! Dasz radę :)