Hi,
I'm using the 16F676 - this is the code that I have (I think its the same as per the 1st post in this thread)
Compiles fine hereCode:@ __CONFIG _HS_OSC & _WDT_ON & _PWRTE_ON & _MCLRE_OFF DEFINE OSC 20 ANSEL = %00010111 ' Set which ports are digital and which are analogue CMCON=7 ' Turm Comparitors off TRISA=%11111111 ' set PORTA as all input TRISC=%00000001 ' set PORTC as all output apart from RC0 DEFINE ADC_BITS 8 ' ADCIN resolution (Bits) DEFINE ADC_CLOCK 2 ' ADC clock source (Fosc/32) DEFINE ADC_SAMPLEUS 11 ' ADC sampling time (uSec) INCLUDE "DT_INTS-14.bas" ' Base Interrupt System INCLUDE "SPWM_INT.bas" ' Software PWM module DEFINE SPWM_FREQ 150 ' SPWM Frequency (Hz) DEFINE SPWM_RES 254 ' SPWM Resolution (0 - 255) DutyVar VAR byte[4] ' Array used to store ADC [channels] ASM SPWM_LIST macro ; Define Pin's to use for SPWM SPWM_PIN PORTC, 2, _DutyVar ; and the associated DutyCycle variables SPWM_PIN PORTC, 3, _DutyVar+1 ; (Additional channels DutyVar+2, +3 etc) endm SPWM_INIT SPWM_LIST ; Initialize the Pins ENDASM ASM INT_LIST macro ; IntSource, Label, Type, ResetFlag? INT_Handler TMR1_INT, SPWMhandler, ASM, yes endm INT_CREATE ; Creates the interrupt processor ENDASM @ INT_ENABLE TMR1_INT ; enable Timer 1 interrupts Main: ADCIN 0, DUTYVAR[0] ; if having more channels add ADCIN 2, DUTYVAR[2] etc ADCIN 1, DUTYVAR[1] GOTO Main ; program simply loops round reading ADC and sending corresponding PWM out





Bookmarks