TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: ByR en 18 de Diciembre de 2008, 13:05:34
-
Hola,
Espero puedan responderme a esta duda que tengo. Estoy diseñando un circuito en el que utilizo 3 microcontroladores y otro con 2 micros. Mi pregunta es si es posible utilizar los micros (PIC16F876A) con un sólo cristal.
Intentaré probar haber que pasa, pero me gustaría saber si es posible o no, quizá no sea recomendable.
Gracias a todos, Saludos
-
Pones el cristal en el primer micro y tiras una vía del pin CLKO del primer micro al pin CLKI del segundo micro.
Así funciona bien.
-
Claro que es posible hasta recuerdo haberlos sincronizado, pero bueno al tema si se puede, el segundo pic a alimentar de frecuencia debe ser por el OSC_IN y su pin OSC_OUT al aire.
Javicho.
-
creo que tambien hay que indicarle que es un oscilador externo en algunos micros viene como ECIO (external clocl input) y el osc_out queda como un I/O normal. Hablo por lo que he leido en datasheet... no lo he probado
-
Sí, eso es así, pero no en el 16f876
-
Gracias a todos por sus respuestas, me tardé un poco en leer el foro por las vacaciones
Hice la prueba conectando el cristal a 3 micros y funcionó bien, también probé la forma en la que me han sugerido, con buenos resultados. Me ahorré de usar más cristales, les agradezco mucho
Saludos
ByR
-
¡Guay!, me alegro que funcionase.
-
Hola
Yo tengo que conectar 12 microcontroladores pic 12f629 con un unico cristal de 32Mhz, espero que valla bien.
Para 12 micros tendre que tomar alguna precaucion fuera de lo normal?.
-
No creo que el tuyo funcione controlpic, 32MHZ es demasiado para un 12f629.
Las precauciones iniciales serían utilizar un cristal que soporten esos increíbles PICs de 12 patas.
Saludos
Reinier
-
:shock: :shock:
No le he visto las 4 patas extras!!!! aca son de 8 pines :mrgreen:
Saludos!!!!!
-
Efectivamente, 8 patas, ¿en que ando pensando? ¿en las más de 12 cosas que se pueden hacer con ellos?
Pero en lo que si no me equivoco es que esos maravillosos engendros no andan a 40MHz
Gracias por la aclaración MLO_ ;)
Saludos
Reinier
-
:mrgreen:
-
Efectivamente, 8 patas, ¿en que ando pensando? ¿en las más de 12 cosas que se pueden hacer con ellos?
Pero en lo que si no me equivoco es que esos maravillosos engendros no andan a 40MHz
Gracias por la aclaración MLO_ ;)
Saludos
Reinier
Cómo que no? ponle un hielo encima y ya verás...:D :D
No, fuera de broma. La terminación de los microcontroladores dicen la velocidad garantizada por el fabricante:Si dice 04 son hasta 4Mz, si dicen 20 son hasta 20Mhz.
Eso no implica que por mas que sea 04, no funcione bien a 20Mhz. Solo significa que estás por tu cuenta, el fabircante no asegura que funcione bien.
Mas de 20Mhz...creeme: con 25 quemé un 16F877A.
Saludos
-
No sé porqué pero me da en la nariz que controlpic, en vez de 32MHz quería decir 32KHz.
-
No se por qué, pero Manolo siempre sabe más de la cuenta...
¿Será por eso que es el súper héroe TODOPIC?
-
Hola
No me habia confundido, me referia a 32Mhz, aunque ahora veo que estaba equivocado en hacerlo trabajar a tan alta frecuencia.
Tengo que obtener varias frecuencias lo mas exactas posibles y utilizando esa base de tiempos obtenia muy poco error. Viendo el problema seguramente utilice un cristal de 4Mhz con objeto de aumentar la longevidad del pic, ya que aunque a 20Mhz me puede funcionar bien, no me quiero ariesgar a quemar alguno de los pic.
un saludo.
-
Para poder utilizar el 12f629 con un oscilador exterior, sabeis que fuses son los que hay que seleccionar?
-
Pues XT, HS, LP,EC_IO
-
Hola compañeros:
Resulta que tengo un circuitillo con dos pic 18F13k50, los cuales funcionan a la perfección con un cristal de 12Mhz cada uno, pero intento hacer esto que mencionais de tirar un cable del pin3 (clock out) del pic que tiene el cristal, al pin2 (clock in) del otro pic que no tiene cristal...y el que no tiene cristal no me funciona...
¿Alguien sabe porque puede ser?, ¿ hay que poner algún fuse especial en el código del CCS de alguno de los dos pic ?.
Como siempre muchas gracias por todo compañeros.
Un saludete.
-
Tienes que poner el fuse EC, aunque no sé si funcionará el USB.
-
Hola:
La verdad es que no voy a usar el usb, sólo lo compré porque es el más barato de los que tiene más memoria (por el tema del usb).
Imagino que tengo que poner #fuses EC en el pic que no tiene cristal :mrgreen:
Mañana lo pruebo y os comento que tal.
Un saludete y muchas gracias.
-
Hola comapeñeros:
He vuelto a sacar 5 min libres después de muchos meses...madre del amor hermoso...más de 6 meses...pero al menos no me olvido jejejeje, al realizarlo me he encontrado que no funciona...Os comento que he realizado por si hay algún error...
Primero he probado los dos PIC con el mismo programa y con un cristal cada uno y ha funcionado perfectamente (como era de esperar), el código usado para ambos en esta prueba es el sigiuente.
#include<18F24K20.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP //fuses para los demás micros //CON CLOCK
#use delay(clock=12000000)
#use rs232(baud=115200, xmit=PIN_C6, rcv=PIN_C7, stream=PC)
void main(void)
{
while (TRUE)
{
printf("PRUEBA\r\n");//\r=CR=13; \n=LF=10
output_high(PIN_A0);
delay_ms(1000);
printf("PRUEBA\r\n");//\r=CR=13; \n=LF=10
output_low(PIN_A0);
delay_ms(1000);
}
}
Una vez probado el correcto funcionamiento de ambos (ver como se enciende y apagan los led en cada pic a un ritmo de 1 segundo) he quitado el cristal a uno de ellos y he tirado un cable de la patilla CLKOUT del micro que tiene el cristal a la patilla CLKIN del micro que NO tiene cristal, una vez realizado esa modificación en el HW, también he realizado una modificación en el SW del micro que NO tiene cristal y he puesto el siguiente código.
#include<18F24K20.h>
#fuses EC, NOWDT,NOPROTECT,NOLVP //fuses para los demás micros //SIN CLOCK
#use delay(clock=12000000)
#use rs232(baud=115200, xmit=PIN_C6, rcv=PIN_C7, stream=PC)
void main(void)
{
while (TRUE)
{
printf("PRUEBA\r\n");//\r=CR=13; \n=LF=10
output_high(PIN_A0);
delay_ms(1000);
printf("PRUEBA\r\n");//\r=CR=13; \n=LF=10
output_low(PIN_A0);
delay_ms(1000);
}
}
Es decir he sustituido el fuse HS por el fuse EC y como resultado me encuetro que los led se apagan y se encienden pero a un ritmo de entre 10 y 12 segundos en ambos micros...
Alguien sabe que puede estar pasando.
Un saludete y como siempre mil gracias compañeros.
-
Qué raro, ¿no tienes osciloscopio o frecuencímetro para mirar qué está pasando en los pines de clock?
-
Qué raro, ¿no tienes osciloscopio o frecuencímetro para mirar qué está pasando en los pines de clock?
Acabo de mirar el clock y aparece una precio onda sinusoidal de una frecuencia de 12MHz tanto en el CLKOUT del micro que tiene el cristal como en el CLKIN del micro que NO tiene el cristal.
Acabo de hacer una prueba, poniendo el mismo código en los dos, con el fuse HS incluso en el micro que NO tiene cristal y funciona perfectamente
#include<18F24K20.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP //fuses para los demás micros //CON CLOCK
#use delay(clock=12000000)
#use rs232(baud=115200, xmit=PIN_C6, rcv=PIN_C7, stream=PC)
void main(void)
{
while (TRUE)
{
printf("PRUEBA\r\n");//\r=CR=13; \n=LF=10
output_high(PIN_A0);
delay_ms(1000);
printf("PRUEBA\r\n");//\r=CR=13; \n=LF=10
output_low(PIN_A0);
delay_ms(1000);
}
}
En cambio le vuelvo a poner el fuse EC al micro que no tiene el cristal, reseteo el sistema y el micro que tiene cristal funciona perfectamente y el micro que no tiene cristal funciona muy lento (como antes), he vuelto a mirar las patas del CLK en ambos pines y estan correctamente...
¿Qué hace exactamente el fuse EC?,¿a qué se debe que funciona con el fuse de High Speed (HS) si no tiene un cristal puesto?.
Gracias.
-
Pues quizás sea que pasa eso con los 18F.
Yo hice la prueba con un par de micros (no me acuerdo de qué familia) y en CLKOUT no se veía la senoidal, sino una cuadrada que ingresada al otro micro lo hacía oscilar.
Se supone que el fuse EC lo configura para que con una señal de clock externa funcione (no un cristal, sino una señal cuadrada).
-
Hola, veo que el PIC18F que usas trae oscilador interno escalable hasta 64MHz (16MIPS), pero talvez haya una mejor razón para usar uno externo.
Yo habilitaría el Power Up Timer ya que si usas EC es probable que el PIC asuma que desde los primeros ciclos el reloj ya está estable, cosa que no es cierta porque al usar cristal éste arranca lentamente. Con el power up timer el pic espera varios ms hasta que elreloj esté estable y es entonces cuando comienza a ejecutar programas.
Por cierto, quise bajar la datasheet de microchip pero me sale un error de que el archivo no existe :(
-
Hola, veo que el PIC18F que usas trae oscilador interno escalable hasta 64MHz (16MIPS), pero talvez haya una mejor razón para usar uno externo.
En este caso no hay mayor razón que la ignorancia y las ganas de aprender gracias a gente como vosotros ;-). Por cierto,¿¿¿cómo podría hacer para que el PIC fuese a 16MIPS con el clock interno, que directivas del CCS me permiten realizarlo???.
Yo habilitaría el Power Up Timer ya que si usas EC es probable que el PIC asuma que desde los primeros ciclos el reloj ya está estable, cosa que no es cierta porque al usar cristal éste arranca lentamente. Con el power up timer el pic espera varios ms hasta que elreloj esté estable y es entonces cuando comienza a ejecutar programas.
Ya no dispongo del material, pero mañana en cuanto pueda le hago esto que comentas a ver que ocurre, aunque antes tendría que saber como se hace...creo que con el fuse PUT.
Por cierto, quise bajar la datasheet de microchip pero me sale un error de que el archivo no existe Sad
Aquí le tienes :D
Datasheet 18F2XK20 (http://www.4shared.com/file/203134857/25659c77/Datasheet_18F24K20.html)
Muchas gracias.
-
Para configurar el oscilador interno lo realizas mediante los fuses correspondientes (ver *.h del dispositivo) y setup_oscillator.
Saludos!
-
Leyendo la datasheet creo que puedes hacerlo con esto:
#fuses INTRC_IO //reloj interno sin salida en pin
#fuses NOFCMEN //sin chequeo de cambio de relojes
#fuses PUT
y luego en el programa debes poner
setup_oscillator(OSC_64MHZ | OSC_INTRC);
Pruébalo con un led y delay de 1s para ver si corre a la velocidad programada.
-
Para configurar el oscilador interno lo realizas mediante los fuses correspondientes (ver *.h del dispositivo) y setup_oscillator.
Hay tantos fuses en este PIC que no sé ni para que sirven muchos de ellos. :5]
Leyendo la datasheet creo que puedes hacerlo con esto:
Código:
#fuses INTRC_IO //reloj interno sin salida en pin
#fuses NOFCMEN //sin chequeo de cambio de relojes
#fuses PUT
y luego en el programa debes poner
Código:
setup_oscillator(OSC_64MHZ | OSC_INTRC);
Pruébalo con un led y delay de 1s para ver si corre a la velocidad programada.
Imagino también que habrá que poner
#use delay(clock=64000000)
Mañana lo intento y comento el resultado. Por cierto que significan estos dos fuses más exactamente.
#fuses INTRC_IO //reloj interno sin salida en pin
#fuses NOFCMEN //sin chequeo de cambio de relojes
Otra pregunta tonta es...si ya tiene internamente un clock a 16MHz que con un PLLx4 hace 64MHz...entonces, ¿¿¿para que sirve poner un cristal???, es decir, ¿¿¿qué ventajas tendría en este caso???...
Gracias.
-
Sí, agrega el clock de 64M.
Usar clock interno es sólo útil para aplicaciones que no son sensibles a retrasos. Un oscilador RC interno cambia su frecuencia de oscilación debido a cambios de temperatura. Si lo usas para un RTC entonces después de algunos meses habrá retrasos o adelantos de segundos en el tiempo.
Pero los cristales son mucho más precisos, oscilan con mejores tolerancias y no cambia mucho su frecuencia con la temperatura.
Es cuestión de tolerancias el usar uno o el otro.
Incluso hay pic24 que también traen oscilador interno y es tan bueno que cumple con las tolerancias para usarlo para el módulo USB.
-
Para configurar el oscilador interno lo realizas mediante los fuses correspondientes (ver *.h del dispositivo) y setup_oscillator.
Hay tantos fuses en este PIC que no sé ni para que sirven muchos de ellos. :5]
Eso se arregla leyendo el datasheet! :mrgreen: En el capitulo de características especiales se encuentra los detalles de los bits de configuración.
Saludos!
-
No siempre Suky. Hay etiquetas FUSE que no son idénticas a lo que aparece en los diagramas de la datasheet. Siempre hay que experimentar para conocer su objetivo final, compilar el programa y comparar los bits levantados con los que uno esperaba.
-
No siempre Suky. Hay etiquetas FUSE que no son idénticas a lo que aparece en los diagramas de la datasheet. Siempre hay que experimentar para conocer su objetivo final, compilar el programa y comparar los bits levantados con los que uno esperaba.
Te referís al nombre que le coloca CCS? Si es el caso, si, puede que no se sepa bien a cual se refiere. Pero no te compliques perdiendo tiempo en pruebas, usa el soft programador que es mucho mas transparente en es caso ;-)
Saludos!
-
Hola compañeros:
Te referís al nombre que le coloca CCS? Si es el caso, si, puede que no se sepa bien a cual se refiere. Pero no te compliques perdiendo tiempo en pruebas, usa el soft programador que es mucho mas transparente en es caso wink
Desgraciadamente no me fio mucho del SW y más cuando se trata de tiempos...pero aún así cuando no dispongo del micro físico siempre lo uso...ya que no queda otra.
Respecto al programa, he realizado lo siguiente y parece que funciona perfectamente, aunque tiene un cierto desfase, es decir si pongo este código en el micro sin cristal, a la salida del PIN_A0, el osciloscopio me da una señal cuadrada periódica de frecuancia 10.04Hz
#include<18F24K20.h>
#fuses INTRC_IO //Oscilador interno RC, no CLKOUT //CLKIN y CLKOUT como I/O //Poniendo INTRC de la misma frecuencia en PIN_A0
#fuses NOFCMEN //Quitándolo o no da la misma frecuencia en PIN_A0
#fuses PUT //Power Up Timer //El micro empieza ms más tarde para estibilzar la tensión //Quitándolo o no da la misma frecuencia en PIN_A0
#fuses NOWDT //Sin perro guardian
#fuses NOPROTECT //Sin protección de lectura
#fuses NOLVP //Sin programación Low Voltage
#FUSES BROWNOUT //Se resetea el micro cuando baja la tension a niveles no seguros //Quitándolo o no da la misma frecuencia en PIN_A0
#use delay(clock=64M)
#use rs232(baud=115200, xmit=PIN_C6, rcv=PIN_C7, stream=PC)
void main(void)
{
//setup_oscillator(OSC_64MHZ | OSC_INTRC);//No se pone pues ya queda definido con el fuse INTRC y use_delay, si se pone no funciona el micro
while (TRUE)
{
output_high(PIN_A0);
delay_ms(50);
output_low(PIN_A0);
delay_ms(50);
}
}
Por otro lado si pongo el siguiente código, en el micro con cristal de 12MHz me da una frecuencia exacta de 10.00Hz
#include<18F24K20.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP //fuses para los demás micros //CON CLOCK
#use delay(clock=12M)
#use rs232(baud=115200, xmit=PIN_C6, rcv=PIN_C7, stream=PC)
void main(void)
{
while (TRUE)
{
output_high(PIN_A0);
delay_ms(50);
output_low(PIN_A0);
delay_ms(50);
}
}
¿Qué le puede estar pasando a esto?
Me gustaría probar el micro que tiene cristal, y hacer así una prueba más exacta entre los micros, con un clock de 64MHz con un cristal de 12MHz externo pero no puedo ponerle el fuse PLL4...¿¿¿Cómo puedo hacer para que corra a 64MHz????
Un saludete y gracias.
-
Para que el oscilador del cpu opere a 64MHz a partir de un cristal externo debes usar uno de 16MHz y pasarlo por el 4xPLL. Debes activar el fusible H4 en CCS (HSPLL en el diagrama).
http://img191.imageshack.us/img191/8881/pice.png
(http://img191.imageshack.us/img191/8881/pice.png)
-
Hola migsantiago:
Primero gracias por contestar, como siempre estas para todo y es de agradecer.
Por otro lado como no he encontrado para que servia el fusible H4, he optado por poner este código un poco buscando en el datasheet y hacerlo a "pelo". Creo que está bien, al menos los temporizadores funcionan y los delay también.
#include<18F24K20.h>
#fuses NOWDT,NOPROTECT,NOLVP //fuses para los demás micros
#rom int8 0x300001 = {0x06} //Es igual que poner 00000110, FOSC<3:0>=0110=HS PLL Enable, donde 0x300001 es el registro del CONFIG1H
#use delay(clock=64M)//Con un cristal externo de 16MHz
#use rs232(baud=115200, xmit=PIN_C6, rcv=PIN_C7)
Muchas gracias por la ayuda, por cierto he probado a poner el H4 y en el registro de configuración de bits aparece lo mismo que si ponemos lo del rom anterior ;-), además lo he probado en un micro físico y funciona perfectamente, si es que eres un crack migsantiago. :-/
-
No hay de qué. Ya sabes que todo está en la datasheet, el problema es hacerlo coincidir con las etiquetas del CCS.
Hay etiquetas que ni siquiera traen descripción:
http://img62.imageshack.us/img62/8629/ccs.png
(http://img62.imageshack.us/img62/8629/ccs.th.png) (http://img62.imageshack.us/img62/8629/ccs.png)
En fin, es prueba y error, pero nada de cracks.