Autor Tema: Pic 16f84a_ lectura de entrada -pulsadores-  (Leído 6036 veces)

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

Desconectado fernando_realico

  • PIC10
  • *
  • Mensajes: 44
Pic 16f84a_ lectura de entrada -pulsadores-
« en: 09 de Agosto de 2010, 01:46:32 »
Estimados:

Soy un poco nuevo en el mundo de pic, he programado el pic 16f84a y quise programar el pic 16f873a y no logré hacerlo funcionar, me fijura que el programa se está grabado pero en el circuito no funciona, no se por qué, entonces quería preguntarle lo siguiente:
El proyecto que estoy realizando es una plaqueta universal de un programador de lavaropa automático, el inconveniente son las cantidades de salidas, es que necesito 9 salidas para activar 9 relé, salidas conectadas a un uln2004 y 2 optoacopladores, y me quedarían 5 puertos libres nada más, es decir, pretendía usar tres como señales luminosas y dos para seleccionar programas, es decir, con uno de esos 2 pulsadores que me quedan para seleccionar programas, a medida que se vayan presionando, pueda elegir subprogramas (lavado corto - lavado largo - centrifugado extra) y con el otro enviar una señal para que comience a ejecutar el programa elegido.
Me imagino que para lograr seleccionar, serían, subprogramas, con un solo pulsador, necesitaría poner en marcha un contador, bueno ahí tengo el problema, cómo podría hacer, defino un registro en memoria, y cómo podría logra el siguiente razonamiento lógico:  si el registro "..." está en 1 y acciono el pulsador de comienzo, ejecutar el subprograma lavado largo.... Si el registro "..." está en 2 y acciono el pulsador de comienzo, ejecutar el subprograma lavado corto. Si el registro "..." está en 3 y acciono el pulsador de comienzo, ejecutar el subprograma cetrifugado extra.....
Bueno espero haber sido claro. El gran problema el el límite de 13 puertos. por eso quería pasar a un 16f873a
Las plaquetas que estoy comprando tienen un micro de 20 pines, por eso, si puedo lograr con un solo pulsador seleccionar varios subprogramas, solucionaría el problema. Las plaquetas universales que compro también se manejan con 2 pulsadores, con uno selecciona 1 de los 7 programas y el otro inicia la ejecución, también se puede pausar (calculo que debe ser Interrupción)

Bueno desde ya muchas gracias.
Saludos
Fernando Gutierrez

Desconectado Fer_TACA

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4032
Re: Pic 16f84a_ lectura de entrada -pulsadores-
« Respuesta #1 en: 09 de Agosto de 2010, 04:10:55 »
Y no puedes utilizar uno tipo 16f8x7 que tiene un numero mayor de pines para utilzar como entradas y salidas.

F.
Todos los días se aprende algo nuevo.

Desconectado Fidel Martins

  • PIC16
  • ***
  • Mensajes: 132
Re: Pic 16f84a_ lectura de entrada -pulsadores-
« Respuesta #2 en: 09 de Agosto de 2010, 20:21:00 »
Claro que puedes Fernando.
Cuando cargues el pulsador ira incrementando el numero de pasos de un registro (por ej. registro pasos) y cuando llegue al ultimo paso, vuelve al primero o desliga (cero).
Y en la rutina principal de programa, debera chequear cual paso y meterle el subprograma.
Saludos.
Fidel.

Desconectado fernando_realico

  • PIC10
  • *
  • Mensajes: 44
Re: Pic 16f84a_ lectura de entrada -pulsadores-
« Respuesta #3 en: 09 de Agosto de 2010, 22:30:11 »
Gracias por responder, esa es la lógica que quiero lograr. con el plc lo he realizado.

El tema es por ejemplo si el registro "paso" está en 2, ir a etiqueta lavado corto.

Cuales serian las instrucciones, por ejemplo si uno pone btfss pregunta si hay un 1 y btfsc pregunta si hay un 0

pero cómo pregunto si hay un 2 o un 4 en el registro.

Desde ya muchas gracias

Desconectado willynovi

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 546
Re: Pic 16f84a_ lectura de entrada -pulsadores-
« Respuesta #4 en: 09 de Agosto de 2010, 23:40:20 »
eso lo puedes hacer de varias formas, por ejemplo lo puedes hacer con una resta y si el resultado es cero pues es ese valor.

Si usas assembler lo haces con la siguiente instruccion, lo que haces es restarle a W el literal k y el resultado queda en W, luego vez si el bit 2 del registro STATUS (es el que te indica si el resultado es cero) ha cambiado a 1, previamente antes de ejcutar la instruccion SUBLW deberias poner a cero este bit.

SUBLW k
Intento enseñarte a pescar, si solo quieres pescados, espera que un pescador te regale los suyos.

Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Pic 16f84a_ lectura de entrada -pulsadores-
« Respuesta #5 en: 09 de Agosto de 2010, 23:53:30 »
Por aquí hay un ejemplo de lo que indica willynovi:
http://www.todopic.com.ar/foros/index.php?topic=24720.msg201403#msg201403

Y sobre instrucciones de Assembler revisa el siguiente hilo:
http://www.todopic.com.ar/foros/index.php?topic=23623.0


.. previamente antes de ejcutar la instruccion SUBLW deberias poner a cero este bit...



Te refieres al bit Z? Ese cambia su valor al ejecutar una operación aritmética o lógica, no es necesario borrarlo antes  ;-)


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado willynovi

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 546
Re: Pic 16f84a_ lectura de entrada -pulsadores-
« Respuesta #6 en: 09 de Agosto de 2010, 23:57:57 »
gracias Suky, como no estaba seguro que mejor que asegurarse  :mrgreen:
Intento enseñarte a pescar, si solo quieres pescados, espera que un pescador te regale los suyos.

Desconectado fernando_realico

  • PIC10
  • *
  • Mensajes: 44
Re: Pic 16f84a_ lectura de entrada -pulsadores-
« Respuesta #7 en: 10 de Agosto de 2010, 00:12:07 »
Gracias amigos por responder, ahora cómo puedo decir... si el registro "x" está en 3 entonces ir a determinada etiqueta del programa. Voy a probar a realizar el contador primero.

Gracias nuevamente

Desconectado Fidel Martins

  • PIC16
  • ***
  • Mensajes: 132
Re: Pic 16f84a_ lectura de entrada -pulsadores-
« Respuesta #8 en: 10 de Agosto de 2010, 01:16:22 »
Yo usaria "xor l....
   movf paso,w                  ;si el reg paso = d'2'
   xorlw d'2'
   btfss status,z               ; no pasa
   goto otro        ;aqui va p/otra pregunta
lavado_corto                   ; verdadero
   ; y asi p/delante

yo lo hago con Niple, es mucho mas tranquilo.

Saludos.

Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Pic 16f84a_ lectura de entrada -pulsadores-
« Respuesta #9 en: 10 de Agosto de 2010, 01:28:48 »
Gracias amigos por responder, ahora cómo puedo decir... si el registro "x" está en 3 entonces ir a determinada etiqueta del programa. Voy a probar a realizar el contador primero.

Gracias nuevamente

Cuando preguntas por el estado del bit Z tienes dos posibilidades, si y no. Depende como preguntes saltará la siguiente instrucción o no, es allí donde debes ubicar un goto  ;-)

Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado fernando_realico

  • PIC10
  • *
  • Mensajes: 44
Re: Pic 16f84a_ lectura de entrada -pulsadores-
« Respuesta #10 en: 10 de Agosto de 2010, 09:27:11 »
Amigos, muchas gracias por responder, ya me estoy dando una idea como es el tema, voy a leer sobre el bit z.

Es decir, tendría que realizar un loop para que continuamente vaya chequeando el valor de z según el estado del registro. Me voy a poner a leer un poco y les cuento como me fue.

Gracias nuevamente
Fernando
Argentina

Desconectado fernando_realico

  • PIC10
  • *
  • Mensajes: 44
Re: Pic 16f84a_ lectura de entrada -pulsadores-
« Respuesta #11 en: 10 de Agosto de 2010, 10:29:00 »
Amigos, estuve haciendo algo, el tema, primero, si está bien el tema dl contador, que llegado a 6 reseteo y comienza de nuevo, segundo, cuando z es cero que salte al subprograma "programas" el problema que no se me ocurrre cómo en ese subprograma leo el registo contador, qué número tiene para ir a otro subprograma, por ejemplo si "contador" está en 1 que vaya a lavado corto, si está en 2 que vaya a "centrifugado"

aquí el programa: (disculpen si está mal, recien estoy comenzando con esto, faltarían antes de incrementar el registro, agregar una condición de un pulsador, pero quiero saber si está bien el conteo.
 y como defino en el subprog "programas" la comparación del numero que está en el registro "contador" para ir a determinada parte del programa

      list P=16F84a
#INCLUDE "P16F84a.INC"

; MAPA DE MEMORIA

estado      equ      0X03
portb      equ      0X06
porta      equ      0X05
trisa      equ      0x85
trisb      equ      0X86

reg1      equ      0x0c
reg2      equ      0x0d
reg3      equ      0x0e
reg4      equ      0x0f
reg5      equ      0x1c
reg6      equ      0x1d
rotar       equ      0x1e
contador                   equ                           0x1f        ;contador

;------------------------------------------------------------
;                  Declaración de Bits
;------------------------------------------------------------
c                     equ  0   ;carry / borrow bit
rp0                   equ  5   ;registrer bank select bit
rp1                   equ  6   ;registrer bank select bit
z                     equ  2   ;bit cero

;CONFIGURACION DE PUERTOS

reset      org      0X00
      
      goto      inicio
      org      0X05

inicio      clrf      porta
      clrf      portb
      
      
      bsf       estado,5
      movlw      b'11111'
      movwf      trisa
      movlw      b'00000000'
      movwf      trisb
      bcf      estado,5

;PRINCIPAL
principal   
      movlw      b'00000000'
      movwf      portb
      movlw      b'11111'
      movwf      porta
   

bucle      incf      contador,1
      movlw      d'6'
      subwf      contador,0   ; si es 6 reseteo y vuelvo al bucle, sino voy a etiqueta programas   
      btfss      status,z
      goto      programas   ;voy a programas
      clrf      contador,1
      goto       bucle   

programas                  (cómo hago para realizar la técnica polling, es decir, si el registro contador está en 1 que vaya a determinado subprograma o si está en 2 que vaya a otro subprograma) 

Desconectado fernando_realico

  • PIC10
  • *
  • Mensajes: 44
Re: Pic 16f84a_ lectura de entrada -pulsadores-
« Respuesta #12 en: 10 de Agosto de 2010, 10:50:34 »
Estaba pensando, a ver si aclaro el problema que tengo, una vez logrado el contador, por ejemplo si está en 3 decimal, no se puede hacer una función "si" es decir; si W está en 3 ir a tal parte del programa o llamar alguna subrrutina, si W está en 6 ir a tal etiqueta o llamar algunasubrrutina.

Espero que entiendan la dificultad que tengo
y gracias por todo.

Saludos
Fernando Gutierrez

Desconectado Fidel Martins

  • PIC16
  • ***
  • Mensajes: 132
Re: Pic 16f84a_ lectura de entrada -pulsadores-
« Respuesta #13 en: 10 de Agosto de 2010, 13:07:14 »
En la selección de progamas, tienes que chequear asi: si es, va al prog-1; si no, va al proximo chequeo (y repetirlo 6 vezes) y al final vuelves al inicio o entonces cera todo.
Este purde ser el loop principal y lo demas se quedan en las llamadas.
Estoy subiendo una pantalla (en Niple) de lo expuesto.
saludos.

Desconectado willynovi

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 546
Re: Pic 16f84a_ lectura de entrada -pulsadores-
« Respuesta #14 en: 10 de Agosto de 2010, 15:15:16 »
hola Fernando, lo que quieres hacer lo puedes implementar con los siguiente, suponiendo que tienes un contador que es el que lleva el número del programa.

Código: [Seleccionar]
movf contador,w
addwf PCL,f
goto programa0
goto programa1
goto programa2

lo que haces es al PCL, que es el que va indicando la linea siguiente a ejecutarse de programa, sumarle el valor de tu contador y con eso la siguiente instrucción a ejecutar será la que te guie hacia el programa seleccionado.
Tienes que tener en cuenta que el valor 0 no suma entonces si contador es 0 ejecutará la siguiente.
En el caso que los numeros no sean consecutivos, por ejemplo 2, 4, 5, 8 no sabria decirte con seguridad si agregando unos nop puedes sarlvar esta situacion. En ese caso quedaria

Código: [Seleccionar]
movf contador,w
addwf PCL,f
nop
nop
goto programa2
nop
goto programa4
goto programa5
nop
nop
nop
goto programa8

Es cuestion de probarlo.

Si puedes con tiempo mirate los dos enlaces que te puso Suky que estan muy completos esos tutoriales, esto que yo te termino de decir del PCL lo he sacado de ahí ;-)
Intento enseñarte a pescar, si solo quieres pescados, espera que un pescador te regale los suyos.


 

anything