Abram Burel Postat Octombrie 17, 2007 Partajează Postat Octombrie 17, 2007 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
free_fiber Postat Octombrie 17, 2007 Autor Partajează Postat Octombrie 17, 2007 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
Abram Burel Postat Octombrie 17, 2007 Partajează Postat Octombrie 17, 2007 Cine-i o si p si cine le initializeaza la fiecare "ciclu"? Link spre comentariu
free_fiber Postat Octombrie 17, 2007 Autor Partajează Postat Octombrie 17, 2007 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
Postări Recomandate
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 contAutentificare
Ai deja un cont? Autentifică-te aici.
Autentifică-te acum