TODOPIC
Microcontroladores PIC => Lenguaje Basic para microcontroladores PIC => Mensaje iniciado por: AABHGA en 26 de Septiembre de 2006, 11:53:12
-
Hola a todos, tengo una pequeña pregunta, usando un OSC de 4Mhz y aplicando la siguiente rutina en 2 PICS diferentes, por ej un 16F877A y un 16F628 que son de diferente velocidad:
DEFINE OSC 4
CICLO:
IF PORTA.0 = 1 THEN S1 = S1 + 1
IF PORTA.1 = 1 THEN S2 = S2 + 1
PAUSE 1
GOTO CICLO
y haciendo que la duración de 1 en el PORTA.0 sea igual en ambos casos (osea con diferentes pics) ¿obtendré exactamente los mismos valores? si no obtengo los mismos, ¿cuanta puede llegar a ser la variacion?
-
Hola.
Mira, no entiendo muy bien tu pregunta :? pero, lo que entiendo (o quiero entender :D) es que preguntas que si con µicros diferentes pero misma frecuencia de cristal será diferente el tiempo de ejecución.
No será diferente, ya que lo que hace que cada instrucción se ejecute en determinado tiempo es la fórmula de 4/fosc.
Si tu µicro (12F629, 16F628, 16F877A, 18F452, etc.) tiene un cristal de 4 megas, trabajará a 1 µicrosegundo, si es de 8 trabajará a 0.5 µicrosegundos, y asi sucesivamente.
Espero te sirva.
-
no, me entendiste por donde no era, me refería en la velocidad de hacer las operaciones, es decir mira el código y omite el comando PAUSE, a eso es lo que me refiero, si obtengo los mismos resultados o van a haber variaciones por la velocidad del micro.
-
Pues creo que a eso se refiere Mario a la velocidad en que se ejecutan las instrucciones, no el Pause y yo la verdad sigo sin entender. Si lo que quieres saber es la velocidad de ejecucion de cada instruccion mario ya te dio la respuesta si no quieres eso pues trata de explicarte algo mejor.
Claro esta que cualquier instruccion en basic se compone de varias intrucciones en asm asi que podria variar
-
mmmmmmmmmmmmmmmmmmmm............................. :?
No debería.
El µicro es capaz de detectar si en una terminal está presente un estado.
Si tienes a la mano un generador de funciones o un timer o tu mismo produce una salida con el µicro para que te sirva de entrada y verás que no debe haber problemas con lo que respecta a la adquisición de información.
Sin embargo (y es harina de otro costal), si durante el tiempo de la pausa surge algún cambio, este no será detectado por las terminales.
Claro que también, si usas un de 4 megas, si la señal es menor a 1 microsegundo o mayor a 1 Mega Hertz no se podrá hacer. Esto es en teoría, si te vas a los manuales tengo entendido que establece en lo correspondiente a características eléctricas, la respuesta de los puertos con respecto a la adquisición y transferencia de información.
Pero no, no debería variar. 8)
-
Umm, entonces no importa si la velocidad del micro es de 4Mhz o 20Mhz, pensé que podría variar basandome en el hecho de hacer una rutina así en 2 pc diferentes, de diferentes velocidades x ej hacerla en un pentium II 300 y en un Athlon XP 2200 los resultados si son diferentes, ya que realiza las operaciones el 2do mas rápido que el primero.
-
Usando esos 2 micros, la velocidad del programa si usas un oscilador de 4MHZ en ambos deberia ser practicamente igual.
Tengamos en cuenta tambien, que habria que ver el codigo ASM que genera el compilador para cada micro.
Suponiendo que el codigo ASM es identico para ambos micros:
Si estas conectando esto a una PC con un programa que envia los valores, y lo probas en dos PC distintas, te aseguro que ninguna PC es igual a otra, ya partiendo de cosas tan detallistas como la cantidad de particulas de polvo dentro del microprocesador a la hora de su fabricacion, como las cargas de tareas en ambas, etc.
Entonces, si tu sistema funciona de la siguiente manera:
PC envia DATO. Microcontrolador responde, PC envia otro dato, Microcontrolador responde...
seguro vas a notar variaciones en la velocidad de procesado, aunque realmente a la diferencia significativa la hace el cambio de PC, y no el uso de un 16F877A o un 16F628 funcionando ambos a 4Mhz.
Saludos.
-
Ok bruno, thx por la explicación, aunque te extendiste mas de lo que me refería pero bue jajajaja. gracias de nuevo.
-
Para un 877A
DEFINE OSC 4
S1 var byte
S2 var byte
CICLO:
IF PORTA.0 = 1 THEN S1 = S1 + 1
IF PORTA.1 = 1 THEN S2 = S2 + 1
PAUSE 1
GOTO CICLO
57 palabras utilizadas.
Para un 628
DEFINE OSC 4
S1 var byte
S2 var byte
CICLO:
IF PORTA.0 = 1 THEN S1 = S1 + 1
IF PORTA.1 = 1 THEN S2 = S2 + 1
PAUSE 1
GOTO CICLO
51 palabras.
El ensamblador no es igual para ambos.
El 16F628 utiliza el Status y el 16F877A usa el PCLATH o algo asi.
Interesante, nunca había hecho el experimento.
De todas maneras, no creo que "tarde más" porque se encierra en un ciclo.
Lo anterior usando PBP 2.45A y MicroCode Studio Plus 2.2.1.1