He escrito un fragmento de código que manipula el DDR para el puerto B:
#include <avr/io.h>
int main(void)
{
DDRB = 0;
DDRB = 1;
DDRB = 2;
DDRB = 4;
DDRB = 8;
DDRB = 16;
DDRB = 32;
DDRB = 64;
DDRB = 128;
return 0;
}
Estoy usando el simulador y me cuesta mucho descubrir cómo se mapea esto en la vista de E / S y qué ocurrirá en el dispositivo real. Paso por encima de las instrucciones de DDRB = 1..128 .
Como se esperaba, los valores de DDRB en la vista de E / S van de 0x1 a 0x20 mientras ejecuto las primeras 6 instrucciones, DDRB = 1..32 . Sin embargo, las otras dos instrucciones DDRB = 64,128 tienen el efecto de configurar DDRB en la vista de E / S en 0x0. En cierto modo, esto no es del todo sorprendente, ya que el ATtiny85 tiene solo 6 pines PB. Pero, ¿se espera este comportamiento?
La verdadera pregunta es: ¿cuáles son los cuadraditos en la vista de E / S junto al valor de DDRB? Aquí está el estado de DDRB en I / O ver después de cada instrucción en main :
DDRB= 0; --> DDRB 0x37 0x0 000000
DDRB= 1; --> DDRB 0x37 0x1 000000
DDRB= 2; --> DDRB 0x37 0x2 000000
DDRB= 4; --> DDRB 0x37 0x4 000001
DDRB= 8; --> DDRB 0x37 0x8 000010
DDRB= 16; --> DDRB 0x37 0x10 000100
DDRB= 32; --> DDRB 0x37 0x20 001000
DDRB= 64; --> DDRB 0x37 0x0 000000
DDRB=128; --> DDRB 0x37 0x0 000000
Además, si muevo el mouse sobre los cuadraditos, sus nombres van desde Bit 2 (el extremo derecho) hasta el Bit 7 (el extremo izquierdo). ¿Cómo se relaciona esto con los pines del dispositivo real? y también ¿Por qué se nombran de 2 a 7 en lugar de de 0 a 5, como en el dispositivo (PB0-PB5)? .
Al principio pensé que los fusibles de configuración en el simulador son responsables de que ciertos bits de DDRB no sean programables. Por ejemplo, sé que RSTDISBL no debe estar programado para habilitar PB5, y creo que lo mismo es cierto para el DDR correspondiente. ¿Pero qué columna es PB5 en la vista de E / S? .
También intenté configurar los fusibles en código C:
FUSES =
{
.low = 0x62,
.high = 0x5f,
.extended = 0xff
};
La configuración 0x5f para el fusible alto debe significar que RSTDISBL está deshabilitado, de acuerdo con la calculadora de fusibles en línea. Sin embargo, el comportamiento en la vista de E / S sigue siendo el mismo.