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

Temas similares

28/03/2014 #21
Moderador

Avatar de D@rkbytes

El procedimiento para recuperar el valor de fábrica de OSCCAL es igual al que se trató por aquí: Consulta de osccal del 12f629

Solo que en los 12F508 se encuentra en la dirección 0x1FF y en el 12F509 en la dirección 0x3FF
También existe una locación reservada para un backup de los bits de OSCCAL: 12F508 = 0x204 y 12F509 = 0x404
El programador no borra esas direcciones, pero se pueden borrar por accidente.
Cuando eso sucede, se puede leer esa dirección y obtener el valor de fábrica el cual deberá ser escrito nuevamente en la última dirección de memoria RAM del PIC.

En los PIC12F6XX lo que se encuentra en la última dirección es un RETLW 0xXX
Dónde 0xXX es el valor de calibración para el registro OSCCAL.
Al leer esa dirección se mira algo como esto 3430 (34 = RETLW y 30 el valor para OSCCAL)

En los PIC12F508/509 la lectura encontrada es un MOVLW 0xXX
Aquí se verá algo así por ejemplo: 0C30 (0C = MOVLW y 30 el valor para OSCCAL)

Dirección de Backup de OSCCAL en PIC12F508


Lectura de un PIC12F508 en la dirección 0x1FF


Esta herramienta que yo escribí puede recuperar un valor muy cercano al valor de fábrica para OSCCAL
OSCCAL Recovery Tool

Sin embargo no escribí el programa para un PIC12F508, el cual adjunto aquí en este post.
Este programa funciona a través del puerto serial, pero también se puede hacer uso de un conversor de USB a puerto serial RS-232 como lo es el chip FT232RL

Conexión con FT232RL


Usando el programa para recuperar el valor de fábrica para el oscilador.


Así es como obtengo el valor de fábrica para OSCCAL y es el que se vuelve a escribir en la dirección 0x1FF

Nota: aquí se mira un RETLW ya que el programa fue escrito para los PIC12F6XX, pero lo que importa es el valor encontrado, en este caso la lectura correcta de en medio (48 = 0x30)

Suerte.
28/03/2014 #22

Avatar de papirrin

aaa ok ahora entiendo

entonces seria asi:
Código:
LIST P=12F508, r=hex
include <P12F508.INC>


OUT7 EQU 0 ;GP0 QUE ES LA PATA 7

ORG 0

CALL 1FFH  
MOVWF OSCCAL 

CLRWDT
MOVLW b'11000000'
OPTION
MOVLW b'00001000'
TRIS GPIO
BCF GPIO,OUT7 ;BORRO LA SALIDA


INICIO

BSF GPIO,OUT7 ; ENCIENDE EL LED
BCF GPIO,OUT7 ; AGAPA EL LED

GOTO INICIO
END
andaba caliente,caliente
28/03/2014 #23

Avatar de ByAxel

wow el tema creció bastante...
Respecto al mensaje ( SE2-USB no tiene Sistema Operativo ), indica que al PIC del grabador se le ha estropeado el firmware... ( motivos = ni idea ) pero se soluciona desde el PicKit con la opción ( Tools > Download Operating System ), es neceario un archivo *.hex que seguramente está en la carpeta de instalación, cargan el archivo y se va a restaurar el grabador.
29/03/2014 #24
Moderador

Avatar de D@rkbytes

papirrin dijo: Ver Mensaje
aaa ok ahora entiendo
andaba caliente, caliente
Yo diría que tibio, tibio.

Así sería el código para recuperar el valor de OSCCAL y hacer parpadear un LED con el PIC12F508
Código:
    list    p=12f508
    include    p12f508.inc
    __config    _IntRC_OSC & _WDT_OFF & _MCLRE_OFF

    cblock    0x07
    cnt1,cnt2,cnt3
    endc

    org    0x1FF                ; Vector de reset
    org    0x00                ; Inicio del código

inicio
    movwf    OSCCAL            ; Recuperar el valor de OSCCAL
    movlw    b'11111110'        ; GP0 como salida
    tris    GPIO            


programa
    bsf        GPIO,0            ; Enciende LED
    call    retardo_500ms    ; Retardo de 500ms
    bcf        GPIO,0            ; Apaga LED
    call    retardo_500ms    ; Retardo de 500ms
    goto    programa        ; Bucle infinito a programa

retardo_500ms
;499994 ciclos
    movlw    0x03
    movwf    cnt1
    movlw    0x18
    movwf    cnt2
    movlw    0x02
    movwf    cnt3
retardo_500ms_0
    decfsz    cnt1,f
    goto    $+2
    decfsz    cnt2,f
    goto    $+2
    decfsz    cnt3,f
    goto    retardo_500ms_0
;2 ciclos
    goto    $+1
;4 cicles (incluyendo call)
    retlw    0x00
    end
Si te fijas, la forma de leer el valor de OSCCAL es diferente para este PIC.

Saludos.
29/03/2014 #25

Avatar de papirrin

porque esto:

Código:
 org    0x1FF                ; Vector de reset
    goto    inicio
    org    0x00
    goto    config_port

inicio
    movwf    OSCCAL            ; Recuperar el valor de OSCCAL

config_port
    movlw    b'11111110'        ; GP0 como salida
    tris    GPIO
no puede ser asi:
Código:
     org    0x1FF                ; Vector de reset
      movwf    OSCCAL            ; Recuperar el valor de OSCCAL
      org    0x00
      movlw    b'11111110'        ; GP0 como salida
      tris    GPIO
29/03/2014 #26
Moderador

Avatar de D@rkbytes

papirrin dijo: Ver Mensaje
¿No puede ser asi?:
Código:
     org    0x1FF                ; Vector de reset
      movwf    OSCCAL            ; Recuperar el valor de OSCCAL
      org    0x00
      movlw    b'11111110'        ; GP0 como salida
      tris    GPIO
Actualicé el código mientras escribías porque equivoqué los vectores de inicialización.
No he probado de la forma que mencionas, pero haré una prueba.

En este documento se explican con más detalle datos sobre OSCCAL: Memory Programming Specification
También se puede encontrar parte del código que puse en el archivo 12F508TEMP.ASM
Este archivo se encuentra en la carpeta Code dentro de las carpetas de instalación de MPLAB
Por ejemplo: C:\Archivos de programa\Microchip\MPASM Suite\Template\Code

---------- Actualizado después de 8 minutos ----------

Ya realicé la prueba y no funciona de esa forma.
Se escribe por código la dirección 0x1FF con 0x0025
Entonces cuando el programador (WinPic800 el que uso) lee esa dirección, pregunta si se desea sobre escribir el valor 0xXXXX de OSCCAL por el valor 0x0025
Obviamente eso no es lo que queremos, por lo tanto queda descartado y se realiza como mencioné anteriormente.

Saludos.
31/03/2014 #27


Ok amigos durante el fin de semana resolvi el problema del Sistema operativo, tal cual como dice ByAxel, y el problema del error con el valor OSCCAL era que la fuente de alimentacion no era suficiente debido a que el Jumper para pasar la informacion a los pines del ZIP estaba mal colocado, le di la vuelta y empezo a funcionar, lo malo es que ahora que ya pude pasar la informacion al PIC cuando lo monto en el protoboard no hace nada, temo que sea por que se halla perdido el valor de OSCCAL, probare con esos que me dicen!

Por otro lado en PROTEUS me esta dando este error:

eso me paso luego de tratar de corregir el porque en el protoboard no hacia nada!

anteriormente estaba funcionando normal, pero ahora no me deja probar el codigo que tenia para el encendido del LED, ya reinicie, cree otra vez el codigo, cree otra vez un nuevo diseño en proteus y nada, no puedo ver la simulacion!
Imágenes Adjuntas
Tipo de Archivo: jpg Sin título.jpg (97,5 KB (Kilobytes), 20 visitas)
31/03/2014 #28

Avatar de papirrin

no se si sea el caso, eso pasa cuando simulas un pic en proteus pero generas el hex de otro pic. verifica que estes compilando el 12f508
04/04/2014 #29


Los problemas para este PIC no han parado para mi.

Al momento de grabar el PIC con el programa PICkit2 hago el procedimiento debido, pero cuando lo monto en el tablero de prueba no tiene nada.

Al parecer tengo un problema al momento de crear el archivo .hex, en efecto.
Verifiqué que cuando estuviera compilando lo estuviera haciendo con la librería correcta correspondiente al PIC12F508 y todo está bien, porque realmente cuando paso el código a Proteus tengo que variar las características del PIC porque en Proteus no tengo la librería de ese PIC, lo cambio por el 12C508A que me dijeron que es el mismo, pero lo cómico de todo es que ahí funciona perfecto, hace todo lo que realmente quiero hacer.

Pero vuelvo a MPLAB cambio la librería y exporto el archivo hex y creo que ahí todo se disuelve, no he podido grabar bien y PIC que funcione!
04/04/2014 #30

Avatar de papirrin


mira compila y graba el codigo de darkbytes.

osea este:
Código:
    list    p=12f508
    include    p12f508.inc
    __config    _IntRC_OSC & _WDT_OFF & _MCLRE_OFF

    cblock    0x07
    cnt1,cnt2,cnt3
    endc

    org    0x1FF                ; Vector de reset
    org    0x00                ; Inicio del código

inicio
    movwf    OSCCAL            ; Recuperar el valor de OSCCAL
    movlw    b'11111110'        ; GP0 como salida
    tris    GPIO            


programa
    bsf        GPIO,0            ; Enciende LED
    call    retardo_500ms    ; Retardo de 500ms
    bcf        GPIO,0            ; Apaga LED
    call    retardo_500ms    ; Retardo de 500ms
    goto    programa        ; Bucle infinito a programa

retardo_500ms
;499994 ciclos
    movlw    0x03
    movwf    cnt1
    movlw    0x18
    movwf    cnt2
    movlw    0x02
    movwf    cnt3
retardo_500ms_0
    decfsz    cnt1,f
    goto    $+2
    decfsz    cnt2,f
    goto    $+2
    decfsz    cnt3,f
    goto    retardo_500ms_0
;2 ciclos
    goto    $+1
;4 cicles (incluyendo call)
    retlw    0x00
    end
y verifica que en la direccion que te hemos dicho y redicho este el valor del osccal, si sigue sin funcionar es que es otra cosa.
04/04/2014 #31


Ahora si funciona. Este es el código que yo hice:

Código:
LIST P=12F508, r=hex
include <P12F508.INC>

__config    _IntRC_OSC & _WDT_OFF & _MCLRE_OFF

PATA6    EQU 1            ;GP1 QUE ES LA PATA 6
PATA7    EQU 0           ;GP0 QUE ES LA PATA 7
TIEMPO1  EQU 0X0C
TIEMPO2  EQU 0X0D

    ORG 0X1FF            ;VECTOR DE RESET
    ORG 0X00            ;INICIO DEL CODIGO
    MOVWF OSCCAL
    MOVLW b'11100000'    ;los 0 representan las patas que son de salida y los 1 las patas que se utilizaran de entrada
    TRIS GPIO

    BCF GPIO,PATA7         ;BORRO LA SALIDA
    BCF GPIO,PATA6

INICIO

    BSF GPIO,PATA7      ;ENCIENDE EL LED
    CALL RETARDO    
        
    BCF GPIO,PATA7      ;AGAPA EL LED
    CALL RETARDO            
    
    BSF GPIO,PATA6
    CALL RETARDO

    BCF GPIO,PATA6
    CALL RETARDO

GOTO INICIO
;----------------------------
RETARDO
    MOVLW D'255'
    MOVFW TIEMPO1
    MOVFW TIEMPO2
DECREMENTO
    DECFSZ TIEMPO1
    GOTO DECREMENTO
    DECFSZ TIEMPO2
    GOTO DECREMENTO

    RETURN
;-----------------------------    
END
El error estaba en la forma de llamar la variable OSCCAL y la declaración de __config _IntRC_OSC & _WDT_OFF & _MCLRE_OFF, esta parte no la tenia, aunque no tiene mucho que ver, lo importante es que varié eso y funcionó!
04/04/2014 #32

Avatar de papirrin

me parece que era el MCLR,

en el circuito que armaste tenias la resistencia pullup en el mclr?, por defecto se necesita poner a menos que especificques el MCLR_off.


edito: bueno tambien el oscilador si no tenias fisicamente el cristal tampoco deberia funcionar., entonces deberias de haber puesto el oscilador interno.
07/04/2014 #33


no realmente esa pata no la estoy usando, con esa funcion le estoy mandando a decir que trabaje con el oscilador interno!

por otra parte debo corregir que en el retardo el comando se tipea asi:

movlw .255
movwf tiempo1
movwf tiempo2

lo tenia movfw..
03/11/2014 #34


ese codigo en .asm funcionaria tambien para el 12f509? solo habria que cambiarle la numeracion en list=12f509..'''???
03/11/2014 #35
Moderador

Avatar de D@rkbytes

robertingenieria27 dijo: Ver Mensaje
¿Ese código en .asm funcionaría también para el 12f509?
¿Sólo habría que cambiarle la numeracion en list=12f509..'''?
No sé a cual código te refieras, pero si son compatibles con el PIC12F509.

También tienes que cambiar el include 12f508.inc por include 12f509.inc
03/11/2014 #36


me refiero es al codigo en .asm para recuperar el valor de registro del osccal del 12F508, pero que tambien sirva para el 12f509
03/11/2014 #37
Moderador

Avatar de D@rkbytes

Pues si, si te refieres al código del post #24, si es compatible con el PIC12F509
Mira también por aquí: Leyendo el valor Backup de OSCCAL
04/11/2014 #38


recuperar valor de osccal 12d675
hice tu circuito DARKBYTES y funciono pero al leer el pic me salen 6 valores que adjunto en la imagen, cual deberia tomar? y otra cosa que no entiendo que mencionaste algo sobre el pin que enciende en el diagrama del lado derecho, en mi disposicion de pines del pic serial el BIT 4, que quieres decir con eso o que significa eso?

otra pregunta, seria posible que funcionara este circuito conectando un adaptador USB a serial? para poder hacer la lectura via usb.
Imágenes Adjuntas
Tipo de Archivo: jpg valor osccal.JPG (282,2 KB (Kilobytes), 28 visitas)
04/11/2014 #39
Moderador

Avatar de D@rkbytes

robertingenieria27 dijo: Ver Mensaje
Hice tu circuito, D@rkbytes, y funcionó, pero al leer el pic me salen 6 valores que adjunto en la imagen, cual debería tomar?
Realiza una suma y obtén el resultado promedio.
Si la lectura correcta empieza desde 8 y termina en 48...
Entonces sumas 48 + 8 y el resultado lo divides entre 2. O sea OSCCAL = 8 + 48 / 2
El valor para OSCCAL sería 28 en decimal o 1C en hexadecimal.
robertingenieria27 dijo: Ver Mensaje
y otra cosa que no entiendo que mencionaste algo sobre el pin que enciende en el diagrama del lado derecho, en mi disposición de pines del pic serial el BIT 4
¿Qué quieres decir con eso o que significa eso?
Trata de colocar citas o enlaces sobre las referencias de los posts que mencionas, o coloca el número de post, porque no sé en que post mencioné lo que dices.
Si estás preguntando sobre el LED amarillo del Post #21, ese LED tan sólo indica que el circuito tiene alimentación.
robertingenieria27 dijo: Ver Mensaje
Otra pregunta. ¿Sería posible que funcionara este circuito conectando un adaptador USB a serial para poder hacer la lectura via usb?
Sí, de hecho sobre el mismo Post #21, mencioné que también se puede hacer de esa forma.

Por favor, lee el tema completamente antes de realizar preguntas.

Saludos.
04/11/2014 #40


Gracias por la pronta respuesta, otra duda que tenia cual seria el codigo pero escrito en PBP en lenguaje basic? Y tambien si este circuito podria utilizarse claro haciendo algunas modificaciones para un pic 10f202 que usa la alimentacion en otros pines de los de la serie 12fxxx
¿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.