RCtech
- 19th February 2015, 20:57
Hello.
I'm pretty sure someone already post something like I need.
I did a very simple program to sweep a frequency from 900Hz to 12KHz (Code below)
But, I need my pulse thickness to be fixed at 5µs everytime.
With my code, I use duty in percentage so the thickness of the pulse change everytime.
It's okay only when frequency reach 2KHz but it's too long before and too short after because I didn't took the right way to setup my HPM.
Yes, I know my mistake and I know too I don't have enough knowledge about Timers I'm not very familiar with.
Then, I'm stupidly looking for an example with "fixed pulse thickness".
I did some search with many keywords but I didn't found what I need.
Could someone give me a way to follow ?
(And sorry for my bad English).
@ __config _INTRC_OSC_NOCLKOUT & _WDT_OFF & _MCLRE_OFF & _CP_OFF & _BOD_OFF
TRISIO = %000001
OSCCON = %01110000 ' 8Mhz
ANSEL = %001011 ' AN0 and AN1 and AN3 ANALOG
ADCON0.7 = 1 ' Right justify result (Pour l'ADCin)
CMCON0 = 7 ' Analog comparators off (Pour l'ADCin)
'-------------------------------------------------------------------------------
FREQmax VAR WORD
FREQmax = 12000
FREQmin VAR WORD
FREQmin = 900
HPWMfreq VAR WORD
HPWMfreq = FREQmin
HPWMduty VAR WORD
HPWMduty = 3 ' 1% = 3 à 100% = 254
'-------------------------------------------------------------------------------
Up VAR BIT
Up = 1
GPIO = 0
;----[Main Program Loop]--------------------------------------------------------
MAIN:
HPWM 1, HPWMduty, HPWMfreq ' Start HPWM
PAUSE 10 ' 10mS between each steps
IF Up = 1 and HPWMfreq <= FREQmax THEN 'Going UP from 900 to 12KHz
HPWMfreq = HPWMfreq + 1
Else ' Here we are at freq maxi
Up = 0
ENDIF
IF Up = 0 and HPWMfreq >= FREQmin THEN 'Going DOWN from 12K to 900Hz
HPWMfreq = HPWMfreq - 1
Else ' Here we are at freq mini
Up = 1
ENDIF
IF HPWMfreq = FREQmin THEN
Boucle = Boucle + 1
Toggle LED
ENDIF
GOTO Main
'-------------------------------------------------------------------------------
FIN:
END
I'm pretty sure someone already post something like I need.
I did a very simple program to sweep a frequency from 900Hz to 12KHz (Code below)
But, I need my pulse thickness to be fixed at 5µs everytime.
With my code, I use duty in percentage so the thickness of the pulse change everytime.
It's okay only when frequency reach 2KHz but it's too long before and too short after because I didn't took the right way to setup my HPM.
Yes, I know my mistake and I know too I don't have enough knowledge about Timers I'm not very familiar with.
Then, I'm stupidly looking for an example with "fixed pulse thickness".
I did some search with many keywords but I didn't found what I need.
Could someone give me a way to follow ?
(And sorry for my bad English).
@ __config _INTRC_OSC_NOCLKOUT & _WDT_OFF & _MCLRE_OFF & _CP_OFF & _BOD_OFF
TRISIO = %000001
OSCCON = %01110000 ' 8Mhz
ANSEL = %001011 ' AN0 and AN1 and AN3 ANALOG
ADCON0.7 = 1 ' Right justify result (Pour l'ADCin)
CMCON0 = 7 ' Analog comparators off (Pour l'ADCin)
'-------------------------------------------------------------------------------
FREQmax VAR WORD
FREQmax = 12000
FREQmin VAR WORD
FREQmin = 900
HPWMfreq VAR WORD
HPWMfreq = FREQmin
HPWMduty VAR WORD
HPWMduty = 3 ' 1% = 3 à 100% = 254
'-------------------------------------------------------------------------------
Up VAR BIT
Up = 1
GPIO = 0
;----[Main Program Loop]--------------------------------------------------------
MAIN:
HPWM 1, HPWMduty, HPWMfreq ' Start HPWM
PAUSE 10 ' 10mS between each steps
IF Up = 1 and HPWMfreq <= FREQmax THEN 'Going UP from 900 to 12KHz
HPWMfreq = HPWMfreq + 1
Else ' Here we are at freq maxi
Up = 0
ENDIF
IF Up = 0 and HPWMfreq >= FREQmin THEN 'Going DOWN from 12K to 900Hz
HPWMfreq = HPWMfreq - 1
Else ' Here we are at freq mini
Up = 1
ENDIF
IF HPWMfreq = FREQmin THEN
Boucle = Boucle + 1
Toggle LED
ENDIF
GOTO Main
'-------------------------------------------------------------------------------
FIN:
END