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)
Code:
@ __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
Compiles fine here
Bookmarks