⚡ Descuentos en cursos en video - Lleva tu aprendizaje técnico al siguiente nivel y aprovecha precios especiales antes de que termine la oferta. 🔥 Aprovechar oferta ahora 🔥
Microcontroladores y sistemas digitales

Problema con pulsador

YORCH2014
YORCH2014
108
hace 10 años
hace 10 años
Buenas tardes a todos y desde ya muchas gracias por ayudarme a solucionar este problema, hice un programa para encender y apagar un led con una misma tecla, es decir que basicamente el pic 16f84a funciona como un biestable, primero al programa lo diseñe yo mismo pero al ver que funcionaba mal el sistema busque en internet y copie uno mas sencillo que aparentemente deberia funcionar pero hace la misma falla practicamente, el problema es el siguiente cuando le doy un pulso el led se enciende, luedo de un sedundo aproximadamente el led se apaga sin que le de el pulso, sera problema de ruido? en los dos casos me hacia lo mismo, intente hace un circuito de retardo y nada y tambien por medio de software para evitar el efecto rebote pero este no es el problema ya que tarda mucho en volverse a apagar, al circuito lo arme en una protoboard,
henmope
henmope
161
hace 10 años
hace 10 años
yorch, muetrenos el código (programa) que Ud. hizo para poder orientarlo pues encender y apagar un led es algo muy sencillo
erepairman
erepairman
2.423
hace 10 años
hace 10 años
Lo más lógico es que sea por el "rebote" del switch. También podría ser que se estuviera reseteando automáticamente o que la fuente de alimentación no sea estable. Muéstrenos el código de ambos para ver qué tipo de error pueden estar dando. PD. Es mucho mejor que aproveche y, si ud entiende cómo hacer un programa, trabaje sobre ese código y no sobre algún otro de internet. Así se aprende más.
yanesi
yanesi
3
hace 10 años
hace 10 años
Al presionar y soltar el pulsador (PIN B7), encender el LED 1(PIN B0) y apagar el LED 2(PIN B1); si se repite la operación encender el LED 2(PIN B1) y apagar el LED 1(PIN B0). Y así alternativamente. boolean encendido=0; while(TRUE) { if( input(pulsador)==1) { if (encendido==1) { output_low (LED_1); output_high (LED_2); encendido=0; } else { output_high(LED_1); output_low (LED_2); encendido=1; } } } Nota: esta con CCS
bernardo campos
hace 10 años
hace 10 años
Manda el codigo para poder ayudarte
erepairman
erepairman
2.423
hace 10 años
hace 10 años
Es casi seguro que el problema está en el rebote. Póngale una solución antirrebote por hardware primero para probar. Luego le agregamos el código para hacerlo por software.
erepairman
erepairman
2.423
hace 10 años
hace 10 años
Le repito nuevamente: si está usando un pulsador debe implementar "debouncing"/"antirrebote". Hágalo por hardware inicialmente. Puede hacerlo fácilmente con un capacitor y una R.
YORCH2014
YORCH2014
108
hace 10 años
hace 10 años
Aqui les dejo el programa perdon por la tardanza desde ya muchas gracias por sus ayudas: list p=16f84a ;el dispositivo es el 16f84a ;------------------------------------------------------------ PORTB equ 06 ;el puerto b seubica en 06 de la RAM TRISB equ 86 STATUS equ 03 ;------------------------------------------------------------ reset org 0 ;reset en direccion 00h goto comenzar ;se lleva el control a comienzo comenzar clrf PORTB ;borra los latch de salida bsf STATUS,5 movlw 02h ;se carga w con 02h movwf TRISB ;se selecciona como entrada a RB1 bcf STATUS,5 ;selecciona banco 0 encendido bsf PORTB,0 ;enciende led btfsc PORTB,1 ;¿entrada 1?¿interruptor pulsado? goto encendido ;vuelve a inicio goto apagado apagado bcf PORTB,0 ;apaga led btfss PORTB,1 ;¿entrada 1?¿interruptor pulsado? goto encendido ;vuelve a inicio goto apagado END ;fin del programa
henmope
henmope
161
hace 10 años
hace 10 años
yorch 2014, le modifiqué un poco el código para que cuando pulse entonces espere a que no esté pulsado y ahí sí encienda el led, éste queda encendido hasta que a voluntad Ud. pulse de nuevo y cuando suelte el pulsador entonces se apague list p=16f84a ;el dispositivo es el 16f84a ;------------------------------------------------------------ PORTB equ 06 ;el puerto b seubica en 06 de la RAM TRISB equ 86 STATUS equ 03 ;------------------------------------------------------------ reset org 0 ;reset en direccion 00h goto comenzar ;se lleva el control a comienzo comenzar clrf PORTB ;borra los latch de salida bsf STATUS,5 movlw 02h ;se carga w con 02h movwf TRISB ;se selecciona como entrada a RB1 bcf STATUS,5 ;selecciona banco 0 inicio btfss PORTB,1 ;¿entrada 1?¿interruptor pulsado? goto inicio ; si no vuelve a inicio espera btfsc POTRB,1 ;interruptor no pulsado? goto espera ;si continúa pulsado entonces va a espera bcf PORTB,0 ;si no está pulsado enciende led apaga btfss PORTB,1 ;¿entrada 1?¿interruptor pulsado? goto apaga ; si no está pulsado vuelve a apaga espera2 btfsc POTRB,1 ;interruptor no pulsado? goto espera2 ;si continúa pulsado entonces va a espera2 bcf PORTB,0 ;si no está pulsado apaga el led goto inicio ;comienza de nuevo END ;fin del programa
Reparaciones similares solucionadas

¿Conoces una solución?

¡Aprende a reparar con estos cursos YoReparo!

4.93
(14)

Curso Reparación de Equipos de Audio de Alta Fidelidad

Maximiliano Resch
$ 60 USD
$ 20 USD
4.73
(22)

Curso Reparación de Fuentes Conmutadas de PC y Equipos Electrónicos

Maximiliano Resch
$ 40 USD
$ 20 USD
4.94
(16)

Curso Refrigeración Comercial Aplicado a Diagnóstico y Reparación

Ing. Georga Melgarejo
$ 40 USD
$ 13 USD
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos?
Regístrate gratis