Los AVR, así como casi cualquier otra cosa que use osciladores resonantes paralelos (o, simplemente, tiene 2 clavijas de reloj / XTAL) siempre pueden ser controlados por un reloj externo directo que omite cualquier configuración incorrecta que se haya quemado accidentalmente en los fusibles. El pin del reloj "real" es, en el caso del ATmega32, el pin XTAL1. Los bits del fusible cambian el comportamiento del pin XTAL2 para que genere su propio reloj si el circuito resonante paralelo correcto está conectado entre XTAL1 y XTAL2. Todos los circuitos del oscilador tienen la salida como parte de un bucle cerrado, por lo que, independientemente de la configuración del bit de fusible, XTAL1 es donde se alimenta la salida de un oscilador externo, y el AVR no sabe ni se preocupa de dónde viene realmente su reloj. Los bits de fusible solo alteran el material entre XTAL1 y XTAL2, pero XTAL1 es la entrada real para el reloj.
Todo lo que has hecho ha roto temporalmente la capacidad del chip para generar su propia fuente de reloj, por lo que todo lo que necesitas hacer es hacer que otra cosa conduzca su pin de reloj (XTAL1). Er, no necesitas simular un oscilador RC, y ciertamente no puedes simular uno en ningún significado real de la palabra usando un Arduino. Independientemente, no hay necesidad o punto. Simplemente vierta una onda cuadrada de 1 MHz con un 50% de servicio en XTAL1 y estará listo para comenzar.
Podrías hacer esto más fácilmente con ese Arduino, dependiendo de lo rápido que sea. Si se ejecuta a 8MHz, este código debería producir un reloj de 1MHz en el pin digital 11.
void main()
{
DDRB = 0xFF;
cli(); // disable interrupts
while(1)
{
PORTB |= 0x8;
PORTB |= 0x8;
PORTB &= ~0x8;
}
}
Si tienes un arduino funcionando a 16MHz, necesitamos distribuir de manera uniforme 8 instrucciones adicionales, así que prueba:
void main()
{
DDRB = 0xFF;
cli(); // disable interrupts
while(1)
{
PORTB |= 0x8; //sbi 2 cycles
PORTB |= 0x8; //sbi 2 cycles
nop(); // 1 cycle each
nop();
nop();
nop(); // 8 cycles spent with D11 high
PORTB &= ~0x8; // cbi 2 cycles
nop(); // 1 cycle each
nop();
nop();
nop();
} // rjmp 2 cycles - D11 spent 8 cycles low.
}
Aquellos te darán esa agradable onda cuadrada de 50 MHz de 1MHz que tu ATmega32 desea.