Autor Tema: Configuracion R de polarizacion portB de 16F886  (Leído 4682 veces)

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

Desconectado JoseLuis2801

  • PIC16
  • ***
  • Mensajes: 168
Configuracion R de polarizacion portB de 16F886
« en: 13 de Octubre de 2011, 06:03:37 »
Hola a todos, creo que es esta seccion donde debo situar el post, sino disculpenme.

Tengo un pequeño problemilla, simular me simula bien con el MPLAB, pero luego programo el PIC 16F886 con el PIcKit 3 (verificado programa bien), y al comprobar el funcionamiento del pic por si solo, osea desconectandolo del PICKIT3, y suministrandole 5V auxiliares, y hacieno un pequeño curcuito: pin RB6 - pulsador NA - GND, y,  pin RB7 - pulsador NA - GND , al pulsar , no acaba de funcionar correctamente.

Para empezar, estan bien activadas las R de polarizacion para bits 6 y 7 ?, o me falta algo de poner que desconozco.     


                  w         EQU      0h
   f         EQU      1h

   LIST      P=16F886
   INCLUDE     <P16F886.INC>
   
   

   
   RP0         EQU   05H
   RP1         EQU   06h
   RBPU      EQU   07H



   
              ORG      00H
            GOTO    INI
            ORG    05H
   
   INI         BSF      STATUS,RP1      ;BANCO 3
            BSF      STATUS,RP0   
            CLRF    ANSELH         ;DIGITALES PUERTO B
            BCF      STATUS,RP1
            BSF      STATUS,RP0      ; BANCO 1
            BCF      OPTION_REG,RBPU   ;RESSITENCIAS
            MOVLW   0XC0            ; DE POLARIZACION
            MOVWF   WPUB         ;ACTIVADAS, BITS 6 Y 7
   
            MOVLW   0XF0   
            MOVWF   TRISB
                           
            BCF      STATUS,RP0      ; BANCO 0
            CLRF    PORTB         ; APAGA LEDS
         
   SWITCH1      BTFSS   PORTB, 6h      
            GOTO   ENC.2LEDSA   
    SWITCH2      BTFSS   PORTB, 7H
            GOTO   ENC.2LEDSB
            GOTO   SWITCH1   

   ENC.2LEDSA   BSF     PORTB,0H
            BSF      PORTB,3H
            GOTO    FIN
   ENC.2LEDSB   BSF     PORTB,1h
            BSF      PORTB,2h   
    FIN         NOP
            END   

Gracias ,

Un saludo

Desconectado tapi8

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1506
Re: Configuracion R de polarizacion portB de 16F886
« Respuesta #1 en: 13 de Octubre de 2011, 07:31:52 »
Mira aqui si los tienes bien conectados, porque creo que no los estas poniendo bien.

http://picmania.garcia-cuervo.net/trucos.php#CONECTANDOCONTACTOS

Despues dices que son NA, normalmente abiertos no?, en el programa haces esto:

Código: [Seleccionar]
SWITCH1      BTFSS   PORTB, 6h     
            GOTO   ENC.2LEDSA   
    SWITCH2      BTFSS   PORTB, 7H
            GOTO   ENC.2LEDSB
            GOTO   SWITCH1   

Si SWITCH1 esta pulsado es 1 salta a SWITCH2 y si tambien esta pulsado salta a GOTO SWITCH1, es decir cuando los pulsas no hace nada, es esto lo que quieres?.


Desconectado JoseLuis2801

  • PIC16
  • ***
  • Mensajes: 168
Re: Configuracion R de polarizacion portB de 16F886
« Respuesta #2 en: 13 de Octubre de 2011, 08:40:48 »
Otro enlace más. 8)

Si NA, Normalmente abietos, si activo las resistencias de polarización internas del propio PIC, me queda como el esquema de tú enlace, el de abajo, mientras no pulse, están ambas entradas a 1, gracias a la R internas, y el PIC no sale del bucle, en el momento que pulse uno de los 2 switch, se pone a 0V una entrada, por lo que se deja de cumplir una condición, y sale del bucle,  y bien o se encienden los 2 leds de los extremos, o los 2 centrales, y acaba el programa.

Lo entiendes así tb, o hay algo que se me escapa ?

Entinedo, esta es la configuracion adecuada segun datasheet del PIC, para activar las R:

            BCF         STATUS,RP1
            BSF         STATUS,RP0                ; BANCO 1
            BCF         OPTION_REG,RBPU      ;RESSITENCIAS
            MOVLW    0XC0                          ; DE POLARIZACION
            MOVWF    WPUB                         ;ACTIVADAS, BITS 6 Y 7


Luego os pongo una fotito.

Gracias

Un saludo

Desconectado JoseLuis2801

  • PIC16
  • ***
  • Mensajes: 168
Re: Configuracion R de polarizacion portB de 16F886
« Respuesta #3 en: 13 de Octubre de 2011, 09:26:26 »
YA ESTÁ  :-/ :-/ :-/ :-/ :-/ :-/

XQ me había olvidado del registro de configuracion de bits, me habia olvidado de inhabilitar el WTDE y el LVP.

Funciona perfecto, excepto que funciona siempre, nunca termina de ejecutarse.  :shock:

LUego os pongo la fotito.

Un saludo

Desconectado tapi8

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1506
Re: Configuracion R de polarizacion portB de 16F886
« Respuesta #4 en: 13 de Octubre de 2011, 09:29:24 »
Citar
pin RB6 - pulsador NA - GND, y,  pin RB7 - pulsador NA - GND , al pulsar , no acaba de funcionar correctamente.

Bien tal y como lo ponias aqui deducia, parece que mal, que no estabas conectando a +5V.

Las R parece que estan bien configuradas, que problema te da, falla siempre o solo a veces?. No haces antirrebotes por eso pregunto.
Prueba a hacer un antirrebotes por software, chequeas el pulsador llamas a un retardo de 20ms y en el segundo chequeo tomas la decision.

btfss  SWITCH1
goto  $-1         ; es 0 sigue aqui
call    DELAY     ; delay de 20ms
btfss  SWITCH1  ; es 1 o rebotes?
goto   ESCERO    ; si viene aqui fueron rebotes
goto   ESUNO      ; si viene aqui fue pulsacion


Desconectado JoseLuis2801

  • PIC16
  • ***
  • Mensajes: 168
Re: Configuracion R de polarizacion portB de 16F886
« Respuesta #5 en: 13 de Octubre de 2011, 11:15:32 »
Si, disculpame,  debí haber piuesto mas info, esas R, que ya te digo que son internas , osea, están dentro del PIC, están conectadas directas por un lado a 5V, y por el otro a la entrada, lo mismo que el esquemita. Y si , si funciona perfectamente.

Si había pensado lo de los rebotes, pero como soy novatillo,.........................  :oops:

Luego entonces,como ántes tenía el cableado un poco deficiente, y seguro que habia rebotes, me ha venido fenomeno cableado de los equipos R/C, el de conexion Receptor -servos, y ya tengo todo conectado, excepto la limentación, cierto es que pueden habrán rebotes en el switch tb.

Gracias , me quedo con el  circuito antirebotes. Luego veo la logica que me has descrito.

Lo de que el circuito siempre funciona, no lo entiendo, si  ha encendido 2 leds, es que ha salido del bucle, y no ejecuta end, sino que es como si el PIC se resetease otra vez, osea ocurre lo siguiente:

Conecto 5V, todo apagado,  pulso un switch, se encienden sus 2 leds,  perfecto, mientras esta pulsado, estan encendidos, suelto, y se apagan, pero el programa sigue corriendo, vuelvo a pulsar el que sea, y se vuelven a encender. :shock:No tenía que haber se parado ya el programa despues de encender los 2 leds ? No lo entiendo. :5]

Un saludo

Las fotos ya están adjuntas a este post. :shock:






« Última modificación: 13 de Octubre de 2011, 11:20:34 por JoseLuis2801 »

Desconectado tapi8

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1506
Re: Configuracion R de polarizacion portB de 16F886
« Respuesta #6 en: 13 de Octubre de 2011, 12:43:48 »
No lo mandes a hacer el END. Ahi no lo debes de mandar nunca (puede haber algun caso muy especial en que se haga), pero por regla general nunca se manda al END.

Código: [Seleccionar]
ENC.2LEDSA   BSF     PORTB,0H
            BSF      PORTB,3H
            GOTO    FIN
   ENC.2LEDSB   BSF     PORTB,1h
            BSF      PORTB,2h   
    FIN         NOP
            END   

Puedes por ejemplo encender los LEDs y que vuelva a chequear los pulsadores, si quieres que al pulsar otra vez los apague.

Quieres que haga algo en especial?

Citar
Lo de que el circuito siempre funciona, no lo entiendo,

Te lo preguntaba porque cuando es por rebotes suele fallar algunas veces pero no siempre, pero si ya lo has hecho por hardware, no es necesario que tambien lo hagas en el programa. Normalmente se hace por software para no poner componentes extra.

En lo de la resistencias internas tienes tu razon, como nunca las uso estaba equivocado yo.


Desconectado JoseLuis2801

  • PIC16
  • ***
  • Mensajes: 168
Re: Configuracion R de polarizacion portB de 16F886
« Respuesta #7 en: 13 de Octubre de 2011, 19:09:41 »
Hola, una cosilla que tenía que haberte puesto, añadi en las instrucciones de poner a 1 los bits, el borrar los otros 2, por si acaso.


                SWITCH1      BTFSS   PORTB, 6h      
         GOTO   ENC.2LEDSA   
    SWITCH2      BTFSS   PORTB, 7H
         GOTO   ENC.2LEDSB
         GOTO   SWITCH1   

   ENC.2LEDSA   BSF     PORTB,0h
         BSF      PORTB,3h
         BCF      PORTB,1H
         BCF      PORTB,2H
         GOTO    FIN
   ENC.2LEDSB   BSF     PORTB,1h
         BSF      PORTB,2h
         BCF     PORTB,0H
         BCF      PORTB,3H
   FIN      NOP
         END   

Bajo mi humilde opinión,  creo que en este caso los rebotes no es que importen mucho, porque como es poner a masa y encender, al final queda a masa, quizas haya unos cuantos encendidos - apagados , cuando pulso el switch, pero bueno, un led es un señalizador, y no me importa mucho que hayan rebotes. por lo menos ahora y con mis conocimientos. ESta claro que en otras ocasiones si será necesario el tenerlos en consideración.

NO importa, si no es cuestión de quien tiene o no razón, lo importante es ir conociendo cosas nuevas, tan pequeños y las enormes posibilidades que tienen. A mí las R internas si me van a venir bien para mis pequeños proyectos que tengo en mente para el aeromodelismo. para los parámetros de programación, nada mejor que los pulsadores.

Si  te entiendo Tapi8 lo que me dices, pero mi programita funciona como si en lugar de el NOP de la penúltima linea, hubiese un Goto switch1, mientras esta pulsado algun switch, estan encendidos sus 2 leds, suelto, se apagan, vuelvo a pulsar se encienden, suelto , se apagan,.............................no termina,  salvo desconecte la alimentación claro está. Simulando con el MPLAB, por soft,  sí se ejecutaba el NOP.

Bueno, de todas formas ya ha sido un buen alegrón el ver que,  el codigo del simulador, pasa al PIC, y no hay errores ni "historias".  

Gracias

Un saludo
« Última modificación: 13 de Octubre de 2011, 19:19:52 por JoseLuis2801 »

Desconectado tapi8

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1506
Re: Configuracion R de polarizacion portB de 16F886
« Respuesta #8 en: 14 de Octubre de 2011, 06:42:41 »
Citar
Hola, una cosilla que tenía que haberte puesto, añadi en las instrucciones de poner a 1 los bits, el borrar los otros 2, por si acaso.

Bien hecho.

Citar
Bajo mi humilde opinión,  creo que en este caso los rebotes no es que importen mucho, porque como es poner a masa y encender, al final queda a masa, quizas haya unos cuantos encendidos - apagados , cuando pulso el switch, pero bueno, un led es un señalizador, y no me importa mucho que hayan rebotes. por lo menos ahora y con mis conocimientos. ESta claro que en otras ocasiones si será necesario el tenerlos en consideración.

Siempre que se usen elementos con contactos mecanicos, caso de pulsadores e interruptores, al hacer contacto las placas metalicas producen unos picos de tension que "engañan" al PIC haciendo que a veces lean 1 en vez de 0 y viceversa, como se producen en el momento de la pulsacion o la despulsacion si se espera un pequeño tiempo habran pasado y ya se puede leer sin "engaños" si es 0 o 1

Citar
Si  te entiendo Tapi8 lo que me dices, pero mi programita funciona como si en lugar de el NOP de la penúltima linea, hubiese un Goto switch1, mientras esta pulsado algun switch, estan encendidos sus 2 leds, suelto, se apagan, vuelvo a pulsar se encienden, suelto , se apagan,.............................no termina,  salvo desconecte la alimentación claro está. Simulando con el MPLAB, por soft,  sí se ejecutaba el NOP.

Si te fijas cuando va al END la flecha verde del MPLAB desaparece, por lo menos en el mio, esto es porque el programa se pierde, porque despues de END no hay nada.
El END se pone para que el MPLAB sepa donde se acaba el programa, no para que se ejecute en ningun momento, es preferible que lo mandes a la mierda o a tomar por el c.... que al END  :lol: :lol:


Desconectado JoseLuis2801

  • PIC16
  • ***
  • Mensajes: 168
Re: Configuracion R de polarizacion portB de 16F886
« Respuesta #9 en: 14 de Octubre de 2011, 08:32:42 »
 :shock: :shock: :D :D :D :D :D


Bueno................... :D, mi realidad es que como en mis futuras aplicaciones , o funcona siempre el programa o esta sin alimentacion el circuito, se acabo el END, si acaso se quedara el sleep, que para eso está, sino goto rutina principal, y punto pelota. :-/

un saludo

Acabo de cambiar la linea NOP por el GOTO switch1, y ahora solo tengo que pulsar y ya se quedan encendidos permanentemente, aunque suelte, que pulso el otro switch, como es logico me conmuta a los otros 2 leds, bueno, como tengo un cable libre, voy a añadir otro switch para pagar los leds, sino, una vez se pula un switch,  siempre hay 2 encendidos.

« Última modificación: 14 de Octubre de 2011, 08:59:10 por JoseLuis2801 »

Desconectado JoseLuis2801

  • PIC16
  • ***
  • Mensajes: 168
Re: Configuracion R de polarizacion portB de 16F886
« Respuesta #10 en: 14 de Octubre de 2011, 09:14:37 »
PERFECTO, a la 1ª:

 :-/ :-/ :-/ :-/

   w         EQU      0h
   f         EQU      1h

   LIST      P=16F886
   INCLUDE     <P16F886.INC>
   
   

   
   RP0         EQU   05H
   RP1         EQU   06h
   RBPU      EQU   07H



   
              ORG      00H
            GOTO    INI
            ORG    05H
   
   INI         BSF      STATUS,RP1      ;BANCO 3
            BSF      STATUS,RP0   
            CLRF    ANSELH         ;DIGITALES PUERTO B
            BCF      STATUS,RP1
            BSF      STATUS,RP0      ; BANCO 1
            BCF      OPTION_REG,RBPU   ;RESSITENCIAS
            MOVLW   0XE0            ; DE POLARIZACION
            MOVWF   WPUB         ;ACTIVADAS, BITS 5, 6, 7
   
            MOVLW   0XF0   
            MOVWF   TRISB
                           
            BCF      STATUS,RP0      ; BANCO 0
            CLRF    PORTB         ; APAGA LEDS
         
   SWITCH      BTFSS   PORTB, 6h      
            GOTO   ENC.2LEDSA   
             BTFSS   PORTB, 7H
            GOTO   ENC.2LEDSB
            BTFSS   PORTB, 5H
            GOTO    APAGATODOS
            GOTO   SWITCH   

   ENC.2LEDSA   BSF     PORTB,0h
            BSF      PORTB,3h
            BCF      PORTB,1H
            BCF      PORTB,2H
            GOTO    FIN
   ENC.2LEDSB   BSF     PORTB,1h
            BSF      PORTB,2h
            BCF     PORTB,0H
            BCF      PORTB,3H
            GOTO    FIN
   APAGATODOS   BCF     PORTB,0H
            BCF      PORTB,3H
            BCF     PORTB,1H
            BCF      PORTB,2H
   FIN         goto    SWITCH
            END   

No se si el ensamblador necesita del END, pero ya me da igual, ah, he quitado la etiqueta switch2, no había salto a la misma.

Un saludo

Desconectado tapi8

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1506
Re: Configuracion R de polarizacion portB de 16F886
« Respuesta #11 en: 14 de Octubre de 2011, 12:33:06 »
Me alegra que te funcione.  :-/ :-/

Citar
Bueno................... , mi realidad es que como en mis futuras aplicaciones , o funcona siempre el programa o esta sin alimentacion el circuito, se acabo el END, si acaso se quedara el sleep, que para eso está, sino goto rutina principal, y punto pelota.

Exactamente.

Citar
Acabo de cambiar la linea NOP por el GOTO switch1, y ahora solo tengo que pulsar y ya se quedan encendidos permanentemente, aunque suelte, que pulso el otro switch, como es logico me conmuta a los otros 2 leds, bueno, como tengo un cable libre, voy a añadir otro switch para pagar los leds, sino, una vez se pula un switch,  siempre hay 2 encendidos.

Mira este es un programa que hice a medias con un motero para ponerle bombillas LED a los intermitentes, es mas o menos lo que tu tienes solo que los LED son de 3W. lleva un pulsador en la manilla derecha y otro en la izquierda, si se pulsa uno se encienden los dos intermitentes de ese lado, si se pulsa el contrario los otros y si se pulsan los dos pulsadores a la vez encienden los cuatro. Para que te hagas una idea de como va. primero lo hicimos con un 16f84 con bucles de tiempo, despues se hizo con TMR0 para dejar mas libre el procesador y poder controlar mejor todo y por ultimo lo pasamos a un 12f629, para ahorrar espacio y dinero.

http://www.todopic.com.ar/foros/index.php?topic=32966.0

Citar
No se si el ensamblador necesita del END, pero ya me da igual, ah, he quitado la etiqueta switch2, no había salto a la misma.

Si, si no lo pones el MPLAB tira error y no ensambla, porque no sabe donde acaba el programa. Haz la prueba poniendole un ; delante y asi lo ve como un comenterio y no lo compila.
Lo que no necesita es esto:

 w         EQU      0h
   f         EQU      1h

Cuando pones un bit de un puerto, por ejemplo:

 BSF     PORTB,0h

La "h" sobra con PORTB,0 ya esta.



Desconectado JoseLuis2801

  • PIC16
  • ***
  • Mensajes: 168
Re: Configuracion R de polarizacion portB de 16F886
« Respuesta #12 en: 14 de Octubre de 2011, 16:03:17 »
 ;-)

Si los destinos los puse  porque como estoy aprendiendo, no tengo una  aplicacion especifica y por lo tanto su programa en mente. Igual luego voy a utilizar instrucciones en las que, y para no tener que definir el destino en la misma instruccion,  requiera tener definido el destino.


Ok la h.  :lol:

Echaré un vistazo a tu programa :shock: