confusión de frecuencia de reloj

1

Estoy usando un microcontrolador atmega16 con un oscilador de cristal externo de 12MHz. Pero llegué a saber que la frecuencia del reloj interno es de 1MHz

Necesito calcular el valor UBRR para la comunicación en serie. Necesito una velocidad en baudios de 115200.

Si estoy usando 1MHz en el cálculo del valor UBRR usando la fórmula (F_CPU / (16 * baudios)) - 1, obtengo un número negativo mayor que -1. ¿Cuál debería ser el valor de F_CPU?

por favor, ayúdame ya que no soy un chico de electrónica. Gracias de antemano por cualquier ayuda ...

    
pregunta Debesh Mohanty

2 respuestas

1

La configuración predeterminada de los fusibles para un ATMega es usar el oscilador interno de 8MHz (INTOSC) dividido por 8 (CLKDIV8) . Esto significa que la frecuencia de reloj predeterminada es 1MHz como está viendo. Corrección: para el ATMega16, parece que no hay un fusible CLKDIV8, es parte de los bits de los fusibles de selección de la fuente del reloj, pero el valor predeterminado sigue siendo 1MHz.

Para utilizar la señal de reloj externa de 12MHz, necesita programar la configuración del fusible para seleccionar correctamente la fuente del reloj y deshabilitar la división en 8.

"Engbedded" tiene una calculadora gratuita realmente útil que te ayuda a determinar la configuración de fusibles requerida para los AVR. La calculadora se puede encontrar aquí . Para usted, parece que debería hacer algo similar a Low:0xE0, High:0xD0 , aunque tendrá que comprobarse a sí mismo, ya que hay otras cosas como el vector de reinicio del cargador de arranque y la detección de reducción de tensión establecidas por los fusibles.

    
respondido por el Tom Carpenter
0

Generalmente estos chips son configurables. arrancarán desde el oscilador interno en caso de que no haya un externo. entonces puedes seguir usando ese o el software puede cambiar al externo. luego, por lo general, hay un árbol de reloj en el que se pueden cambiar los bloques internos para usar uno de los relojes disponibles, LUEGO, una vez que haya seleccionado el reloj para su uart, entonces haga lo del divisor. Ciertamente no puedes obtener la velocidad en baudios que quieras con cualquier reloj. 1MHz / 16 = 62500 por lo que o la mitad de eso sería lo más rápido, así que quizás intente 9600 o 4800 si se mantiene con 1Mhz.

    
respondido por el old_timer

Lea otras preguntas en las etiquetas