DarkAngel_Bv Postat Iunie 17, 2012 Partajează Postat Iunie 17, 2012 Nici o idee legata de masurarea lungimii pulsurilor?Ca frecventa maxima nu va trece de 100-150Hz.O idee ar fi sa pun un condensator si o rezistenta de valori cunoscute (in functie de lungimea pulsului condensatorul se incarca mai putin sau mai mult), dar nu va putea fi o masuratoare prea precisa. Link spre comentariu
Liviu M Postat Iunie 17, 2012 Partajează Postat Iunie 17, 2012 Nici o idee legata de masurarea lungimii pulsurilor?Intreruperi?PIC-urile genereaza intreruperi cand nivelul semnalului de pe anumiti pini se schimba/cand semnalul la o intrare are un front (programabil).Daca si controllerul tau are asa ceva, la prima schimbare pornesti un timer/counter iar la schimbarea de sens contrar il citesti.Stiind frecventa cu care incrementezi timerul/counterul, calculezi durata pulsului. Link spre comentariu
DarkAngel_Bv Postat Iunie 18, 2012 Partajează Postat Iunie 18, 2012 Nu stiu daca pot capta si rising-ul si falling-ul pe acelasi interrupt :-? Link spre comentariu
Vizitator Postat Iunie 18, 2012 Partajează Postat Iunie 18, 2012 Dacă nu merge cu un singur pin, atunci duci acelaşi semnal la doi pini puşi în paralel.Un pin dă intrerupere pe frontul crescător, celălalt, pe frontul căzător. Link spre comentariu
Liviu M Postat Iunie 18, 2012 Partajează Postat Iunie 18, 2012 La PIC (pe-asta il stiu) sunt doua posibilitati - cu intrerupere la schimbare de stare logica si cu intrerupere pe front. In ultimul caz frontul (crescator, cazator) se reprogrameaza dupa fiecare intrerupere. Link spre comentariu
DarkAngel_Bv Postat Iunie 18, 2012 Partajează Postat Iunie 18, 2012 Adica ceva de genul? Config Int0 = FallingOn Int0 blabladim mode as integermode = 0do.........loopblabla:if mode = 0 then Config Int0 = rising mode = 1else Config Int0 = falling mode = 0endifreturn @RoGeorge, da, asa ma gandisem si eu, doar ca la atmega8 am un numar limitat de intreruperi, de care am nevoie, deci pot folosi doar una pentru asa ceva. Link spre comentariu
Liviu M Postat Iunie 18, 2012 Partajează Postat Iunie 18, 2012 Da, in genul asta. Asta in functia de tratare a intreruperii. Link spre comentariu
DarkAngel_Bv Postat Iunie 19, 2012 Partajează Postat Iunie 19, 2012 Am facut ceva de genul, functioneaza oarecum. Acum trebuie totusi sa sacrific un port ca sa rulez un timer. pe el (sa am o baza de timp in functie de care sa calculezi width-ul pulsului). Link spre comentariu
Liviu M Postat Iunie 19, 2012 Partajează Postat Iunie 19, 2012 Nu poti porni un timer fara sa fie conectat la port? Parca nu-mi vine sa cred. La PIC-uri sigur merg si independent (timerele fata de porturi). Link spre comentariu
DarkAngel_Bv Postat Iunie 19, 2012 Partajează Postat Iunie 19, 2012 Nu stiu sigur daca pot porni timer1 spre exemplu fara sa am utilizat pinul T!Voi mai incerca, pana acum incercarile au cam esuat. Trebuie sa imi scriu programul in pseudocod ca altfel ma incurc in variabile Link spre comentariu
DarkAngel_Bv Postat Iunie 19, 2012 Partajează Postat Iunie 19, 2012 Cred ca pana la urma o sa folosesc un counter.Adica la interrupt-ul de rising pornesc counterul si il opresc la interrupt-ul de falling, apoi vad cate incrementari a facut.Ce ziceti, este o idee buna? De incrementat se incrementeaza cu viteza ceasului/prescaler, corect?Edit: Cred ca nu este o idee buna, ca am nevoie de o frecventa externa foarte stabila ca sa am un timer bun. Link spre comentariu
ratza Postat Iunie 19, 2012 Partajează Postat Iunie 19, 2012 Poţi porni timerul şi fără a fi conectat la port, nu au legătură. Pentru ce vrei tu să faci ai nevoie de input capture, care e explicat detaliat în datasheet. Link spre comentariu
DarkAngel_Bv Postat Iunie 20, 2012 Partajează Postat Iunie 20, 2012 Ma gandeam asa:Initial sa setez INT0 pe Risingla primul interrupt pornesc T1 si setez INT0 pe fallingCand ajunge in falling pun valoarea lui T1 intr-un buffer.In loop-ul principal la fiecare 500ms-1s calculez valoarea medie a lungimii impulsurilor primite in acest interval.Valoarea medie o inmultesc cu o variabila stocata in EEPROM (un coeficient) care imi da exact cantitatea de fluid trecuta prin acel injector (l/h). Apoi in functie de aceasta valoare si datele furnizate de ABS (viteza) calculez si Consumul.Ca sa previn overflow-ul o sa aleg un prescaler suficient de mare sa nu se ajunga la 65000+, dar suficient de mic sa fie foarte precisa masuratrea.De fapt calculele sunt mult mai complexe, am capacitatea injectorului (420 cmc/minut), presiunea rampei de injectie (5 bari), dar printr-un meniu "learn" vor calcula direct acel parametru. Link spre comentariu
Vizitator Postat Iunie 20, 2012 Partajează Postat Iunie 20, 2012 Nu uita să citeşti despre capture compare, cum ţi-a zis şi ratza. Capture compare se potriveşte cel mai bine pentru aplicaţia ta, împreună cu reprogramarea frontului de întrerupe, desigur, cum ţi-a zis Liviu M. Link spre comentariu
DarkAngel_Bv Postat Iunie 20, 2012 Partajează Postat Iunie 20, 2012 Puteti sa imi dati un exemplu de folosire a "capture"(pinul ICP1)? ca in datasheet este exemplu in C++.Nici help-ul de la bascom nu ma ajuta foarte tare :(Multumesc anticipat. 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