PDA

View Full Version : HPWM with Pic16F886 not working



lerameur
- 14th December 2014, 03:16
Hi,
I am trying to make a HPWM on pin RC2 ( CCP1 on a Pic 16F886 chip.
I am not getting anything out.
I used the same code but formatted for 16F88 and it worked, so I dont know why I am not getting anything out.
Any ideas ?
thanks

Ken



OSCCON = %01110000 '8 Mhz
DEFINE OSC 8
ANSELH = 0
ADCON1 = 7

'///////////////////////////
'// Interrupt section //
'///////////////////////////

'////////// ADCin Config //////////////////
Define ADC_BITS 8 ' Set number of bits in result
Define ADC_CLOCK 3 ' Set clock source (3=rc)
Define ADC_SAMPLEUS 50 ' Set sampling time in uSec
ADCON0 = %00010001 ' AN4, Configure and turn on A/D Module
ADCON1 = %00000001 ' Analog input

'/////////////////////////
'// LCD configuration //
'/////////////////////////


DEFINE LCD_DREG PORTB ' Set LCD Data port
DEFINE LCD_DBIT 4 ' Set starting Data bit (0 or 4) if 4-bit bus RB.4, RB.5, RB.6, RB.7
DEFINE LCD_RSREG PORTC ' Set LCD Register Select port
DEFINE LCD_RSBIT 1 ' Set LCD Register Select bit
DEFINE LCD_EREG PORTA ' Set LCD Enable port
DEFINE LCD_EBIT 7 ' Set LCD Enable bit
DEFINE LCD_BITS 4 ' Set LCD bus size (4 or 8 bits) '4 therefore put wire at 4, 5, 6 and 7 of LCD
DEFINE LCD_LINES 2 ' Set number of lines on LCD
DEFINE LCD_COMMANDUS 2500
DEFINE LCD_DATAUS 250
DEFINE CHAR_PACING 2000
pause 1000

'/////////////////////////
'// PIN configuration //
'/////////////////////////

Digits Var PORTA
VoltageInput var byte
'///////////////////////////////////////////////
'// Variable Declaration and initialization //
'///////////////////////////////////////////////


VoltageDiff var byte

VoltageREF con 120 ' to get 12v output
DutyCycle var byte
DutyCycle = 127
Frequency con 30000


'////////////////// HPWM /////////////////////////
DEFINE CCP1_REG PORTC
DEFINE CCP1_BIT 2
Pause 20


'////////////////////////////////////////////////////
'////////////////// PROGRAM /////////////////////////
'////////////////////////////////////////////////////

Mainloop:

Gosub VoltageCheck

lcdout $FE,1, "V_Input: ", dec VoltageInput, ":"
lcdout $FE,$C0, " Adcin: ", dec VoltageInput
Pause 150


goto Mainloop
End


'////////////////////////////////////////////////////
VoltageCheck:
ADCON0.2 = 1 'Start Conversion

adcin 4,VoltageInput

If voltageInput < voltageREF then ' voltageREF is 127 for 12v dc
VoltageDiff = VoltageREF - VoltageInput '=127+(127-115)=139
DutyCycle = voltageREF + ( voltageREF - VoltageDiff)
DutyCycle = DutyCycle/255 *100
HPWM 1,DutyCycle,Frequency 'channel, dutycycle, frequency
pause 20
ENDIF

If voltageInput = voltageREF then
HPWM 1,DutyCycle,Frequency 'channel, dutycycle, frequency
pause 20
else
VoltageDiff = VoltageInput - VoltageREF '=127-(182-127)
DutyCycle = voltageREF - ( VoltageDiff - voltageREF )
DutyCycle = DutyCycle/255 *100
HPWM 1,DutyCycle,Frequency 'channel, dutycycle, frequency
pause 20
endif

Return

lerameur
- 14th December 2014, 03:24
Figures out it works if the frequency is fixed, so I changed it to 127 to test trial...
I guess the frequency number is off..