čítač impulzov s PIC16f84 - problém

Diskuze a poradna o programátorech a programování různých obvodů

Moderátor: Moderátoři

Zpráva
Autor
Uživatelský avatar
mikollar
Příspěvky: 1477
Registrován: 26 pro 2004, 00:00
Bydliště: Košice - okolie

čítač impulzov s PIC16f84 - problém

#1 Příspěvek 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)
Uživatelský avatar
jezevec
Hlavní moderátor
Příspěvky: 6101
Registrován: 13 čer 2004, 00:00
Bydliště: Břeclavsko
Kontaktovat uživatele:

#2 Příspěvek 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.
Uživatelský avatar
mikollar
Příspěvky: 1477
Registrován: 26 pro 2004, 00:00
Bydliště: Košice - okolie

#3 Příspěvek 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)
Uživatelský avatar
ZdenekHQ
Významný člen
Příspěvky: 25519
Registrován: 21 črc 2006, 00:00
Bydliště: skoro Brno
Kontaktovat uživatele:

#4 Příspěvek od ZdenekHQ »

Máš ošetřený překmity zdroje pulsů (tlačítko atd...) ?
Pro moje oslovení klidně použijte jméno Zdeněk
Správně navržené zapojení je jako recept na dobré jídlo.
Můžete vynechat půlku ingrediencí, nebo přidat jiné,
ale jste si jistí, že vám to bude chutnat[?
]
Uživatelský avatar
mikollar
Příspěvky: 1477
Registrován: 26 pro 2004, 00:00
Bydliště: Košice - okolie

#5 Příspěvek 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
Uživatelský avatar
ViPali
Příspěvky: 524
Registrován: 21 lis 2005, 00:00
Bydliště: Bratislava

#6 Příspěvek 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
Naposledy upravil(a) ViPali dne 13 zář 2006, 00:05, celkem upraveno 1 x.
Uživatelský avatar
ViPali
Příspěvky: 524
Registrován: 21 lis 2005, 00:00
Bydliště: Bratislava

#7 Příspěvek 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
Uživatelský avatar
mikollar
Příspěvky: 1477
Registrován: 26 pro 2004, 00:00
Bydliště: Košice - okolie

#8 Příspěvek od mikollar »

DA SA TO POUZIT OD -3 DO 999 ?, TEN PROBLEM ESTE MAM
Uživatelský avatar
mikollar
Příspěvky: 1477
Registrován: 26 pro 2004, 00:00
Bydliště: Košice - okolie

#9 Příspěvek 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?
Uživatelský avatar
ViPali
Příspěvky: 524
Registrován: 21 lis 2005, 00:00
Bydliště: Bratislava

#10 Příspěvek 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
Uživatelský avatar
jezevec
Hlavní moderátor
Příspěvky: 6101
Registrován: 13 čer 2004, 00:00
Bydliště: Břeclavsko
Kontaktovat uživatele:

#11 Příspěvek 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
:
:
Uživatelský avatar
mikollar
Příspěvky: 1477
Registrován: 26 pro 2004, 00:00
Bydliště: Košice - okolie

#12 Příspěvek 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?
Uživatelský avatar
ViPali
Příspěvky: 524
Registrován: 21 lis 2005, 00:00
Bydliště: Bratislava

#13 Příspěvek 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í.
Uživatelský avatar
mikollar
Příspěvky: 1477
Registrován: 26 pro 2004, 00:00
Bydliště: Košice - okolie

#14 Příspěvek 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
Uživatelský avatar
ViPali
Příspěvky: 524
Registrován: 21 lis 2005, 00:00
Bydliště: Bratislava

#15 Příspěvek od ViPali »

Mohol si priložiť aj schému.
Odpovědět

Zpět na „Programování PIC, ATMEL, EEPROM a dalších obvodů“