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

Temas similares

17/04/2016 #1


PIC16F877A Puerto D no se comporta como salida
Buenas, tengo un problema con la programacion de mi PIC. Estoy queriendo encender LEDs con la salida del puerto D pero no funcionan. El programa lo corri por MPLAB y anda bien, con el stimulus funciona todo ok pero a la hora de llevarlo a la placa no funciona. El circuito de la placa esta bien porque use otros puertos como salida (el puerto A) y funciona perfecto. No se si habra alguna configuracion especial para usar el puerto D como salida digital (similar a lo que pasaba con el puerto A de entrada y el registro ADCON1). No subo el programa porque es muy largo y me parece que no es necesario. Obviamente ya configure el registro TRISD como salida y todo lo normal. Es raro que funcione en el programa pero no en la placa. Desde ya agradecido por la ayuda y si quieren que suba el programa y el circuito no tengo problema. Saludos
17/04/2016 #2

Avatar de salvador33

Pero no funciona ninguna salida de puerto D

Enviado desde mi GT-I9301I mediante Tapatalk
17/04/2016 #3


Configure los bits 7,6,5 y 4 como salidas y las pongo en 1 y no miden tension ninguna. Sin embargo, en el programa las simulo y andan bien
17/04/2016 #4

Avatar de roberttorres

Buenas
Puedes subir el código para verlo.
19/04/2016 #5


Este es el código.
Código PHP:
list        p=16f877a       ; list directive to define processor
    
#include    <p16f877a.inc>  ; processor specific variable definitions
    
errorlevel -302             Suprimimos el mensaje "not in bank 0"

    
__CONFIG _CP_OFF _WDT_OFF _BODEN_OFF _PWRTE_ON _HS_OSC _WRT_OFF _LVP_OFF _CPD_OFF

    cblock    0x20
        reg_h
        reg_m
        reg_l
        mcount
        ncount
        ocount
    endc

RESET_VECTOR    CODE    0x0000 
processor reset vector
    nop                        
nop for icd
    pagesel start
    
goto    start              go to beginning of program

MAIN_PROG       CODE

start    org      0x010            
POWER_ON Reset (Comienzo del programa)
         
clrf   mcount          
         clrf   ncount
         clrf   ocount
         clrf   reg_h
         clrf   reg_m
         clrf   reg_l
         clrf   PORTA
         clrf   PORTB
         clrf   PORTC
         clrf    PORTD
         clrf   PORTE
         movlw  0x07
         movwf  CMCON     
DESHABILITA COMPARADORES ANALOGICOS     

DECLARAMOS ENTRADAS Y SALIDAS DE TODOS LOS PUERTOS

         bsf    STATUS
,RP0    PASO A BANCO 1
         bcf    STATUS
,RP1    
         
movlw  0x07
            movwf  ADCON1    
ENTRADAS DIGITALES           
         movlw 
b'11111111'
         
movwf TRISA        PORTA TODAS ENTRADAS
         movlw 
b'00000000'
         
movwf TRISB         PORTB TODAS SALIDAS
         movlw 
b'00000111'
         
movwf TRISC        PORTC MITAD ENTRADAS MITAD SALIDASI2C SDA SCL
         movlw 
b'00000011'
         
movwf TRISD        PORTD MAYORMENTE SALIDAS
         movlw 
b'11111111'
         
movwf TRISE        PORTE TODAS ENTRADAS

         bcf    STATUS
,RP0    PASO A BANCO 0
         bsf    PORTD
,4     ENCIENDO LED STAND BY 
19/04/2016 #6
Moderador

Avatar de D@rkbytes

La inicialización básica de configuración de puertos es así:
En éste caso, la del puerto D.
Código PHP:
    list    p=16f877a
    
include    p16f877a.inc

    __config _HS_OSC 
_WDTE_OFF _PWRTE_ON _LVP_OFF
    errorlevel    
-302

    org    0x00

inicio
    bsf        STATUS
,RP0        Banco 1
    movlw    
b'00000011'        Configurar RD <7:2como salidas.
    
movwf    TRISD
    bcf        STATUS
,RP0        Banco 0
    clrf    PORTD            
Limpiar Puerto D

programa
    bsf        PORTD
,4            Bit 4 de Puerto D en 1
    
    
goto    $                ; Bucle infinito

    end 
Lo único que hará este programa, será poner en 1 el bit 4 del puerto D y los otros que se configuraron como salidas, permanecerán en 0.

Si requieres que todo un puerto funcione como entradas, no es necesario que lo configures, ya que por defecto todos los puertos al iniciar funcionan como entradas.
Tampoco es necesario que configures el registro CMCON en este PIC, si no vas a usar los comparadores análogos.
En este PIC la configuración para desactivar el conversor AD, se hace en el registro ADCON1.
Un valor de 0x06 o 0x07, hará que los puertos con ADC funcionen como digitales. Bits PCFG <3:0>
19/04/2016 #7

Avatar de JoaquinFerrero

El error está justamente en poner TRISE a b'11111111', porque el puerto E solo tiene 3 bits de entrada/salida y, lo más importante, estás poniendo el valor del bit 4 (TRISE<4>) a 1, y en ese momento estás poniendo el puerto D en modo esclavo (PSPMODE = 1).

Consulta la documentación para poner el valor correcto de TRISE o, como dice D@rkbytes, si no vas a usar el puerto E, no lo inicialices, porque el valor por defecto de PSPMODE es 0.
22/04/2016 #8


Gracias por las respuestas, lo pruebo el fin de semana y les comento mis resultados
25/04/2016 #9


Efectivamente era la mala declaracion del registro TRISE lo que deshabilitaba el puerto D. Ya quedo funcionando perfecto. Muchas gracias!
Respuesta
¿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.