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

Temas similares

07/07/2012 #1

Avatar de Ericktronik

Problema al programar 12F675
Hola a todos los foreros.

estoy haciendo un pequeño circuito para mostrar todos los colores basicos de un led RGB y ponerlo en mi bici.

es la primera vez que uso el pic 12F675 y cuando intento programarlo el soft me envia un error con el osccal, por lo que lei es la calibracion del reloj interno.

he tratado de buscar alguna solucion por la red pero no encuentro algo concreto.

no se programar en asm, en la universidad me enseñaron solo C, y programo con el PIC C Compiler.

el codigo que estoy usando es este(es solo para empezar):

Código:
#include <12F675.h>
#FUSES NOWDT                    //No Watch Dog Timer
#FUSES INTRC_IO                 //Reloj Interno
#FUSES NOPUT                    //No Power Up Timer
#FUSES NOPROTECT                //Code not protected from reading
#FUSES NOBROWNOUT               //No brownout reset
#FUSES NOMCLR                   //No se usa el pin del master clear
#FUSES NOCPD                    //No EE protection
#use delay(internal=4MHz)

int i;
#byte osccal=0x90
#bit R=0x05.0
#bit G=0x05.1
#bit B=0x05.4


void main(int){   //Programa principal
set_tris_a(0x00);
OUTPUT_A(0X00);    //todos apagados
delay_ms(10);
while(true){      //Ciclo Infinito
R=1;//ROJO
delay_ms(1000);      //---------------lapso de tiempo de 1 SEGUNDO
G=1;//ROJO Y VERDE
delay_ms(1000);      //---------------lapso de tiempo de 1 SEGUNDO
R=0;//VERDE
delay_ms(1000);      //---------------lapso de tiempo de 1 SEGUNDO
B=1;//AZUL Y VERDE
delay_ms(1000);      //---------------lapso de tiempo de 1 SEGUNDO
G=0;//AZUL
delay_ms(1000);      //---------------lapso de tiempo de 1 SEGUNDO
R=1;//AZUL Y ROJO
delay_ms(1000);      //---------------lapso de tiempo de 1 SEGUNDO
G=1;//AZUL ROJO Y VERDE
delay_ms(1000);      //---------------lapso de tiempo de 1 SEGUNDO
OUTPUT_A(0x00);
delay_ms(1000);      //---------------lapso de tiempo de 1 SEGUNDO
}
}
si alguien puede porfavor ayudarme con el codigo y explicarme que se debe hacer para programar este pic, le quedare muy agradecido.
07/07/2012 #2
Moderador

Avatar de D@rkbytes

Saludos Ericktronik
Espero que esta información te sea de ayuda.

Mira, lo que tienes que hacer es leer el PIC12F675 con tu programador.
Y te vas hasta el final del código, a la última posición.

Entonces veras algo como esto si es que no se ha perdido el valor de calibración de fabrica.

Nota: Yo use el programador WinPIC800 para leer el PIC de este ejemplo.

El 34 es un RETLW y el 30 es el valor de fabrica del oscilador interno. En mi caso 0x30
En lenguaje ensamblador para asignar este valor se hace de esta manera.
Código:
    call    0x3FF           ; Ir a la dir. 3FF y retornar con el valor en W
    bsf     STATUS,RP0      ; Ir al banco 1 
    movwf   OSCCAL          ; Actualizar el registro con el valor de fabrica
Ahora, para hacer esto en PIC C tendrás que declararlo de esta manera.

#ROM 0x3FF = {0x3430} // 0x34 > RETLW > 0x30 Valor de calibración del oscilador interno.

Ahora solo te queda leer tu PIC, asignar el valor que encuentres y nos cuentas que tal.

Suerte.
08/07/2012 #3

Avatar de LuigiDJ

Si borraste el valor del osccal, toca recalcularlo , encontre informacion de como hacerlo aqui : http://picprojects.org.uk/projects/recal/recal.htm
y un sencillo truco para no volver a perder el valor del osccal:
http://picprojects.org.uk/projects/piccal.htm
espero te sirva
saludos
08/07/2012 #4

Avatar de Ericktronik

hola.
yo uso un clon del pickit2 que hize yo mismo y nunca me ha fallado.
el problema es que cuando intento leer el pic, ni siquiera reconoce el que lo tengo conectado al quemador...

intento usar la opcion de "autoregenerar el valor del osccal" que tiene el pickit2, pero dice que la operacion es fallida.

Tendre que conseguir(o armar) un programador serial para poder arreglarlo?
si tengo que hacerlo con el programador serial, puedo usar un conversor RS-232 a USB?(mi pc es una Laptop)
08/07/2012 #5

Avatar de LuigiDJ

deberia funcionar con el adaptador de usb a rs232. mira esta pagina que tiene un programador serial de pic, y soporta el 12f675 : http://www.oshonsoft.com/picprogserial.html
yo use el programador paralelo que esta en esa pagina y funciono sin problemas, esta incluido el software para usarlo, aunque deberia funcionar con otros software que manejen el puerto serial.
08/07/2012 #6


No se puede (o por lo menos, no por el momento), ya que no hay forma de generar el voltaje de programación (13V normalmente), ya que uno de los pines del puerto serie (no recuerdo cual), es el que se encarga de generar ese voltaje, ademas el conversor trabaja con menos voltaje que el puerto serie real, por eso no hay circuitos específicos hechos con el conversor USB-SERIE.

Si consiguen hacerlo funcionar, avisen, porque tengo un cable USB-SERIE que lo tengo guardado hasta encontrar la manera de hacerlo funcionar.

--------------------------

Prueba programar otro PIC, haber si el problema viene del quemador, o de otro lado.

Saludos

PD: En la definición del reloj, ¿está bien 4MHz, o tiene que ser 4000000?, nunca vi 4MHz en esa configuración...
09/07/2012 #7

Avatar de Daniel Meza

hola.
yo uso un clon del pickit2 que hize yo mismo y nunca me ha fallado.
el problema es que cuando intento leer el pic, ni siquiera reconoce el que lo tengo conectado al quemador...

intento usar la opcion de "autoregenerar el valor del osccal" que tiene el pickit2, pero dice que la operacion es fallida.

Tendre que conseguir(o armar) un programador serial para poder arreglarlo?
si tengo que hacerlo con el programador serial, puedo usar un conversor RS-232 a USB?(mi pc es una Laptop)
Hace algún tiempo me sucedió lo mismo pero con un PIC12F508, no sabía eso del valor del OSCCAL y lo porgramé así como cualquier otro. La 2da vez que lo intenté reprogramar ya no pude, el programador tampoco me reconocía el PIC. Igualemente utilizo un clon del Pickit 2, tampoco me sirvió, la opción de regenerar el código del OSCCAL
01/08/2017 #8


Problema al programar 12F675
Buenas. Estoy empezando con los PIC y tengo un problema a la hora de probar un programa en ensamblador.
El programa en concreto es de encender y apagar un LED repetidamente.
El problema es que a la hora de conectarlo no hace lo que tiene que hacer, hasta que toco con un dedo la resistencia de polarización del LED.

He pensado que podría ser porque se le mete demasiada corriente al LED, pero eso en todo caso haría que alumbrase más, y en teoría debería de realizar el programa.

Dejo por aquí el programa por si es un error del software. Gracias de antemano.
Código PHP:
;Programa que enciende un led si presionamos un pulsadorsituado en el bit 1 de GPIO
LIST P=PIC12F675
#include <p12f675.inc>
__CONFIG _FOSC_INTRCIO _WDTE_OFF _PWRTE_OFF _MCLRE_ON _BOREN_OFF _CP_OFF _CPD_OFF
CONTADOR1 EQU 20h
CONTADOR2 EQU 21h
ORG 0x00
GOTO INICIO
ORG 0x05
;DECLARAMOS LAS ENTRADAS Y SALIDAS DE GPIO 
INICIO
    BCF STATUS
,RP0 ;Banco de memoria 0
    CLRF GPIO 
;Inicializa GPIO
    MOVLW 
B'00000111' ;Desactiva el comparador y lo pone al nivel minimo de energia.
    
MOVWF CMCON
    BSF STATUS
,RP0 ;Banco de memoria 1
    MOVLW 
B'11111111'
    
MOVWF OSCCAL
    MOVLW 
B'00000000' ;Habilitamos las resistencias de pullup
    MOVWF OPTION_REG
    CLRF ANSEL 
;Elimina la posibilidad de que alguna patilla pudiese ser tomada como patilla analógica
    MOVLW 
B'00000010' ;Pone el bit 1 de GPIO como entrada digital
    MOVWF TRISIO
    MOVLW 
B'00000010' ;Seteamos la resistencia de pull up de la patilla GP1
    MOVWF WPU
    BCF STATUS
,RP0
;PROGRAMA
BUCLE
    BSF GPIO
,GPIO0
    CALL PAUSA
    BCF GPIO
,GPIO0
    CALL PAUSA
    
GOTO BUCLE
    
PAUSA
    CLRF CONTADOR1
    CLRF CONTADOR2
CONT1
    DECFSZ CONTADOR1
,1
    
GOTO CONT1
    DECFSZ CONTADOR2
,1
    
GOTO CONT1
    
RETURN

    
END 
01/08/2017 #9
Moderador

Avatar de D@rkbytes

El programa se ve bien y no creo que tenga problemas al ejecutarlo físicamente.
¿El PIC tiene correcto el valor de OSCCAL?
01/08/2017 #10


En teoría sí. Los retardos están calculados para el valor máximo de 4MHz, por eso le he dado el valor máximo en los bits de calibración del oscilador interno
01/08/2017 #11

Avatar de Daniel Meza

Otra cuestión, ¿el pic tiene su respectivo resistor de pull-up en su pin MCLR?, creo recordar que ese micro no lo lleva interno como otros


Enviado desde mi iPhone utilizando Tapatalk
01/08/2017 #12


Sí lo lleva. De todas maneras en este programa no se usa ese pin
01/08/2017 #13

Avatar de Daniel Meza

No se usa pero debe estar en un nivel alto para que el micro ejecute el programa, de lo contrario estaría en reset siempre y sus salidas desactivadas provocando, quizá, lo que comentas de acercar el dedo


Enviado desde mi iPhone utilizando Tapatalk
01/08/2017 #14


Pues sí era eso! Era a causa del pin GPIO3, que lo tenía configurado para que funcionase como patilla MCLR. En los bits de configuración lo he desactivado y ya funciona. Gracias!
Respuesta
¿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.