Autor Tema: Problema con rutina en Proton IDE  (Leído 4337 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado ArArgonath

  • PIC10
  • *
  • Mensajes: 9
Problema con rutina en Proton IDE
« en: 31 de Octubre de 2011, 00:22:28 »
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:

Código: [Seleccionar]
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:http://www.neoteo.com/indicador-de-nivel-con-lcd-vumetro

Adjunto el archivo si alguien lo quiere probar
Cualquier sugerencia se agradece

Desconectado Noelillo

  • PIC12
  • **
  • Mensajes: 94
Re: Problema con rutina en Proton IDE
« Respuesta #1 en: 04 de Noviembre de 2011, 09:10:17 »

Hola , prueba esto...


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
 PORTB_PULLUPS = ON              ' Enable PORTB pull-ups 
 'Declaramos variables
 dim Btnvar     as byte ' Pulsadores
 
 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
 
 Symbol SW1      =    PORTb.4 ' Interruptor Set
 'Conectamos la entrada analógica a porta.0 (RA0)
 
 TRISB.4 = 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
     
    button sw1,0,255,250,Btnvar,0,Estados
           delayms 200:estado = estado + 1

           
' If PORTB.4 = 0 Then
'  Estado = Estado + 1
  If Estado > 2 Then
   Estado = 1
  End If
' End If
 Estados:
 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
  'Cls 'Limpio el display
       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
                      '1234567890123456
       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í

Desconectado ArArgonath

  • PIC10
  • *
  • Mensajes: 9
Re: Problema con rutina en Proton IDE
« Respuesta #2 en: 27 de Noviembre de 2011, 14:31:53 »
Hola noelillo. :)

Gracias por responder.

Leyendo tu mensaje me doy cuenta de que cambiaste la línea de verificación del pulsador de cambiar estado, pero el problema no se me presenta ahí, el problema aparece cuando estoy en la segunda rutina en la cual al tener tensión en los pines del adc, los botones de aumentar/disminuir no me responden.

No se si simulaste el programa en proteus, pero me di cuenta que solo me pasa cuando lo tengo en el pic real.

Sin intención de molestar te pido encarecidamente, si tienes tiempo, provar el programa en un pic real para que te des cuento de los que te digo.

Desde luego muchas gracias. :)

Desconectado Noelillo

  • PIC12
  • **
  • Mensajes: 94
Re: Problema con rutina en Proton IDE
« Respuesta #3 en: 28 de Noviembre de 2011, 07:10:20 »
Yo lo he probado en un pic y funciona...

te puse los de las resistencias pull-ups ( PORTB_PULLUPS = ON              ' Enable PORTB pull-ups).

Has probado lo que te deje y no te funciona?

dibujame el esquema...

un saludo.

 

Desconectado ArArgonath

  • PIC10
  • *
  • Mensajes: 9
Re: Problema con rutina en Proton IDE
« Respuesta #4 en: 02 de Diciembre de 2011, 15:14:37 »
Hola noelillo.

Enserio que te funciona? :-/
Sin ningun lag ni nada por el estilo...? Lo provaste con musica a la salida de un mp3?

A y por último con que pic y frecuencia de cristal?