La mejor manera de confirmar el reloj del sistema del controlador

0

Me gustaría conocer los trucos o sugerencias que podrían usarse para encontrar el reloj del sistema de microcontroladores de 8 bits. ¿Cuáles son las maneras geniales en que podríamos encontrar el reloj del sistema y se puede verificar con los documentos?

He oído hablar de alternar un pin continuamente pero no conozco los detalles específicos. Sería útil si pudieras compartir tu manera de hacer cosas para encontrar el reloj del sistema.

Sería útil si pudieras enumerar los trucos comunes para verificar el reloj que no sea leer la hoja de datos. Si pudiera determinarlo alternando un pin de i / o continuamente. ¿Qué datos se obtienen de la frecuencia observada? Esto variaría dependiendo de asm o c compiler i trust.

Por favor, ilumíname

Estoy usando pic18f26j50

Saludos

    
pregunta Rookie91

4 respuestas

7

No especificas una familia como tal, pero la has etiquetado como "PIC".

Los microcontroladores PIC tienen la capacidad, al usar un módulo de reloj externo o el oscilador interno, para alimentar la señal del reloj a un pin específico (OSC2), tanto para confirmar el reloj como para conducir dispositivos externos. p>     

respondido por el Majenko
2

Activar un pin de E / S no le dará lo que necesita si el cambio se realiza mediante un bucle. Una operación de salto lleva tiempo y, dependiendo de la arquitectura, puede o no descartar la ejecución de uno o dos comandos ASM siguiendo el comando de salto.

Es mejor si el código está en línea. Solo use ASM ya que no sabe lo que podría hacer el ensamblador.

Lo siguiente es válido para una ATMEL AT8515 pero deberías poder traducirlo a cualquier arquitectura.

.INCLUDE "8515def.inc"
.ORG 0X0000
RJMP RESET

RESET:

LDI R16, HIGH(RAMEND)   ; Stack init
OUT SPH, R16
LDI R16, LOW(RAMEND)
OUT SPH, R16

LDI R16,0XFF        ;PORTB for output
OUT DDRB, R16
OUT PORTB, R16

LDI R21, 0X01       ; bit 0 is high
LDI R20, 0X00       ; bit 0 is low

                    ; copy paste the following two lines as many times as desired
OUT PORTB, R21      ; set PORTB, bit 0 high
OUT PORTB, R20      ; set PORTB, bit 0 low

OUT PORTB, R21
OUT PORTB, R20

OUT PORTB, R21
OUT PORTB, R20

No se olvide de verificar cuántos ciclos de reloj se requieren para que se ejecute el comando SALIDA y que aparezca el nuevo valor en la salida.

Sin embargo, es mejor utilizar un PWM o un periférico de contador de la μC y configurarlo para que cuente hasta 1 y luego se reinicie.

    
respondido por el Evan
1

Puede generar una interrupción periódica y usarla para la sincronización del sistema; por ejemplo, puede generar una interrupción cada 1 ms. Si cuenta eso por 500 y alterna un pin cada 500 ms, obtendrá una indicación de "latido" de 1Hz que un ser humano (o un perro, para el caso) puede ver al mirar un LED.

Por lo general, habrá un poco de inestabilidad debido a la latencia del ISR, etc., pero algunos micros admiten un cambio de pin en la interrupción, por lo que puede preajustarlo (a 499 interrupciones desde la última opción) para alternar el pin exactamente la siguiente interrupción, por lo que hay fluctuación de nivel de nanosegundos incluso en un ancho de pulso de 500 ms.

    
respondido por el Spehro Pefhany
1

Usando el método de alternancia de pin, vería la salida del compilador para ver exactamente qué instrucciones se están utilizando para el ciclo while (1) que está haciendo la conmutación de pin. A continuación, tendría que saber cuántos ciclos de reloj toma cada una de esas instrucciones. Después de convertir las instrucciones al número de ciclos de reloj, mire el alcance y obtenga la mitad del período de la onda cuadrada. Esto corresponderá a un bucle (todo el período implica dos bucles). Cuando divide la mitad del período por el número de ciclos de reloj necesarios para realizar un ciclo, puede encontrar el período de un solo ciclo. Lo inverso de esto será tu frecuencia.

    
respondido por el NickHalden

Lea otras preguntas en las etiquetas