Autor Tema: Ayuda, pic16f84 prender led  (Leído 9228 veces)

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

Desconectado ralcesar

  • PIC10
  • *
  • Mensajes: 16
    • Ayuda Electronica
Ayuda, pic16f84 prender led
« en: 01 de Septiembre de 2008, 11:52:06 »
Hola  tengo que hacer un programa básico de pic y no tengo ni idea como hacerlo ...

Tengo 4 entradas (combinaciones binarias) y tengo q prender un led cada vez que el nº decimal correspondiente en la entrada sea par (2,4,6,8,10,12 y 14)

Ya se como definir los puertos como entrada y salida, puedo programar una función de karnaught en código para que la realice el pic ?

Sino, como puedo realizar este practico? son 7 numeros asi que pense en realizar 7 sub-funciones (creo q el pic se banca hasta 8) y en cada una realizar una comparación y utilizar el bit Z del STATUS apra prender o no el led, pero no tengo bien claro como serian los returns de las funciones, ademas de que me aprece muyyy engorroso y poco practico.-

Eso es todo, gracias al que me tire una idea de como realizarlo

Desconectado doppel

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1536
Re: Ayuda, pic16f84 prender led
« Respuesta #1 en: 01 de Septiembre de 2008, 13:09:33 »
Hola ralcesar
Bienvenido a Todopic!!!

en que lenguaje de programación piensas desarrollar el trabajo?  para mas ayuda seria bueno que subas el esquematico que estás utilizando.- Creo que lo mas conveniente seria hacer comparacion para ver cual es par, si programas en basic puedo ayudarte de lo contrario no faltará alguien que te dé una mano.-

saludos

Hernán
" Para ser exitoso no tienes que hacer cosas extraordinarias. Haz cosas ordinarias, extraordinariamente bien "

Desconectado jfmateos2

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3145
Re: Ayuda, pic16f84 prender led
« Respuesta #2 en: 01 de Septiembre de 2008, 13:29:15 »
Bienvenido ralcesar.

Además de lo que comenta doppel, yo creo que sólo tendrías que comprobar la entrada del bit menos significativo y, siempre que sea 0, el número será par (si consideramos también par el 0) y encenderás el LED.

Desconectado ralcesar

  • PIC10
  • *
  • Mensajes: 16
    • Ayuda Electronica
Re: Ayuda, pic16f84 prender led
« Respuesta #3 en: 01 de Septiembre de 2008, 16:22:46 »
Gracias por responder

Tengo que hacerlo usando MPLAB, el problema es que en en la consigna del ej, el numero 0 no es tomado como par

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Ayuda, pic16f84 prender led
« Respuesta #4 en: 01 de Septiembre de 2008, 23:47:24 »
Versión Básica:

ciclo      movf PORTA,W
            andlw 0x0F
            btfsc   STATUS,Z
            goto   Apaga

            btfsc PORTA,0
            goto  Apaga           

Enciende
            bsf    PORTB,0
            goto  ciclo

Apaga
           bcf    PORTB,0
           goto  ciclo

Versión mejorada:

ciclo      movf PORTA,W
            andlw 0x0F
            btfss   STATUS,Z
            btfsc   PORTA,0
            goto   Apaga

Enciende
            bsf    PORTB,0
            goto  ciclo

Apaga
           bcf    PORTB,0
           goto  ciclo

Versión mejorada alternativa 1:

ciclo      rrf      PORTA,W
            movf  PORTA,W
            andlw 0x0F
            btfss   STATUS,C
            btfsc   STATUS,Z
            goto    Apaga

Enciende
            bsf    PORTB,0
            goto  ciclo

Apaga
           bcf    PORTB,0
           goto  ciclo
« Última modificación: 02 de Septiembre de 2008, 00:01:06 por BrunoF »
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado ralcesar

  • PIC10
  • *
  • Mensajes: 16
    • Ayuda Electronica
Re: Ayuda, pic16f84 prender led
« Respuesta #5 en: 02 de Septiembre de 2008, 00:00:13 »
guaaa muchas gracias por el codigo  :mrgreen: :-/

no sabia que podia trabajar con bit individual del porta, yo pense que lei todos juntos y despues tendria que guardarlo en otro registro

muchas gracias

Desconectado ralcesar

  • PIC10
  • *
  • Mensajes: 16
    • Ayuda Electronica
Re: Ayuda, pic16f84 prender led
« Respuesta #6 en: 02 de Septiembre de 2008, 14:22:00 »
Bueno, gracias por el código, este es el programa final por si alguien alguna vez busca algo similar

;*****************************************************************;
;********* Trabajo Practico Nº 6 - Tecnicas Digitales II *********;
;****************** Oviedo Codigoni, Raúl ************************;
;*****************************************************************;
; Mostrar a través de LEDs, las distintas entradas pares de cuatro;
; puertos programados como entrada, el cero no es considerado como;
; par
;*****************************************************************;
       list p=16f84
       include <p16f84.inc>

;********************** Definición de Variables ******************;

       PORTA EQU 0x05   
       PORTB EQU 0x06
       STATUS EQU 0x03
       TRISA EQU 0x85
       TRISB EQU 0x86

;********************* Código de Programa ***********************;       

       org 0x00
                       
       bcf STATUS,5      ; trabajo en el banco 0, el bit 5 es el RPO
       clrf PORTA          ; inicializo el puertoA
       bsf STATUS,5      ; voy a trabajar en el banco 1
       movlw 0x0F        ; cargo en W 15 en hexa q seria 1111 en binario
                                ; para setear los puertos como entrada
       movwf TRISA      ; seteo los puertos como entrada
       bcf STATUS,5
       goto Ciclo

Ciclo  movf PORTA,W      ; leo el reguistro en el puerto A y lo guardo en W
       andlw 0x0F             ; multiplico W por 1111
       btfsc STATUS,2       ; bit 2 es el Z (bit.test.fire.skip.clear) analizo el bit Z del registro
                                    ; Status si es cero la operacion es distinta de cero, por lo que podria ser
                                    ; un nº par, caso contrario (no salta) y se va por el goto a "Apaga"
       goto Apaga

       btfsc PORTA,0     ; si el LSB es igual a 0, osea un nº par, salta el goto
       goto  Apaga           

Enciende
       bsf PORTB,0        ; (bit.set) pongo un 1 en el pin 0 del puerto B, q es el que va con el
                                 ; led
       goto Ciclo           ; vuelvo a Ciclo, para seguir sensando las entradas

Apaga
       bcf PORTB,0        ; (bit.clear) pongo un 0 en el pin 0 del puerto B
       goto Ciclo
       
END
« Última modificación: 02 de Septiembre de 2008, 23:35:31 por ralcesar »

Desconectado flacoclau

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1692
    • El Micro Reactor
Re: Ayuda, pic16f84 prender led
« Respuesta #7 en: 02 de Septiembre de 2008, 15:11:13 »
Hola Ralcesar, incluso puedes reemplazar el número de bit por su nombre en el programa, ya que el MPASM los reconoce, te doy un ejemplo:

Donde pones:

bcf STATUS,5      ; trabajo en el banco 0, el bit 5 es el RPO

puedes poner también:

bcf STATUS,RP0      ; trabajo en el banco 0, el bit 5 es el RPO

igual con:

btfsc STATUS,2       ; bit 2 es el Z (bit.test.fire.skip.clear) analizo el bit Z del registro

puedes hacerlo:

btfsc STATUS,Z      ; bit 2 es el Z (bit.test.fire.skip.clear) analizo el bit Z del registro

saludos!!
Las personas con buena ortografía me atraen textualmente.

El Micro Reactor

Córdoba capital - Argentina.

Desconectado ralcesar

  • PIC10
  • *
  • Mensajes: 16
    • Ayuda Electronica
Re: Ayuda, pic16f84 prender led
« Respuesta #8 en: 02 de Septiembre de 2008, 15:18:20 »
Eso puse al principio pero el MPLAB me lo marcaba como un error por no estar definidos

Desconectado flacoclau

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1692
    • El Micro Reactor
Re: Ayuda, pic16f84 prender led
« Respuesta #9 en: 02 de Septiembre de 2008, 15:26:45 »
Prueba los nombres de los registros en mayúsculas, también el título del include puede variar pon la "P" y la "F" del include <p16f84.inc> en mayúsculas,
 osea include <P16F84.inc>.

En RP0 OJO que es un 0 (cero) y no una O (letra)

Saludos!!


Agrego: Compila y cualquier cosa nos pasas el archivo .err que te genera el MPLAB y vemos cual es el problema.
« Última modificación: 02 de Septiembre de 2008, 15:29:28 por flacoclau »
Las personas con buena ortografía me atraen textualmente.

El Micro Reactor

Córdoba capital - Argentina.

Desconectado ralcesar

  • PIC10
  • *
  • Mensajes: 16
    • Ayuda Electronica
Re: Ayuda, pic16f84 prender led
« Respuesta #10 en: 02 de Septiembre de 2008, 19:37:32 »
Ok voy a seguir probando para ver que anda y que no. Pero el que postié está andando perfecto


 

anything