Falla en proyecto con PIC16F628a

Es un contador de pulsos, el cual, tiene como tope 100 y 200 pulsos. Esta selección la hago con una llave que conecta a masa o 5V.
Lo programe en Basic con Proton IDE y lo simulé con Proteus 8. en el simulador anda bien, cuando hago la placa, no anda.
Al presionar el botón de arranque, no entra en el bucle donde habilita el Relay y cuanta los pulsos que llegan del sensor.

Mi programa: (Tiene unos encendidos de leds y relay para probar que todo anda antes de empezar... y funciona de maravilla)

Código:
Device 16F628A 
      
Symbol Sensor=PORTA.7
Symbol Out=PORTA.1
Symbol Inicio=PORTA.2
Symbol Fin=PORTA.4 
Symbol Limite=PORTB.0     
Symbol LedR=PORTB.4
Symbol LedV=PORTB.6

Dim Contador As Byte
Dim Tope As Byte

TRISA=%10110100
TRISB=%00000001 

    Out = 0
    Tope = 0
    Contador=0
    LedV = 1
    DelayMS 1000
    LedV = 0
    LedR = 1
    DelayMS 1000
    LedR=0
    Out = 1
    DelayMS 1000
    Out = 0
    While 1=1
        If Limite=0 Then 
            Tope = 4
            LedR = 0
            LedV = 1
        Else
            Tope = 8
            LedV = 0
            LedR = 1
        EndIf
        If Inicio = 1 Then GoSub Bucle 
    Wend

Bucle:
    While Inicio = 1
    Wend
    Out = 1
    While Contador  <> Tope 
        If Fin = 1 Then
            Out = 0
            Contador = 0 
            Return
        EndIf 
        If Sensor = 1 Then Contador = Contador + 1
        While Sensor = 1
        Wend
    Wend
    Out = 0
    Contador = 0
    Return

Desde ya muchisimas gracias! ...
 
Última edición por un moderador:
¿Cual es tu diagrama y como declaras la palabra de configuración? Ese PIC creo que tiene oscilador interno, pero no se si lo estas usando o si se auto configura el externo y no lo agregas. Proteus a veces ignora esas cosa y mágicamente hacer aparecer los ciclos de reloj en el microcontrolador.
 
Hola que tal amigo Juanchete8, desconozc, como se programa en proton pero viendo tu programa, note que

1. No declaraste que tipo de cristal ni configuracion de fuses y demas del pic
2. Tu programa yo lo veo como un solo trozo de comando y no separados por subrutinas como tu lo quieres

Te dejo un link de aqui mismo del foro donde, empiezan un tutorial de este lenguaje y creo que hasta con el mismo pic

https://www.forosdeelectronica.com/f24/tutorial-manejo-proton-ide-27932/


Ah, se me paso tal vez tu programa nunca cuenta los pulsos del sensor o de el dispositivo que tenga que mandar pulsos por que como es un solo trozo cuando regresa ala secuencia de leds, se tiene que esperar 3 segundo que estoy casi seguro que por ahí se pierde tu secuencia

Acomode tu programa, deje el cristal a 4 mhz, si usas el cristal interno tendrias que declararlos

Saludos


Código:
    device 16f628a
    XTAL=4 ; Oscilador de 4 MHZ
    ALL_DIGITAL = True
 
 
    Symbol Sensor=PORTA.7
    Symbol Out=PORTA.1
    Symbol Inicio=PORTA.2
    Symbol Fin=PORTA.4 
    Symbol Limite=PORTB.0 
    Symbol LedR=PORTB.4
    Symbol LedV=PORTB.6
 
    Dim Contador As Byte
    Dim Tope As Byte
 
    TRISA=%10110100
    TRISB=%00000001 
 
    Out = 0 
    Tope = 0
    Contador=0
    LedV = 1
    DelayMS 1000
    LedV = 0
    LedR = 1
    DelayMS 1000
    LedR=0
    Out = 1
    DelayMS 1000
    Out = 0
    While 1=1
    If Limite=0 Then 
    Tope = 4
    LedR = 0
    LedV = 1
    Else
    Tope = 8
    LedV = 0
    LedR = 1
    EndIf
    Wend
 
 
    Bucle:
 
    While Inicio = 1
    Wend
    Out = 1
    While Contador <> Tope 
    If Fin = 1 Then
    Out = 0
    Contador = 0 
    Return
    EndIf 
    If Sensor = 1 Then Contador = Contador + 1
    While Sensor = 1
    Wend
    Wend
    Out = 0
    Contador = 0
    goto bucle


Asi como esta el programa , la secuencia de led solo se ejecutara 1 sola vez si quieres que estas 2 rutinas funciones tendrias que utilizar otro tipo de secuencia, ya sea por taimer o por interrupcion externa
 
Última edición por un moderador:
¿Cual es tu diagrama y como declaras la palabra de configuración? Ese PIC creo que tiene oscilador interno, pero no se si lo estas usando o si se auto configura el externo y no lo agregas. Proteus a veces ignora esas cosa y mágicamente hacer aparecer los ciclos de reloj en el microcontrolador.

Mil gracias!! el tema es que no se como hacer para configurar en osc. interno.. use unos comandos que vi en el tutorial que dark089 me pasó y no me lo toma en este pic!

uno de los errores es que no use el comando "all_digital true", lo puse y ahora anda bien.. pero esta muy suceptible a interferencia... y cuando pongo la entrada de señal de contador a masa se bloquea el pic.
 
Mil gracias!! el tema es que no se como hacer para configurar en osc. interno.. use unos comandos que vi en el tutorial que dark089 me pasó y no me lo toma en este pic!

uno de los errores es que no use el comando "all_digital true", lo puse y ahora anda bien.. pero esta muy suceptible a interferencia... y cuando pongo la entrada de señal de contador a masa se bloquea el pic.

Hola...Con esto en Proton te tiene que funcionar

Código:
             Device 16F628A 

  '----------- Configuracion de fusibles ---------------------------------

        Config INTRC_OSC_NOCLKOUT,WDT_OFF,PWRTE_OFF,CP_OFF,BODEN_OFF,LVP_OFF,MCLRE_OFF
       
       All_Digital = TRUE' El Puerto A es digital
Saludos.

Ric.
 
Arriba