Autor Tema: Interruptor utilizando un pulsador  (Leído 3275 veces)

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

Desconectado farroyogarcia

  • PIC10
  • *
  • Mensajes: 7
Interruptor utilizando un pulsador
« en: 25 de Noviembre de 2007, 06:08:30 »
Hola colegas electrónicos, soy estudiante adulto de electrónica y os planteo mi cuestión, ya que me he hartado de buscar en el foro y en la web y no he encontrado nada.

Mi profe de electrónica y yo nos estamos introduciendo en el mundo de los pic, hemos desarrollados ejemplos muy simples por nuestros propios medios e incluso le hemos hechos pequeñas modificaciones y nos ha ido bien.

Actualmente queremos realizar un programa que realice las funciones de interruptor a través de las interrupciones detectadas a través de la interrupción externa que dispone el 16f84a, es decir, que cada vez que se presione el pulsador pase de encendido a apagado y viceversa, supongo que no será difícil, pero nosotros que somos totalmente profanos en esto es difícil y precisamos de ver el ejemplo para "abrir" nuestra comprensión a esta forma de funcionar (la del pic).

He utilizado el niple y e seguido un ejemplo algo parecido que ofrecen, pero .... joder que malo soy je je je.


gracias de antemano por vuestra ayuda

recibid un cordial saludo desde Morón de la frontera, Sevilla-España

Fco. Jesús Arroyo García
« Última modificación: 01 de Diciembre de 2007, 07:26:09 por farroyogarcia »
Se aprende más de los errores que de los aciertos

Desconectado micro_cadaver

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2102
    • blog microembebidos
Re: Interruptor utilizando un pulador
« Respuesta #1 en: 25 de Noviembre de 2007, 11:16:31 »
hola, as ies el camino de los autodidactas, pero no estas solo, como decia Lennon: but i'm not the only one...

bueno, programas en niple? m... no domino mucho ese entorno, te puedo ayudar pero si programaras en ASSEMBLER o en C, si te interesa pues escribes nomas, además hay mucha gente en el foro que usa el niple seguro que te ayudaran con tus dudas. saludos!  :-/
a cosechar!!!... :P
pic32... ahi voy....
aguante el micro 16f84  !!!!

visita mi pagina: http://www.microembebidos.wordpress.com

Desconectado Fer_TACA

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4154
Re: Interruptor utilizando un pulador
« Respuesta #2 en: 25 de Noviembre de 2007, 13:55:20 »
Hola amigo:

Desde hace un poquitin de tiempo programo con Niple y tambien en ensamblador y gustosamente me ofrezco para ayudarte en lo que pueda.
Tambien como decis, soy bastante autodicata y me gusta meterme en las produndidades del porque de las cosas.

Puedes decirme en donde estas atascao y/o dudas que tengas.
De entrada el interruptor que dectectaria los cambios como es, tener en cuenta que para eliminar los dichosos rebotes que producen al accionarse son la causa de multiples problemas con las detecciones de cambio de estado. lo normal es poner algun retraso software o realizar algun sistema antirebote por Hardware. ¿ esto lo habeis tenido en cuenta?

Fermin
Todos los días se aprende algo nuevo.

Desconectado farroyogarcia

  • PIC10
  • *
  • Mensajes: 7
Re: Interruptor utilizando un pulador
« Respuesta #3 en: 25 de Noviembre de 2007, 17:58:18 »
Gracias por vuestro apoyo, pues si que es algo complicado esto de los pic´s... pero decimos mi maestro y yo... es cuestión de partirse "los cuernos" y de esa manera empezar a funcionar mejor.
He estado toda la tarde dándole caña al niple siguiendo un ejemplo que ofrecen y creo que he podido conseguir algo, aquí os acompaño las imágenes de los flujos, archivo .Hex y el .Asm generado con el niple,, dios si tuviera que tener conocimiento para escribir todo lo que ese programa ha generado a través de los flujos........ :shock: :shock: :shock: :shock: :shock:

Hasta mañana por la tarde que no llegue al instituto no sabré si funciona.

recibid un saludo


p.d. pues no me deja subir las imagenes de los flujos, es una extensión no válida
Se aprende más de los errores que de los aciertos

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: Interruptor utilizando un pulador
« Respuesta #4 en: 26 de Noviembre de 2007, 01:04:58 »
saludos farroyogarcia, bienvenido al foro.

Mira talvez te sirva comenzar por el ensamblador, si es que no conoces mucho de micros, siempre es bueno comenzar por la estructura de un dispositivo y ver como funciona internamente, ello lo lograras con el ensamblador y el mplab, despues puedes pasarte a otro lenguaje que sea de alto nivel, como el C de ccs, el basic o proton, lo que veas mas facil

para comenzar tb te servira mucho la hoja de datos del pic, esa la consigues de la pagina de microchip no tiene costo las descargas, en ello puedes tb darle una mirada a las intrucciones, registros, seguramente que tienes principios de electronica digital ya que ahi habla de registros, memoria, direcciones, etc.

mira el programa que hice para encender un led por interrupcion externa, te lo comento todo, para que puedas entenderlo:

bueno aca el programa explicado:

Código: [Seleccionar]

 LIST P=16F84A ;define que micro es el que vas a usar
 #INCLUDE <P16F84A.INC> ;incluye las definiciones usadas para el micro, por ejemplo, PORTB=0x06,INTCON,INTE, etc

 __CONFIG _XT_OSC & _WDT_OFF & _PWRTE_ON & _CP_OFF ;esta el la palabra de configuracion, son algunas caracteristicas con las que funcionara el micro
; dice qeu usaremos un oscilador XT (<4MHz)
; WDT_OFF deshabilita el perro guardian, que es un timer que resetea al micro cuando desborda, se lo usa cuando sea necesario, aca no
; PWRTE_ON es el power up timer, si no me equivco es para que el micro espere un tiempo hasta que la tension sea la adecuada para comenzar a ejecutar el programa
; CP_OFF es proteccion del codigo, en off esta desprotegido, este lo habilitas para que no te copien el programa desde el micro

 ERRORLEVEL -302 ; solo quita algunos warning que te da el mplab

 CBLOCK 0x0C ; una definicion de variables que van desde la posiscion 0x0c de la ram
 PDel0,PDel1 ; los nombres de las variables
 ENDC ; fin del bloque de variables

 ORG 0X00 ; origen del programa en la direccion 0
 GOTO INICIO ; nos vamos a la etiqueta de inicio

 ORG 0X04 ; declaracion de ll vector de interrupcion
 GOTO INTERRUPT

;-----------------------------------------
;**************RUTINA RETARDO************* esta rutina fue elaborada con el programa PICDEL (PDEL)
;-----------------------------------------

DELAY  movlw     .55       ; 1 set numero de repeticion  (B)
        movwf     PDel0     ; 1 |
PLoop1  movlw     .181      ; 1 set numero de repeticion  (A)
        movwf     PDel1     ; 1 |
PLoop2  clrwdt              ; 1 clear watchdog
        clrwdt              ; 1 ciclo delay
        decfsz    PDel1, 1  ; 1 + (1) es el tiempo 0  ? (A)
        goto      PLoop2    ; 2 no, loop
        decfsz    PDel0,  1 ; 1 + (1) es el tiempo 0  ? (B)
        goto      PLoop1    ; 2 no, loop
        RETURN              ; 2+2 Fin.

;---------------------------------------------------------
;***********RUTINA QUE ATIENDE LA INTERRUPCION************
;---------------------------------------------------------

INTERRUPT ; esta rutina se ejecuta cada vez que ocurra una interrupcion
CALL DELAY ; llamamos a la rutina DELAY para generar un retardo de 50ms antirrebotes
MOVLW B'00000010' ; cargamos el acumulador W con el valor binario 10
XORWF PORTB,F ; realizamos un OR-Exclusivo entre el PUERTOB y el valor binaio cargado anteriormente
BCF INTCON,INTF ; ponemos a cero la bandera de interrupcion externa, para poder detectar otra interrupcion posteriormente
RETFIE ; retornamos de la interrupcion al programa principal, de donde fue interrumpido


;-----------------------------------------
;***********PROGRAMA PRINCIPAL************
;-----------------------------------------

INICIO
CLRF PORTA ; inicializamos puerto A
CLRF PORTB ; y puerto B

BSF STATUS,RP0   ; nos vamos al banco 1, para configurar los puertos a entradas y salidas
MOVLW B'11111101' ; cargamos el acumulador W con el valor binario
MOVWF TRISB   ; movemos el valor binario anterior al registro TRISB que contiene la configuracion de I/O del puerto B
  ; los '1' definen el pin como entrada; los '0' como salida  1=IN 0=OUT
  ; el puerto B entonces tiene todos los pines como entradas, excepto el pin RB1, que sera la salida
  ; es mejor si no se usara un pin configurarlo como entrada, apra evitar corto circuitos que lo puedan dañar

MOVLW B'11111111' ; cargamos el acumulador W con el valor binario
MOVWF TRISA   ; movemos el valor binario anterior al registro TRISA que contiene la configuracion de I/O del puerto A

BSF OPTION_REG,INTEDG ; definimos que la interrupcion se dara en el flanco de subida, ya que ponemos a '1' el bit INTEDG del registro OPTION_REG

BCF STATUS,RP0   ; nos vamos al banco 0 para la manipulacion del siguiete registro y el puerto B que estan en el banco 0

BCF INTCON,INTF   ; ponemos a '0' la abndera de interrupcion externa
BSF INTCON,INTE   ; ponemos a '1' el bit de interrupcion externa, para habilitar la interrupcion
BSF INTCON,GIE   ; ponemos a '1' el bit de interrupcion global, para habilitar el uso de las interrupciones

CICLO ; bucle infinito
GOTO CICLO ; donde se trabajara hasta que haya interrupcion, en este caso no hay nada ya que la interrupcion hace lo necesario
 END ; fin del programa

creo que esta mas corto y claro que el codigo generado por el niple, si simulas con proteus lo podras ver, o armando lo veras tb, jeje, talvez ajustar un poco el retardo si es que no funciona mbien para los rebotes

pulsador en RB0 y led en RB1

vcc-----pulsador------10k-----tierra
                          |
                          v
                      al micro
                        RB0

te colgue el codigo, el .hex y la simulacion en proteus aca
« Última modificación: 26 de Noviembre de 2007, 01:26:20 por Cryn »
.

Desconectado Fer_TACA

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4154
Re: Interruptor utilizando un pulador
« Respuesta #5 en: 27 de Noviembre de 2007, 10:28:47 »
Hola amigo ferroygarcia:

Como ya tienes tu primer programa ¿has probado ya si te funciona?

Fermin
Todos los días se aprende algo nuevo.

Desconectado farroyogarcia

  • PIC10
  • *
  • Mensajes: 7
Re: Interruptor utilizando un pulador
« Respuesta #6 en: 30 de Noviembre de 2007, 18:24:17 »
Solucionado... perdonen la tardanza de mi respuesta ya que echo la semana de trabajo fuera de casa  y no dispongo de Internet fuera.

Tenia un problema con el hardware, una soldadura en el mismo pin de la regleta que me pillaba el Rb0, de ese modo no realizaba la interrupción.


gracias por vuestra atencion.


Actualmente mi maestro y yo estamos abarcando un poquito mas (pasito a pasito) y queremos hacer que a través de un pulsador y dependiendo del tiempo que este esté pulsado, encienda una salida u otra en el puerto. He pensado que se podría realizar introduciendo justo después de la interrupción una temporización de un segundo mas o menos, para realizar después una comparación con un registro definido, si este vale 0 (por ejemplo) el pulsador sigue pulsado dando una salida definida para este caso. Si el valor del pulsador es diferente al del registro al realizar la comparación, generará la otra salida que hayamos definido, creo que no voy muy equivocado, haber que me nos sale.


Una pregunta, ¿existe algún programa para PC que realice las funciones de un "entrenador"? esto seria muy interesante ya que podría prescindir de tener que fabricar una placa para el entrenamiento con los pic´s
Se aprende más de los errores que de los aciertos

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: Interruptor utilizando un pulador
« Respuesta #7 en: 30 de Noviembre de 2007, 18:37:20 »
que bueno es saber que te ha funcionado el programa que hiciste :mrgreen:

en cuanto al entrenador, no conozco ninguno, pero puedes probar con el proteus, es un software que te permite simular microcontroladores varios 12f 16f 18f 24f, hay seguramente una version de prueba por su pagina oficial http://www.labcenter.co.uk

en cuanto a lo que planteas para tu siguiente proyecto va muy bien como mencionas, tb puedes usar la interrupcion del TMR0 que te contaria el tiempo que lleva pulsado un pulsador, nose, intenta lo que planteaste y nos comentas si ha fallado algo, con gusto te ayudamos, un saludo :mrgreen:
.

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5552
    • Picmania by Redraven
Re: Interruptor utilizando un pulador
« Respuesta #8 en: 30 de Noviembre de 2007, 18:37:57 »
Amigo Fco. Jesús, te ruego que edites el primer post de tu hilo y le cambies la palabra "pulasor" por "pulsador" así si algún amigo usa el buscador preguntando por esa palabra podrá encontrar tu hilo.  :mrgreen:

Muchas gracias.
Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania


 

anything