Sari la conținut
ELFORUM - Forumul electronistilor

Dimmer cu PIC12F675


Vizitator valibb

Postări Recomandate

Vizitator valibb

Am incercat sa fac un dimmer de lumina cu 12F675. Am gasit pe net o gramada de scheme, dar nici una nu a functionat. Am incercat sa verific functionarea triac-ului, dar am intilnit o problema si poate ma puteti ajuta cu un sfat. Schema pe care am facut-o are un optotriac MOC3041. Atunci cind conectez pin-ul 1 de la optotriac la 5V printr-un rezistor de 470, triacul anclaseaza si becul se aprinde. Cind incerc sa verific montajul, desi pe intrarea de optotriac sunt impulsurile de comanda, triac-ul nu se aprinde. Cum pot verifica ca montajul este functional ?

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

Top autori în acest subiect

  • bercioiu

    3

  • bogdan_

    2

  • samtin

    2

  • Stefan

    1

Top autori în acest subiect

Pai normal. E o diferenta esentiala intre MOC3021 si MOC3041. Cel de al doilea este cu zero crossing detection.

Adica, aprinzi ledul din el, iar optotriacul asteapta intai o trecere prin zero a tensiunii de la retea, si apoi, daca ledul mai e aprins declanseaza triacul.

MOC3021 iti declanseaza triacul imediat ce ai aprins led-ul din el. Circuitul tau trimite doar un impuls pentru aclansarea triacului, in momentul respectiv functie de ce intensitate vrei tu sa ai la bec. 3021 ti-ar declansa innstant triacul, 3041 astepta trecerea prin zero, dar cum acolo nu mai ai aprins led-ul ... nu se intampla nimic.

Pe scurt: ia MOC3021.

 

Pentru referinta foile de catalog:

MOC3041

MOC3021

Link spre comentariu

Salut! Poti sa postezi un link cu documentatia complecta a schemei? Ma intereseaza si pe mine sa o realizez. Sau macat hex-ul daca poti sa-l postezi. Iti multumesc!

Link spre comentariu

Mai jos ai programul pentru dimmer cu PIC12F675 si trebuie sa-l compilezi cu Proton.Device 12F675Config INTRC_OSC_NOCLKOUT, WDT_OFF, PWRTE_ON, BODEN_OFF, CP_OFF, MCLRE_OFF XTAL 4;I/O symbolsSymbol Triac_out = GPIO.0 ;triac pinSymbol Zero_cross = GPIO.2 ;zero-cross algilama piniSymbol Dim_UP_Button = GPIO.4Symbol Dim_DOWN_Button = GPIO.5;interrupt symbolsSymbol GIE = INTCON.7 ; Global Interrupt Enable 1 = enable, 0 = disableSymbol T0IE = INTCON.5 ;TMR0 Overflow Interrupt Enable bitSymbol INTE = INTCON.4 ;GP2/INT External Interrupt Enable 1 = enable, 0 = disableSymbol T0IF = INTCON.2 ;TMR0 Overflow Interrupt Flag bitSymbol INTF = INTCON.1 ;External Interrupt Flage 1 = ;external interrupt occurred (must be cleared in software)'degiskenlerDim Load_Value As Word Dim I As ByteDim tus_basili As Byte'***********************************************************************************ON_INTERRUPT Interrupt_DetectGoTo BEGIN'************************************************************************************Interrupt_Detect:If INTF = 1 Then TMR0 = Load_Value T0IE = 1 ' Enable TMR0 overflow interrupt INTF = 0 ' Clear INT Flag (be ready for the next) EndIf If T0IF = 1 Then High GPIO.0 DelayUS 100 'triyak tetiklemesi 100 uSn Low GPIO.0 T0IF = 0EndIfContext Restore '************************************************************************************BEGIN: ALL_DIGITAL = TRUE CMCON = 7 ;comparator kapali 'OPTION_REG.7 = 0 ;pull-ups aktif OPTION_REG = %01010101 ;presc 1:64 ,External Interrupt Edge to rising edge TRISIO = %00111100 ;1-giris, 0-cikis WPU=%00110000 ;interrupt (kesme) tanimlamalari T0IF = 0 ;TMR0 overflaw bayragini sil INTF = 0 ;External Interrupt bayragini silg Load_Value = 150 MAIN: GIE = 0 ' tüm kesmeleri kapat While GIE = 1:GIE = 0:Wend ' kesmelerin kapandigindan emin ol INTE = 1 ' Enable External Interrupt GIE = 1 ' Enable global interrupts If tus_basili=0 Then If Dim_UP_Button = 0 Then GoSub DIM_UP If Dim_DOWN_Button = 0 Then GoSub DIM_DOWN EndIf If Dim_UP_Button = 1 And Dim_DOWN_Button = 1 Then tus_basili=0 EndIf GoTo MAIN;bu degerler 50Hz gore ayarlidirDIM_UP: Load_Value = Load_Value + 2 If Load_Value >= 180 Then Load_Value = 180 tus_basili=1ReturnDIM_DOWN: Load_Value = Load_Value - 2 If Load_Value <= 110 Then Load_Value = 110 tus_basili=1Return

Link spre comentariu

Mai jos ai programul pentru dimmer cu PIC12F675 si trebuie sa-l compilezi cu Proton.

Multumesc, n-am proton si nici nu cred ca ma descurc sa-l compilez... ai cumva hex-ul gata compilat? Multumesc!
Link spre comentariu
Vizitator valibb

Acum sunt in teste cu dimmer-ul. Am testat cred ca toate variantele de dimmere pentru pic-urile 12FXXX. Varianta de program de mai sus este cea care a mers. Restul e numai teorie. Din pacate varianta de mai sus este una simplista, fara a face oprirea alimentarii becului, sau nivelele de variatie a luminii. Dar cind va fi gata il voi pune pe un thread separat.

Link spre comentariu

Acum sunt in teste cu dimmer-ul. Am testat cred ca toate variantele de dimmere pentru pic-urile 12FXXX. Varianta de program de mai sus este cea care a mers. Restul e numai teorie. Din pacate varianta de mai sus este una simplista, fara a face oprirea alimentarii becului, sau nivelele de variatie a luminii. Dar cind va fi gata il voi pune pe un thread separat.

vezi la sectiune PIC ca cica se lauda unii ca iesit ceva cu 12F629 si unu a pus filmulet pe youtube (doar ca asta cu youtubu nu a montat inca dimmerul in tavan )

 

viewtopic.php?f=11&t=36192

Link spre comentariu
Vizitator valibb

Asa cum am promis va dau programul care este testat si verificat. Fata de tot ce am vazut pina acum, face simplu fara timere si alte chestii, ceea ce imi propusesem.Apasare scurta pornire, apasare lunga(peste 500 ms) dimmingOricum ideea din program este originala, asta pentru cine o descopera.Daca va foloseste programul sa mentionati de unde aveti ideea :)Astept critici Device 12F683Config INTRC_OSC_NOCLKOUT, WDT_OFF, PWRTE_ON, CP_OFF, MCLRE_OFFXTAL 4;-----------------------------------------------------------------------------------;I/O symbols ;Symbol Triac_out = GPIO.0 ;triac pin ;Symbol Zero_cross = GPIO.2 ;zero-cross pin ;Symbol btnUP_GP4 = GPIO.4 ;Symbol btnDN_GP5 = GPIO.5 ;;-----------------------------------------------------------------------------------;;;-----------------------------------------------------------------------------------;interrupt symbols ;;-----------------------------------------------------------------------------------Symbol GIE = INTCON.7 ; Global Interrupt Enable 1 = enable, 0 = disable ;Symbol T0IE = INTCON.5 ;TMR0 Overflow Interrupt Enable bit ;Symbol INTE = INTCON.4 ;GP2/INT External Interrupt Enable 1 = enable, 0 = disable ;Symbol T0IF = INTCON.2 ;TMR0 Overflow Interrupt Flag bit ;Symbol INTF = INTCON.1 ;External Interrupt Flage 1 = ; ;external interrupt occurred (must be cleared in software) ;Symbol TMR1IE = PIE1.0 ;TMR1 Overflow Interrupt EnableSymbol TMR1IF = PIR1.0 ; TMR1 Overflow Interrupt Flag;-----------------------------------------------------------------------------------;;;;-----------------------------------------------------------------------------------;declarare variabile ;;-----------------------------------------------------------------------------------Dim Load_Value As Word ;Dim sLoad_Value As ByteDim i As ByteDim contorUP As ByteDim contorDN As ByteDim sUP As BitDim sDN As Bit Dim sTriac As BitDim sStop As Bit;-----------------------------------------------------------------------------------; ;ON_INTERRUPT Interrupt_Detect ;GoTo BEGIN ;;-----------------------------------------------------------------------------------; ; ;-----------------------------------------------------------------------------------Interrupt_Detect: ;;-----------------------------------------------------------------------------------;;-----------------------------------------------------------------------------------; External interrupt occurs - from GP2 - Zero-cross ;;-----------------------------------------------------------------------------------If INTF = 1 Then ; TMR0 = Load_Value ; T0IE = 1 ' Enable TMR0 overflow interrupt ; INTF = 0 ' Clear INT Flag (be ready for the next) ;;-----------------------------------------------------------------------------------; se citesc porturile ;;-----------------------------------------------------------------------------------sUP=GPIO.4sDN=GPIO.5If sUP=0 Then contorUP = contorUP + 1Else contorUP=0EndIf;If sDN=0 Then contorDN = contorDN + 1Else If contorDN>8 And contorDN<35 Then GoSub softOFF EndIf contorDN=0EndIfIf contorUP=100 Then contorUP = 70If contorDN=100 Then contorDN = 70EndIf ;;-----------------------------------------------------------------------------------;;-----------------------------------------------------------------------------------; Timer0 Interrupt overflow ;;-----------------------------------------------------------------------------------If T0IF = 1 Then ; If sTriac=1 Then ASM ; bsf GPIO,0 ; nop ; nop ; nop ; nop ; nop ; nop ; nop ; nop ; nop ; nop ; bcf GPIO,0 ; ENDASM ; EndIf ; T0IF = 0 ;EndIf ;Context Restore;-----------------------------------------------------------------------------------;;;-----------------------------------------------------------------------------------BEGIN: ALL_DIGITAL = TRUE ANSEL=0 ;CMCON = 7 ;comparator off pentru 12F629, 12F675 'OPTION_REG.7 = 0 ;pull-ups akif OPTION_REG = %01010101 ;presc 1:64 ,External Interrupt Edge to rising edge TRISIO = %00111100 ;1-input , 0-output WPU=%00110000;----------------------------------------------------------------------------------- ;se intializeaza flagurile de interrupt T0IF = 0 ;TMR0 overflow INTF = 0 ;External Interrupt occured contorUP=0 contorDN=0 Load_Value = 150;-----------------------------------------------------------------------------------; Start main loop ;;----------------------------------------------------------------------------------- MAIN: GIE = 0 ' Global Interrupt disable While GIE = 1:GIE = 0:Wend ' se sta in aceasta bucla pina cind GIE poate fi scris INTE = 1 ' Enable External Interrupt GIE = 1 ' Enable global interrupts If contorUP = 3 Then GoSub softON ;sTriac=1 EndIf If contorUP>=40 Then GoSub DIM_UP EndIf If contorDN>=50 Then GoSub DIM_DOWN EndIf ; EndIf GoTo MAIN;-----------------------------------------------------------------------------------; End Main loop ;;-----------------------------------------------------------------------------------;;-----------------------------------------------------------------------------------DIM_UP: ; sTriac=1 If contorUP>=50 Then Load_Value = Load_Value + 2 ; contorUP = contorUP - 10 ; EndIf If Load_Value >= 180 Then Load_Value = 180 ;Return ;;-----------------------------------------------------------------------------------;;-----------------------------------------------------------------------------------DIM_DOWN: ; Load_Value = Load_Value - 2 ; contorDN = contorDN - 15 If Load_Value <= 110 Then ; Load_Value = 110 ; sTriac=0 ;opreste triacul ; EndIf ;Return ;;-----------------------------------------------------------------------------------

Link spre comentariu
Vizitator valibb

oopsse scoate bifa dinaintea lui sTriacsi se sterge a doua linieIf contorUP = 3 ThenGoSub softON;sTriac=1EndIfIf contorUP = 3 Then-------------------sTriac=1-------------------EndIf

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