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
	
  
				
						
