Sari la conținut
ELFORUM - Forumul electronistilor

comparator cu pic16f628a


marius_3004

Postări Recomandate

Cu comparatoarele din 16f628a se poate face ca la aplicarea unei tensiuni pe intrare sa treaca iesirile pe rand in 1 dar cu o intarziere de ordinul a 10-20 de secunde,iar la scaderea tensiunii sa decupleze tot pe rand si tot cu intarziere?Ceea ce vreau sa fac e un montaj genul comparator cu cateva praguri ca sa se inteleaga mai bine ce am vrut sa spun,dar cu temporizare la sesizarea pragurilor.Am facut doar cateva actionari simple pana acum in mikrobasic for pic.

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

Top autori în acest subiect

  • marius_3004

    3

  • 10vid

    2

Cred ca e suficient un singur comparator, daca am inteles bine ce vrei sa faci. Referinta de tensiune interna are un numar de maxim 24 nivele din care poti sa alegi, cand un nivel a fost depasit, treci pe altul. Cu sau fara temporizare.Iesirile nu-i musai sa fie iesirile comparatoarelor, ele pot fi spre exemplu cele 8 iesiri ale lui PORTB, corespunzand 8 praguri.

Link spre comentariu

Am renuntat la partea de comparatie,am executat una bucata comparator analogic cu amplificatoare operationale,pe criteriul -asa mica cum era,imi faceam treaba cu ea-adica la alea ma pricep mai bine decat la pic-uri :jytuiyu .A ramas sa fac partea de intarziere la depasirea unui prag cu pic,dar si aici am probleme.Ca sa fiu cat de cat explicit, o sa incerc sa spun ce vreau sa fac:1. am trei praguri succesive,care apar la cresterea tensiunii,aia am rezolvat,dar la atingerea unui prag trebuie sa cupleze un releu cu o intarziere de cateva secunde, asta doar daca pragul ala nu scade pana nu se executa intarzierea, caz in care nu ar mai trebui sa cupleze.De asemenea daca pragul ala scade releul trebuie sa decupleze dar tot cu o intarziere si tot daca in timpul cat se executa intarzierea pragul n-a crescut la loc.2.pragurile trebuie sa cupleze succesiv,adica pragul 1-pragul2-pragul3, dar daca de exemplu se strica comparatorul si din n motive de exemplu e cuplat pragul 2 fara sa fie cuplat pragul1 pic-ul trebuie sa cupleze si releul1 releul2 plus o alarma(led).La fel daca pragul3 e cuplat fara a fi cuplate pragul 1 si 2 trebuie sa cupleze releele 1,2,3 plus alarma. Ce-am reusit: -cuplez pragul1 actioneaza releul 1 cu intarziere 2actioneaza releul2 cu intarziere 3 actioneaza releul 3 cu intarziere doar pragul 3 cupleaza releele toate plus alarma doar pragul2 ---------releu 1 si 2 plus alarma... cam toate conditionarile merg deci -dar: cuplez pragurile succesiv,actioneaza releele apoi decuplez pragurile 1 si 2 si...ciuciu,releele 2 si 3 raman cuplate,daca decuplez si pragul 1 cad toate :nas: -cuplez scurt pragul 1 de ex.si apoi il decuplez, n-ar trebui sa faca nimic, dar face temporizarea si apoi cupleaza scurt. Daca cineva a avut rabdare sa citeasca tot si stie si cum ar trebui sa fac, postez codul:' Declarations section symbol LED1=RB0_bit ' port asociat LED1symbol LED2=RB1_bit ' ------"----- LED2symbol LED3=RB2_bit ' ------"----- LED3symbol LED4=RB3_bit 'symbol B1=RA0_bit ' ------"----- buton 1symbol B2=RA1_bit ' ------"----- buton 2symbol B3=RA3_bit ' ------"----- buton 3symbol apasat=0 'nivel logic buton apasatsymbol liber=1 'nivel logic buton libersymbol aprins=1 ' -----"----- led aprinssymbol stins=0 ' -----"----- led stins sub procedure Init_Main() CMCON=7 ' dezactiveaza comparatoare TRISB=0 ' configureaza iesirile TRISA.0=1 'portul A0 intrare TRISA.1=1 ' A1 TRISA.2=1 ' A2 end sub sub procedure conditieA if (B1=liber)and(B2=liber)and(B3=liber)then LED1=stins LED2=stins LED3=stins LED4=stins end if end sub sub procedure conditieB if (B1=liber)and(B2=apasat)then delay_ms(2000) LED2=aprins delay_ms(5000) LED1=aprins LED4=aprins else LED4=stins end if end sub sub procedure conditieC if (B1=liber)and(B2=liber)and(B3=apasat)then LED4=aprins delay_ms(5000)LED2=aprins delay_ms(5000)LED3=aprins delay_ms(5000)LED1=aprins conditieA end if end sub sub procedure conditieD() if (B1=liber)and(B2=apasat)and(B3=apasat)then LED3=aprins delay_ms(5000) LED2=aprins LED1=aprins LED4=aprins conditieA end if end sub sub procedure conditieE() if (B1=apasat)and(B2=liber)and(B3=apasat)then LED3=aprins delay_ms(5000) LED2=aprins LED1=aprins LED4=aprins conditieA end if end sub sub procedure conditieF() if LED4=aprins then delay_ms(200) LED4=stins end if end sub main: Init_Main() ' initializare controler while true if B1=apasat then delay_ms(5000) LED1=aprins if B1=liber then delay_ms(5000) LED1=stins conditieA end if end if if B2=apasat then delay_ms(5000) LED2=aprins conditieB conditieF if B2=liber then delay_ms(5000) LED2=stins conditieA end if end if if (B3=apasat) then delay_ms (5000) LED3=aprins conditieC conditieD conditieE conditieF if B3=liber then delay_ms(5000) LED3=stins conditieA end if end if wend end. Multumesc.

Link spre comentariu

Alarmarea aia nu e prea eficienta; trebuie sa te afli pe un prag "n+1" ca sa determini daca pragul "n" ar fi trebuit sa actioneze. Cum nu exista un prag 4, nu vei putea determina niciodata daca pragul 3 ar fi trebuit sa actioneze, in caz de defect la 3.Incepe prin a testa toate pragurile incepand de la coada la cap, adica p3, p2, p1. Daca p3=1, atunci r1=1, r2=1, r3=1 si iesim.altfelDaca p2=1, atunci r1=1, r2=1, r3=0 si iesim.altfelDaca p1=1, atunci r1=1, r2=0, r3=0 si iesim.altfelr1=0, r2=0, r3=0.Ca sa nu mai primesti impulsuri scurte dupa temporizare, testeaza si dupa temporizare daca mai e actionat pragul.

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