Stap 11: PIC gereguleerde lightdimmer: de software
Als u gebruik wilt maken dit circuit met een PIC-microcontroller, kan de software in deze link u helpen om verdere:
http://www.edaboard.com/thread265546.html
Een goed artikel op nul kruising detectie met een PIC kan hier worden gevonden:
http://tahmidmc.blogspot.nl/2012/10/Zero-Crossing-...
De schrijver Syed Tahmid Mahbub geeft een basic programma dat detecteert de nul overschrijding en vervolgens activeert de LED met een vertraging van 20 MS.
Hoewel ik nog nooit met gewerkt PIC's vóór en ben geen spleet voort C programmeren. Ik besloot om te zien als ik kon op zijn programma bouwen en het mogelijk maken om te variëren met de intensiteit van het licht, in plaats van Geef het enkel één waarde (de 20ms vertraging).
Ik ontdekte al snel dat de functies van het delay_ms en delay_us in C, zijn een beetje lastig, namelijk dat zij niet met een variabele instemmen. De vertragingstijd moet worden bekend op het moment van compilatie als het hard is gecodeerd. Ik zag sommige gecompliceerde werk-arounds, maar ik dacht dat een eenvoudigere oplossing zou zijn dat een functie waarmee een 75 Amerikaanse vertraging (Controleer 65 voor 60Hz) en noemen dat met een parameter bepalen hoe vaak die vertraging is lus.
Het maximale aantal keren die de vertraging is lus is 128. Dat komt omdat ik heb willekeurig gekozen dat het licht moet worden gedimd in 128 stappen (met 0 wordt vol op en 128 wordt uitgeschakeld).
Een waarschuwing echter: Ik heb geen PIC-programmer en ik ben niet (nog) van plan te gaan op de foto's, gelukkig als ik met de Atmega en Attiny serie ben. Dus ik kan niet het testen van het programma. Ik kan alleen maar zeggen dat gecompileerd zonder problemen, en als u het circuit moet worden gebruikt op een PIC wilt, het zal u aan de slag helpen. U kunt ook volledige projecten, met inbegrip van een programma, hier en hier, met inbegrip van een externe IRen hier vinden
//---------------------------------------------------------------------------------------------------------
Programmeur: DIY_Bloke
Sterk gebaseerd op een 0-X-programma van Syed Tahmid Mahbub
Compiler: Mik PRO voor PIC-v4.60
Target PIC: PIC16F877A
Programma voor fasecontrole hoek
nul kruising signaal op pin 33 RB0/INT
gating signaal aan MOC3021 via 220-470R van pin RD0/PSP0 19
X-tal 4 MHz
//---------------------------------------------------------------------------------------------------------
unsigned char FlagReg;
int x;
int maal;
int dimmen = 20; / / '20' is slechts een voorbeeld. Dimmen moet bevatten een
waarde tussen 0 en 128 en kunnen afkomstig zijn uit bijvoorbeeld een
variabele resistor of LDR of een waarde uit een programma
SBIT ZC op FlagReg.B0;
ongeldig interrupt() {}
Als (INTCON. INTF) {//INTF vlag verhoogd, dus er is een externe interrupt opgetreden.
ZC = 1;
INTCON. INTF = 0;
}
}
VOID vertraging (int maal) {}
voor (x = 1; x < maal; x ++) {}
delay_us(75); 65 voor 60Hz
}
}
void main() {}
PORTB = 0;
TRISB = 0X01; RB0 input voor interrupt
PORTA = 0;
ADCON1 = 7; Uitschakelen van ADC
TRISA = 0XFF; Maken van alle ingangen van de PORTA
PORTD = 0;
TRISD = 0; PORTD alle output
OPTION_REG. INTEDG = 0; onderbreken op dalende rand
INTCON. INTF = 0; interrupt markering wissen
INTCON. INTE = 1; het inschakelen van externe interrupt
INTCON. GIE = 1; global interrupt inschakelen
terwijl (1) {}
Als (ZC) {//zero overschrijding heeft plaatsgevonden
delay(dimming); '20' is een voorbeeld
PORTD. B0 = 1; Stuur een puls
delay_us(250);
PORTD. B0 = 0;
ZC = 0;
}
}
}