Conseguir un retardo de lectura adc en Mikrobasic

Saludos. Soy nuevo aquí y en la electrónica.
Tengo un código para hacer un termómetro con el LM35 y un PIC16F88
El caso es, que tengo todo bien pero quisiera incluir un detalle, y es que necesito poner un delay al adc para evitar el salto de un grado a otro tan rápido que se pueda ver un parpadeo que de una lectura errónea.

Estoy usando mikroBasic Pro for PIC y el código lo encontré en Internet.
PHP:
program DigThermo

\'Programmer: Syed Tahmid Mahbub
\'Compiler: mikroBASIC PRO for PIC v3.20
\'Target PIC: 16F88 - 18pin DIP
\'Configuration: XT OSC, PWRTE OFF, WDT OFF, RA5 - MCLR OFF, BOR OFF, LVP OFF, CP OFF, CPD OFF, DEBUG OFF, CKMNE OFF, INTEXTSW OFF

dim data7, num7 as byte
dim temperature as longword
dim digit as byte[3]

sub procedure send7 (dim value, seven as byte) \'Common Anode Displays (2 7segments)
    PORTA = 0
    select case value
           case 0 data7 = $C0
           case 1 data7 = $F9
           case 2 data7 = $A4
           case 3 data7 = $B0
           case 4 data7 = $99
           case 5 data7 = $92
           case 6 data7 = $82
           case 7 data7 = $F8
           case 8 data7 = $80
           case 9 data7 = $90
    end select
    PORTB = data7 \'send temperature
    select case seven
           case 1 num7 = 2
           case 2 num7 = 4
           case 3 num7 = 8
    end select
    PORTA = num7 \'choose which 7segment
end sub

sub procedure GlobInit
    TRISA = 1
    TRISB = 0
    PORTA = 0
    PORTB = 0
    ANSEL = 1 \'AN0 analog
    CCP1CON = 0 \'PWM off
    CMCON = 7 \'Comparator off
end sub

sub procedure delay2ms
    delay_ms(2)
end sub

main:
     GlobInit
     while true
           temperature = (ADC_Read(0) * 500) >> 10
           digit[0] = temperature div 100
           digit[1] = (temperature div 10) mod 10
           digit[2] = temperature  mod 10
           send7(digit[0],1)
           delay2ms()
           send7(digit[1],2)
           delay2ms()
           send7(digit[2],3)
           delay2ms()
     wend
end
 
Última edición por un moderador:
Realiza la lectura del ADC usando el Timer 1.
Lo configuras para que desborde cada 500 ms o cada segundo.

De esa forma mejoras la transición y eso evita el parpadeo de los displays.
Igualmente puedes usar el Timer 0 para el mutiplexado de los displays y usas el bucle Main para otras tareas.
 
Con que leas el sensor de temperatura cada 5 minutos estas sobrado!!!
Si te hace sentir mal taaaanto tiempo, podes hacerlo cada minuto o cada dos minutos...
 
Disculpen, pero no se de programacion estoy aprendiendo un poco ahora, en este caso donde pondria ese timer para conseguir un tiempo antes de hacer otra lectura, recuerden que estoy usando mikrobasic
 
La rutina se coloca en el programa configurando un servicio de interrupción.

Yo no uso nada de mikroElektronika porque sus entornos se me hacen pésimos, si no, te pondría un ejemplo.

Otro problema es qué, si no tienes conocimientos de programación, difícilmente podrás comprender y adaptar ejemplos.
 
si ya veo, yo puse un delay luego de while true y consigo lo deseado pero me arroja otro error, que son dos digitos que estoy usando y el primer digito ejemplo tengo 30, el 3 empieza a encender y a apagar con ese delay
 
Última edición:
Atrás
Arriba