Autor Tema: Error ejecutando Instruccion en pic (lo googlie pero nada)  (Leído 1635 veces)

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

Desconectado gato_hexadecimal

  • PIC10
  • *
  • Mensajes: 7
Error ejecutando Instruccion en pic (lo googlie pero nada)
« en: 14 de Diciembre de 2015, 01:56:35 »
Hola Sres todopic:

Mi dilema es el siguiente...   hace algunos dias iniciandome en el tema de los microcontroladores pic,  realice varias practicas hasta lograr cierta soltura por lo cual hice un pequeño codigo para controlar un extractor de aire para mantener fresco el baño de mi casa.    La idea es que se mantiene apagado por una hora y luego enciende 5 minutos,  luego se apaga... y asi por siempre hasta que alguien presiona un pulsador (INTF)  se interrumpe lo anterior para permanecer en extractor prendido por 20 minutos y despues sigue como al principio.

Todo lo anterior funcionó de maravillas en un pic16f630 hasta que conecté mal unos cables y boom !! tronó todo mi circuito (220v).

Comencé todo nuevamente modificando el codigo para un pic16F628A.     PERO  noté que no andaba bien.....

reducí el codigo hasta llegar al simple led parpadeante y aun no andaba bien...    terminé dandome cuenta que la instruccion XORWF  no funciona en mi pic16F628A.......      ¿A alguien le ha pasado que su micro no ejecute una instrucción ?   ¿es muy raro que al pic se le queme por estatica solo una instruccion ?   


LED parpadeante que SI funciona:

list p=16f628a
include P16f628a.inc

 __CONFIG _BODEN_OFF  & _CP_OFF & _DATA_CP_OFF &  _PWRTE_ON & _WDT_OFF & _LVP_OFF & _MCLRE_OFF  & _XT_OSC 
 
cont_1                         equ 0x20
cont_2                         equ 0x21     

;cambio de banco
    bcf STATUS, RP1                      ;
    bsf STATUS, RP0                      ;subo al banco 1 para configurar

;configurando el puerto A
    clrw                               
    movwf TRISA                          ; solo usaré RA0

;teminar con la configuracion
    bcf STATUS, RP0                      ;bajo al banco 0

ciclo:
   bsf PORTA, 0
   call retardo 
   bcf PORTA, 0
   call retardo
   goto ciclo               
     

retardo:                                 
    decfsz cont_1, 1
    goto retardo
    decfsz cont_2, 1
    goto retardo
    return                                                                         

end


EL QUE NO FUNCIONA... EN LOS OTROS PIC FUNCIONABA

list p=16f628a
include P16f628a.inc

 __CONFIG _BODEN_OFF  & _CP_OFF & _DATA_CP_OFF &  _PWRTE_ON & _WDT_OFF & _LVP_OFF & _MCLRE_OFF  & _XT_OSC 
 

cont_1                         equ 0x20
cont_2                         equ 0x21     


;cambio de banco
    bcf STATUS, RP1                      ;
    bsf STATUS, RP0                      ;subo al banco 1 para configurar

;configurando el puerto A
    clrw                               
    movwf TRISA                          ; solo usaré RA0

;teminar con la configuracion
    bcf STATUS, RP0                      ;bajo al banco 0


   movlw 0x01                           ;W a uno para hacer xor con PORTA

ciclo:
   xorwf PORTA, 1                   ;xor entre W y PORTA y resultado en PORTA
   call retardo   
   goto ciclo               
     

retardo:                                 
    decfsz cont_1, 1
    goto retardo
    decfsz cont_2, 1
    goto retardo
    return                                                                               

end


parece que murió solo una instrucción.....    Saludos.
« Última modificación: 14 de Diciembre de 2015, 02:12:22 por gato_hexadecimal »

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Error ejecutando Instruccion en pic (lo googlie pero nada)
« Respuesta #1 en: 14 de Diciembre de 2015, 05:27:15 »
No se como te funcionaba antes.... te falta pasarlas a digitales..

Código: ASM
  1. list p=16f628a
  2. include P16f628a.inc
  3.  
  4.  __CONFIG _BODEN_OFF  & _CP_OFF & _DATA_CP_OFF &  _PWRTE_ON & _WDT_OFF & _LVP_OFF & _MCLRE_OFF  & _XT_OSC  
  5.  
  6.  
  7. cont_1                         equ 0x20
  8. cont_2                         equ 0x21    
  9.  
  10.  
  11.  
  12. ;configurando el puerto A
  13.  
  14.         BANKSEL TRISA           ;Banco 1
  15.         CLRF    TRISA           ;Solo usaré RA0
  16.         BANKSEL CMCON           ;Banco 0
  17.         MOVLW   0x07
  18.         MOVWF   CMCON           ; Todos los PORTA como digitales
  19.  
  20.         MOVLW   0x01            ;W a uno para hacer xor con PORTA
  21.  
  22. ciclo:
  23.         XORWF   PORTA, F                   ;xor entre W y PORTA y resultado en PORTA
  24.         CALL    retardo    
  25.         GOTO    ciclo                
  26.      
  27.  
  28. retardo:                                
  29.         DECFSZ  cont_1, 1
  30.         GOTO    retardo
  31.         DECFSZ  cont_2, 1
  32.         GOTO    retardo
  33.         RETURN                                                                              
  34.  
  35. END

Espero que estes opto aislando todas las salidas ( y entradas de ser necesario ) al PIC, para evitar que si se quema algo sea problema solo en el dispositivo de salida y no en la parte de control

Desconectado gato_hexadecimal

  • PIC10
  • *
  • Mensajes: 7
Re:Error ejecutando Instruccion en pic (lo googlie pero nada)
« Respuesta #2 en: 14 de Diciembre de 2015, 11:26:57 »
Sir KILLERJC:

 Gracias por responder,  pero aquí no necesito optoacopladores puesto que solo estoy trabajando con leds en un ambiente de protoboard.   Respecto a "pasarlas a digitales.."    No entiendo a que te refieres.

Respecto a " No se como te funcionaba antes..."

con el pic16f630   funcionaba perfecto y de hecho es muy simple,   W=1   y luego hacer un ciclo en el que se hace XOR entre W y PORTA  quedando el resultado en PORTA.   por lo cual  en un ciclo queda en 1,  luego 0...1...0...

puedo mostrar que funciona ya que lo realicé en el 16f630 (el cual se quemo por un error de conexión)  y ahora  en un 877a.   pero en el 628A simplemente se cuelga en XOR.   nunca ejecuta dicha instrucción.

de hecho puse un led extra a modo de debug después del XOR dejando el código así:

           movlw 0x01
     ciclo
           xorwf PORTA, 1
           bsf PORTA, 1                             ;led para fines de debug
           call retardo
           goto ciclo

Desconectado juaperser1

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 2979
Re:Error ejecutando Instruccion en pic (lo googlie pero nada)
« Respuesta #3 en: 14 de Diciembre de 2015, 11:36:10 »
Citar
Gracias por responder,  pero aquí no necesito optoacopladores puesto que solo estoy trabajando con leds en un ambiente de protoboard.   Respecto a "pasarlas a digitales.."    No entiendo a que te refieres.

Killer tiene razón, necesitas aislar el circuito, si estas usando un relé perfecto, pero si por ejemplo es un triac y no lo aislas, cuando le conectes la programadora al USB del ordenador, por ponerte un ejemplo vas a ver como explota hasta el ordenador.

Un saludo
Visita mi canal para aprender sobre electrónica y programación:

https://www.youtube.com/channel/UCxOYHcAMLCVEtZEvGgPQ6Vw

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Error ejecutando Instruccion en pic (lo googlie pero nada)
« Respuesta #4 en: 14 de Diciembre de 2015, 11:40:23 »
Ni idea por que tenes problemas con 1 sola instruccion realmente. Esto funciona correctamente:

Código: ASM
  1. list p=16f628a
  2.     include "p16f628a.inc"
  3.  
  4.  __CONFIG _BODEN_OFF  & _CP_OFF & DATA_CP_OFF &  _PWRTE_ON & _WDT_OFF & _LVP_OFF & _MCLRE_OFF  & _XT_OSC  
  5.  
  6.  
  7. cont_1                         equ 0x20
  8. cont_2                         equ 0x21    
  9.  
  10.  
  11.  
  12.  
  13.         ORG     0x00
  14.         GOTO    start
  15.         ORG     0x04
  16.         RETURN
  17.        
  18. ;configurando el puerto A
  19.        
  20. start:
  21.                          
  22.         BANKSEL TRISA           ;Banco 1
  23.         CLRF    TRISA           ;Solo usaré RA0
  24.         BANKSEL CMCON           ;Banco 0
  25.         MOVLW   0x07
  26.         MOVWF   CMCON           ; Todos los PORTA como digitales
  27.  
  28.         MOVLW   0x01            ;W a uno para hacer xor con PORTA
  29.  
  30. ciclo:
  31.         XORWF   PORTA, F                   ;xor entre W y PORTA y resultado en PORTA
  32.         CALL    retardo    
  33.         GOTO    ciclo                
  34.      
  35.  
  36. retardo:                                
  37.         DECFSZ  cont_1, 1
  38.         GOTO    retardo
  39.         DECFSZ  cont_2, 1
  40.         GOTO    retardo
  41.         RETURN                                                                              
  42.  
  43.     END

Respecto a las proteccion, en el protoboard no hay problema pero cuando lo implementes en la realidad asgurate de protejer bien tu PIC.


Una cosa mas que probaria:

Código: ASM
  1. ciclo:
  2.         XORWF   PORTA, F                   ;xor entre W y PORTA y resultado en PORTA
  3.         CALL    retardo    
  4.         CALL    retardo    
  5.         CALL    retardo    
  6.         CALL    retardo    
  7.         CALL    retardo    
  8.         GOTO    ciclo

EDIT:

Recien leo que probaste ponerle otro instruccion y no pasa de alli. Sinceramente jamas escuche que se queme solo 1 instruccion y menos por estatica lo cual desapareceria medio puerto antes de quemarse una instruccion. Realmente parece absurdo el problema.

Te sugiero que puedas ponerle el:

Código: ASM
  1. BANKSEL CMCON           ;Banco 0
  2.         MOVLW   0x07
  3.         MOVWF   CMCON           ; Todos los PORTA como digitales

Esto por que cuando lea el PORTA este siempre va a estar en 0 por su estado "analogico", recorda que cuando lee, lee el pin no lo escrito, asi que te sugiero que lo pruebes, si es eso luego me explico un poco mas
« Última modificación: 14 de Diciembre de 2015, 11:55:03 por KILLERJC »

Desconectado gato_hexadecimal

  • PIC10
  • *
  • Mensajes: 7
Re:Error ejecutando Instruccion en pic (lo googlie pero nada)
« Respuesta #5 en: 15 de Diciembre de 2015, 00:10:40 »
Gracias a ambos por respoder :) 

Respecto al circuito que estaba haciendo,   éste no trabaja directamente con un triac,   mas bien trabaja con un relay con bobina de 5v  manejado por un transistor.   EL origen del desastre fue que conecté mal los cables de 220v del pequeño transformador y y al quemarse una de las pistas de la pcb se depositó en buena parte de la PCB una fina película de cobre que debe haber conducido algo de alto voltaje a alguno de los pines del pic16f630.

Luego de arruinado dicho pic   me puse a trabajar en el 16f628a y funcionaba bien.    PERO  ahora que lo pensé,  recuerdo que al ponerle un cristal de 25Mhz equivocadamente empezó a dar problemas.     Hice la misma prueba de poner un cristal de de 25Mhz (se que el tope es 20mhz)  a un pic16F877A  que estaba bueno y ahora también falla....aun con cristales de 4Mhz.   

No se si podrán corregirme pero creo que poner un cristal de un valor muy superior arruina los pics...

Creo que he estado investigando muy cansado y me han salido una tras otra las cosas mala...

Aquí les dejo en mi canal de youtube un video de como funcionaba el temporizador antes de fallar

La luz roja indica que el motor está apagado
La verde indica que esta encendido
la verde parpadeando indica que se encenderá por mas tiempo ya que alguien va a usar la ducha y requiere que esté encendido por 20 minutos
La pinza que inserté simulaba el pulsador ya que aun no soldaba el terminal.



Definitivamente el pic16f628A   y el pic16F877A   están de malas... y yo un poco agotado...    Mil gracias y estaré avisando como me va con las instrucciones puestas por Uds.

Saludos

« Última modificación: 15 de Diciembre de 2015, 00:14:25 por gato_hexadecimal »

Desconectado gato_hexadecimal

  • PIC10
  • *
  • Mensajes: 7
Re:Error ejecutando Instruccion en pic (lo googlie pero nada)
« Respuesta #6 en: 15 de Diciembre de 2015, 01:27:28 »
.....

traté de hacer el xor de forma indirecta   y ahora funciona.....

es raro,  es como que el xor no quiere nada con los puertos directamente.  Primero  tuve que hacer xor entre W  y una variable "temp"
y luego esa variable temp pasarla al puerto A...
con el 16f630 podía hacerlo directamente..... PORTA =W  XOR  PORTA

temp   equ 0x22

ciclo:
  movlw 0x01
  xorwf temp, 1
  movf temp, 0
  movwf PORTA
  call retardo
  goto ciclo   


seguiré comentando

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Error ejecutando Instruccion en pic (lo googlie pero nada)
« Respuesta #7 en: 15 de Diciembre de 2015, 05:10:46 »
Bueno parece que la XORWF funciona, asi que no es eso xD. Y solo queda el tema de analogico digital, y te comento el por que yo asumo que es eso, aunque no se si dara para que cuelgue el PIC.

Primero que nada, nunca los pases de frecuencia, por centavos tenes mejores micros. que esos que ya estan realmente viejitos xD.

El PIC trabaja de la forma read-modify-write, Cuando vos le das a una instruccion que escriba un puerto por ejemplo, primero lo lee, luego lo modifica ( ejecuta la XOR ) y finalmente lo guarda.
Al estar como analogico, si el PIC lee el valor del PIN tengo dudas de que lea un 0 siempre. Y es por eso que pedi que los pasaras a digital. Lo raro es que es el mismo diagrama que los demas PICs pero en los demas funciona. Y bueno, probar no cuesta nada xD.

Esperamos tus repsuestas :P

Desconectado gato_hexadecimal

  • PIC10
  • *
  • Mensajes: 7
Re:Error ejecutando Instruccion en pic (lo googlie pero nada)
« Respuesta #8 en: 15 de Diciembre de 2015, 09:31:33 »
Sir KillerJC:


Si Ud estuviera cazando patos,   les hubiera dado justo en el centro porque esa era la falla XD

pasé el puerto A   a digital  con:
        MOVLW   0x07
        MOVWF   CMCON

y ahora funciona perfecto !

Lo extraño es que empezaron a dar dicho problema luego de ponerles un cristal muy grande (casualidad y luego intencional para ver que pasaba)
es decir que antes de pasarme con el cristal,  el PORTA  estaba digital por defecto,  ahora ya nunca mas.....bueno...debo ser muy novato aun en el tema.


Estaba viendo el datasheet y claro.....  los dos comparadores que en realidad son como amplificadores operacionales quedaron aterrizados a tierra gracias al "111"     (0x07)

Ufff  creo que me falta muuuuuuuucho aun por aprender de estas cucarachas,  de hecho el solo mirar el datasheet me dio depresión (tanta funcionalidad que tienen XD)

Respecto a usar pics viejitos,   en realidad son los que tengo ahora a mano con los cuales estoy ingresando a este mundo de lleno. 
Ademas para hacer un temporizador simple,  seria como matar moscas con bomba atómica usar uno mas poderoso.

Cuando tome mas confianza compraré por ebay algunos mas poderosos para seguir mejorando.

Saludos Sir KillerJC  y mil gracias.