Milane, ja te razumem potpuno, radiš sa onim sa čime raspolažeš. Ja sam pristalica teorije da čovek treba da uči na onome što će i da koristi - šta će meni učenje na dsPIC-u kada mi on verovatno nikada neće biti potreban.
Obzirom da je kod tebe 16F628 najjeftiniji, predlažem da ostaneš na njemu ako ti je dovoljan za tvoje potrebe. Ja sam nedavno prešao na 16F1827 jer je on u COMET-u najjeftiniji od 18-pinaca, a meni su oni najčešće potrebni, plus što ima jako puno novog hardvera u sebi. Na 10 kom. je cena oko 190 din + PDV, ako se dobro sećam. Ako hoćeš da predješ na tu novu seriju sa proširenim 14-bitnin jezgrom, potreban ti je PBP3 (a nije loše i da se svakako prebaciš na PBP3) i neki programator koji može da ih programira. Pošto radiš pod WINDOWS-ima, PicKit2 je sasvim dovoljan s tim da mora da se skine fajl sa novim definicijama, tj. novi .dat fajl sa Microchip sajta.
Da se vratim tvom problemu. Darko ti je dao pola rešenja (ili malo manje, zavisi šta je izvor impulsa), tj. njegovo rešenje će da ti uvećava brojač sve dok traje impuls. Napisaću ti program uz pretpostavke da je ulaz na RB0, a izlaz na RB1, da je aktivno stanje logička jedinica, i da PIC može da se vrti u petlji dok broji, tj. da ne mora da radi ništa drugo dok se ne dostigne zadati broj:
Code:
cekaj_log1:
if PORTB.0=0 then cekaj_log1 ; čekamo da se pojavi log. 1
brojac=brojac + 1 ; kad se pojavi, uvećamo brojač
if brojac=zadata_vrednost then upali_led ; dostignuta zadata, idemo dalje, palimo LED
cekaj_log0:
if PORTB.0=1 then cekaj_log0 ; čekamo da ulaz padne na log.0 kako ne bi imali lažno brojanje
goto cekaj_log1
upali_led:
PORTB.1=1
E sad, ovo ovako može da prodje ako je impuls koji brojiš čist, tj. ako je iz nekog elektronskog brojača ili sl (i to bi bilo tih pola rešenja od Darka). Ako je iz tastera, mikroprekidača ili nekog drugog mehaničkog elementa, 99,9% da će doći do treperenja kontakata i do lažnog brojanja (u zavisnosti od kvaliteta izrade prekidača). Treperenje se na engleskom naziva baunsing (bouncing - poskakivanje), a metod za eliminisanje tog treperenja debaunsing (debouncing). Postoje softverske i hadrverske metode, a pošto već radimo sa mikrokontrolerima, softversko je uglavnom prihvatljivo pošto je dovoljno da detekcija treperenja traje 5 do 20 ms, što u većini aplikacija ne predstavlja problem.
Softverskih rešenja ima nekoliko, od prostog testiranja ulaza, tzv poling (polling) pa do rešenja sa upotrebom interapta. U 99% mojih aplikacija koristim ovo prvo rešenje i to u trajanju od 5 do 10 ms. To moje rešenje je takvo da pored eliminisanja treperenja ujedno detektuje samo momenat pritiska na taster, nebitno koliko dugo je taster pritisnut tako da se jednim udarcem ubiju dve muve. U prevodu, to znači da u gornjem primeru nije potrebno čekati da ulaz padne na logičku nulu. Taj potprogram je pisan u ASM-u pa ga neću dati ovde (napisao sam ga još kad nije postojalo ništa sem ASM-a za PIC) i tako ga i dan-danas koristim (dao sam ga pre godinu-dve u nekoj od tema), ali ako ti treba, napisaću ga u PBP-u.
A ako je potrebno da kontroler radi još nešto dok se ne pojavi logičko 1 na ulazu, umesto da se vrti u petlji može da ide da radi nešto drugo pod uslovom da to što radi ne traje duže od trajanja impulsa, kako se ne bi neki impuls preskočio.
Pozdrav.
Sinisha