Autor Tema: Problema con 16F876: lectura/escritura puertos. Bien en simulación, no trabaja en el micro.  (Leído 2901 veces)

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

Desconectado Azpi

  • PIC10
  • *
  • Mensajes: 1
Hola a todos! Acabo de empezar con un 16F876 y me esta dando muchos quebraderos de cabeza.

Mi problema aparece al empezar a probar con el PIC, para lo que escribí un simple programa que lee del puerto A y escribe lo que ha leido en el puerto B. Cuando simulo con Pic Simulator IDE funciona correctamente, pero al meterlo al micro la cosa no funciona. Aparentemente es tan simple que no se que falla. LLevo días dándole vueltas y no se que hacer ya. Agradecería que alguien me echara una mano. Os pongo el programa a continuación:



; Leer/escribir en puertos
LIST P=16F876
RADIX HEX

;***********************************************
;******* Registros *******
;***********************************************
TMR_OPT    EQU 0x01
STATUS       EQU 0x03
PUERTOA    EQU 0x05
PUERTOB    EQU 0x06

ADCON EQU 0x1F ;Configuración del Puerto A


ORG 0
goto inicio

ORG 5
inicio movlw 0x00
movwf PUERTOA
movwf PUERTOB

bsf STATUS,5 ;Acceso al banco 1


movlw b"00000000"
movwf TMR_OPT                ;En el banco 1 este es el OPTION_REG.
                                          ;habilita PullUp internas

movlw 0x00                       ;Escribimos 00 en el registro TRISB
movwf PUERTOB

movlw b"00000111"          
movwf ADCON
movlw b"11111111"
movwf PUERTOA                ;Puerto A entrada Digital

bcf STATUS,5                      ;Acceso al banco 0

bucle movf PUERTOA,0
         nop
         movwf PUERTOB
         goto bucle

         END


Os agradecería cualquier comentario porque de verdad no se que probar ya.

Desconectado jca

  • PIC12
  • **
  • Mensajes: 75
hla compañero, lo único que te puedo decir es que este pic es desesperante yo yevo dos meses intentando programarlo con eso te digo todo, antes yo programaba un 16f84 y iba a las mil maravillas pero me metí en un proyecto que requería mas puertos y pensé en hacerlo con este pic y la verdad en que hora pensé en el, tienes razón pq a mi me pasa lo mismo en el ordenador el programa que diseñas funciona a la perfección y luego en el cacharro ni flores vamos, parece que le estes escribiendo en chino, ante todo decirte que yo utilizo el MPLAB pero bueno viendo tu programa yo no pondría ninguno de esos registros que pones, el pic ya sabe donde tiene el cada cosa vamos que lo de indicarle direcciones de memoria es solo para variables que tu te inventes yo pondría esto:

; Leer/escribir en puertos
LIST P=16F876
#include "p16f876.inc"

;AQUI IRIAN LAS VARIABLES QUE TU TE INVENTES PARA TU
;PROGRAMA

ORG 0x00
goto inicio

ORG 0x05
inicio
bsf STATUS,5
movlw 0x07      
movwf ADCON1                 ;Seleccionamos I/O Digitales
movlw b"00111111"           ;Puerto A como entrada
movwf TRISA   
movlw b"00000000"           ;Puerto B como salida
movwf TRISB
bcf STATUS,5

bucle
movf PORTA,0
movwf PORTB
goto bucle

end

Como ves con solo ponerle el nombre del registro o del puerto en cuestión en mayusculas el ya sabe donde tiene que ir no hace falta indicarle en cada momento la dirección donde tiene que ir.

Otra cosa a tener en cuenta es con que le programas yo lo hago con el T-20 y a este hay que hacerle una modificación para que grabe este pic, y tb si programas con el ICPROG al seleccionar el dispositivo cuando cargues el archivo exe, a la derecha donde pone oscilador debes seleccionar XT y debajo en bits de configuración quitarlos todos pq si no hace cosas raras.

El programa que te pongo esta probado y funciona correctamente.

Espero haberte ayudado. 1Saludo


Desconectado Fer_TACA

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4154
Hola amigos:
Segun el data sheet de Microchip para configurar el puerto A  hay quie escribir en el registro ADCON1 el valor 0x06 (entradas-Salidas digitales) estais ecribiendo el valor 0x07.
Probad de esta manera a ver si os funciona
Un saludo Fermín
Todos los días se aprende algo nuevo.

Desconectado rubmone

  • PIC10
  • *
  • Mensajes: 1
A mi me pasaba algo parecido y desactivando LVP (Low Voltage Program) en la palabra de configuración parece que se solucionó. Ahora mis problemas con el micro son otros....

Desconectado Fer_TACA

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4154
Hola Azpi:
Mira revisando el código que has puesto veo que configuras el registro Adcon en la pagina 0 para configurar la puerta A como entrada digital. Para que sean digitales hay que configurar el puerta A como digital pero preimero hay que configurar el registro ADCON1 en la página 1 con el valor 0x06.
Te adjunto un pequeño codigo de como se realiza:

clrf   TRISA      ;Borra el puerto A.
clrf   TRISB      ;Borra el puerto B.
clrf   TRISC      ;Borra el puerto C.
bsf            STATUS,5        ;Selección del banco 1
movlw   b"00000110"   ;Valor a cargar W para configurar la
movwf   ADCON1      ;Puerta A como E/S digitales.
movlw   b"00111111"   ;Valor a cargar W para configurar la
movwf   TRISA      ;Puerta A como entradas.

Espero que te sirva un saludo Fermín
Todos los días se aprende algo nuevo.

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2569
Azpi tu programa no está malito, creo que está perfectamente bien, tendrás que buscar el error en otra parte, quizá en la programación de los fuses en el ICPROG. ¿Como los programas?

Fer_TACA el primer bit se puede programar como 0  o como 1, por lo tanto igual está bien un 6 que un 7.

Un saludo