TODOPIC

Microcontroladores PIC => Almacén del Assembler => Mensaje iniciado por: chamowins en 27 de Noviembre de 2008, 14:30:42

Título: Contador 0 a 9 con pulsador
Publicado por: chamowins en 27 de Noviembre de 2008, 14:30:42
Quien tendra este programita
que cambie de numero por cada pulsacion?

Y un secuencial de dos led con dos pulsadores
cada pulsador a cada led


ojala alguien lo tenga gracias por su atencion
 :)
Título: Re: Contador 0 a 9 con pulsador
Publicado por: Leon Pic en 27 de Noviembre de 2008, 16:09:35
¿Y porqué no escribes el programa? es muy fácil esa tarea. Nada del otro mundo.

No creo que nadie tenga ese programa, es demasiado básico. Ahora si alguien lo quiere hacer por ti, es otra cosa  :-)
Título: Re: Contador 0 a 9 con pulsador
Publicado por: Chenao en 28 de Noviembre de 2008, 18:34:12
Saludos

Por que no sigues en consejo de Leon Pic y vas publicando los avances de tu programa y te vamos colaborando

Un saludo desde Pereira - Colombia
Título: Contador 0 a 9 con pulsador
Publicado por: chamowins en 28 de Noviembre de 2008, 18:39:31
pido ayuda por que no se, pero tengo interes en aprender
estoy recien metiendome en este tema
ojala me ayuden
Título: Re: Contador 0 a 9 con pulsador
Publicado por: Chenao en 28 de Noviembre de 2008, 18:44:01
Saludos

Bueno aq
Título: Re: Contador 0 a 9 con pulsador
Publicado por: Chenao en 28 de Noviembre de 2008, 18:47:38
Saludos

Que verguenza pero la red esta loca :mrgreen: :mrgreen:.

Bueno compañero aqui te pongo un ejemplo que hice para la clase de digitales de la universidad. El dato es mostrado en un display y además manda los datos via serial espero que te sirva como comienzo en los microcontroladores.

Un saludo desde Pereira - Colombia
Título: Re: Contador 0 a 9 con pulsador
Publicado por: Leon Pic en 28 de Noviembre de 2008, 18:58:22
Me parece que es muy avanzado para empezar.

Empieza por ver el siguiente link, que trata del lenguaje assembler (http://www.todopic.com.ar/foros/index.php?topic=23623.0) Si manejas otro lenguaje como el C o el basic, chequea los foros corrspondiente a ellos.
Título: Re: Contador 0 a 9 con pulsador
Publicado por: diego_z en 29 de Noviembre de 2008, 01:01:28
Y bue si leon no se enoja empiezo con el programita del contador


   LIST      P=16F84A
   INCLUDE      <P16F84A.INC>
CONTADOR EQU   0X20
INICIO
   bsf STATUS,5                  ;cambiar a banco 1
   movlw   b'00001'           ;DECLARO EL BIT 0
   movwf   PORTA              ;DEL PUERTA A COMO ENTRADA
   CLRF    PORTB               ;EL B COMO SALIDA
   bcf STATUS,5                  ;cambiar a banco 1   
   
PRINCIPAL
   btfsc PORTA ,0
        INCF CONTADOR,F
;CONTINUAR




   END
   
Título: Re: Contador 0 a 9 con pulsador
Publicado por: Leon Pic en 29 de Noviembre de 2008, 10:57:19
No me enojo para nada. Solo que hay que ayudar a que aprenda, no ayudar a que no aprenda.

Vale aclararle a chamowins que el programa anterior, es una parte.
Título: Re: Contador 0 a 9 con pulsador
Publicado por: diego_z en 29 de Noviembre de 2008, 11:58:33
je je exacto , eso es solo el principio y mientras va viendo y leyendo un poco planteando sus dudas , agregando algo asi es como se aprende , estoy a la espera de que agregue algo al codigo a ver como sigue , saludos (solo solito no va a aprender o le pasara como a mi que hasta que no vi tus tutos de mplab no entendia nada por mas que leyera  :D :D gracias leon !!)
Título: Contador 0 a 9 con pulsador
Publicado por: chamowins en 30 de Noviembre de 2008, 00:03:04
Bueno e hecho varios programas basicos con led y contador
pero les juro que no se como habilitar el puerto para los pulsadores
nose como configurarlo
tampoco se hacerle el retardo para que al mandar el cero o uno.. al soltarlo no mande mas ceros o uno.

OjALA Puedan ayudarme
se que el pulsador lo quiero habilitar en el puerto a
pero nose como:


este es un contador de 0 a 9
pero sin pulsador
quiero saber como hacerlo con pulsador
osea que al pulsar.. cambie de numero.

ESTADO      EQU      0x03
PORTA      EQU      0x05
PORTB      EQU      0x06

      org      0

      bsf      ESTADO,5
      clrf      PORTA
      comf      PORTA,1
      clrf      PORTB
                bcf      ESTADO,5

INICIO1      movlw      b'11100111'
      movwf      PORTB
      call      sg1
      call      sg1
      movlw      b'10000100'
      movwf      PORTB
      call      sg1
      call      sg1
      movlw      b'11010011'
      movwf      PORTB
      call      sg1
      call      sg1
      movlw      b'11010110'
      movwf      PORTB
      call      sg1
      call      sg1
      movlw      b'10110100'
      movwf      PORTB
      call      sg1
      call      sg1
      movlw      b'01110110'
      movwf      PORTB
      call      sg1
      call      sg1
      movlw      b'01110111'
      movwf      PORTB
      call      sg1
      call      sg1
      movlw      b'11000100'
      movwf      PORTB
      call      sg1
      call      sg1
      movlw      b'11110111'
      movwf      PORTB
      call      sg1
      call      sg1
      movlw      b'11110110'
      movwf      PORTB
      call      sg1
      call      sg1
      goto      INICIO1

      

sg1;                    etiqueta = subrutina del retardo de 1 seg.   
           movlw           0ffh;      cargo w con el dato ffh.
           movwf           0ch;      cargo el registro 0ch con el w.
                movwf           0dh;      cargo el registro 0dh con el w.
   
           movlw           01h;       cargo w con el dato 01h.
           movwf           0eh;       cargo el registro 0eh con w.

salto1   ;                    etiqueta del bucle de repetición.                        
             decfsz            0ch,1;    decremento el registro 0ch y salto si es
;                    cero depositando el resultado en 0ch.             
             goto           salto1;    salto a la etiqueta salto1.
   
             decfsz          0dh,1;     decremento el registro 0dh y salto si es
;                    cero depositando el resultado en 0dh.             
             goto           salto1;     salto a salto1.

             decfsz          0eh,1;     decremento el registro 0eh y salto si es
;                      cero depositando el resultado en 0eh.
             goto           salto1;      salto a salto1.

             return;                regreso de subrutina.            

      
             end;                fin del programa PORTB.   



      end

Título: Re: Contador 0 a 9 con pulsador
Publicado por: Leon Pic en 30 de Noviembre de 2008, 09:58:54
Te tiro un pequeño diagrama de flujo. Haber si me entendes.

1- Configurar puertos, RA0 pulsador con 0 lógico se activa, puerto B, todas salidas.

2- Pongo a 0 todas las salidas del puerto B para apagar los led (ya que puede haber algunos encendidos).

3- ¿RA0 es 0? BTFSC     RA0

4- No, espero. Vuelvo al punto 3    GOTO   3

5- Si, incremento en 1 el puerto b   INCF   PORTB

6- Vuelvo al punto 3   GOTO 3


Para tu pregunta, al puerto a dónde vas a poner el pulsador, por ejemplo RA0, lo pones como entrada, las demás salidas. Para poner el pulsador, deberás ponerle una resistencia pull up de 100k de la siguiente forma:

RA0-------100K-----5V
         |
         |------P-------0V

RA0, conectas una pata de la resistencia. Ene sta unión RA0 y R pones una pata del pulsador. La pata restante del pulsador a 0V y la otra pata restante de la resistencia a 5V

Esta configuración que tiene la resistencia, se llama pull up, porque mantiene una tensión proxima a 5V en este caso. En cambio, si la resistencia estaría conectada a 0V estaría configurado como pull down.
Título: Contador 0 a 9 con pulsador
Publicado por: chamowins en 30 de Noviembre de 2008, 22:04:02
el diagrama que hice arriba esta bueno
es el que nesesito
y en el puerto A colocare los dos pulsadores
y puerto b
los led
como vez el puerto b esta activado
y funciona
pero el puerto a es el que nose habilitar
ni que intruccion debo poner
Título: Re: Contador 0 a 9 con pulsador
Publicado por: todopic en 01 de Diciembre de 2008, 08:14:41
Hola, Diego_z, te pego el codigo arriba  :mrgreen:
Código: ASM
  1. bsf STATUS,5                  ;cambiar a banco 1
  2.    movlw   b'00001'           ;DECLARO EL BIT 0
  3.    movwf   TRISA              ;DEL PUERTA A COMO ENTRADA
  4.    CLRF    PORTB               ;EL B COMO SALIDA
  5.    bcf STATUS,5                  ;cambiar a banco 1


y allí dice, declaro el bit 0 (seria el bit de menor peso, posición cero), y lo mueves a TRIS A,
esto, es lo que define si es entrada o salida.... para que te acueerdes... un 0, seria 0utput (salida)
un 1, seria 1nput, (entrada)   :mrgreen:

Suerte!
Título: Contador 0 a 9 con pulsador
Publicado por: chamowins en 01 de Diciembre de 2008, 15:32:49
y ese famoso mini retardo que sirve para que el pulsador no mande mas de una variable al presionarlo?
por que el programa toma que al presionarlo manda un 0 y al soltarlo otro 0 mas
entonces se puede saltar de 0 a 2 en caso que sea un contador de 0 a 9
la idea es que al presionar cambie de numero
y que al soltarlo no aga nada

Título: Re: Contador 0 a 9 con pulsador
Publicado por: Leon Pic en 01 de Diciembre de 2008, 19:01:40
El retardo lo puedes crear tu haciendo que el CP consuma ciclos hasta un tiempo de 50ms (mitad de 1 segundo) antes de chequear de nuevo el pulsador. De esa manera, habrá dado tiempo en que el usuario suelte al pulsador.

En el foro, hay varios programitas para generar retardos. Buscalo con la ayuda del buscaor.
Título: Re: Contador 0 a 9 con pulsador
Publicado por: todopic en 02 de Diciembre de 2008, 00:27:14
Hola, en realidad, tu "famoso" retardo, se llama anti rebotes, y la idea es que testeas el estado, si pulsa, saltas al retardo (Leon, 50 ms no es medi segundo... serian 500ms  :-) )
si al terminar el retardo, sensas nuevamente, y esta aún pulsado, saltas, y verificas , esperando a que suelten el pulsador, y "alli" si incrementas tu contdor... es decir, serian 2 BTFSC y un BTFSS  :mrgreen:

espero lo interpretes

Norberto
Título: Contador 0 a 9 con pulsador
Publicado por: chamowins en 02 de Diciembre de 2008, 01:43:03
pucha todo pic.
Por que no me das ese programita para verlo y tenerlo como referencia.
por favor.. :(

Si es re sencillo para ti
para mi es complicadisimo
hice lo que te mostre anteriormente
y me funciona
y puedo hacer otros
pero cuando se habla de pulsadores
y miniretardo
no puedoo
porfa ayudame,te estare eternamente agradecido
Título: Re: Contador 0 a 9 con pulsador
Publicado por: Leon Pic en 02 de Diciembre de 2008, 15:16:56
(Leon, 50 ms no es medi segundo... serian 500ms  :-) )

Perdón, quise decir 500ms. Este tiempo debe ser desde que escaneaste el pulsador hasta una nueva exploración. Si bien este tiempo es muy grande, pero como estás empezando con esto, te ahorrará algunos problemas.
Título: Re: Contador 0 a 9 con pulsador
Publicado por: todopic en 02 de Diciembre de 2008, 18:53:02
Hola, bueno, te escribo un programita.... pero luego tendras que estudiar el manejo de tablas....
ahora te doy una solución simple, pero no la más elegante....
por eso, te aclaro, que la mejor seria, presentando el valor al display manejando tablas....

INICIO1

     movlw      b'11100111'
      movwf      PORTB
      call      sg1
      call      sg1
     CALL  PULSADOR
      movlw      b'10000100'
      movwf      PORTB
      call      sg1
      call      sg1
     CALL  PULSADOR
      movlw      b'11010011'
      movwf      PORTB
   
      call      sg1
      call      sg1
     CALL  PULSADOR
      movlw      b'11010110'
CONTINUAR........


Es decir, solo agrega esto a tu anterior programa  (     CALL  PULSADOR )
;------------------------------------------------------------------------------------
PULSADOR  btfsc porta,0
                  goto $-1       ;salta una posición para arriba
                  call demora50ms   ;llama a un retardo de 50 milisegundos
                  btfsc   porta,0   ;verifico si mantiene aún pulsado
                  goto pulsador   ; no esta pulsado, entonces fué ruido
                  btfss pulsador,0 ;espero a que suelten el pulsador
                  goto  $-1
                  return
;-----------------------------------------------------------------------------------



De esta manera, cada vez que pulse, , pasara a presentar el numero siguiente  :mrgreen:

Norberto

Título: Re: Contador 0 a 9 con pulsador
Publicado por: diego_z en 03 de Diciembre de 2008, 13:55:01
Hola, Diego_z, te pego el codigo arriba  :mrgreen:
Código: ASM
  1. bsf STATUS,5                  ;cambiar a banco 1
  2.    movlw   b'00001'           ;DECLARO EL BIT 0
  3.    movwf   TRISA              ;DEL PUERTA A COMO ENTRADA
  4.    CLRF    PORTB               ;EL B COMO SALIDA
  5.    bcf STATUS,5                  ;cambiar a banco 1


y allí dice, declaro el bit 0 (seria el bit de menor peso, posición cero), y lo mueves a TRIS A,
esto, es lo que define si es entrada o salida.... para que te acueerdes... un 0, seria 0utput (salida)
un 1, seria 1nput, (entrada)   :mrgreen:

Suerte!

hola no entiendo tu respuesta , esta mal lo que escribi?
saludos
Título: Contador 0 a 9 con pulsador
Publicado por: chamowins en 04 de Diciembre de 2008, 02:52:18
:) Muchas gracias norberto
te pasaste, prometo que estudiare ene
pero nesesitaba ver un ejemplo
agradezco mucho tu buena dispocicion hacia mi.

Estaremos en contacto
y gracias maestro.. :-)
Título: Re: Contador 0 a 9 con pulsador
Publicado por: Risanti en 06 de Diciembre de 2008, 02:25:25
Compadre Chamowins

He echo tienes que estudiar harto.. pero nadie nacio aprendiendo..

Aqui tienes una forma de hacerlo obvio que hay mas de una..  pero estudia harto y practica no mas..

Código: [Seleccionar]
;*****************************************************************************
;Ejercio Contador  0 a 9 con display anodo comun
;Cristal 4 mhz
;*****************************************************************************
list  p=16f84A

#include p16f84a.inc

__CONFIG  _CP_OFF & _XT_OSC & _WDT_OFF ;Configuracion Fusibles Pic

f equ 1
tmro equ 0x01 ;Registro Option o Tmro
pcl      equ    0x02
estado equ 0x03 ;Registro Status
display equ 0x06 ;Registro Portb o Trisb
boton equ 0x05 ;Registro Porta o Trisa
temp equ 0x21 ;Variable GPR
cuenta equ    0x22



org 0

bsf estado,5 ;Ingresar a banco 1
movlw 0xff ;255-->W
movwf boton ;Portc=input
clrf display ;Portb=Output
movlw b'00000111' ;configuro TMR0
movwf tmro ;Option_Tmro=7
bcf estado,5 ;Salir de Banco 1
clrf   display ;inicio Portb=0
comf display,f ;apago el display
clrf cuenta ;variable cuenta=0
inicio: movf cuenta,w ;cargo cuenta a w
call tabla ;llamo tabla segun w
movwf display ;muestro el numero segun valor de cuenta
call delay1s ; llamo rutina de retardo 1seg
INCRE btfsc boton,0 ;pulsaste el boton
goto INCRE ;no-->sigo preguntado $-1
espera btfss boton,0 ;si-->espero que sueltes el boton
goto espera ;aun no sueltas el boton
incf cuenta,f ;soltaste el bonton incremento cuenta
movf cuenta,w ;
sublw d'10' ;
btfsc  estado,2 ; cuenta es 10, Si (cuenta=0)
clrf cuenta
goto inicio ;repetir secuencia


tabla    addwf pcl,f
retlw 0x18        ;0
retlw 0x7b ;1
retlw 0x2c ;2
retlw 0x29 ;3
retlw 0x4b ;4
retlw 0x89 ;5
retlw 0xc8 ;6
retlw 0x3b ;7
retlw 0x8 ;8
retlw 0xb ;9



delay1s movlw d'30'      ;Rutina delay= 32,7ms x 30 aprox  1seg
movwf temp
delay1 clrf    tmro     ;inicio timer0 desde 0 a 128
delay2 btfss tmro,7     ;¿Timer0 es = 128?
goto delay2
decfsz temp     ;Se a repedito el Bucle durante 30 Veces??
goto delay1
return

end
[/sup]
Título: Re: Contador 0 a 9 con pulsador
Publicado por: Risanti en 06 de Diciembre de 2008, 02:31:25
Chamowins.  probé el código  anterior en proteus.. y resulta  quiza haya que hacer alguna modificación para mejorarlo para implementarlo realmente ( como colocar algun retardo para minimizar los rebotes del pulsador),Pero te lo dejo para que lo revises y LO ESTUDIES.....
.


cualquier Duda Pregunta No mas..   Recuerda que NO EXISTE  PREGUNTAS TONTAS.

Risanti..

PD:Si existe algun error favor corregirme.
Título: Contador 0 a 9 con pulsador
Publicado por: chamowins en 09 de Diciembre de 2008, 14:19:36
Pucha no me funciona
e sacado ene ctos
pero este no me funciona
pucha quien puede darme un contador de 0 a 9
que cambie el numero con cada pulsacion
porfavor ayudenme
ya toy loco con tanto probar
porfa
todo lo que me han dicho lo e aplicado pero en proteus
no funciona nda
y les adjunte el cto que tengo en proteus
con el sw activo el display o los led

Título: Re: Contador 0 a 9 con pulsador
Publicado por: Leon Pic en 09 de Diciembre de 2008, 14:25:13
No te fies en el Proteus. Prueba en un portoboard y luego nos dices.
Título: Re: Contador 0 a 9 con pulsador
Publicado por: Risanti en 09 de Diciembre de 2008, 19:04:27
Chamowins.
Yo probe el que hice en proteus y funcionama...

Pero fijate que el display sea anodo comun, por que en tu simulacion estas suando catodo comun, si no me equivoco..

Ademas fijate que estes cargando correctamente el hex.

o si no prueba en protoboard...
El ASM que envie funciona bien  con display para anodo comun, .

Chamowins.. ademas puedes agregar tu codigo fuente para ver por donde esta el error..

Risanti.
Título: Re: Contador 0 a 9 con pulsador
Publicado por: sander en 10 de Diciembre de 2008, 11:44:17
Contador de 0 a 9 que cambie con un pulsador??

creo que hice algo asi aqui Link (http://www.todopic.com.ar/foros/index.php?topic=22737.0)

Saludos
Título: Re: Contador 0 a 9 con pulsador
Publicado por: chamowins en 10 de Diciembre de 2008, 17:07:21
señores es un contador de 0 a 9 con un pulsador para que al presionar cambie solo al presionar.
al soltar debe parar.
y es de un pic 16f84a

como les decia tengo ene programas pero esa cosa con el pulsador uta que webea
Título: Re: Contador 0 a 9 con pulsador
Publicado por: ppyote en 04 de Enero de 2009, 23:12:14
chamowins si ves que no consigues lo que pretendes te digo...
yo utilizaria PBP que es mucho mas facil que ASM
pero tambien te digo que apenas llevo 2 semanas utilizando ASM y no es tan dificil, asi que piensa...
quien algo quiere algo le cuesta, ademas he visto ejemplos de pulsadores con retardo y tambien contadores con visualizacion con display 7seg
asi que fusionarlos no creo que te cueste mucho