Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

09/03/2014 #1


Problema con 2º pulsador
Hola, soy nuevo aquí pero hace tiempo que os sigo.
Tengo este código y me funciona, pero al intentar poner el 2º pulsador y led no hay forma.
Código:
LIST p=16f877A
    INCLUDE <P16f877A.INC>
    
    __CONFIG _CP_OFF&  _CPD_OFF& _LVP_OFF& _WDT_OFF& _XT_OSC
    
    cblock 0X20
    endc
    
    #define PULSA1    PORTA,0
    #define LED1    PORTC,0
    
    ORG    0
    
    BSF    STATUS,RP0        ;banco 1 configuracion
    BSF    PULSA1
    BCF    LED1
    
    MOVLW    0x06
    MOVWF    ADCON0             ;se coloca en digital los pines
    
    BCF    STATUS,RP0        ;banco cero acciones
    BCF    LED1
    BSF    PULSA1
    
        
    
    VERIFICA    
        BTFSC    PULSA1
        GOTO    VERIFICA                 ;salta si es uno
        CALL    Retardo_10ms    ;salta por ser cero
        BTFSS    PULSA1
        GOTO    VERIFICA
        MOVLW    B'00000001'
        XORWF    PORTC,F
        GOTO    VERIFICA
    

    INCLUDE <RETARDOS.INC>
    
    END
Este es el 2º código que no me funciona. ¿Dónde está el fallo?.
Quisiera poder poner 6 pulsa.togger como en el primer código y 6 pulsa.momentario, utilizo ensamblador.
Gracias.


Código:
list     p=16f877A
    INCLUDE <P16f877A.INC>
    
    __CONFIG _CP_OFF& _CPD_OFF& _LVP_OFF& _WDT_OFF& _XT_OSC
    
    cblock 0X20
    endc
    
    #define PULSA1    PORTA,0
    #define LED1    PORTC,0
    #define PULSA2    PORTA,1
    #define LED2    PORTC,1
    
    ORG    0
    
    BSF    STATUS,RP0        ;banco 1 configuración
    BSF    PULSA1
    BCF    LED1
    BSF    STATUS,RP0        ;banco 1 configuración
    BSF    PULSA2
    BCF    LED2
    
    MOVLW    0x06
    MOVWF    ADCON0             ;se coloca en digital los pines
    
    BCF    STATUS,RP0        ;banco cero acciones
    BCF    LED1
    BSF    PULSA1
    BCF    STATUS,RP0        ;banco cero acciones
    BCF    LED2
    BSF    PULSA2
    
        
    
    VERIFICA
          BTFSC     PULSA1
          GOTO     VERIFICA        ;salta si es uno
          CALL     Retardo_10ms        ;salta por ser cero
          BTFSS     PULSA1
          GOTO     VERIFICA
          MOVLW     B'00000001'
          XORWF     PORTC,F
          GOTO     VERIFICA
                
    VERIFICA1    
          BTFSC    PULSA2
          GOTO    VERIFICA1        ;salta si es uno
          CALL    Retardo_10ms                ;salta por ser cero
          BTFSS    PULSA2
          GOTO    VERIFICA1
          MOVLW    B'00000010'
          XORWF    PORTC,F
          GOTO    VERIFICA1                

    INCLUDE <RETARDOS.INC>
    END
10/03/2014 #2
Moderador

Avatar de D@rkbytes

fj7495sa dijo: Ver Mensaje
Quisiera poder poner 6 pulsa.togger como en el primer código y 6 pulsa.momentario, utilizo ensamblador.
No sé a que te refieras con pulsa.togger ¿Será Toggle acaso?

Mira si este ejemplo de código es lo que quieres hacer:
Código:
    list    p=16f877a
    include    p16f877a.inc
    __config    _XT_OSC & _PWRTE_ON & _LVP_OFF & _WDTE_OFF & _BOREN_OFF
    errorlevel    -302

    org    0x00

inicio
    bsf        STATUS,RP0        ; Banco 1
    bcf        OPTION_REG,7    ; Activar pull-ups en puerto B
    movlw    b'11000000'        ; Configurar salidas de puerto D
    movwf    TRISD
    bcf        STATUS,RP0        ; Banco 0
    clrf    PORTD            ; Bits de salida de puerto D en 0

programa
; Checar si los pulsadores en RB0 a RB5 se han presionado (0 = On).
    btfss    PORTB,0
    call    Toggle_1
    btfss    PORTB,1
    call    Toggle_2
    btfss    PORTB,2
    call    Toggle_3
    btfss    PORTB,3
    call    Toggle_4
    btfss    PORTB,4
    call    Toggle_5
    btfss    PORTB,5
    call    Toggle_6
    goto    programa

Toggle_1
    btfsc   PORTB,0            ; Repetir hasta que RB0 sea 0
    goto    $-1                ; No es 0, regresar 1 instrucción
; Hacer toggle (Cambiar de estado un bit)
    xorlw    b'00000001'
    movwf   PORTD            ; Mover W a PORTD
 ; Esperar a que se suelte el pulsador.
    btfss   PORTB,0            ; Repetir hasta que RB0 sea 1
    goto    $-1                ; No es 1, regresar 1 instrucción
    return
; Se repite con los otros bits del puerto B y D....
Toggle_2
    btfsc   PORTB,1
    goto    $-1
    xorlw    b'00000010'
    movwf   PORTD
    btfss   PORTB,1
    goto    $-1
    return

Toggle_3
    btfsc   PORTB,2
    goto    $-1
    xorlw    b'00000100'
    movwf   PORTD
    btfss   PORTB,2
    goto    $-1
    return

Toggle_4
    btfsc   PORTB,3
    goto    $-1
    xorlw    b'00001000'
    movwf   PORTD
    btfss   PORTB,3
    goto    $-1
    return
 
Toggle_5
    btfsc   PORTB,4
    goto    $-1
    xorlw    b'00010000'
    movwf   PORTD
    btfss   PORTB,4
    goto    $-1
    return

Toggle_6
    btfsc   PORTB,5
    goto    $-1
    xorlw    b'00100000'
    movwf   PORTD
    btfss   PORTB,5
    goto    $-1
    return

    end
Saludos.
10/03/2014 #3


no se mucho de ASM pero aun asi puedo decir que jamas entras a la rutina VERIFICA1, pruba de la siguiente manera

Código:
  VERIFICA
          BTFSC     PULSA1
          GOTO     VERIFICA1        ;salta si es uno
          CALL     Retardo_10ms        ;salta por ser cero
          BTFSS     PULSA1
          GOTO     VERIFICA1
          MOVLW     B'00000001'
          XORWF     PORTC,F
          GOTO     VERIFICA1
                
    VERIFICA1    
          BTFSC    PULSA2
          GOTO    VERIFICA        ;salta si es uno
          CALL    Retardo_10ms                ;salta por ser cero
          BTFSS    PULSA2
          GOTO    VERIFICA
          MOVLW    B'00000010'
          XORWF    PORTC,F
          GOTO    VERIFICA
12/03/2014 #4


Hola, os doy las gracias a los dos ( D@rkbytes y Fernando123) por su ayuda.
El de D@rkbytes si funciona y es lo que yo quería, pero el de Fernando123 lo siento no funciona, otra vez será. Agradecido a los dos por su interés. Muchas gracias.


Cierto: quería decir toggle, mi inglés no es muy bueno.
15/03/2014 #5


Hola, ya estoy aquí de nuevo sr. D@rkbytes
¿Podría decirme como puedo seguir este código para poner leds con pulsadores momentarios?
Gracias por su tiempo.
15/03/2014 #6
Moderador

Avatar de D@rkbytes

fj7495sa dijo: Ver Mensaje
Hola, ya estoy aquí de nuevo sr. D@rkbytes
¿Podría decirme como puedo seguir este código para poner leds con pulsadores momentarios?
Gracias por su tiempo.
No entiendo a que te refieres con pulsadores momentarios.
¿Podrías explicar qué es lo que quieres que haga el programa?
16/03/2014 #7


Hola. Perdón, quise decir momentáneo. pulsar/encender, soltar/apagar, pulsar PortA/led en PortC
A continuación del código que me pasó que funciona de fabula.
Agradecido de antemano por su interés en ayudarme. Muchas gracias.
16/03/2014 #8
Moderador

Avatar de D@rkbytes

fj7495sa dijo: Ver Mensaje
Hola. Perdón, quise decir momentáneo. pulsar/encender, soltar/apagar, pulsar PortA/led en PortC
A continuación del código que me pasó que funciona de fabula.
Agradecido de antemano por su interés en ayudarme. Muchas gracias.
Eso es más fácil, cambia las rutinas Toggle_X del código anterior por esta otra.

btfsc PORTB,0
goto $-1
bsf PORTD,0
btfss PORTB,0
goto $-1
bcf PORTD,0
return

Nada más ve cambiando los bits del puerto B y D.

Suerte.
23/03/2014 #9


Hola, Sr. D@rkbytes. Su segunda sugerencia también funciona muy bien, pero el problema que tengo,
es que tengo que utilizar el puerto A como entradas con pulsadores, el puerto C como salidas con LED's y mantener el puerto B como entradas y el puerto D como salidas, pues necesito tener 6 pulsadores Toggle y 6 pulsadores momentáneos.
Este proyecto es para encender las luces de un camión Tamiya desde la emisora.
23/03/2014 #10
Moderador

Avatar de D@rkbytes

fj7495sa dijo: Ver Mensaje
Hola, Sr. D@rkbytes. Su segunda sugerencia también funciona muy bien, pero el problema que tengo,
es que tengo que utilizar el puerto A como entradas con pulsadores, el puerto C como salidas con LED's y mantener el puerto B como entradas y el puerto D como salidas, pues necesito tener 6 pulsadores Toggle y 6 pulsadores momentáneos.
Este proyecto es para encender las luces de un camión Tamiya desde la emisora.
Pues no es ningún problema lo que requieres, ya te había dado las rutinas para realizar lo que deseas.
Lo único que debiste hacer, es juntar en el programa esas rutinas y así tener los bloques para los efectos que requieres.

Como este proyecto le puede servir a otras personas para aprender rutinas con pulsadores y LED's, aquí adjunto el proyecto completo con las rutinas que requieres.
Verás que tan solo tenías que agregarlas al programa para que funcionara como lo necesitas.

Suerte.
Imágenes Adjuntas
Tipo de Archivo: jpg 16F877A Pulsadores y LED's SCH.jpg (143,2 KB (Kilobytes), 21 visitas)
Archivos Adjuntos
Tipo de Archivo: rar 16F877A Pulsadores y LED's.rar (22,7 KB (Kilobytes), 10 visitas)
26/03/2014 #11


Hola, sr. D@rkbytes ,Le agradezco su interes por la ayuda prestada,funciona de maravillas,ahora a ponerlo en practica real y una vez lo tenga funcionando ire por el segundo proyecto que sera transmitirlo
por infrarrojo para el remorque.. MUCHAS GRACIAS POR SU AYUDA
PD:Cuando lo tenga listo e instalado en el camion lo subire
25/05/2014 #12


Hola, sr. D@rkbytes, aqui le pongo un circuito combinado de un proyecto para que usted si puede me pueda ayudar, se trata de el circuito de luces y infrarojo emisor, quisiera saber si es posible de esta manera, mas tarde ya lo pondria al completo con encendido de las luces,emisor y receptor con los servos, bueno al completo del proyecto..
GRACIAS Y SALUDOS

P.D. SI ALGUNO ME PUEDE AYUDAR ACEPTO SU COLABORACION
Archivos Adjuntos
Tipo de Archivo: rar 8 led y 4 infrared.rar (20,5 KB (Kilobytes), 7 visitas)
25/05/2014 #13
Moderador

Avatar de D@rkbytes

Te faltó colocar una resistencia en la salida del PIC16F684 hacia el gate de Q1.
No te puedo sugerir más que eso porque no está el código de ese PIC y no se sabe a ciencia cierta que tenga que hacer.

Saludos.
25/05/2014 #14


Hola, sr. D@rkbytes, aqui le pongo el codigo del pic 16f684 y las resistencias R11,es correcta 10K o abria que cambiarlas.
Gracias por su atencion
Archivos Adjuntos
Tipo de Archivo: rar con resistencias.rar (41,2 KB (Kilobytes), 5 visitas)
Tipo de Archivo: rar error correguido.rar (41,6 KB (Kilobytes), 7 visitas)
25/05/2014 #15
Moderador

Avatar de D@rkbytes

fj7495sa dijo: Ver Mensaje
aquí le pongo el código del pic16f684 y ¿la resistencia R11, es correcta 10K o habría que cambiarla?
Por ser un mosfet que se dispara con una muy baja corriente y a 2.1V, esa resistencia la veo bien.
Para saber que hacía ese código que enviaste, tuve que buscar la información y los archivos faltantes en la web del proyecto.
Todo parece que debe funcionar bien así con la combinación de 4 bits.

Tuve que modificar el archivo de diseño porque tenía errores y también el código porque tenía instrucciones obsoletas.

Te recomiendo que cuando realices tus consultas, trates de explicar con detalles que es lo que deseas hacer y que es lo que hace cada código, porque sin información es difícil entender lo que estás haciendo.

Espero que pronto puedas terminar tu proyecto y lo subas al Foro.

Suerte.
Archivos Adjuntos
Tipo de Archivo: rar error corregido II.rar (40,6 KB (Kilobytes), 7 visitas)
28/05/2014 #16


Hola, sr. D@rkbytes, perdon por no poner todo los archivos que usted a tenido que buscar por la Web, no volvera ocurrirme, he localizado los cambios realizado por usted y lo del ( errorlevel -302) no lo entiendo muy bien,.
las otras lineas son
bsf STATUS,RP0
movwf TRISC
bcf STATUS,RP0
por estas lineas, hace tiempo que intente hacer el circuito y no me funcionaba bien y lo deje, bueno no le robo mas tiempo, Saludos y mi agradacimiento,. a continuar con el proyecto que tengo ganas de probarlo en mi camion
28/05/2014 #17
Moderador

Avatar de D@rkbytes

El número de la directiva ERRORLEVEL -302 le dice al compilador que omita los mensajes de advertencia sobre la selección de bancos.
Es bueno no usarla para poder verificar si tenemos algún error al seleccionar los bancos para los registros.
Pero si estamos seguros que estamos utilizando el banco correcto, no tiene caso ver esos mensajes al compilar.

Estableciendo el bit RP0 del registro STATUS en 1 cambiamos al banco 1 y en 0 cambiamos al banco 0
Pero no es la única combinación de bits porque existen más bancos dependiendo del PIC.

Por ejemplo:

Código:
; Selección del Banco 0
    BCF STATUS,RP0
    BCF STATUS,RP1
; Registro/s a usar

; Selección del Banco 1
    BSF STATUS,RP0
    BCF STATUS,RP1
; Registro/s a usar

; Selección del Banco 2
    BSF STATUS,RP1
    BCF STATUS,RP0
; Registro/s a usar

; Selección del Banco 3
    BSF STATUS,RP1
    BSF STATUS,RP0
; Registro/s a usar
Se suele regresar al banco 0 para poder utilizar los puertos previamente configurados como E/S.

Esos agregados al código fueron porque se usó TRIS y el uso de esa instrucción ya es obsoleta.
No significa que no funcione, se trata de estar al tanto sobre los cambios que MPLAB va teniendo.

Para que entiendas más sobre el lenguaje ensamblador, es necesario que tomes un curso básico. ASM desde 0
También es recomendable leer la hoja de datos del PIC que usarás y los temas de ayuda del MPASM Assembler.

Suerte.
28/06/2014 #18


Hola, sr. D@rkbytes, ya estoy aqui de nuevo y creo que sera la ultima vez que le molesto pues ya termine mi proyecto y con su ayuda que ha sido muy importante para mi, he tenido que cambiar el 16f57 X 16f883 pero si hay otro de 28 pins que pueda usar para hacer lo mismo y triga menos problemas adelante yo lo cambio y lo compro, aunque tengo varios 883.
Cuando funcione me gustaria subirlo completo para que otros pudieran utilizarlo, Tendria que abrir un muevo tema ?? (proyecto ampliacion emisora 16 canales + 16 infrarrojo) correcto?
GRACIAS DE NUEVO POR SU AYUDA

P.D. Lastima que estemos tan lejos, pero si viene alguna vez a Barcelona hagamelo saber soy Taxista de BCN.



---------- Actualizado después de 2 minutos ----------

me falta este archivo 16f883 PDF que no puedo subirlo
Archivos Adjuntos
Tipo de Archivo: zip decoder.zip (16,8 KB (Kilobytes), 6 visitas)
Tipo de Archivo: zip encoder.zip (15,9 KB (Kilobytes), 6 visitas)
Tipo de Archivo: zip nuevo.zip (121,9 KB (Kilobytes), 6 visitas)
Tipo de Archivo: zip ORIGINAL TRANSMISOR Y RECEPTOR.zip (119,6 KB (Kilobytes), 3 visitas)
Tipo de Archivo: zip varios.zip (834,1 KB (Kilobytes), 4 visitas)
28/06/2014 #19
Moderador

Avatar de D@rkbytes

fj7495sa dijo: Ver Mensaje
Hola, sr. D@rkbytes, ya estoy aquí de nuevo y creo que sera la ultima vez que le molesto pues ya termine mi proyecto y con su ayuda que ha sido muy importante para mi, he tenido que cambiar el 16f57 X 16f883 pero si hay otro de 28 pins que pueda usar para hacer lo mismo y triga menos problemas adelante yo lo cambio y lo compro, aunque tengo varios 883.
Tal vez te cueste algo de trabajo migrar el código al PIC16F883.
Tiene varias cosas en las que son muy diferentes a los PIC que has estado usando, pero con las hojas de datos y mirando el código lo podrás lograr.
Te recomiendo que sigas usando el PIC para el cual fueron escritas las librerías, pues durante la migración del código podrías tener problemas.
fj7495sa dijo: Ver Mensaje
Cuando funcione me gustaría subirlo completo para que otros pudieran utilizarlo.
¿Tendría que abrir un muevo tema? (proyecto ampliación emisora 16 canales + 16 infrarrojo) correcto?
Cuando termines tu proyecto, si gustas puedes crear un tema nuevo explicando con detalles para que funciona y que es lo que hace.
Sé prolijo con los esquemas y con toda la documentación que quieras aportar.
fj7495sa dijo: Ver Mensaje
P.D. Lastima que estemos tan lejos, pero si viene alguna vez a Barcelona, hágamelo saber, soy taxista de BCN.
Gracias de nuevo por su ayuda.
Pues si, pero tal vez algún día tenga el gusto de ir a conocer por allá.
Estamos para servirte y espero pronto termines tu proyecto.

Saludos y suerte.
29/06/2014 #20


Hola, el problema de usar el 16f57 es que en Proteus no esta y por eso decidi canviarlo por 883, hay alguna otra forma de poder instalarlo? alguna libreria u otro programa que pueda utilizarlo
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.