Since you have an onboard PWM module running in the background, you can also have a second pwm by software running in the foreground.
The code would be as follows.
You are now using two buttons, one is for LED and the other is for Fan.
I suggest that you use Fan on GPIO.2 (on board module), and LED on GPIO.5 pin.
Also, you have button on GPIO.3, and you are puling it down .
Nowyou have a second button but is is being pulled high.
Code:
@ DEVICE PIC12F683, FCMEN_OFF, IESO_OFF, INTRC_OSC_NOCLKOUT , WDT_OFF, PWRT_ON, MCLR_OFF, PROTECT_ON, BOD_OFF
OSCCON = %01110001 ' Internal 8MHz osc.
DEFINE OSC 8
' ======= Common Settings =================================
ADCON0 = 0
ANSEL = 0
CMCON0 = 7 ' Comparators off.
TRISIO = 0
GPIO = 0
' ============= PWM Settings =========
CCP1CON = %00001100 ' CCP1, PWM mode
PR2 = 250 '
T2CON = %00000101 ' TMR2 on, prescaler 1:4
CCPR1L = 0
Speed VAR CCPR1L ' Speed variablefor LED brightness.
Speed2 VAR BYTE ' Speed2 variable for fan speed.
' GPIO.0 ' Empty.
' GPIO.1 ' Empty.
' GPIO.2 ' LED is connected to GPIO.2 (on board PWM module)
Btn VAR GPIO.3 ' Assuming ; the pin is pulled down to GND by 10K resistor, and button pulls it high to Vdd.
Btn2 VAR GPIO.4 ' Second button. But the pin is pulled high internally. So no external pull up or pull down resistor is required.
' Have a button between this pin and GND (unlike the first button).
Fan VAR GPIO.5 ' Fan motor output.
INPUT Btn2 ' Make the second button pin an input pin.
OPTION_REG.7 = 0 '
WPU.4 = 1 ' Enable internal pull up resisitor for Second button pin (GP4)
PAUSE 10
Speed2 = 0
' First button, btn, controls the LED via onboard PWM module.
' Second button controls the FAN via software PWM via GPIO.5 output pin and GPIO.4 input pin.
' Having the Fan on GPIO.2 and LED on GPIO.5 would be better I think.
Start:
IF Btn = 1 THEN ' When this button is pressed, it pulls the pin high.
IF Speed + 85 < 256 THEN ' 0, 85, 170, 255, 0
Speed = Speed + 85
ELSE
Speed = 0
ENDIF
WHILE Btn = 1 ' When this button is being pressed, have no interruption on Fan control.
PWM Fan,Speed2,1
WEND
ENDIF
IF Btn2 = 0 THEN ' When this button is pressed, it pulls the pin low.
IF Speed2 + 85 < 256 THEN ' 0, 85, 170, 255, 0
Speed2 = Speed2 + 85
ELSE
Speed2 = 0
ENDIF
WHILE Btn2 = 0 ' When this button is being pressed, have no interruption on Fan control.
PWM Fan,Speed2,1
WEND
ENDIF
PWM Fan,Speed2,1 ' Always drive the fan output.
GOTO Start
END
Bookmarks