bogdan_ Postat Noiembrie 14, 2004 Partajează Postat Noiembrie 14, 2004 sal. tot eu. asta e continuarea de la postul cel din urma http://forum.izatech.ro/viewtopic.php?t ... sc&start=0 pei, ramasese sa incerc varianta de alimentare cu becul aprins. am facut o simulare in spice si nu merge....adica ar merge cu vreun codensator de vreo 50mF(mili!!!). deci mam hotarat in priviinta alimentarii. bag si nul in intrerupator. deci problem solved. asa ca am inceput softu.....si......nu merge. deci am neovie de ceva sugestii la ochii ageri ai unora mai experimentati. tre sa recunosc ca e primul program de pic pe care il fac singur de la zero. partea de hardware: nu pun schema ca nu am de ce. picu se alimenteaza din ac asa incat GNDu lui corespunde cu firul de NUL. apoi din faza generez un semnal pentru sincronizare si il aplic pe RA2. cu ajutorul astuia tre sa stiu cand sunt pe alternanta pozitiva si cand e aia negativa. butoanele sunt puse la RA0 si RA1, 1 logic corespunde cu buton apasat. cam cum ar vrea sa functioneze programul. prima data pentru dimming: daca iau un prescaler de 64us, atunci pentru 10ms cat dureaza o semialternatna, daca impart la 64 de microsecunde, inseamna aproape 157 de bucati. so, am pus quartz de 4MHz. prescalerul lam pus pe TMR0, si fac divizare de la semnalul de ceas(1MHz) la 64. deci TMR0 o sa creasca cu 1 la fiecare 64 micro secunde. eu astept pana la valoarea dorita si apoi deschid triacul. pentru triggerare am ales sa astept 4x64us ca sa fiu sigur ca deschid triacul cand nu e prea deverme. atunci o sa am dimmingu pentru 4-157 ori 64 microsecunde. asa, dupa initializare stau si astept sa intre pe alternanta pozitiva. cand se face 1 pe RA2(sinc pe faza) intru in bucla de delay. resetez pe TMR0. astept sa treaca timpu pentru fiecare triac si il deschid. pentru butoane am facut si un debounce simplu in soft. am verificat programul de mai mult ori si nu gasesc greselile in el. poate imi scapa ceva. inca nu am inceput la rutina de comanda radio. incep imediat ce il conving sa mearga fara....... so.....HEEEEEEEEEELP! si mai am o intrebare: cand folosesc CALL, se duce la rubrutina, si cand asta se termina cu RETURN revine la intrstructiunea imediat urmatoare lui CALL? pentru GOTO doar se duce acolo unde e trimis si nu se mai intoarce? urmeaza programul. inca o data imi cer scuze daca am facut vreo greseala stupida...... ;pic light dimmer;version x.y;date 24 octomber 2004;by me;date 11 nov 2004, elimintaed errors from it, now program not works, need to find the bugs;date 13 nov 2004 started searching for bugs; LIST p=16F628 include "P16F628.inc";;;light1 equ 20h;light2 equ 21h;TMR0 equ 0x01 cblock 0x20 light1 light2 endc org 0x0000 bcf STATUS,5 movlw 0x07 movwf CMCON ;turn comparators off (make it like a 16F84) bsf STATUS,5 ;select bank 1 movlw 0xFF ;all PORTB inputs movwf TRISB movlw 0x1F ;all PORTA is input movwf TRISA movlw 0xC5 ;put bin 101 in w movwf OPTION_REG ;set prescaler value; portb pullups disalbed, interrupt on rising of RBO, TMR0 source: instr cicle, incr on rising, prescaler 1:64 bcf STATUS,5 ;back to bank 0;light1=nivel dimming lumina 1;light2=nivel dimming lumina 2 movlw d'4'; movwf light1; movwf light2;;test alternanta pozitivaaltpoz call tastatura btfss PORTA,2 goto altpoz ;wait for RA2=1;aprindere lumini bcf STATUS,5 clrf TMR0 ;clear timer0temporiz1 movf light1,w bcf STATUS,0 subwf TMR0 btfsc STATUS,0 ;tmr0-light1<0 , yes then turn on 1 triac call triac1 movf light2,w subwf TMR0 btfsc STATUS,0 ;tmr0-light2<0 , yes then turn on 2 triac call triac2 movlw d'152' ;test if TMR0>152, if yes then time to go to next alternance subwf TMR0 btfss STATUS,0 goto temporiz1;bsf STATUS,5 ;set the PORTB pins as inputs for stopping triac trigger;movlw b'11111111';movwf TRISB;bcf STATUS, 5 movlw 0x0 movwf PORTB;test alternanta negativaaltneg call tastatura btfsc PORTA,2 goto altneg ;wait for RA2=0;aprindere lumini clrf TMR0 ;clear timer0temporiz2 movf light1,w subwf TMR0 btfsc STATUS,0 ;tmr0-light1<0 , yes then turn on 1 triac call triac1 movf light2,w subwf TMR0 btfsc STATUS,0 ;tmr0-light2<0 , yes then turn on 2 triac call triac2 movlw d'152' ;test if TMR0>152, if yes then time to go to next alternance subwf TMR0 btfss STATUS,0 goto temporiz2;bsf STATUS,5 ;set the PORTB pins as inputs for stopping triac trigger;movlw b'11111111';movwf TRISB;bcf STATUS,5 movlw 0x0 movwf PORTB goto altpoz ;se intoarca din nou si asteapta altern pozitivatriac1 ;initializare triac1 bsf STATUS,5 ;goto bank 1 bcf TRISB, 6 ;set RB6 as output bcf STATUS,5 ;goto bank 0 bsf PORTB, 6 ;set RB6 to 1 returntriac2 ;initializare triac2 bsf STATUS,5 ;goto bank1 bcf TRISB, 7 ;set RB7 as output bcf STATUS,5 ;goto bank0 bsf PORTB,7 ;set RB7 to 1 returntastatura bcf STATUS,0 movwf PORTA ;put value on portA intoW andlw b'00000011' ;and with binary andwf PORTA ;and result with value on port again sublw b'00000000' ;substract the value from 0 btfsc STATUS,0 ;if value <>0 then one button pushed call SWchange ;then call subroutine for light control return ;return to phase checkSWchange ;switch change btfsc PORTA, 0 ;call switch1 pushed if sw1 pushed call sw1pushed ; btfsc PORTA, 1 ;call switch2 pushed if sw1 pushed call sw2pushed call waitforzero ;time to wait for switch to release returnwaitforzero bcf STATUS,2 ;set z bit to 0 movwf PORTA ;put porta in w andlw b'00000011' ;and porta with bin 00000011 sublw b'00000000' ;substract w from 0 btfss STATUS,2 ;test for zero result, skip if result is zero goto waitforzero ;if C is zero, then return sw2pushed movlw light2 ;put light2 in w sublw d'152' ;substract from decimal 152 btfsc STATUS,0 ;if result is negative, then light is on and must be turned off call ligh2OFF btfss STATUS,0 ;if result is pozitive, then light is off and must be turned on call light2ON return ligh2OFF movlw d'155' movwf light2 returnlight2ON movlw d'4' movwf light2 returnsw1pushed movlw light1 ;put light1 in w sublw d'152' ;substract from decimal 152 btfsc STATUS,0 ;if result is negative, then light is on and must be turned off call ligh1OFF btfss STATUS,0 ;if result is pozitive, then light is off and must be turned on call light1ON return ligh1OFF movlw d'155' movwf light1 returnlight1ON movlw d'4' movwf light1 return END Link spre comentariu
sofian Postat Noiembrie 14, 2004 Partajează Postat Noiembrie 14, 2004 nu cred ca ai inceput de la zero ca anumite subr. sunt copiateoricum eu zic ca ai inceput gresitprogamul are numai greseli ia uite citeva : de programare:daca programul o sa mearga nu cred ca o sa ai timp sa mai si receptionezi+tratare comenzimovwf PORTA ;put value on portA intoW poate vrei sa zici MOVFW PORTAcred ca este mai bine asa : (Butoanele cum am zis eu 0=Buton On)comf PORTA,wandlw 0x03btfss STATUS,Zcall SWChangereturncompari inca odata cu portu degeaba dupa 2uS ar trebui cel putin 1mSdaca tin butonul apasat nu se mai intoarce din waitforzero(daca ar merge)decit cind iau mina de pe eliar becul,tmr0,receptia si altele sunt compromise de elctronica :triacul odata comandat trece singur pe off cind trece prin zeroaltfel nu prea stiu cum s-ar putea trece pe offButoanele e mai bine sa dea 0 logic cind sunt apasate ptr ca elimini rezistenta de la gndPicul are PullUp rezistor Link spre comentariu
cirip Postat Noiembrie 14, 2004 Partajează Postat Noiembrie 14, 2004 am facut o simulare in spice si nu merge....adica ar merge cu vreun codensator de vreo 50mF(mili!!!).Im_po_si_bil!!! Un cond de 50mF la 50Hz are 63 de mili ohmi. Bagat in priza la 220V rezulta un curent de... Hm... Au cam sarit sigurantele de mult.Poti sa postezi aici deckul spice sa vad si eu ce e acolo? Eu am simulat in spice schema pe care ti-am dat-o si merge f bine.Edit:daca programul o sa mearga nu cred ca o sa ai timp sa mai si receptionezi+tratare comenziSofian are dreptate. Daca vrei sa faci picul ala sa mearga trebuie sa folosesti cel putin 2 nivele de intrerupere, poate chiar 3: prima de la trecerile prin zero ale retelei, a doua de la timer cand a expirat si trebuie sa-i dai in goarna triacului si a treia de la intrarea de receptie date. Asteptand in bucla "sa se intample ceva" se consuma f mult timp degeaba.Dar, te rog mult, as vrea sa lamurim intai alimentarea aia de la retea. Trimite te rog fisierul pe care ai facut simularea.Cirip Link spre comentariu
Vizitator codebutcher Postat Noiembrie 16, 2004 Partajează Postat Noiembrie 16, 2004 Mai oameni buni. Prima jucarie pe care am facut-o cu un PIC a fost un light dimmer. Facut in C, pe un 16F84, dar "portat" pe 12F675 (sau 629? nu-mi mai amintesc). Dau schema si surse. Testat (cel putin pe 16F). Singura problema cu dimmerele astea (cel putin al meu) e ca crapa repede becurile.Si cu ocazia asta, ii intreb pe cei mai priceputi. Ce trebuie sa aiba circuitul de comanda (triacul si ce mai e prin jurul lui), ca sa tina mai mult de 2 ore becul?A, era sa uit. Amaritul de 16F84 poate sa citeasca si un senzor IR in timp ce comanda becul (al meu e comandat prin telecomanda), deci are destule resurse chipul. Link spre comentariu
CristianC Postat Noiembrie 16, 2004 Partajează Postat Noiembrie 16, 2004 Eu folosesc un astfel de dimmer de cateva luni si nu mi sa ars nici un bec pana acum. Trebuie sa mentionez ca nu folosesc nici un fel de filtru pentru triac.P.S Comand trei becuri de 100W obisnuite (de la alimentara ). Link spre comentariu
bogdan_ Postat Noiembrie 17, 2004 Autor Partajează Postat Noiembrie 17, 2004 oky......sorry pentru MILI aia.....erau micro. da nu stiu de ce am scris asa.....probabil ca imi era gandul prin alta parte.....ieseau 50u.....sau cam asa calculasem eu pentru un consum de aproape 50mA. oricum trebuie sa fac un test pentru consum.....ca nu stiu exact cat consuma receptorul de radio.idea era ca atunci cand becurile sunt aprinse, triacul se deschide pe la 20V si, dupa ce ajunge tensiunea la 20V, ramane pe dimmer doar caderea de tensiune pe triac, care nu este prea mare ca sa poata functiona....oricum cred ca voi rezolva problema cu nulul. daca o sa mearga si fara ar fi super....hey, care aveti asa ceva facut....pls....SHARE.....ca vreau sa vad si alte idei.problema din soft am vazuto si eu, dar din pacate am si uitat de ea.....si nu o corectasem.cat despre interrupt, si eu m-am gandit....dar nu prea stiu cum sa le folosesc.....deci poate aici as avea nevoie de putin ajutor. am citit ceva despre ele de pe diverse situri, dar nu pot sa zic ca sunt prea lamurit. simularea nu o mai am....nu mai stiu exact ce nu iesea bine. dar imi iesea tensiune f mica pe la ierire. o sa mai fac o simulare in weekend daca am timp, ca ma omoara scoala. dak tu zici ca schema merge, te cred pe cuvant.... :)pentru soft, o sa il analizez si mai zic si la ce ma gandesc. ar fi mult mai vine cu intreruperi.....pentru ca asa nu o sa mi se intrerupa lumina cand apas pe buton sau cand primesc comanda radio.....ma gandesc si mai vb cam pe weekend.....thanks! Link spre comentariu
cirip Postat Noiembrie 17, 2004 Partajează Postat Noiembrie 17, 2004 OK. Rugamintea e ca atunci cand mai ajungi la rezultate din astea apocaliptice, nu rasturna doar galeata pe masa si apoi p-aci ti-e drumul. Zi si cum ai calculat ca poate mai invatam si noi cate ceva.Spor la scoala! Aia e pe primul plan!Cirip Link spre comentariu
Vizitator codebutcher Postat Noiembrie 18, 2004 Partajează Postat Noiembrie 18, 2004 Asadar si prin urmare: http://www.izatech.as.ro/c0de/12F675_dimmer.zip Va avertizez ca alimentarea direct pe linie nu e testata si e f posibil sa trebuiasca ceva modificari. Dar softul e f apropiat de cel folosit pe 16F84, numai ca pe 12F675 folosesc comparatorul intern, F84 are nevoie de unul extern. Jucaria e facuta pentru o telecomanda care foloseste standardul NEC (ceva mai ciudat decit RC5 sau Sony). Repet ca pe 16F84 a fost testat si mergea, dar cu alimentare externa. Si pe asta cu 12F675 am pus un tiristor cu o punte de diode in loc de triac, dar nu ma intrebati de ce am facut-o ca nu-mi amintesc Link spre comentariu
cirip Postat Noiembrie 18, 2004 Partajează Postat Noiembrie 18, 2004 codebutcher,E dragutza schema, dar ce te faci ca in intrerupator nu ai atatea fire disponibile. Ai o masa si un fir care vine de la bec. Montajul trebuie sa mearga cumva inseriat cu becul. Schema propusa de tine merge daca ai la dispozitie 3 fire: faza, nulul si becul. Bogdan_ ?Cirip Link spre comentariu
Vizitator mister_rf Postat Noiembrie 18, 2004 Partajează Postat Noiembrie 18, 2004 Poate ca gresesc, dar eu cred ca amplasarea puntii de diode pe tiristor perturba comanda acestuia. De obicei puntea de diode se pune la intrare petru a mentine constanta polaritatea grilei fata de catod. In mare montajul trebuie modificat astfel: Link spre comentariu
Vizitator codebutcher Postat Noiembrie 19, 2004 Partajează Postat Noiembrie 19, 2004 Varianta cu punte pe tiristor am vazut-o intr-o carte relativ de incredere. Nu vad cum ar putea perturba functionarea tiristorului. Poate imi dai niste explicatii, e posibil sa-mi scape ceva. Si... da, faza cu intrerupatorul asa e, evident. Daca inchizi intii intrerupatorulse rezolva Link spre comentariu
ciombe Postat Noiembrie 19, 2004 Partajează Postat Noiembrie 19, 2004 Varianta cu punte inaintea tiristorului merge foarte bine ! Puntea urca alternanta negativa ca altfel nu stie sa o comande tiristorul ! Nu uita sa pui circuitul RC de protectie pentru delta I / delta T,paralel pe tiristor ca sa nu ai "surprize" la aprinderea becului.Don Mario Link spre comentariu
cirip Postat Noiembrie 19, 2004 Partajează Postat Noiembrie 19, 2004 Stimati colegi,Poate ca nu am fost suficient de explicit sau imi scapa ceva. Din cunostintele mele, schema de cablare a unui bec din tavan la un intrerupator de perete este ca in poza de mai jos.Firele sunt trase prin perete, iar becul si intrerupatorul se afla la oarece distanta. Dimmerul trebuie sa fie inghesuit in intrerupator, deci alimentarea si-o ia de la ce-i mai ramane de la bec. In gaura din perete ptr intrerupator sunt numai 2 fire disponibile (vb ptr un singur bec). Cum se aplica schemele propuse la situatia descrisa de mine aici? Dupa mine, dimerul nu poate sa aiba mai mult de doua fire, ptr ca atata este diponibil in gaura din perete a intrerupatorului.Cirip Link spre comentariu
bogdan_ Postat Noiembrie 19, 2004 Autor Partajează Postat Noiembrie 19, 2004 mda.....trebuie o varianta care sa mearga inseriata cu becul. adica nu ai la dispozitie o alimentare calumea.cand becul nu e aprins, la circuit este si faza si nul.daca becul este aprins, atunci toata tensiunea care ramane este caderea de tensiune pe elementul de comanda, triac/tiristor, si plus prima bucat de intre trecerea prin zero si momentul de declansare a triacului.in cazul asta eu cred ca triacul e cel potrivit pentru comanda, ca nu mai are nevoie de punte, deci mai putine componente.am masurat curentul consumat de receptorul radio. cam 4mA si putin. 4.5mA sa zic. picu din datasheet zice ca mananca mai putin de 2mA la 4MHz. plus comanda triacelor......care nu stiu de ce curent e nevoie pentru fiecare.....sunt doua deci.....ar trebui sa ajunga 10mA total? la 5V!....oky, acum despre soft.....cu intreruperi....sa zicem ca sunt 2 timpi fata de trecerea prin zero dupa care trebuie sa dau drumul la triac: time1 si time2.acum, eu ziceam de un prescaler, asa incat TMR0 creste cu 1 la fiecare 64 de us. o semialternanta dureaza 10ms. deci daca impart 10ms la 64us imi da 156 de bucati. adica o sa am 156 de bucati, deci 156 de nivele de adjustare a luminii. asadar0 Link spre comentariu
bogdan_ Postat Noiembrie 19, 2004 Autor Partajează Postat Noiembrie 19, 2004 cirip. se pare ca nu intelege lumea cu instaltia. e asa cum zici tu.numai ca la mine in casa in cele mai mult locuri vine faza la intrerupator, si nu nulul. bineinteles ca exista si cateva locuri unde e viceversa....da mai putine...spune-mi ce crezi de soft.....astet rasp... 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