Cómo usar el pin RESTABLECIDO ATTiny PB5 como GPIO

1

Estoy tratando de usar el pin de reinicio como GPIO.

Esto es lo que hice.

Mi esquema es este:

Así que escribí un código muy simple para hacer que ese led parpadee. Este es mi código:

#define F_CPU 8000000L      

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


int main(void)
{
    DDRB = 0xFF;
    PORTB = 0;

    while(1)
    {
        PORTB = 0b00100000;
        _delay_ms(600);
        PORTB = 0b00000000;
        _delay_ms(600);
    }

    return 0;
}

Y después de esto, deshabilité el restablecimiento habilitando el fusible RSTDISBL. Acabo de programar el fusible alto para: 0xFE

Pero el led no parpadea.

¿Qué estoy haciendo mal?

Gracias por su ayuda, chicos.

    
pregunta Jose de arimatea

1 respuesta

1

Si echa un vistazo a la hoja de datos para el ATtiny13 , verá que el pin de reinicio puede puede utilizarse como una línea de E / S "débil", lo que significa que no puede funcionar igual que otras líneas de E / S. En la página 140, hay gráficos que muestran las características de hundimiento actuales frente a la tensión de salida; observe cuánto menos son los valores que las otras líneas de E / S mostradas en las páginas anteriores. ¿Está operando dentro de las especificaciones?

Otras cosas para verificar:

  1. ¿Ha intentado hablar con el chip desde que se verificó que la línea de RESTABLECIMIENTO está desactivada?
  2. ¿Tiene verificación de que su código fue realmente programado para el chip? (Salida AVRDUDE)
  3. ¿Está seguro de que el valor de resistencia de su serie es correcto?
  4. ¿Está seguro de que tiene su LED en la orientación correcta?

Como se señaló en los comentarios, usar la línea de reinicio para E / S significa que las únicas formas de reprogramar su chip son con un cargador de arranque o "Programación en serie de alto voltaje", por lo que no es algo que deba hacer a menos que esté fuera de líneas de E / S y tienen un medio alternativo de programación del chip.

También debe tener en cuenta que ha definido que F_CPU es 8MHz, pero su valor de fusible bajo de 0x6A implica que el fusible de "división de reloj" está habilitado, por lo que su frecuencia de CPU es de 1MHz.

Algunas notas finales:

  • Siempre es una buena idea "desacoplar" la línea VCC con un capacitor cerámico de 0.1uF para GND
  • No necesita una declaración de "devolución" de main en sistemas integrados. ¿A dónde regresaría?
  • Sugeriría usar macros de pines como _BV (PB5) o (1 < < PB5) en lugar del explícito 0b0010000: se compila en la misma cosa
  • en lugar de establecer, retrasar, borrar, retrasar, simplemente alternar el pin como tal:

    PORTB ^ = _BV (PB5);
    _delay_ms (600);

respondido por el Kurt E. Clothier

Lea otras preguntas en las etiquetas