Sari la conținut
ELFORUM - Forumul electronistilor

problema rulare program pic


free_fiber

Postări Recomandate

Hai ca acum m-am uitat mai bine.Debouncing-ul pe care tu incerci sa-l implementezi este gresit.Algoritmul este asa (pe scurt):- testez daca e 1 (presupunand ca in mod normal e 0)- daca e 1 atunci astept niste milisecunde SI apoi testez din nou daca este 1- daca este 1 ATUNCI tasta a fost apasata- se repeta smecheria pentru 0- la sfarsit am convingerea ca a fost o apasare valida si tasta a fost eliberata.Momentul in care incrementezi contorul depinde de "frontul" pe care vrei, adica daca vrei la apasare atunci pui incrementarea imediat dupa ce ai detectat apasarea valida.Ce ai facut tu mai sus conduce la "prinderea" unor spike-uri care sa nimeresc SAU NU in intervalul de 50 ms.

Link spre comentariu
  • Răspunsuri 18
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

  • free_fiber

    8

  • XAN77

    3

  • Abram Burel

    3

  • d2134

    2

Top autori în acest subiect

Bun, deci din ce am citit in postul lui Abramburel, am inteles ca verificarea trebuie sa dureze 50ms..

 

device 16f628aDim p as ByteDIM pornit as byteDim o as byteDim oprit as byteDim puls as byteTRISB = %00000100           pornit = 0oprit = 0puls = 0Portb = %00000000 loop:if portb.2 = 1 then     p = 1     delayms 50endifIf portb.2 = 1 and p = 1 then     pornit = 1 endifif Portb.2 = 0 and pornit = 1 then     o = 1    delayms 50endifIf portb.2 = 0 and o = 1 then    oprit = 1EndifIF pornit = 1 and oprit = 1 then     puls = puls + 1 endifpornit = 0oprit = 0If puls > 7 then portb = %01000000 else Portb = %00000000goto loop

E bine? N-am testat codul si in PIC, dar cand o voi face, o sa-i dau impulsuri cu un push-button.

Link spre comentariu

A mers !!!!!!!!! :supz:

... cu impulsuri date cu o sarma. Am modificat programul dupa ideea "verifici, astepti si verifici iar".

 

Iata si codul care a dat roade:

device 16f628aDim p as ByteDIM pornit as byteDim o as byteDim oprit as byteDim puls as byteTRISB = %00000100           pornit = 0oprit = 0o = 0p = 0puls = 0Portb = %00000000 loop:if portb.2 = 1 then     p = 1     delayms 50endifIf portb.2 = 1 and p = 1 then     pornit = 1    p = 0 endifif Portb.2 = 0 and pornit = 1 then     o = 1    delayms 50endifIf portb.2 = 0 and o = 1 then    oprit = 1    o = 0EndifIF pornit = 1 and oprit = 1 then     puls = puls + 1    pornit = 0    oprit = 0 endifIf puls > 7 then portb = %01000000 else Portb = %00000000goto loop

Acum... trebuie sa transform acest program in numarator de impulsuri pe secunda (un fel de cititor de frecventa). Sa vedem ce reusesc.

 

Multumesc celor ce mi-au sarit in ajutor!

Link spre comentariu

Creează un cont sau autentifică-te pentru a adăuga comentariu

Trebuie să fi un membru pentru a putea lăsa un comentariu.

Creează un cont

Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!

Înregistrează un nou cont

Autentificare

Ai deja un cont? Autentifică-te aici.

Autentifică-te acum



×
×
  • Creează nouă...

Informații Importante

Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.Termeni de Utilizare si Ghidări