Autor Tema: Que estoy haciendo mal  (Leído 6120 veces)

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

Desconectado MS

  • PIC10
  • *
  • Mensajes: 9
Que estoy haciendo mal
« en: 15 de Agosto de 2008, 19:38:40 »
Realmente no se que es lo que estoy haciendo mal, estoy tratando de iniciarme en la programación de los PIC y para probar construí un grabador pipo2, estoy usando el programa Mplab V8.00 y para grabar el pic el WinPic800 v 3.63C y todo esto en una PC con Windows XP y el pic que estoy usando es un 16F870. Genero el archivo hex sin errores y luego lo grabo al pic sin aparentes inconvenientes incluso indicando que el oscilador es del tipo XT, ya que en el circuito de prueba utilizo un cristal de 4MHZ.. Cuando le indico al WinPic que lea el pic lo hace sin problemas y también lo reconoce perfectamente. Pero cuando armo el circuito, el led conectado al RB0 no enciende. Ya probé con dos pic por si uno estaba dañado y el resultado es el mismo con los dos. Mi consulta es ¿Como puedo para verificar que hago mal? Les paso el código del programa que utilizo el cual lo tome de Internet para no cometer errores en eso tampoco. Desde ya muchas gracias.

;---------------Encabezado-------------

   LIST   p=16f870        
   radix   hex        

;------------mapa de memoria---------

estado   equ   0x03        ; Haciendo asignaciones
TRISB   equ   0x06        
ptob   equ   0x06        

reg1   equ   0x0C        ; Estos 3 registros los utilizaré
reg2   equ   0x0D        ; para hacer el retardo
reg3   equ   0x0E           

;-------Configuración de puertos-------

reset   org   0x00         ; origen del programa, aquí comenzará
              ; siempre que ocurra un reset
   goto    inicio        ; salta a "inicio"
inicio   bsf   estado,5          ; pone rp0 a 1 y pasa al banco1
   movlw   b'00000000'    ; carga W con 00000000
   movwf   TRISB        ; y pasa el valor a trisb
   bcf   estado,5          ; pone rp0 a 0 y regresa al banco0

;----Aquí enciende y apaga el LED-----

ahora   bsf   ptob,0        ; pone un 1 en RB0 (enciende el LED)
   call   retardo        ; llama al retardo

   bcf   ptob,0        ; pone a 0 RB0 (apaga el LED)
   call   retardo        ; llama al retardo
   goto    ahora        ; repite todo de nuevo

;-----------Rutina de Retardo-----------

retardo   movlw   10        ; Aquí se cargan los registros
   movwf   reg1        ; reg1, reg2 y reg3
              ; con los valores 10, 20 y 30
tres   movlw   20        ; respectivamente
   movwf   reg2

dos   movlw   30
   movwf   reg3

uno   decfsz   reg3,1        ; Aquí se comienza a decrementar
   goto   uno        ; Cuando reg3 llegue a 0
   decfsz   reg2,1        ; le quitare 1 a reg2
   goto   dos        ; cuando reg2 llegue a 0   
   decfsz   reg1,1        ; le quitare 1 a reg1
   goto   tres        ; cuando reg1 llegue a 0
   retlw   00        ; regresare al lugar
              ; de donde se hizo la llamada

;------------------------------------------
   end           ; se acabó
;------------------------------------------


Desconectado firepic

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1130
    • JC Servicios
Re: Que estoy haciendo mal
« Respuesta #1 en: 15 de Agosto de 2008, 19:51:53 »
Qué tal MS!
Bueno veo por encimita dos cosas:
1-
TRISB   equ   0x06        
ptob           equ   0x06       
Por qué tienes asignada a TRISB la misma dirección de memoria que a PORTB? La TRISB es 0x86.

2-
reg1   equ   0x0C        ; Estos 3 registros los utilizaré
reg2   equ   0x0D        ; para hacer el retardo
reg3   equ   0x0E           

Esas tres posiciones de memoria no puedes usarlas como variables, pues corresponden a los SFR, o registros para funciones especiales del micro. Las posiciones de memoria para "propósito general" comienzan en 0x20 en el banco cero.

Esas cositas fueron las que detalle, supongo que el código de retardo está bien... de todos modos sería bueno que simularas en el MPLAB antes de grabar en el micro, a ver si el código está correcto.

Ok saludos, nos leemos!  :mrgreen:
"Por la presunción solo se ocasiona una lucha, pero con los que consultan juntos hay sabiduría" (Proverbios 13:10).
Visita Mi Sitio Web

Desconectado MS

  • PIC10
  • *
  • Mensajes: 9
Re: Que estoy haciendo mal
« Respuesta #2 en: 18 de Agosto de 2008, 14:21:34 »
Firepic
Gracias por tu respuesta y disculpa mi demora por responder pero es que estoy a mil con mis cosas y no he tenido mucho tiempo para darle a esto. Ya hice los cambios que me comentaste e incluso ya simule el programa en el MPLAB y también me baje el PIC Simulator IDE y probé mi programita y en ambos funciona, luego grabe el pic con el winpic800 y lo monte en mi circuito de prueba pero nada, sigue sin funcionar. Al leer el pic con el winpic800, este me muestra la información grabada, no se que probar, que me sugieres qua haga, puedo medir algunos valores con el tester ademas del valor de la fuente. Desde ya muchas gracias. Te paso de nuevo el programa por las dudas.
;---------------Encabezado-------------

   LIST   p=16f870        
   radix   hex        

;------------mapa de memoria---------

estado   equ   0x03        ; Haciendo asignaciones
TRISB   equ   0x86        
ptob   equ   0x06        

reg1   equ   0x20        ; Estos 3 registros los utilizaré
reg2   equ   0x21        ; para hacer el retardo
reg3   equ   0x22           

;-------Configuración de puertos-------

reset   org   0x00         ; origen del programa
   goto    inicio        ; salta a "inicio"
inicio   bsf   estado,5      ; pasa al banco1
   movlw   b'00000000'  ; carga W con 00000000
   movwf   TRISB        ; y pasa el valor a trisb
   bcf   estado,5          ; regresa al banco0

;----Aquí enciende y apaga el LED-----

ahora   bsf   ptob,0        ; pone un 1 en RB0 (enciende el LED)
   call   retardo        ; llama al retardo
   bcf   ptob,0        ; pone a 0 RB0 (apaga el LED)
   call   retardo  ; llama al retardo
   goto    ahora        ; repite todo de nuevo

;-----------Rutina de Retardo-----------

retardo   movlw   10        ; Aquí se cargan los registros reg1
   movwf   reg1        
tres   movlw   20        ; reg2
   movwf   reg2
dos   movlw   30           ; y reg3 con los valores 10, 20 y 30 respectivamente
   movwf   reg3

uno   decfsz   reg3,1        ; Aquí se comienza a decrementar
   goto   uno        ; Cuando reg3 llegue a 0
   decfsz   reg2,1        ; le quitare 1 a reg2
   goto   dos        ; cuando reg2 llegue a 0   
   decfsz   reg1,1        ; le quitare 1 a reg1
   goto   tres        ; cuando reg1 llegue a 0
   return           ; regresare al lugar de donde se hizo la llamada

;------------------------------------------
   end           ; se acabó
;------------------------------------------


Desconectado MS

  • PIC10
  • *
  • Mensajes: 9
Re: Que estoy haciendo mal
« Respuesta #3 en: 18 de Agosto de 2008, 14:49:59 »
Firepic
Gracias por tu respuesta y disculpa mi demora por responder pero es que estoy a mil con mis cosas y no he tenido mucho tiempo para darle a esto. Ya hice los cambios que me comentaste e incluso ya simule el programa en el MPLAB y también me baje el PIC Simulator IDE y probé mi programita y en ambos funciona, luego grabe el pic con el winpic800 y lo monte en mi circuito de prueba pero nada, sigue sin funcionar. Al leer el pic con el winpic800, este me muestra la información grabada, no se que probar, puedo medir alguna tensión con un tester ademas de la  tensión de la fuente?, que me sugieres qua haga. Desde ya muchas gracias. Te paso de nuevo el programa por las dudas.
;---------------Encabezado-------------

   LIST   p=16f870        
   radix   hex        

;------------mapa de memoria---------

estado   equ   0x03        ; Haciendo asignaciones
TRISB   equ   0x86        
ptob   equ   0x06        

reg1   equ   0x20        ; Estos 3 registros los utilizaré
reg2   equ   0x21        ; para hacer el retardo
reg3   equ   0x22           

;-------Configuración de puertos-------

reset   org   0x00         ; origen del programa
   goto    inicio        ; salta a "inicio"
inicio   bsf   estado,5      ; pasa al banco1
   movlw   b'00000000'  ; carga W con 00000000
   movwf   TRISB        ; y pasa el valor a trisb
   bcf   estado,5          ; regresa al banco0

;----Aquí enciende y apaga el LED-----

ahora   bsf   ptob,0        ; pone un 1 en RB0 (enciende el LED)
   call   retardo        ; llama al retardo
   bcf   ptob,0        ; pone a 0 RB0 (apaga el LED)
   call   retardo  ; llama al retardo
   goto    ahora        ; repite todo de nuevo

;-----------Rutina de Retardo-----------

retardo   movlw   10        ; Aquí se cargan los registros reg1
   movwf   reg1        
tres   movlw   20        ; reg2
   movwf   reg2
dos   movlw   30           ; y reg3 con los valores 10, 20 y 30 respectivamente
   movwf   reg3

uno   decfsz   reg3,1        ; Aquí se comienza a decrementar
   goto   uno        ; Cuando reg3 llegue a 0
   decfsz   reg2,1        ; le quitare 1 a reg2
   goto   dos        ; cuando reg2 llegue a 0   
   decfsz   reg1,1        ; le quitare 1 a reg1
   goto   tres        ; cuando reg1 llegue a 0
   return           ; regresare al lugar de donde se hizo la llamada

;------------------------------------------
   end           ; se acabó
;------------------------------------------


Desconectado Leon Pic

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3610
    • Impresiones en 3D
Re: Que estoy haciendo mal
« Respuesta #4 en: 18 de Agosto de 2008, 15:46:40 »
¿Puedes poner l palabra de configurción que as configurado? Me parece que el error está aquí.
Jesús dijo, yo soy el CAMINO, la VERDAD y la VIDA, nadie llega al PADRE si no es por mi.

Desconectado MS

  • PIC10
  • *
  • Mensajes: 9
Re: Que estoy haciendo mal
« Respuesta #5 en: 19 de Agosto de 2008, 09:21:12 »
Leon Pic
Por favor podrías ser un poco mas claro sobre la palabra a que haces referncia, ya que no tengo idea a que te referis. desde ya muchas gracias.

Desconectado Fer_TACA

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4154
Re: Que estoy haciendo mal
« Respuesta #6 en: 19 de Agosto de 2008, 13:04:29 »
La palabra de configuración a la que se refiere Leon_Pic es:
Como configuras a la hora de programar el pic los siguientes elementos: oscilador, watchdog, power-on,..........

ES posible que alguno de ellos no esté bien. Por ejemplo si tienes habilitado el watchdog casi con toda seguridad se desbordara casi de inmedato y no podrás realizar nada.

Fermin
Todos los días se aprende algo nuevo.

Desconectado MS

  • PIC10
  • *
  • Mensajes: 9
Re: Que estoy haciendo mal
« Respuesta #7 en: 19 de Agosto de 2008, 16:55:42 »
Fer TACA
Ok, muchas gracias, bien ya configuré el WinPic con los siguientes valores Osc. XT (ya que uso un cristal de 4 Mhz), wdte, pwrte,  cpd, cp y debugger desactivados y lvp, boden y wrt activados. Y luego grabe el pic pero no funcionó en mi circuito de prueba que solo tiene los pines 1 y 20 a 3,8 V ( tres pilas de 1,5 V); pines 8 y 19 a 0V;  pines 8 y 10 el cristal con sus respectivos capacitores a masa y en el pin 21 con un led y su respectiva resistencia en serie de 220 ohms a masa y por último un condensador entre el positivo y el negativo. Luego usando el ICProg y mediante la prueba de hard que tiene probé mi grabador y con un tester medí los siguientes valores entre VSS y MCLR (pin 1) estando desactivado desde ICProg 0V activado 11,9 V, DATA (ping 28) desactivado 0 V, activado 4,9 V; Clock (ping 27) desactivado 0,5 V y activado 5,05 V. Posteriormente usando el WinPic800 leí el pic y con la opción de pasar a assembler el código hexa leído obtuve lo siguiente:

  0x0000 : 0x2801   goto    0x01
  0x0001 : 0x1683   bsf     0x03 , 5
  0x0002 : 0x3000   movlw   0x00
  0x0003 : 0x0086   movwf   0x06
  0x0004 : 0x1283   bcf     0x03 , 5
  0x0005 : 0x1406   bsf     0x06 , 0
  0x0006 : 0x200A   call    0x0A
  0x0007 : 0x1006   bcf     0x06 , 0
  0x0008 : 0x200A   call    0x0A
  0x0009 : 0x2805   goto    0x05
  0x000A : 0x3010   movlw   0x10
  0x000B : 0x00A0   movwf   0x20
  0x000C : 0x3020   movlw   0x20
  0x000D : 0x00A1   movwf   0x21
  0x000E : 0x3030   movlw   0x30
  0x000F : 0x00A2   movwf   0x22
  0x0010 : 0x0BA2   decfsz  0x22 , F
  0x0011 : 0x2810   goto    0x10
  0x0012 : 0x0BA1   decfsz  0x21 , F
  0x0013 : 0x280E   goto    0x0E
  0x0014 : 0x0BA0   decfsz  0x20 , F
  0x0015 : 0x280C   goto    0x0C
  0x0016 : 0x0008   return
  0x0017 : 0x3FFF   Data    0x3FFF      ; ?
.
.
  0x07FF : 0x3FFF   Data    0x3FFF      ; ?
     ORG 0x2100       ; DATA
   Data   0xFF , 0xFF , 0xFF , 0xFF , 0xFF , 0xFF , 0xFF , 0xFF  ;               
   Data   0xFF , 0xFF , 0xFF , 0xFF , 0xFF , 0xFF , 0xFF , 0xFF  ;               
   Data   0xFF , 0xFF , 0xFF , 0xFF , 0xFF , 0xFF , 0xFF , 0xFF  ;               
   Data   0xFF , 0xFF , 0xFF , 0xFF , 0xFF , 0xFF , 0xFF , 0xFF  ;               
   Data   0xFF , 0xFF , 0xFF , 0xFF , 0xFF , 0xFF , 0xFF , 0xFF  ;               
   Data   0xFF , 0xFF , 0xFF , 0xFF , 0xFF , 0xFF , 0xFF , 0xFF  ;               
   Data   0xFF , 0xFF , 0xFF , 0xFF , 0xFF , 0xFF , 0xFF , 0xFF  ;               
   Data   0xFF , 0xFF , 0xFF , 0xFF , 0xFF , 0xFF , 0xFF , 0xFF  ;               
     ORG 0x2000       ; ID
       Data   0x3FFF
       Data   0x3FFF
       Data   0x3FFF
       Data   0x3FFF
     ORG 0x2007       ; CONFIG
       Data   0x3FF9
 end ;

Perdón por poner tantos datos pero este es mi primer pic que intento grabar y realmente no se para donde agarrar. Alguien me podría dar una mano para verificar que hago mal.

Desconectado Leon Pic

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3610
    • Impresiones en 3D
Re: Que estoy haciendo mal
« Respuesta #8 en: 19 de Agosto de 2008, 18:19:56 »
El error es bien simple. Al activar LVP, el PIC al detectar 5 volt, se pone en modo de programación, ya que LVP es programación con baja tensión.

Utiliza al principio, todas las opciones desactivadas y el oscilador con el que configuraste está bien. Una vez que domines bien al Pic, podrás activar lo que necesites.
Jesús dijo, yo soy el CAMINO, la VERDAD y la VIDA, nadie llega al PADRE si no es por mi.

Desconectado sansanoloko

  • PIC10
  • *
  • Mensajes: 48
Re: Que estoy haciendo mal
« Respuesta #9 en: 20 de Agosto de 2008, 02:43:40 »
Holas MS

En tu descripción del hardware conectado me llamó la atención lo siguiente: "...pines 8 y 10 el cristal con sus respectivos capacitores a masa...".  De ser esto así, estaría mal conectado, ya que el cristal va en los pines 9 y 10 (ojo con el datasheet)

Espero te sirva de algo.....  :)

Saludos a quienes nos leen

Desconectado MS

  • PIC10
  • *
  • Mensajes: 9
Re: Que estoy haciendo mal
« Respuesta #10 en: 20 de Agosto de 2008, 13:15:06 »
OK, Leo Pic, Fer TACA; firepic gracias por sus aportes FUNCIONO. sansanoloko lo del pin 8 fue un error de tipeo, tenes razon es 9 muchas gracias. Otra cosa ya que estamos, donde puedo ver bien el tema de las funciones de las opciones de configuración. Bueno de nuevo muchas gracias a todos. Nol leemos.

Desconectado Fer_TACA

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4154
Re: Que estoy haciendo mal
« Respuesta #11 en: 20 de Agosto de 2008, 14:05:47 »
¿que tal en el datasheet del micro utilizado? :) :) :) :mrgreen: :mrgreen: :mrgreen:

Fer.
Todos los días se aprende algo nuevo.

Desconectado MS

  • PIC10
  • *
  • Mensajes: 9
Re: Que estoy haciendo mal
« Respuesta #12 en: 20 de Agosto de 2008, 19:29:27 »
OK gracias, pense que era general y no propio de cada micro, disculpen pero recien estoy empesando en esto.

Desconectado firepic

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1130
    • JC Servicios
Re: Que estoy haciendo mal
« Respuesta #13 en: 20 de Agosto de 2008, 20:27:43 »
Felicitaciones MS!
No te preocupes, al principio tenemos muchas preguntas y dudas, no dejes de hacerlas pues así es como aprenderás.
Te deseo éxito en tu trabajo con los microcontroladores! Te divertirás en grande!  :-/
Saludos, nos leemos!  :mrgreen:
"Por la presunción solo se ocasiona una lucha, pero con los que consultan juntos hay sabiduría" (Proverbios 13:10).
Visita Mi Sitio Web


 

anything