4 votos

El reloj externo de ATtiny no funciona

Por lo tanto, he estado queriendo romper con la abstracción del arduino desde hace un tiempo. Hice un tablero que tiene un ATtiny10 con un cristal y una salida. No puedo por mi vida entender lo que estoy haciendo mal.

Este es el problema: Cuando selecciono la fuente del reloj, el AVR deja de funcionar.

Hice que hicieran un PCB (pequeño) a medida para montarlo todo. Pensando que no hice algo bien (aunque el esquema se veía bien)

Cambié el diseño e hice otro (para el segundo, tenía trazos con el reloj rodeado por un plano de tierra (no funcionaba todavía) [También, el primer diseño usaba todo menos el AVR proveniente de ebay. Pensando que tal vez era un problema de calidad, el segundo tablero se obtiene totalmente de Mouser]

Por último, para asegurarme de que no era un idiota absoluto, compré un tablero de conexiones y sólo hice el circuito. Esto todavía funcionaba como todos los demás

Funciona muy bien con el oscilador interno, pero en cuanto programo para cambiar la fuente del reloj se detiene.

Schematic

Note que agregué R2 para mantener el MOSFET derribado pero no lo lleno para programarlo, ya que el TPI (Tiny Programming Interface) usa pullups en esa línea y no puedo llenarlo si voy a programar el chip

Página 21 de la hoja de datos sobre el cambio de reloj Clock Settings

Página 22 de la hoja de datos relativa al preescalador (Preescalador con reloj, no con temporizador) Clock Prescaler

Estoy usando un programador MkII de Atmel y estos son los bits de los fusibles:

Reloj externo de salida

0xFB

Esto fue programado a través del estudio de Atmel y he usado un par de ATtiny's diferentes y los chips mantuvieron estos ajustes una vez programados, así que estoy bastante seguro de que los fusibles están escribiendo correctamente

Ahora el código: (Este es el programa completo, la parte del temporizador funciona (obviamente no aunque una vez que el reloj cambia))

#define F_CPU   8000000

#include <avr/io.h>
#include <avr/interrupt.h>

void initClock()
{
    // Setting CLKPSR does not affect the problem (It doesn't work regardless of what this is set to)
    // I have tried this before and after setting CLKMSR

    CCP = 0xD8;
    CLKPSR = 0;

    CCP = 0xD8;
    CLKMSR = 0b10;

}

void initPorts()
{

    DDRB |= (1 << PORTB0); // PB0 = OCR0A
}

void initTimer()
{
    // I posted this code just in case, this works as expected (but only on the internal oscillator)

    // We want Compare Output Mode, Clear OC0A on Compare Match
    TCCR0A =    (1 << COM0A0);

    // Overflow setting
    TIMSK0 |= (1 << OCIE0A);

    // We will not use a prescaler
    // This also starts the timer
    TCCR0B =    (1 << CS00) | (1 << WGM02);

    // This is the value at which the timer will restart
    OCR0A = 8299;

    // Set external interrupts
    sei();

}

int main(void)
{
    initClock();
    initPorts();
    initTimer();

    while(1)
    {

    }
}

Seguramente tiene que haber algo que me estoy perdiendo. He tratado de leer y releer las secciones del reloj de la hoja de datos para descubrirlo yo mismo. Sin embargo, estoy perplejo. Tal vez alguien pueda ayudarme a entender mi error.

¡Gracias! Por favor, hágame saber si hay más información que pueda añadir para que sea más fácil de entender.

Hoja de datos de Attiny10

0voto

alexan_e Puntos 8256

Usar el cristal de dos patas no es posible con el dispositivo específico. Sólo existe la opción de utilizar una fuente de reloj externa, por lo que se puede utilizar un oscilador externo como el siguiente y aplicar los pulsos de reloj al pin CLKI (pin 1).

enter image description here

A diferencia del cristal de dos patas que necesita circuitos adicionales dentro del mcu y dos condensadores, este oscilador de cristal de cuatro pines es un oscilador completo que sólo necesita energía para generar el reloj.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X