Sari la conținut
ELFORUM - Forumul electronistilor

Releu de nivel cu pic


Postări Recomandate

O varianta cu uC care doarme 100% din timp si e trezit doar cand unul din senzori isi schimba starea. Ordinea senzorilor nu conteaza. Schimba extensia din .txt in .hex.

 

#include "p12f629.inc"    goto mainorg 04h;**********************************************;Interrupt on change GP0 & GP1 service routine    movlw 1    call delay     ;asteptam 0.2s pentru asezare contact    movlw 11b    andwf GPIO,W    btfsc STATUS,Z    goto maxim    sublw 3    btfsc STATUS,Z    bsf GPIO,2     ;pornim pompa    retfiemaxim    bcf GPIO,2     ;oprim pompa    movlw 25        call delay     ;delay 5s    retfie        ;******************************************main    bsf STATUS,RP0    bcf OPTION_REG,NOT_GPPU  ;enable pull-ups    bsf IOC,0         ;config. interrupt on change    bsf IOC,1    bcf STATUS,RP0    bsf INTCON,GPIE    bsf INTCON,GIEdoarme    sleep    goto doarme;*****************delay             ;delay = W/5 s     clrf 40hloop2    clrf 41hloop3    decfsz 41h,F    goto loop3    decfsz 40h,F    goto loop2    addlw -1    btfss STATUS,Z    goto delay    return;*****************org 2007h    ;configuration worddw 00000110000100bend

pompa_PIC12f629.txt

post-39383-139829284897_thumb.jpg

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

Top autori în acest subiect

Top autori în acest subiect

Imagini postate

Multumesc mult am niste nelamuriri schema respecta cerintele pt. ca am nevoie de ordine in actionarea senzorilor respectiv cand cade S1 sa nu porneasca pompa cand cade S2 porneste pompa si merge pana se ridica S1 cu temporizarea de 5s dupa care se opreste si ciclul se reia si nu stiu sa transform in fisier hex. decat din asm.

Link spre comentariu

Acel fisier .txt e de fapt un .hex gata facut, dar se pare ca acest site nu te lasa sa uploadezi fisiere cu extensia .hex, si a trebuit sa ii schimb numele in .txt.

Dar oricum acel hex e gresit, acum vad: delay-ul de 5s vine dupa oprirea pompei. Se pare ca nu eram in clar ce era cu acel delay la ora cand am scris codul. Voi pune alt hex si sursa.

 

#include "p12f629.inc"    goto mainorg 04h;**********************************************;Interrupt on change GP0 & GP1 service routine    movlw 1    call delay     ;asteptam 0.2s pentru asezare contact    movlw 11b    andwf GPIO,W    btfsc STATUS,Z    goto maxim    sublw 3    btfsc STATUS,Z    bsf GPIO,2     ;pornim pompa    retfiemaxim    movlw 25        call delay     ;delay 5s    bcf GPIO,2     ;oprim pompa    retfie        ;******************************************main    bsf STATUS,RP0    bcf OPTION_REG,7  ;enable pull-ups    bcf TRISIO,2       ;pin pompa --> output    bsf IOC,0         ;config. interrupt on change    bsf IOC,1    bcf STATUS,RP0    bsf INTCON,GPIE    bsf INTCON,GIEdoarme    sleep    goto doarme;*****************delay             ;delay = W/5 s     clrf 40hloop2    clrf 41hloop3    decfsz 41h,F    goto loop3    decfsz 40h,F    goto loop2    addlw -1    btfss STATUS,Z    goto delay    return;*****************org 2007h    ;configuration worddw 00000110000100bend

Senzorii pot fi schimbati intre ei, nu conteaza care e sus si care e jos. Conteaza cand sunt ambii inchisi si cand sunt ambii deschisi.

pompa_PIC12F629.txt

Link spre comentariu

Vestea proasta e ca .hex-ul da eroare la incarcarea in pic629, la fel si prima varianta. Verificat alternativ cu alt .hex, ca sa fiu sigur ca programatorul si pic-ul sunt bune.Pentru siguranta intarzierea de 5 sec. putea fi prevazuta in ambele situatii (ambii senzori inchisi sau ambii deschisi). Probabil golirea se face lent si nu v-a dat contacte multiple, de aceea nu ati avut probleme. Umplerea e mai turbulenta, se fac valuri si senzorul e mai agitat.

Link spre comentariu

Ce eroare da? Trebuie sa recunosc, eu nu am incercat codul pe 12F629, pentru ca nu am acest cip. In schimb l-am incarcat (de fapt o versiune adaptata) pe 12F615 si chiar m-am jucat putin cu el pe breadboard si merge foarte bine.Delay-ul de 5s e putin inutil, uC ignora oricum contactele multiple date de un singur senzor. Dar e totusi bun probabil pentru a prelungi viata senzorului superior (mai putine actionari, daca apa trece peste el).Observ o diferenta intre 629 si 615, si anume ca la 629 trebuie sa ai inscris in ultima locatie de memorie (3FF) valoarea OSCCAL (calibrare oscilator intern). Sa fie oare aia eroarea?Atasez un zip cu hexuri pentru ambele cipuri.

pompa_615_629.zip

Link spre comentariu

Cu temporizarea aveti dreptate, de fapt nu e necesara. Senzorii 11 (contacte) determina oprirea pompei, 00 (intreruperi) determina pornirea, iar orice alta combinatie nu schimba starea releului. Sus prima inchidere a contactului va determina oprirea, eventuale deschideri scurte ulterioare nu mai schimba starea. Acum sigur ca ultimul cuvant il are beneficiarul...Nu am 615, am incercat numai 629. WinPIC Programmer zice Error: Programming failed! (vezi poza), iar pus pe placa PIC-ul consuma 0,5 mA timp de jumatate de secunda, apoi zero si nu raspunde la nimic, La fel cu Osccal-ul editat manual la valoarea cu care a venit din fabrica.Fisierele hex in varianta ultima, dupa de-zipare nu sunt recunoscute de program (invalid file name) chiar daca le pot citi cu Notepad si chiar daca le dau eu numele fisier.hex !!! Mai bine nu le comprimati...

Link spre comentariu

Nu cred ca e corupt zip-ul, pentru ca eu il pot descarca si dezarhiva fara probleme (folosesc 7zip). Sa nu fie vreo problema de arhivator sau mai rau, de calculator (virusi etc.) la dv. Dar oricum, acea poza arata codul corect (aceleasi numere ca si la mine in programator), asa ca de aici totul tine de softul si programatorul fiecaruia. Poate cel mai bine ar fi sa reasamblati sursa asm (eu am folosit MPASM).Atasez din nou codul cu un nou update, si anume pentru tratarea cazului unei pene de curent. Se pare ca la aplicarea tensiunii, orice pin configurat ca output, poate sa ia o valoare nedefinita, adica pompa se putea porni singura. Mai mult, dupa aplicarea tensiunii de alimentare, nu e obligatoriu sa se produca vreo intrerupere daca contactele sunt stabile.Acesta poate deveni un caz periculos daca, dupa o pana de curent bazinul e deja plin si pompa se porneste, iar intreruperi nu au de ce sa se mai produca.Astfel, in noul update, dupa power-up pinul de pompa e adus la 0v. Apoi o intrerupere initiala e provocata (intrerupere software), pentru a "citi" starea contactelor.

pompa v5.zip

Link spre comentariu

Poza e facuta la versiunea 1 necomprimata, cand nu se putea programa 629.O varianta electrotehnica cu relee si una cu tranzistoare. Dupa primul contact facut de S2 urmatoarele nu mai conteaza, pompa se opreste si nu mai porneste pana la deschiderea lui S1. La fel, dupa prima deschidere a contactului S1 restul nu mai sunt luate in considerare, pompa porneste si nu se mai opreste decat la prima inchidere a lui S2. Dupa intreruperi de alimentare pompa nu porneste decat daca rezervorul e gol (S1 si S2 deschise).

post-29403-139829285859_thumb.jpg

post-29403-139829285866_thumb.jpg

Link spre comentariu

Interesant ar fi de stiut cu ce ai programat picul, cum ai setat bitii de configurare si ce ai facut la programare cu valoarea OSCCAL (vezi si un post anterior al lui 10vid).

 

Ca sa vezi ce e cu osccal-ul asta, cauta pe forum, s-a mai discutat.

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