Stránka 1 z 2

čítač impulzov s PIC16f84 - problém

Napsal: 12 zář 2006, 21:02
od mikollar
nazdar, Skusam si naprogramovat vlastní čítač impulzov s pomocou PIC16f84A. Program v simulátore bezi bez problemov, ale akonáhle ho dám do PICka tak to na Led displeji ukazuje somariny sem tam ukaze spravne číslo, displej je pripojený na správne porty RB0-a .....RB6-g RA0 disp1...RA2disp3
zatial pocita (aspon by mal) od -3 do 9, viem ze je to zlozito, mne ide hlavne prijst nato kde je chyba dik za rady
program je tu http://obkysak.tripod.com/asm.htm pravym treba klknut na odkaz 1.asm a dat ulozit ako

edit: opravena mala chyba v asm subore (nesuvisela s problemom)

Napsal: 12 zář 2006, 22:38
od jezevec
Abych pravdu přiznal, nějak se v tom programu nemohu zorientovat. Zásadní chybou je, že prakticky nepoužíváš komentář. Okomentuj to co nejvíce, když začínáš, klidně každý řádek, jinak za pár dní ani ty sám nebudeš vědět, jaks to vlastně myslel.

Napsal: 12 zář 2006, 23:01
od mikollar
Ani sa necudujem ze sa v tom nevyznas ved som to pisal ja , zlozitejsie a komplikovanejsie sa uz neda :oops: Dufam ze moj komentar pomoze (casom aj mne)

Napsal: 12 zář 2006, 23:19
od ZdenekHQ
Máš ošetřený překmity zdroje pulsů (tlačítko atd...) ?

Napsal: 12 zář 2006, 23:22
od mikollar
jj to mam ide mi to priamo z druheho uProcesora ale hned po zapnuti by mala byt len -3 a nie hociake somariny na displeji, aj ked vstup uzemnim tak je to rovnake, na simulatore krasne od -3 do 9 pocita a potom uz len od 0 do 9 a to je to co presne chcem

Napsal: 12 zář 2006, 23:37
od ViPali
Pozerám na program a mám pocit, že mi tam chýbajú inštrukcie :wait: ono to možno zobrazuje správne, ale tak rýchlo, že tvoje oko to nestíha sledovať a vidíš iba to, na čo zareaguje mozog.

ZOBRAZ CLRF PORTB ;vynuluje portb
MOVLW .1 ;
MOVWF PORTA ;zapne displej cislo 1 (port RA0) jednotky
MOVF JED,0 ;zapise cislo ulozene v pomocnom registre do W
MOVWF PORTB ;obsah W na portb - na 7 segmentovku
CALL WAIT10
CLRF PORTB ;vynuluje portb
MOVLW .2 ;
MOVWF PORTA ;zapne displej cislo 2 (port RA1) desiatky
MOVF DES,0 ;zapise cislo ulozene v pomocnom registre do W
MOVWF PORTB ;obsah W na portb - na 7 segmentovku
CALL WAIT10
CLRF PORTB
MOVLW .4 ;zapne displej cislo 3 (port RA2) stovky
MOVWF PORTA
MOVF STO,0
MOVWF PORTB
CALL WAIT10
CLRF PORTB


Label WAIT10
čakanie 10ms
return

Napsal: 13 zář 2006, 00:01
od ViPali
Máš tam sekvenciu:
MINUS MOVLW B'01000000' ;ulozena binarna hodnota cisla pre 7 segmentovku
RETURN

NULA MOVLW B'00111111'
RETURN

JEDEN MOVLW B'00000110'
RETURN

atď.
Myslím, že jednoduchšie to je takto:

movf CISLO.......; načítané pulzy do W
call _7segment...; idem z čísla vyrobiť znak
GOTO ZOBRAZ
.
.
.
_7segment . . . . .; tu budem vyrábať znaky

addwf pc . . . . . . ; w pripočítam k čítaču inštrukcií (PC registru) poskočí o toľko inštrukcií, aké číslo si priniesol vo W
retlw B'00111111' ; NULA - vráti sa z podprogramu a vo W bude znak
retlw B'00000110' ; JEDEN
retlw B'01011011' ; DVA
retlw B'01001111' ; TRI
retlw B'01100110' ; STYRI
retlw B'01101101' ; PAT
retlw B'01111101' ; SEST
retlw B'00000111' ; SEDEM
retlw B'01111111' ; OSEM
retlw B'01101111' ; DEVAT
retlw B'01000000' ; minus - mmínusu musíš priradiť číslo, alebo ho generovať samostatne

Napsal: 13 zář 2006, 00:08
od mikollar
DA SA TO POUZIT OD -3 DO 999 ?, TEN PROBLEM ESTE MAM

Napsal: 13 zář 2006, 00:13
od mikollar
TAKZE UZ TO IDE OK S TYM POVODNYM PROGRAMOM S DOPLNENOU CAKACOU SLUCKOU A NOVYM PIC LEBO TEN NOVY CO SOM MAL BOL ZLY :roll: MOOOC DIK ZA NAKOPNUTIA A RADY VSETKYM

Jak skusam tak skusam ale neviem rozchodit ten program s tabulkou od ViPali . Po prejdeni cisel 0-9 trba register cislo nulovat ze?

Napsal: 13 zář 2006, 08:38
od ViPali
Máš čítač do 999, takže máš aj tri registre
CISLO_1, CISLO_10, CISLO_100.

Keď pripočítaš k CISLO_1 impulz, hneď skontroluješ či je 10, ak áno CISLO_1 = 0 a CISLO_10 = +1, a hneď skontroluješ CISLO_10 či je 10, ak áno tak CISLO_10 = 0 a CISLO_100 = +1

A potom
CISLO_1 do W
CALL TABULKA
GOTO ZOBRAZ_jednotky
CISLO_10 do W
CALL TABULKA
GOTO ZOBRAZ_desiatky
CISLO_100 do W
CALL TABULKA
GOTO ZOBRAZ_stovky

TABULKA
.
retlw 0xXX

Napsal: 13 zář 2006, 09:01
od jezevec
Na začátek tabulky dej

ADDWF PCL,F
retlw B'00111111' ; NULA - vráti sa z podprogramu a vo W bude znak
retlw B'00000110' ; JEDEN
:
:

Napsal: 13 zář 2006, 16:06
od mikollar
jeeeej to je parada , som si nemyslel ze az tak sa to da zjednodusit, ako inac sa da zistit ci je osah registru rovny nejakemu cislu napr. 10, ja to robim tak ze si do ineho registra ulozim to cislo cize v tomto pripade 10 a ked chcem zistit ci uz je osah registru rovny 10 tak presuniem cislo 10 do W a odpocitam od testovaneho registra, ak bol obsah testovaneho registra 10 tak vysledok bol nula a v registry status sa Z nastavi na 1 a podla tohto urcujem, Da sa to aj jednoduchsie? asi hej vsak?

Napsal: 13 zář 2006, 18:02
od ViPali
Ani nie, vždy musíš porovnať s daným (10) číslom a kontrolovať Z. Tých inštrukcií je tam vždy takmer rovnako veľa.

Ak má niekto nejaký trik, možno sa zdôverí.

Napsal: 13 zář 2006, 20:31
od mikollar
Tak konecne sa mi to podarilo daujem vsetkym za ich rady a pomoc bez nich by som to nikdy nedokazal spravit. Hotovy subor asm som dal na upload pod nazvom citac16f84.asm Tento citac na uploade pocita od 0 nie od -3 aby to mohlo vyuzit viac ludi bez upravy :)

Este raz dakujem vsetkym

Napsal: 14 zář 2006, 10:11
od ViPali
Mohol si priložiť aj schému.