Hola foreros. Les cuento hace unas semanas atrás adapte un código de un medidor de nivel (que se posteó en neoteo por Mario Saco hace bastante tiempo) para hacer un vumetro estereo; en el cual repetí la rutina dos veces para leer el otro canal. Entonces puse otra rutina, usando SELECT CASE, para intentar hacer otra función si se pulsaba un boton y si se pulsaba de nuevo regresar al vumetro. Todo esto en Proton IDE.
Pero al momento de correrlo en un pic 16f877 real el vumetro funcionaba de lo mas bien, pero la 2da rutina no me respondia o lo hacía cuando queria, especialmente no me leia los botones de aumentar disminuir.
Eso mas que nada, que es lo que tengo que hacer para que el vumetro no me interrumpa otras rutinas?
El código de lo que intentaba hacer:
La página de donde saque el codigo de la barra:
Adjunto el archivo si alguien lo quiere probar
Cualquier sugerencia se agradece
Pero al momento de correrlo en un pic 16f877 real el vumetro funcionaba de lo mas bien, pero la 2da rutina no me respondia o lo hacía cuando queria, especialmente no me leia los botones de aumentar disminuir.
Eso mas que nada, que es lo que tengo que hacer para que el vumetro no me interrumpa otras rutinas?
El código de lo que intentaba hacer:
Código:
Device = 16F877 'Usamos el pic16f877a
Xtal = 4 'Con un cristal de 4 mhz
'Definimos la conexión del lcd
LCD_DTPin = PORTB.4
LCD_RSPin = PORTB.0
LCD_ENPin = PORTB.1
LCD_Interface = 4 'Interface de 4 bit
LCD_Lines = 2
LCD_Type = 0
'Definimos parámetros del A/D/C
Adin_Res = 10 'Resolución de 10 bits
Adin_Tad = frc 'RC osc
Adin_Stime = 50 'Tiempo de muestreo de 50us
'Declaramos variables
Dim Estado As Byte 'Variable para controlar menús
Dim Dato As Word 'Variable para almacenar el resultado
Dim Dato2 As Word
Dim Completos As Byte 'Caracteres completos a la izquierda de la barra
Dim Completos2 As Byte
Dim Muestra As Byte 'Resultado para mostrar en la barra
Dim Muestra2 As Byte
Dim Parcial As Byte 'ASCII code para los caracteres en la barra parcial
Dim Parcial2 As Byte
Dim Pad As Byte 'Número de espacios vacios a la derecha de la barra
Dim Pad2 As Byte
Dim Graves As Byte
'Conectamos la entrada analógica a porta.0 (RA0)
TRISB.2 = 1 'RB2 como entrada
TRISD.0 = 1
TRISD.1 = 1
TRISE = %11111111 'Todo el puerto es entrada
ADCON1 = %10000010 'Seteo el puerto Analogico
DelayMS 500 'Espero medio segundo
'Cargamos los caracteres especiales en la CGRAM del lcd
'El blanco a $0 hace que la gráfica trabaje más rápidamente
Print $FE,64,Rep $0\8 'Cargo un caracter vacío
Print $0,Rep $10\6,$0 'Cargo el caracter I
Print $0,Rep $14\6,$0 'Cargo el caracter II
Print $0,Rep $15\6,$0 'Cargo el caracter III
Cls 'Limpio el display
'Inicializamos las variables
Estado = 1
Graves = 30
Lazo: 'Comienza el lazo de funcionamiento
If PORTB.2 = 0 Then
Estado = Estado + 1
If Estado > 2 Then
Estado = 1
End If
End If
Select Estado
Case 1
Cls 'Limpio el display
Dato = ADIn 6 'Leemos la entrada PORTE.1 y PORTE.2
Dato2 = ADIn 7
Dato = (Dato */ 500) >> 2 'Es lo mismo que (Dato * 500)/1024
Dato2 = (Dato2 */ 500) >> 2
Muestra = (Dato / 10.8) + 1 'Escala de 0-500 para 48(16*3) segmentos de la barra
Muestra2 = (Dato2 / 10.8) + 1
GoSub Barra 'Actualizamos la barra
GoTo Lazo 'Cerramos el lazo
Case 2
If PORTD.0 = 1 Then
Graves = Graves + 1
If Graves > 59 Then
Graves = 59
Print At 1, 1, " Graves Max"
DelayMS 1000
End If
DelayMS 20
End If
If PORTD.1 = 1 Then
Graves = Graves - 1
If Graves < 0 Then
Graves = 0
Print At 1, 1, " Graves Min"
DelayMS 1000
End If
DelayMS 20
End If
Print At 1, 1, " Graves ", Dec2 Graves, " "
Muestra = (Graves / 1.26) 'Escala de 0-500 para 48(16*3) segmentos de la barra
GoSub Barra2 'Actualizamos la barra
GoTo Lazo 'Cerramos el lazo
End Select
Barra:
Completos = (Muestra Min 44) / 3 'Calculamos el número de caracteres completos (III)
Completos2 = (Muestra2 Min 44) / 3
Parcial = (Muestra Min 44) // 3 'Calculamos el ASCII code para los caracteres parciales
Parcial2 = (Muestra2 Min 44) // 3
Pad = 14 - Completos 'Número de espacios para mostrar (ancho)
Pad2 = 14 - Completos2
Print At 1,1, Rep $03\Completos, Parcial, Rep " "\Pad, "L" 'Mostrar la barra en la segunda línea
Print At 2,1, Rep $03\Completos2, Parcial2, Rep " "\Pad2, "R"
Return 'Regreso a donde salí
Barra2:
Completos = (Muestra Min 48) / 3 'Calculamos el número de caracteres completos (III)
Parcial = (Muestra Min 48) // 3 'Calculamos el ASCII code para los caracteres parciales
Pad = 15 - Completos 'Número de espacios para mostrar (ancho)
Print At 2,1, Rep $03\Completos, Parcial, Rep " "\Pad 'Mostrar la barra en la segunda línea
Return 'Regreso a donde salí
La página de donde saque el codigo de la barra:
HTML:
http://www.neoteo.com/indicador-de-nivel-con-lcd-vumetro
Adjunto el archivo si alguien lo quiere probar
Cualquier sugerencia se agradece