Hi everyone, once again!
Hi made this code for controlling a DC motor with a PIC12F683.
The PIC reads the ADC value, and then controls the duty of the PWM output.
Everything is working good, however, i like to know your opinion about the code.
Is it possible to make any improvement, or other change to put the code better?
Here is the code
Code:
'****************************************************************
'* Name : PWM.BAS *
'* Author : Gadelhas *
'* Notice : Copyright (c) 2010 *
'* : All Rights Reserved *
'* Date : 28-11-2010 *
'* Version : 1.0 *
'* Notes : *
'* : PIC12F683 + MICROCODE + EASYPICV6 *
'****************************************************************
' INCLUDE's e FUSES
' ====================================================================
@ __config _INTRC_OSC_NOCLKOUT & _WDT_OFF & _MCLRE_OFF & _CP_OFF & _BOD_OFF
' ====================================================================
Define OSC 8
' VARIABLES
' ===========================================================
Duty var WORD: DUTY=0
AdcValue var word: AdcValue=0
I var word: I=0
Sample var word: sample=0
' REGISTERS & PINOUT 1 = IN; 0 = OUT
' ====================================================================
'76543210
TRISIO = %00000001
'76543210
GPIO = %00000000
ANSEL = 1
VRCON = 0
CMCON0 = 7
ADCON0 = %10000000
' PINOUT NAMES
' ===========================================================
POT1 VAR GPIO.0
' DEFINITIONS
' ===========================================================
DEFINE ADC_BITS 10 ' Set number of bits in result
DEFINE ADC_CLOCK 3 ' Set clock source (rc = 3)
DEFINE ADC_SAMPLEUS 50 ' Set sampling time in microseconds
' MAIN PROGRAM
' ===========================================================
Main:
gosub ADC
DUTY=(AdcValue*64)/256
HPWM 1, DUTY, 5000
GOTO MAIN
' SUB-ROTINAS
' ===========================================================
ADC:
for I = 1 to 15
ADCON0.1 = 1
Not_Done:
if ADCON0.1 = 1 then not_done
adcin 0,AdcValue
sample = AdcValue + sample
next I
AdcValue = sample/15
sample=0
return
END
Thanks
Bookmarks