simulación ATtiny85 en AtmelStudio 6.1 (compilación 2730, SP2)

0

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.

    
pregunta damix911

2 respuestas

1
  

En cierto modo, esto no es del todo sorprendente, ya que el ATtiny85 tiene solo 6 pines PB. Pero, ¿se espera este comportamiento?

Según la ATtiny85 datasheet

losbits7:6delosregistrosPORTB,DDRByPINBsonubicacionesdesololecturaconunvalorinicialde0.
Básicamente,ustedestáescribiendoenunaubicaciónqueelfabricantedicequeesdesololectura,encuyocasotodaslasapuestasestáncanceladasconrespectoalcomportamientoesperado.Puedefuncionarbienopuedecausarproblemas.

  

¿quédicenloscuadraditosenlavistadeE/SjuntoalvalordeDDRB?  Pero,¿quécolumnaesPB5enlavistadeE/S?

Cadacuadradoesunbit,comenzandodesde0(ladomásaladerecha)hasta7(ladomásalaizquierda).Miversiónesunpocomásantigua(v6.x)ymuestrabienlosnúmerosdebits

He añadido con rojo la representación de bits de cada caja

Respecto a los fusibles, no creo que tengan ningún efecto en la simulación y tampoco puede cambiarlos en tiempo de ejecución.
Agregarlos al código (nunca he usado de esa manera) es solo una forma de decirle al programador que los configure en un valor específico durante la programación del dispositivo, no tiene ningún efecto durante la ejecución del código.

    
respondido por el alexan_e
1

El ATtiny85 no tiene pines PB6 y PB7, por lo que está tratando de abordar pines de hardware que simplemente no están allí. De acuerdo con la hoja de datos (párrafo 10.4.2 - 10.4.4) estos bits para DDRB, PINB y PORTB siempre son 0.

    
respondido por el jippie

Lea otras preguntas en las etiquetas