torres.electronico
Well-known-Alfil
Saludos a todos, y hace un par de dias me tope con este topic que me gusto mucho linea a linea que fui viendo...
voy a ver si me hago de un espacio de tiempo, e irles sumando proyectos mios... algunos quizas no suba el diagrama por una razon personal, y otro quizas si...
Arranco con un sencillo y eficaz Controlador de Largada, con tacometro incluido...
Tengo una version mejorada, que incluye mas funciones, pero que corre con un 877a y una eeprom.
Saludos
voy a ver si me hago de un espacio de tiempo, e irles sumando proyectos mios... algunos quizas no suba el diagrama por una razon personal, y otro quizas si...
Arranco con un sencillo y eficaz Controlador de Largada, con tacometro incluido...
Tengo una version mejorada, que incluye mas funciones, pero que corre con un 877a y una eeprom.
Saludos
Código:
'****************************************************************
'* Name : UNTITLED.BAS *
'* Author : Martin A. Torres Fortelli *
'* Notice : Copyright (c) 2010 Escuela Tecnica Virtual *
'* : All Rights Reserved *
'* Date : 03/09/2010 *
'* Version : 1.0 *
'* Notes : *
'* : *
'****************************************************************
@ Device PIC16F876
@ device xt_osc
define osc 20
define LCD_DREG PORTB
define LCD_DBIT 4
DEFINE LCD_RSREG PORTB
DEFINE LCD_RSBIT 3
DEFINE LCD_EREG PORTB
DEFINE LCD_EBIT 2
define ADC_BITS 8
define ADC_CLOCK 3
DEFINE ADC_SAMPLEUS 10
;*******************************************************************
;********************* Config I/0 etc ******************************
ADCON1 = %00001110
Symbol boton_uno = PORTC.0 ;BOTON PULSADOR UNO
symbol boton_ctrlRPM = PORTC.3 ;BOTON CONTROLADOR DE LARGADA
symbol boton_enter = PORTC.5 ;BOTON PULSADOR ENTER
SYMBOL boton_subir = PORTC.6 ;BOTON PULSADOR SUBIR
SYMBOL boton_bajar = PORTC.7 ;BOTON PULSADOR BAJAR
ent_RPM var portb.0 ;Entrada de señal PWM
btn_1 var portC.0 ;BOTON PULSADOR UNO
led_G var portC.2 ;BOTON PULSADOR TRES
btn_CRPM var portC.3 ;BOTON CONTROLADOR DE LARGADA
enter var portC.5 ;BOTON PULSADOR ENTER
bsubir var portC.6 ;BOTON PULSADOR SUBIR
bbajar var portC.7 ;BOTON PULSADOR BAJAR
releC var portC.4 ;Salida relay corte RPM
led var portC.1 ;Salida indicador LED
linea1 con $80
linea2 con $C0
temp VAR byte ; Byte Variable temporal
Cnt VAR word ; Cnt es una variable tipo byte
RPMalta var word ; RPMalta es una variable tipo word
RPMbaja var word ; RPMbaja es una variable tipo word
RPMaviso var word
lamda var byte
x var byte ; x es una variable tipo byte
x1 var byte ; x1 es una variable tipo byte
revo var word ; revo es una variable tipo word
disparo var byte ; disparo es una variable tipo byte
eeprom 0, [22,26]
;**********************************************************************
;********************** Cuerpo del programa ***************************
;**********************************************************************
ini1:
lcdout $FE,1
lcdout $FE, linea1,"Controlador de"
LCDOUT $FE,$C3, "RPM V0.2a"
pause 1000
gosub loop
;*******************************************************************************
;******************* Visor simple de RPM ***************************************
;** Esta funcion, solo se emplea para monitorizar las RPM , el sensor Lambda****
;********************** y las opciones de config o control *********************
;*******************************************************************************
LOOP:
ADCIN 0,lamda
count portb.0, 125, revo
revo= (revo / 4)/2 * 240
LCDOUT $FE,1,"RPM=",dec revo," L=",dec lamda
LCDOUT $FE,linea2,"En=CtrL 1=ProgCL"
temp = 0
BUTTON boton_enter, 0, 255, 0, temp, 1,PM_CL ;boton_uno = PORTC.0
temp = 0
BUTTON boton_uno, 0, 255, 0, temp, 1,PM_Prog
GOTO LOOP
control_rpm:
count portb.0, 125, revo
revo= (revo / 4)/2 * 240
LCDout $FE,1,"CONTROL LARGADA"
pause 100
if PORTC.3 = 1 then PM_CL
if revo > RPMbaja then
lcdout $FE,$c0,"RPM=",dec revo
high releC
pause 250
low releC
endif
goto control_rpm
;**---------------------------------------------------------**
;**---------------------------------------------------------**
;**---------------------------------------------------------**
PM_CL:
ADCIN 0,lamda
count portb.0, 125, revo
revo= (revo / 4)/2 * 240
LCDOUT $FE,1,"RPM=",dec revo," L=",dec lamda
lcdout $FE,$c0,"C=",dec RPMalta," CL=",DEC RPMbaja
pause 100
if PORTC.3 = 0 then control_rpm
if enter= 0 then LOOP
gosub visor
gosub control2
GOTO PM_CL
;**---------------------------------------------------------**
;**---------------------------------------------------------**
;**---------------------------------------------------------**
visor:
IF revo > RPMaviso then disparoLED
if revo < RPMaviso then disparoLED_V
if PORTC.3 = 0 then control_rpm
if enter = 0 then LOOP
pause 100
return
disparoLED_V:
temp = 0
if boton_enter = 0 then LOOP
high led_G : Low led
pause 100
low led_G
goto control1
disparoLED:
temp = 0
high led : low led_G
pause 100
low led
goto control1
control1:
IF revo > RPMalta then corte1
goto PM_CL
;**---------------------------------------------------------**
;**---------------------------------------------------------**
;**---------------------------------------------------------**
control2:
if PORTC.3 = 0 then control_rpm
if enter = 0 then LOOP
IF revo > RPMalta then corte1
return
;**---------------------------------------------------------**
;**---------------------------------------------------------**
;**---------------------------------------------------------**
corte1:
LCDout $FE,1,"CORTE"
For disparo= 1 to 3
high releC
pause 500
low releC
next
goto PM_CL
;****************************************************************
;********************** Seccion de Prog RPM *********************
;****************************************************************
PM_Prog:
RPMalta = 19500
RPMbaja = 3500
RPMaviso = 4000
gosub soltar
;**---------------------------------------------------------**
;**---------------------------------------------------------**
;**---------------------------------------------------------**
grabar1:
lcdout $FE,1,"Prog Visor Led"
lcdout $FE,$c0,"LED=",dec RPMaviso,"RPM"
pause 100
if bbajar = 0 then restar1
if bsubir = 0 then sumar1
if enter = 0 then grabarA
goto grabar1
restar1:
RPMaviso = RPMaviso - 5
goto grabar1
sumar1:
RPMaviso = RPMaviso + 5
goto grabar1
grabarA:
gosub soltar
write 0, RPMaviso
;**---------------------------------------------------------**
;**---------------------------------------------------------**
;**---------------------------------------------------------**
grabar2:
lcdout $FE,1,"Prog Corte RPM"
lcdout $FE,$c0,"Corte=",dec RPMalta,"RPM"
pause 100
if bbajar = 0 then restar2
if bsubir = 0 then sumar2
if enter = 0 then grabarB
goto grabar2
restar2:
RPMalta = RPMalta - 5
goto grabar2
sumar2:
RPMalta = RPMalta + 5
goto grabar2
grabarB:
gosub soltar
write 0, RPMalta
;**---------------------------------------------------------**
;**---------------------------------------------------------**
;**---------------------------------------------------------**
grabar3:
lcdout $FE,1,"Prog Ctrl larg"
lcdout $FE,$c0,"Corte=",dec RPMbaja,"RPM"
pause 100
if bbajar = 0 then restar3
if bsubir = 0 then sumar3
if enter = 0 then grabarC
goto grabar3
restar3:
RPMbaja = RPMbaja - 5
goto grabar3
sumar3:
RPMbaja = RPMbaja + 5
goto grabar3
grabarC:
gosub soltar
write 3, RPMbaja
goto LOOP
soltar:
high led
pause 150
low led
soltar2:
If bbajar = 0 then soltar2
If bsubir = 0 then soltar2
If enter = 0 then soltar2
pause 100
return
end