martes, 12 de junio de 2012

Formas de bloquear y desbloquear un ATmega8

Bloquear un ATmega es algo muy común cuando se inicia con estos micros. En mi primera semana con los ATmega8 llegue a bloquear hasta 4, pero felizmente logre desbloquearlos.

Aquí presento algunos consejos que son obtenidos en base a la experiencia, espero esto ayude a algunos.
Un problema no tan común, pero que les podría ocurrir (por desconocimiento) es deshabilitar el reset. Esto puede ocurrir programando el fuse "Reset Disable(Enable PC6 as i/o pin);"RSTDISBL=0". Este fuse se encuentre el High Fuse.

Hacer esto cuando se programa mediante SPI bloqueara el uC. Luego de esto no se podrá realizar ninguna operación con un programador SPI. La literatura indica usar un PPHV (Programador Paralelo de Alto Voltaje) para habilitar nuevamente el Reset. Personalmente nunca cometí este error.

Ahora el problema mas común, bloquearlo por no escoger el oscilador correcto. Todos estos fuses los encontramos en Low Fuse.

Tener presente que Low Fuse esta compuesto por.

LF

Donde…
BODLEVEL : Permite seleccionar el nivel del BOD.
BODEN: Permite habilitar el BOD.


SUT: Permite escoger un retardo (en ms) para el inicio del programa, esto después de haber energizado.
CKSEL: Permite escoger entre los diferentes tipos de fuentes de reloj.


- Si programamos Ext. Clock [CKSEL=0000]:Aplicando una señal de [4MHz-6MHz] al pin XTAL1 deberíamos poder trabajar sin problemas.



- Si programamos Int. RC Osc [CKSEL=0001 hasta CKSEL=0100] : Con este oscilador no deberían tener problemas, solamente tener en cuenta que la frecuencia de programación ISP debe ser menor a 1/4 la frecuencia RC. Es decir que si escogemos RC=2MHz nuestra frecuencia ISP debe ser menor a 500KHz.



- Si programamos Ext. RC Osc[CKSEL=0101 hasta CKSEL=1000]: Aplicando una señal de [4MHz-6MHz] al pin XTAL1 deberíamos poder trabajar sin problemas, o al menos poder cambiar a otro tipo de oscilador.