TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: Veguepic en 22 de Diciembre de 2006, 22:32:27
-
Hola Amigos:
Les cuento mis aventuras y desventuras con los osciladores internos para ver si le son utiles a alguien y tambien para que si he hecho algo mal me corrijan.
Primero probe el siguiente circuito, usando un 12F508 como emisor y un 16F84 como receptor:
(http://img207.imageshack.us/img207/6137/12f508y16f84wn7.th.jpg) (http://img207.imageshack.us/my.php?image=12f508y16f84wn7.jpg)
Todo funciono perfecto, al presionar cada boton este envia un mensaje y se visualiza en el LCD, incluso lo probe usando modulos de 433 MHz, use el oscilador interno del 12F508, y un cristal de 4 MHz con el 16F84, pues no tiene oscilador interno.
Luego probe el siguiente circuito, remplazando el 16F84 por otro 12F508 con su oscilador interno:
(http://img187.imageshack.us/img187/3739/12f508y12f508ey7.th.jpg) (http://img187.imageshack.us/my.php?image=12f508y12f508ey7.jpg)
Y todo bien, al presionar un boton se prende el respectivo led, tambien probado usando modulos de RF, luego quise usar el primer circuito remplazando el 12F508 por un 12F675, y el 16F84 por un 16F628, trabajando ambos con el oscilador interno, aqui empezaron mis problemas.
-
Usando el 12F675 y 16F628 no pude hacer andar el circuito.
En vista de esto use el emisor con el 12F508 con oscilador interno, el cual funciona perfectamente, y en el receptor use el 12F628 usando el oscilador interno tambien, lo simule en proteus y funciono perfecto, luego arme el circuito y no ando.
Tras mucho probar con el oscilador interno, decidi usar el oscilador externo con un cristal de 4MHz y o maravilla, todo perfecto por lo cual la falla es del oscilador interno.
Inmediatamente me puse a leer el datasheet y no pude encontrar el registro para ajustar la frecuencia del oscilador interno, debe ser porque no lo tiene y es mas, por lo que veo en el datasheet la frecuencia puede variar desde 3.65 hasta 4.28 MHz, esto es un error de -8.75% a +7% !!!!!
Entonces medi la frecuencia del oscilador interno del PIC 16F628 y en mi caso el error es algo mayor al 3% por lo que no podre usarlo en mi circuito, es mas en ninguno que implique comunicaciones.
Debo acotar que el oscilador interno del 12F508 tiene un error de ±1%, el cual viene calibrado de fabrica de fabrica, con este porcentaje de error no he tenido ningun problema. El registro para ajustar la frecuencia es el OSCCAL, 05h, aunque con el valor de fabrica no es necesario tocarlo, solo que antes de grabarlo el PIC deben primero leer el valor de este registro para que al momento de grabar mantenga este valor. Esto winpic lo hace sin ningun problema.
De momento seguire usando el 16F84 con el cristal de 4 MHz en lo que consigo otro pic de 18 pines con oscilador interno con error de ±1% , ahora tengo otro problema, por error borre la calibracion de fabrica del 12F675, asi que ahora lo estoy ajustando, ya les contare como me va y si logro hacerlo andar.
Espero tambien compartan sus experiencias con los osciladores externos.
Saludos
-
hola veguepic, yo use el 16F818 y tiene para escoger desde 500KHz hasta 8Mhz e incluso menos aun , y ademas tiene un registro de calibracion de su oscilador interno. :-)
-
Yo e utilizado los 12c509 y 16f628 con los osciladores internos y funcionan muy bien, el 628 solo me trajo un pequeño problema, tuve que grabarlo 3 veces hasta que comenzó a funcionar el oscilador interno jojo, (como que tuve que asentarlo jajaja) después de eso funciono de 10, y los 12c509 nunca me trajeron problemas.
Saludos
-
Hola Henry:
No tengo ese pic pero al tener un registro de calibracion supongo que se puede lograr una precision del orden de ±1%, por aqui tengo un 16F88 con frecuencias similares, voy a probarlo a ver si me sirve para el circuito que quiero implementar. :-)
Hola Esteban:
Revisando la hoja de datos del 12C509 veo que el oscilador interno tiene el mismo rango de frecuencias que el 16F628, 3.65 a 4.28 MHz, pero al tener un registro de calibracion supongo que viene calibrado de fabrica con la misma precision que el 12F508 osea ±1%. He vuelto a revisar la hoja tecnica del 16F628 y aun no encuentro el registro de calibracion. :(
En que aplicaciones usaste el 16F628 ??
Ea Esteban, tu segundo nombre no es Jesus? :mrgreen:
Si bien ambos PIC 12F675 y 16F628 digo que no he podido hacerlos funciona, me refiero al circuito de comunicaciones que quiero implementar, para otros circuitos de prueba que he armado en donde la precision del oscilador interno no es critica funcionan sin problemas.
Saludos y un abrazo a ambos.
Hugo
P.D. acabo de encontrar la aplicacion 00250A de Microchip para autocalibrar el oscilador interno del 12F675, ya tocara mañana ver si puedo implementarla con los instrumentos que tengo.
-
Hola, el 16f628 con el oscilador interno lo usamos con un amigo para hacer un control de luces, por lo cual no tenia necesidad de un cloc tan preciso, simplemente queríamos hacer algo barato, y como te ahorras un cristal, pues pusimos el oscilador interno, por lo que tengo entendido, no tiene registro de calibración, esto dice la hoja de dato: "Precision internal 4 MHz oscillator factory calibrated to +- 1%", con lo cual parece venir calibrado calibrado.
Ea Esteban, tu segundo nombre no es Jesus? Mr. Green
jejeje supongo que es por la fecha de cumpleaños, no sos el primero que me hace ese chiste jejeje
Saludos
-
Les cuento mis aventuras y desventuras con los osciladores internos para ver si le son utiles a alguien y tambien para que si he hecho algo mal me corrijan.
veguepic, siendo generalistas sobre el término oscilador interno, te comento que yo los uso habitualmente en comunicaciones que son asíncronas (donde los timings toman gran importancia porque es lo único que permite que la comunicación sea buena) y andan perfectamente.
No solo eso sino que son equipos que funcionan hace tiempo y siguen funcionando.
Según leo del datasheet el PIC12F508 sí tiene registro de calibración, te expongo lo extraído del mismo
DataSheet 41236 versión b - Sección 4.2 (http://ww1.microchip.com/downloads/en/DeviceDoc/41236B.pdf)
Location 01FFh (PIC12F508) and location 03FFh (PIC12F509) contain the internal clock oscillator calibration value. This value should never be overwritten.
En caso que lo hayas sobreescrito, puedes ir probando cargando valores a dicha posición hasta lograr que la frecuencia sea la adecuada.
Lo que debes hacer en tu código es casualmente hacer que en dicha posición se grabe un valor y tu 1er línea debiera ser algo así como
Espero te haya servido.
-
hola veguepic
en su dia, y gracias a la ayuda de maunix, consegui poner a funcionar un sistema de transmision de datos en el cual necesitaba los dos pines del oscilador de un 12f675 y tratare de ayudarte aunque perdona porque estoy en plena mudanza, con el ordenador recien formateado y los archivos del proyecto ya guardados en alguna caja... si mi memoria no me falla esta es la solucion en pbp: (para tu imagen de los leds)
*****************************
include "modedefs.bas"
DEFINE OSCCAL_1K 1
define OSC 4
@ DEVICE pic12F675, 0x1fc4
' palabra de configuración:
' oscilador interno IO
' PWRT y BOREN enables
TRISIO = %001100 ' GP2 entrada, las demas como salidas.
CMCON = 7 ' comparadores en off
ADCON0 = 0 ' ADC off
ANSEL = 0 ' IO digitales
continua programa...
****************************
tratare de localizarte una web con amplia informacion sobre el 675 a lo largo del dia.
pd: no se hasta que punto de precision necesitas, yo realice varios circuitos con oscilador interno para transmision de datos via infrarrojos y todos funcionan sin problemas.
pd: aunque a mi estas fiestas me son bastante indiferentes vayan mis deseos de lo mejor para todos vosotros. salu2
-
Muchachos, he encontrado esta nota de aplicación que creo que aclara bastante bien el punto.
Espero les sirva
AN250 : Auto-calibration of the PIC12F6XX Internal RC Oscillator (http://ww1.microchip.com/downloads/en/AppNotes/00250a.pdf)
Saludos!
-
y yo encontre la web que os comentaba: http://members.shaw.ca/picgroup/ opcion 'resources' - y dentro del apartado pic basic 'Burn on the 12F675 , a powerhouse with only 8 pins'
espero que te sirva de algo amigo veguepic
un saludo
-
Gracias Mauricio y Joaquin por sus respuestas.
La nota de aplicacion la habia visto pero por los equipos que involucra no me es posible implementarla, he tratado de implementar lo que puso Joaquin pero no me ha sido posible, mas tarde retomare el tema, pondre aqui los resultados para que los evaluen.
De momento he comprado otro 16F628A y sigo con el mismo problema que el anterior 16F628. Solo le he cargado los fuses en Winpic800, definiendo el oscilador interno pero con salida del clock, osea INTRC CLKOUT, el error es de +3% para el 16F628 y de 5% para el 16F628A.
De momento solo puedo suponer que los pics tengan defectos, probablemente sean muestras o samples, algo que no me sorprenderia o que estoy haciendo algo mal.
Saludos.
-
veguepic no te desanimes, puedes seguir usando el 12F e irle variando el registro de calibración "a mano" hasta que logres la frecuencia con la presición que deseas.
Una vez que lo logras, recuerda ese valor y guardalo en la posición 0x1FF o 0x3FF (dependiendo del pic) en forma de un retlw valor.
Por último tu primera instrucción en tu software debiera ser un call a esa dirección y a continuación un movwf OSCCAL.
org 0x000
call 0x1FF
movwf OSCCAL
;
;
org 0x1FF
retlw 0x24
El valor 0x24 es arbitrario, lo puse solo como ejemplo y lo debieras ir variando hasta que logres la frec. deseada.
-
Hola Mauricio:
Yo cargaba el valor del osccal de una forma mas burda, esto es modificando directamente el archivo en Winpic800:
(http://img403.imageshack.us/img403/3453/osccalpb2.jpg) (http://imageshack.us)
justo en la ultima posicion, donde dice 3440.
Sabia que no debo cambiar los dos primeros digitos (34), solo modificaba los ultimos digitos. Como es obvio, no es la mejor manera de hacerlo, por lo cual lo hice como indicas y con esto he logrado obtener un error menor a ±1%. Gracias por el dato.
Hay algo que me sigue molestando, he cargado el valor de la calibracion mediante el siguiente programa:
LIST P=12F675,
#include <p12f675.inc>
__CONFIG h'11A5' ; _CP_OFF&_PROTECT_OFF&_BOD_OFF&_MCLR_ON&_PWRTE_ON&_WDT_OFF&INTRC_OSC_CLKOUT
org 0x000
bsf STATUS,RP0 ;Banco 1
call 0x3FF
movwf OSCCAL
bcf STATUS,RP0 ;Banco 0
org 0x3FF
retlw 0x04
END
y segun tengo entendido una vez cargado este valor de calibracion, el PIC seria el equivalente a uno de fabrica. Luego siempre antes de grabarlo hay que leer este valor antes de grabar de nuevo el PIC.
Me pasa que luego de haber calibrado el PIC y posteriormente grabar el siguiente programa:
include "modedefs.bas"
@ device pic12F675, CPD_OFF
@ device pic12F675, PROTECT_OFF
@ device pic12F675, BOD_OFF
@ device pic12F675, MCLR_ON
@ device pic12F675, PWRT_ON
@ device pic12F675, WDT_OFF
@ device pic12F675, INTRC_OSC_NOCLKOUT
DEFINE OSC 4 'Oscillator speed in MHz
ADCON0 = 0
ANSEL = 0 ' Disable analog converter
CMCON = 7 ' Comparators off
TRISIO = %011111
dato var byte
inicio:
if GPIO.0 = 0 then serout GPIO.5,T1200,["OK"," QUE PASEN "]
if GPIO.1 = 0 then serout GPIO.5,T1200,["OK","FELICES FIESTAS"]
if GPIO.2 = 0 then serout GPIO.5,T1200,["OK"," Y UN PROSPERO "]
if GPIO.4 = 0 then serout GPIO.5,T1200,["OK"," 2007 "]
pause 50
goto inicio
end
he verificado que el valor de calibracion esta en la ultima posicion, pero el programa sigue sin funcionar, el mismo programa adaptado para el 12F508 y el 12F683 funciona perfectamente. El diagrama es el del primer post.
Lo unico que puedo suponer es que o los pics estan mal o me los he "cargado" con alguna mala coneccion. Que opinan.
Saludos
-
Habría que ver que asm te genera ese programa en basic.
1) Que el programa en basic no borre el contenido de la posición 0x3FF
2) Que el software de tu programador no borre el contenido de la posición 0x3FF. El winpic800 tiene en cuenta este detalle y te avisa antes de hacer algo.
3) Tu programa en basic debiera leer el valor de calibración del oscilador. No se si el que le indiques que tu oscilador es de 4MHz haga que el basic genere un valor de calibración que ocupe la posición 0x3FF o simplemente lo use para generar los retardos necesarios dentro de tu aplicación
Una curiosidad, cómo pruebas que el valor del oscilador esté ok? Ese programita que yo te dí fue solo a modo de ejemplo y no debiera ser todo tu programa. En algún lado debes hacer un loop infinito y configurar a tu pic para que saque el oscilador por sus pines así lo puedes medir con el osciloscopio.
Es más, creo que medirías su valor dividido 4 si mal no recuerdo.
-
Estoy como medio entrampado en esto. :( Pero sigo adelante.
1) Estoy seguro que mi programa no borra esta direccion, pues al grabarlo verifico que tenga el valor de calibracion, y al volver a regrabarlo compruebo que siga ahi.
2) Ahora si tengo el cuidado de leer el valor de calibracion y al grabarlo Winpic800 lo restaura.
3) Justo eso es lo que me lleva a pensar que algo anda mal con estos PICS, el mismo programa con muy ligeras modificaciones lo he implementado para 12F508, 12F675 y 12F683. Solo falla en los 12F675, a menos que sea un bug en el 12F675.
Digo que no es necesario que el programa llame al valor del oscilador pues en otros pics con oscilador interno como el 12F683, 16F628 y 16F628A he hecho la siguiente prueba:
Primero borro el PIC con Winpic800 salvando antes el valor de calibracion. Luego entro al config y solo activo INTRC CLKOUT y MCLR, luego le doy grabar, ojo que no he cargado ningun programa. Monto el PIC en el protoboard y le pongo alimentacion y tambien conecto el MCLR. Luego mido con un frecuencimetro la patilla OSC CLKOUT, y la frecuencia es la cuarta parte del oscilador interno. Fosc_int / 4 .
Este test lo he hecho con el 12F683 dando un error menor al 1%, tambien lo he hecho con los 16F628 y 16F628A dandome errores del 3 y 5 % respectivamente. Es por eso que mi programa funciona con el 12F683 y no funciona con los 16F628 y 16F628A. Con el 12F508 no se puede hacer este test pues no tiene CLKOUT.
El mismo test lo he tratado de hacer con el 12F675 y siempre me da 1.33 MHz, solo cuando cargo el programa del post anterior me da 1 MHz.
Hare un par de pruebas mas sino cambiare PICS.
Saludos
-
Veguepic más allá de que el soft de programación no te borre el valor de calibración, TU software debe leer dicho valor con una rutina como la que te puse anteriormente. Es decir que tu software hecho en basic o en lo que desees DEBE cargar el valor 4 en OSCCAL sino no hay nada que estes modificando realmente. El que dicho valor se guarde en 0x3FF es una convención de Microchip producto de sus seteos de fábrica y que nos permiten no preocuparnos por la variación que tienen los osciladores durante el proceso de fabricación de estos pics.
Una vez que lo has borrado (intencionalmente o no) debes tú mismo guardarlo.
Repito: ya sea que es un valor de microchip o tuyo, lo debes cargar en el OSCCAL.
Prueba el siguiente programa
org 0x000
call 0x3FF
movwf OSCCAL
nop
goto $-1
org 0x3FF
retlw 0x4
Este software no hará nada más que cargar el valor de calibración.
Lee el .HEX que te genera este código, luego modificale el último valor en el winpic en la posición 0x3FFF de ser necesario y no te preocupes en este caso por sobreescribir tu pic.
Saludos
-
hola a todos
tambien tengo un problema con el osccal de mi pic12f508
trato de leer y no me aparece ningun valor
use el winpic , winpic800 ic-prog
y nada solo 3ff
y otra no se como hacer para agregarle ese valor a este programita
espero su ayuda gracias
processor 12f508
__config 0feeh ; Internal Osc, WDT Enabled, not code protected
include "p12f508.inc"
#define RAMSTART 07h
radix dec
#define trig GPIO,0 ; trigger input from host
#define pulse GPIO,1 ; timing pulse output to host
#define echo GPIO,2 ; echo signals from comparitor
#define nc GPIO,3 ; Unused - do not connect.
#define tx2 GPIO,4 ; Tx phase 2
#define tx1 GPIO,5 ; Tx phase 1
#define _C STATUS,C
;/////////////////////////////////////////////////////////////////////////////
org RAMSTART
loop res 1 ; loop counter
dlyctr res 1 ; delay counter
tone_cnt res 1 ; count echo cycles
period res 1 ; received burst cycle period from tmr0
;/////////////////////////////////////////////////////////////////////////////
org 0x000 ;start address 0
call 0xFF
movwf OSCCAL ; use microchip's calibration value
movlw 89h
option ;assign 1:2 prescaler to watchdog
movlw 0dh
tris GPIO ;GPIO 1, 4 & 5 are outputs
movwf 0
bcf pulse
main: clrwdt
btfss trig ; wait for trigger signal from user to go high
goto main ; from previous measurement.
m2: clrwdt
btfsc trig ; wait for trigger signal from user
goto m2
call burst ; send the ultra-sonic burst
bsf pulse ; start the output timing pulse
m1: btfsc echo
goto m1 ; wait for low
bcf pulse ; end the output timing pulse
goto main
burst: clrf loop
movlw 8 ; number of cycles in burst
movwf loop
burst1: movlw 0x10 ; 1st half cycle
movwf GPIO
movlw 3 ; (3 * 3inst * 1uS) -1uS = 8uS
movwf dlyctr ; 8uS + (4*1uS) = 12uS
burst2: decfsz dlyctr,f
goto burst2
movlw 0x20
movwf GPIO
movlw 2 ; (2 * 3inst * 1uS) -1uS = 5uS
movwf dlyctr ; 5uS + (8*1uS) = 13uS
burst3: decfsz dlyctr,f
goto burst3
nop
decfsz loop,f
goto burst1
movlw 0x00 ; set both drives low
movwf GPIO
retlw 0
tone: clrf TMR0
t1: btfsc echo
goto t1 ; wait for low
movfw TMR0
clrf TMR0
movwf period ; store timer0 value
movlw 21 ; if(period>22 && period<30)
subwf period,w
btfss _C
goto t2
movlw 30
subwf period,f
btfsc _C
goto t2
decfsz tone_cnt,f ; 25uS period OK, so
goto t1 ; if not yet 3 of them, keep looking
retlw 0 ; else - success - return
t2: movlw 3 ; failed to detect 25uS period, so reset tone detect
movwf tone_cnt ; to 3 and keep looking
goto t1
;////////////////////////////////////////////////////////////////////////////
end
-
Tal vez tu grabador no está funcionando, primero que nada prueba si reconoce el pic o coloca otro pic del cual estes seguro que esta en buenas condiciones, hay un icono de un IC con un signo de interrogación, dale clic ahi te deberia reconocer el tipo de pic que has colocado si no te reconoce el problema es en tu grabador, tambien hay otro icono de un conector con un cable paralelo dale clic ahi para saber si tu grabador está bien conectado con la PC, si sale error revisa el cable y el grabador, tal vez tu fuente tiene poco voltaje o revisa las pistas.
Por otro lado para configurar el oscilador interno:
BANCO1
movlw b'xxxxxxxx'
movwf OSCCAL
BANCO0
Ademas de ello en la palabra de configuración por ejemplo para un pic12F629 yo uso esto:
__CONFIG _INTRC_OSC_NOCLKOUT & _MCLRE_OFF & _WDT_OFF & _PWRTE_ON & _BODEN_OFF & _CP_OFF & _CPD_OFF
Eso es todo ahora tu pic correrá usando el oscilador interno.
Ojo: este ejemplo es para un pic12F629 no he visto el datasheet del pic que estas usando tal vez algún fusible este demás o tal vez falte algo mas pero en síntesis esa es la idea, tomalo como una guia.
Javicho.
-
Saludos
Pues a mi el oscilador interno no me ha dado problema, para las aplicaciones que he usado, para leer el dato del OSCCAL lo hago con el ICD2 :mrgreen:
Algo para anotar es que segun las recomendaciones de Microchip, no debe usarse el oscilador interno cuando se hacen comunicaciones RS232.
Adjunto un pdf donde hablan al respecto de los osciladores, muy util.
Chao.
-
Intente colgar el .swf donde explican lo del IntRC, pero pesa mucho asi que les dejo el link donde lo pueden descargar: LINK (http://www.4shared.com/dir/6295901/701d27e8/sharing.html). Es una presentacion en Flash, aunque esta en ingles es my entendible.
Saludos
-
pss estoy usando un jdm entonces tal vez no sirva!!!
cren q me sirva este el de steren pic-600
PIC-600 Módulo cargador/programador de microcontroladores PICs, para puerto USB
-
Hola Luarken, a ver si te soy de ayuda
Hace mucho que no uso el JDM por lo que no se decirte si soporta ese pic, mira si con winpic800 y usa la opcion de reconocer pic a ver si lo identifica. Si no te deberas conseguir un programador que si lo soporte.
Yo uso el PP2, una version mejorada del PROPIC2, que si lo soporta, aunque debo mencionar que winpic800 no lo reconoce, pero lo selecciono manualmente y listo.
En esta imagen de winpic800 podras ver que el ultimo valor corresponde al de calibracion que es 3440
(http://img403.imageshack.us/img403/3453/osccalpb2.jpg) (http://imageshack.us)
dinos que valor te da
En tu programa a mi parecer veo un error
org 0x000 ;start address 0
call 0x1FF
movwf OSCCAL ; use microchip's calibration value
en rojo pongo como deberia ir.
Adjunto un programa que me fue muy util para calibrar un pic 12F508
list p=12f508
#include p12f508.inc
__config _IntRC_OSC & _WDT_OFF & _CP_OFF & _MCLRE_ON
ORG 0
CALL 0x1FF
MOVWF OSCCAL
CLRF GPIO
MOVLW b'00000000'
TRIS GPIO
INICIO
BCF GPIO,0
NOP
NOP
NOP
NOP
BSF GPIO,0
NOP
NOP
GOTO INICIO
ORG 0x1FF
RETLW 0x12
END
es necesario un frecuencimetro, yo use uno sencillo que me fabrique, el programa da una frecuencia de 100 KHz, el valor 0x12 es el que deberan ir variando hasta obtener los 100 KHz.
Haciendo unos cambios sencillos pude calibrar tambien varios pics de la serie 12F y 16F a los que por torpeza les borre la calibracion o el valor no coincidia.
Ya nos cuentas que tal te fue.
Saludos.
Hugo
P.D. Agradecer tardiamente a Mauricio por su ayuda.
-
pss mira me arme un circuito rrapidamente para esto pss decen que el jdm no lo soporta
y puse un pic12c508 y el valor final me da 0c60
pero puse el pic12f508 y me da igua que a ti la lectura 3FFF y no me da el valor de calibracion
y con el mplab ecribo esto
org 0x000
call 0x1ff
movwf OSCCAL ; use microchip's calibration value
y me hacer error al compilar
Error[120] C:\SRF04\SRF04.ASM 46 : Call or jump not allowed at this address (must be in low half of page)
..
no se que pasara con esto si estoy haciendo algo mal o que, o tendre q conseguir un programador bueno.
y al tratar de cargar con el winpic800 me sale un error
.
gracias por la ayuda!!!!!
espero poder hacer esto!!!!!!!
PD:
puse estoy asi y no me da error
pero al cargar me sale error en el winpic
org 1ffh
movlw 70h
movwf OSCCAL ; use microchip's calibration value
org 0x000 ;start address 0
tambien agrege los circuitos
y el codigo fuente del programa completo. es el codigo fuente del srf04 sensor ultrasonico.
-
Que significa "pss" ????
Si al leer el pic te da 3FFF significa que lo borraste, lo unico que te queda es volver a calibrarlo, si tienes como conseguirte un frecuencimetro prueba con el programa que puse para calibrar el pic. El programador lee el programa que grabaste??
No conosco el error que mencionas, me inclino a pensar que tienes mal definido el pic.
Porque no pruebas primero con un ejemplo sencillo, por ejemplo de parpadear un led cada 0.5 segundos usando el oscilador interno y verificas que el pic acepta el valor de calibracion. Luego incluso puedes usar un reloj y ver si el valor de calibracion esta dentro del 1%, osea en 100 segundos te debera dar 99 o 101 segundos en el peor de los casos. Mejor si usas mas tiempo
Suerte.
-
pss significa pues
voi a tener que calibrarlo entonces pero como te digo
me pone error mplab 8.10 si escribo esto
ORG 0
CALL 0x1FF ; por esto que esta aki
MOVWF OSCCAL
CLRF GPIO
MOVLW b'00000000'
TRIS GPIO
no me esta leyendo nada si leo el pic solo 3FFF
voi a buscar un ejemplo para calar con el led.
gracias por la ayuda
-
pss significa pues
voi a tener que calibrarlo entonces pero como te digo
me pone error mplab 8.10 si escribo esto
ORG 0
CALL 0x1FF ; por esto que esta aki
MOVWF OSCCAL
CLRF GPIO
MOVLW b'00000000'
TRIS GPIO
no me esta leyendo nada si leo el pic solo 3FFF
que pasos tengo que seguir para hacer la calibracion??
voi a buscar un ejemplo para calar con el led.
gracias por la ayuda
-
no me esta leyendo nada si leo el pic solo 3FFF
Para mi lo has sobreescrito anteriormente y ya no lo puedes leer. Seguramente has hecho un ERASE del pic, con tu programa de grabación.
Esto del valor de oscilador es UNICAMENTE si no lo has borrado. Viene de fábrica. El Winpic800 tiene cuidado de no borrarlo, pero no se si el programa que has usado lo ha hecho.
Saludos
-
entonces lo tendre q calibrar con el programica q dejo Veguepic
q pasos sigo para calibrarlo
-
entonces lo tendre q calibrar con el programica q dejo Veguepic
q pasos sigo para calibrarlo
Tienes osciloscopio?
-
si en la scuela puedo disponer de uno!!!
-
si en la scuela puedo disponer de uno!!!
Primero fijate en este mismo hilo como indico la forma de grabar un valor de calibración al micro en la posición 0x3FF o 0x7FFF o la que sea dependiendo de cual uses.
Luego hay dos posibilidades
1. Que configures el oscilador para que haga un CLOCKOUT , esto es , por el pin del oscilador sacará la frecuencia del oscilador/4. Si lo calibraste justo a 4Mhz, debieras ver un clock de 1MHz. Esto lo ves con el osciloscopio y vas cambiando el valor que te mencioné antes hasta que sea de 4Mhz.
2. Que hagas un programa que cambie un pin constantemente ON/OFF/ON/OFF, por muuuchas lineas de código y luego que haya un goto que repita el programa. esto es para evitar que el goto que dura 2 instrucciones afecte la salida del pin.
Bueno, con esto tu deberías poder ver un pin oscilando a Fosc/8. El /8 es porque en un ciclo de instrucción lo pone en alto y otra en bajo . Entonces la frecuencia sería la mitad de lo que es normarmente.
Saludos
-
Hola tengo una idea que nose si funcionara pero seria mas que util.
Yo uso pics 12f629 y 12f683 y me pasa que no puedo enviar datos seriales a la pc, pero usando picaxes (que son los mismos pics) anda perfecto
Bueno mi idea es si alguien que la tenga mas clara que yo puede hacer un programa que vaya variando el valor del OSCAL y luego envie algo como "Valor de OSCAL: XXXX" de manera serial por gpio.0, luego cambie el valor y envie lo mismo denuevo, entonces lo conecto a la PC y va a entrar a recibir cualquiercosa hasta que cuando la pegue con un OSCAL que me sirva me va a enviar el texo bien y el valor correcto.
Es solo una idea yo no la tengo muy clara con este tema recien estoy tratando de migrar de picaxe a PBP, pero esto de que no anden las comunicaciones seriales me esta jodiendo mucho.