Autor Tema: problema con el puerto a pic16f628a  (Leído 2939 veces)

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

Desconectado guidocali

  • PIC10
  • *
  • Mensajes: 2
problema con el puerto a pic16f628a
« en: 03 de Septiembre de 2011, 12:55:29 »
Hola amigos miren tengo un gran problema y sinceramente no se que anda mal asi que me hice un programita bastante sencillo el cual consiste con un 555 enviar una señal de 1s a la pin de interupcion externa del 16f628a el cual deberia encender y apagar el puerto a (desde pa0 hasta el pa4) uso el mplab y simulando en el mplab sale como quiero, lo simule en el isis del proteus y no funciona para nada la patita pa4 le puse una resistencia para el pull up pero no funciona(en el isis) pense que seria algun problema del simulador y al armarlo el circuito en un protoboard peor aun no funciona la patita pa3 y pa4 los demas encienden y apagan cuando les llega los pulsos por la interrupcion. revise todo me comi el datasheet y no se que rayos pasa. porfa una ayudita. aca les dejo el pequeño programita.

   list p=16f628a
   #include "p16f628a.inc"
   radix hex

porta   equ      0x05
status   equ      0x03
trisa      equ      0x85
trisb      equ      0x86
cmcon   equ      0x1f
intcon   equ      0x0b
dato      equ      0x0c
portb   equ      0x06

   org 0x00
   goto   configuracion
   org 0x04
   goto   interrupcion
   org 0x05
configuracion
   clrf   dato
   clrf   porta
   movlw   0x07
   movwf cmcon
   bcf   status,rp1
   bsf   status,rp0
   movlw   0x00
   movwf   trisa
   clrf   portb
   movlw 0x01
   movwf   trisb
   bcf   status,rp0
   bsf   intcon,gie
   bsf   intcon,inte
   
bucle
   movf   dato,0
   movwf   porta
   goto   bucle

interrupcion
   comf   dato   
   bcf   intcon,intf
   retfie
   goto   bucle

end

PD le puse una resistencia de 1k hacia vcc en la pata pa4 para el pull up

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: problema con el puerto a pic16f628a
« Respuesta #1 en: 03 de Septiembre de 2011, 14:10:50 »
Tomando la teria expuesta aquí: http://www.todopic.com.ar/foros/index.php?topic=24720.0
y con ayuda de ConfigPIC: http://www.todopic.com.ar/foros/index.php?topic=25660.0

cree el siguiente ejemplo que hace los mismo, pero ya aprovecha las definiciones que entrega Microchip al utilizar P16F628A.inc:

Código: ASM
  1. ; **** Encabezado ****
  2.  list p=16F628A   ; Microcontrolador utilizado.-
  3.  #include P16F628A.inc    ; Definicion de registros SFR.-
  4.  __CONFIG   _XT_OSC & _PWRTE_ON & _WDT_OFF & _CP_OFF & _MCLRE_ON & _BOREN_OFF & _LVP_OFF & _DATA_CP_OFF
  5. ;**** Definicion de Variables ****
  6. CBLOCK 0x20      ; En esta posicion se declaran los registros de usuario (GPR)
  7. STATUS_Temp  ; Registro para guardar temporalmete STATUS
  8. W_Temp   ; Registro para guardar temporalmete W
  9. dato
  10. ENDC
  11.  
  12. ;**** Inicio del Microcontrolador ****
  13. Reset
  14.      org            0x00
  15.      goto       Inicio          ; Salto a inicio del programa.-
  16. ;**** Vector de Interrupcion ****
  17.      org            0x04
  18.      goto    Inicio_ISR         ; Atiendo Interrupcion.-
  19. ;**** Programa principal ****
  20.      org            0x05
  21. Inicio
  22. ;---- Configuraciones ----
  23.      bsf     STATUS,RP0  ; Banco 1.-
  24.      movlw   0xE0
  25.      movwf   TRISA   ;eeesssss
  26.      movlw   0xDF
  27.      movwf   OPTION_REG  ; Pull-Up deshabiltado, , Timer0|interno, 1:1
  28.      bcf     STATUS,RP0  ; Banco 0.-
  29.      movlw   0x7    ; Configuro Comparador Analogico
  30.      movwf   CMCON   ; V1in-=GND, V1in+=GND, C1out=Off| V2in-=GND, V2in+=GND, C2out=Off
  31.      bsf     STATUS,RP0  ; Banco 1.-
  32.      bsf OPTION_REG,INTEDG   ; Interrupcion RB0 por flanco ascendente
  33.      bcf     STATUS,RP0  ; Banco 0.-
  34.      bcf INTCON,INTF ; Limpiamos bandera
  35.      bsf INTCON,INTE ; Habilitamos interrupcion RB0
  36.      bsf     INTCON,GIE  ; Habilitacion general de interrupciones
  37.  
  38.  
  39. ;AQUI CODIGO DE USUARIO
  40. bucle
  41.    movf    dato,0
  42.    movwf   PORTA
  43.    goto    bucle
  44.    
  45.  
  46. ;**** Rutina de servicio de Interrupcion ****
  47. Inicio_ISR
  48. ;---- Guardado de registro W y STATUS ----
  49.      movwf   W_Temp  ; Copiamos W a un registro Temporario
  50.      swapf   STATUS,W    ; Invertimos nibles de STATUS
  51.      movwf   STATUS_Temp ; Guardamos STATUS en un registro temporal
  52. ;---- Interrupciones ----
  53.      btfsc   INTCON,INTF ; Interrupcion por RB0?
  54.      goto    ISR_RB0    ; Si, se trata interrupcion
  55. ;.............................
  56. Fin_ISR
  57. ;---- Restauramos los valores de W y STATUS ----
  58.      swapf   STATUS_Temp,W
  59.      movwf   STATUS
  60.      swapf   W_Temp,f
  61.      swapf   W_Temp,W
  62.      retfie
  63. ;.......................
  64. ISR_RB0
  65. ; Tratamiento de Interrupcion
  66.          comf    dato  
  67.      bcf     INTCON,INTF ; Borramos bandera
  68.      goto    Fin_ISR
  69. ;.......................
  70.      end


En proteus funciona  ;-)


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado guidocali

  • PIC10
  • *
  • Mensajes: 2
Re: problema con el puerto a pic16f628a
« Respuesta #2 en: 06 de Septiembre de 2011, 23:20:48 »
muchas gracias man funciona pero tengo algunas dudas si me las puedes explicar, yo soy un poco nuevo con esto de programacion de los pics y sobre todo con el 16f628a yo antes programaba con el pic16f84a que es mas sencillo que este, me tope con muchos problemas como desabilitar los comparadores, el pic16f628a tiene 4 bancos mientras que el pic16f84a solo2 asi que si bien varios registros mantiene las posiciones de memoria otras no. en el caso del puerto b hay que configurar el pin rb4 etc.
volviendo al tema del programa que hiciste quisiera que me iluminaras un poco por que mensionaste que aprovecha las definiciones de microchip, por ejemplo el cambio de los nibles mediante el swap y el uso de variables temporales para guardar el valor del status y del dato en el acumulador.
espero no molestarte con las preguntas pero lo unico busco es saber mas. Espero tu respuesta gracias por tu tiempo

Desconectado tapi8

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1506
Re: problema con el puerto a pic16f628a
« Respuesta #3 en: 08 de Septiembre de 2011, 09:11:59 »

Citar
lo unico busco es saber mas.

Par los que buscan saber mas.

http://www.todopic.com.ar/foros/index.php?topic=24720.0

Es la misma que te pone Suki arriba, mirala detenidamente y sabras mucho mas, despues pregunta, pero despues de estudiartela.
Espero que no te molestes, y bienvenido al foro.


Desconectado gera

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2188
Re: problema con el puerto a pic16f628a
« Respuesta #4 en: 08 de Septiembre de 2011, 10:19:29 »
Hola!! Es importante que leas bien la hoja de datos de ese pic. Yo se que es un poco tedioso, pero para programar un pic hay que configurar sus registros de forma adecuada, y para eso tenes que conocer qué registros tiene y qué hace cada uno.
Saludos!!

"conozco dos cosas infinitas: el universo y la estupidez humana. Y no estoy muy seguro del primero." A.Einstein


 

anything