I need to set precise on/off timings for a blinking LED and I was surprised to see that when I switched to a 2N2222 transistor (with a 10k resistor between the GPIO.0 output and Base) in order to drive 4 LEDs that the overall on/off rate changed (it appears longer). I'm using a 20Mhz oscillator to get the best resolution possible, so am I doing something wrong? If I want a precise duty cycle is the only way by trial and error?
Also, I'm using PWM to fade in/out the LED to give the appearance of incandescents - does that even work with a 2N2222 transistor?Code:DEFINE OSC 20 @ DEVICE pic12F629, HS_OSC @ DEVICE pic12F629, WDT_ON @ DEVICE pic12F629, PWRT_ON @ DEVICE pic12F629, MCLR_OFF @ DEVICE pic12F629, BOD_ON @ DEVICE pic12F629, PROTECT_OFF @ DEVICE pic12F629, CPD_OFF CMCON = 7 'Turn off comparators TRISIO.0 = 0 'Make GPIO.0 pin output LED_0 VAR GPIO.0 ' Alias GPIO.0 to LED DUTY VAR BYTE CYCLE VAR BYTE STEP_CNTR var byte LGHTS_ON_MS CON 1410 '36 frames given the oscilattor accuracy LGHTS_OFF_MS CON 550 '12 frames given the oscilattor accuracy Cycle = 1 STEP_CNTR = 2 lblLoop: ' Fade in For Duty = 0 TO 255 step STEP_CNTR PWM LED_0, Duty, Cycle Next ' Stay on LGHTS_ON_MS High LED_0 Pause LGHTS_ON_MS ' Fade out For Duty = 255 TO 0 STEP -STEP_CNTR PWM LED_0, Duty, Cycle Next ' Stay off for LGHTS_OFF_MS Pause LGHTS_OFF_MS GoTo lblLoop End




Bookmarks