ATMEGA8 con 8Mhz de cristal ejecutándose a 1Mhz

1

Tengo un ATMEGA8A-PU con un oscilador de cristal de 8Mhz (T8.000 es 8Mhz, ¿verdad?) y el siguiente código C:

#define F_CPU 8000000UL

#include <avr/io.h>
#include <util/delay.h>

int main(void) {
        DDRC = 0b00100000;
        while(1) {
                PORTC ^= 1 << PORTC5;
                _delay_ms(1000);
        }
        return 0;
}

Entonces, solo un código simple, que enciende y apaga el LED cada segundo.

Pero cuando escribo este programa en el controlador, el LED se enciende / apaga después de unos 8 segundos. Cuando sustituyo F_CPU a 1000000UL, cambia casi cada segundo.

Así que pensé, es un problema con los bits de fusible, pero están configurados en F1 (bajo) y D9 (alto), lo que me parece bien.

¿Alguien que tenga una idea de cómo obtengo los 8Mhz completos?

    
pregunta Ethan Leroy

2 respuestas

4
  

Cuando sustituyo F_CPU a 1000000UL, cambia casi cada segundo.

Eso debería darle una pista: la CPU se está ejecutando a 1MHz y no a 8MHz

Tu configuración de lfuse es incorrecta.

lfuse => 0xF1
SUT[1:0] => 11 
CKSEL[3:0] => 0001

Esto selecciona el RC Oscillator interno (consulte la sección 8.2 "Fuentes de reloj" en la Hoja de datos), y el SUT se establece en un valor que no está permitido para este valor de CKSEL (Tabla 8-9)

Para que se ejecute fuera de la extensión de 8MHz. Crystal, necesitas estos ajustes:

De la tabla 8-3:

CKSEL[3:1] = 111 (freq. range is [3.0, 8.0] MHz)
CKOPT = 1 (unprogramed, for low-power mode; if set to 0, you need to change hfuse as well)

De la Tabla 8-4:

CKSEL[0] = 1
SUT[1:0] = 11 (Crystal Oscillator, Slowly rising power: change this if you want)

Esto da lfuse = 0xFF

¡No olvides los condensadores de 22pF!

    
respondido por el ksk
2

Probablemente no haya cambiado ningún fusible y use un oscilador interno de 1MHz. Usted mencionó que está usando un cristal externo, si es así, debe programar algunos fusibles para que funcione.

CKSEL3: 0 fusibles deben ser 1111 (todo no programado - 1 no programado, 0 programado), también pruebe el fusible CKOPT primero programado (1) y luego programado (0) si originalmente no funciona. Eso debería ser todo lo que necesitas hacer para que funcione. Según la hoja de datos , le interesarán las secciones 8.3 Crystal Oscillator y 24.2 Fuse Bits.

    
respondido por el Mihailo

Lea otras preguntas en las etiquetas