'***********************************************************
'Pruebas para inciarse en el control de iluminación led por PWM
'Tres PWM por software
'Placa Pic EBasic con Pic16F88
'***********************************************************
'Configuración de fuses y reloj
Define CONF_WORD = 0x2f50
Define CONF_WORD_2 = 0x3ffc
Define CLOCK_FREQUENCY = 8
'Define SIMULATION_WAITMS_VALUE = 1 'Aumenta la velocidad de las pausas
'Configuración de módulos
AllDigital 'Los pin analogicos/digitales trabajaran como digitales
CMCON = 0x07 'Comparador a off
OSCCON = 0x7e 'Set intrc To 8mhz, se usara reloj interno a 8Mhz
TRISA = 0 'Puerto A configurado como salidas, execto RA5 que solo trabaja como entrada
TRISB = 0 'Puero B configurado como salidas
PORTB = 0 'Puerto B puesto a cero todos sus pin
'Rutina principal
main:
Dim cont As Word 'Contador incremento potencia de los PWMs
Dim pwm0 As Byte 'Potencia PWM 0
Dim pwm1 As Byte 'Potencia PWM 1
Dim pwm2 As Byte 'Potencia PWM 2
Const cont_s = 5 'Intervalo incremento Potencias
Dim x As Bit 'Variable auxiliar
pwm0 = 0 'Potencia inicial 0% PWM0
pwm1 = 255 'Potencia inicial 100€ PWM1
pwm2 = 127 'Potencia inicial 50% PWM2
x = 0
While x = 0 'Bucle principal
Call _pwm_rb(pwm0, pwm1, pwm2) 'Controla y actualiza los PWMs
If cont >= cont_s Then 'Intervalo del incremento de potencias
pwm0 = pwm0 + 1
pwm1 = pwm1 - 1
cont = 0
Endif
cont = cont + 1
Wend
End
'Funcion para practicas con control de potencia con 3 PWM (software)
'Para control con positivo comun
'Pin utilizado RB0 a RB2 del puerto B
'Frecuencia aproximada 230Hz a 8Mhz de CLK.
'Tres valores de entrada mediante _pwm0 a _pwm2
'Con valores comprendidos entre 0 a 255 pasos de potencia
Proc _pwm_rb(_pwm0 As Byte, _pwm1 As Byte, _pwm2 As Byte)
Const periodo = 255 'Periodo de la señal
Dim ctrl As Byte 'Lleva el tiempo transcurrido del periodo
If _pwm0 > 0 Then RB0 = 0 'Pin a OFF
If _pwm1 > 0 Then RB1 = 0 'Pin a OFF
If _pwm2 > 0 Then RB2 = 0 'Pin a OFF
ctrl = 0 'Comienza ciclo
While ctrl < periodo 'Mientras no se complete el periodo
If ctrl >= _pwm0 Then RB0 = 1 'Pin a ON
If ctrl >= _pwm1 Then RB1 = 1 'Pin a ON
If ctrl >= _pwm2 Then RB2 = 1 'Pin a ON
ctrl = ctrl + 1 'Tiempo transcurrido del periodo
Wend
End Proc