Atmel Inicio 4: Dos Blinky, interruptores, resistencias pull-up y poco Ops (9 / 11 paso)

Paso 9: Blinky dos – el significado de las declaraciones

La idea general del programa Blinky dos: en primer lugar, establecer B0 como una salida y B1 (y el resto) como entrada. B0 impulsa el LED y B1 es una entrada para el interruptor. Queremos que el LED parpadee, que significa que B0 debe constantemente cambiar Estados cuando la entrada B1 está en la lógica 0 (es decir, polos a tierra). Para el LED parpadea, necesitamos escribir alternativamente 0 y 1 en exactamente uno de los pines, es decir B0 sin afectar cualquier otro pin. Hacemos esto mediante el uso de operaciones bit a bit de manera que se afectan sólo B0. Para determinar si la entrada B1 es lógica 0, utilizamos una máscara (y una operación bit a bit) para singularizar el bit B1 y comprobar si es cero, lo que corresponde al LED en modo intermitente. Normalmente, uno no utilizaría ese arreglo complicado a menos que no había otra opción. El interruptor sería probablemente colocarse en otro puerto disponible aparte de lo LED.

Para algunos de la discusión a continuación, puede imprimir dos Blinky codificación para comparar fácilmente la codificación con la explicación.

  1. El #include, #include y #define F_CPU 8000000UL no han cambiado del Blinky, ni tiene las declaraciones DDRB = 0b00000001, while(1) y las declaraciones de _delay_ms.

  2. Aviso que DDRB = 0b00000001 establece B0 como salida mientras que todos los otros B física los pines son entradas a la MCU. En particular, B1 es una entrada. B0 impulsa el LED y B1 detecta el interruptor.

  3. PORTB = 0b00000010: aquí, puesto que B0 es una salida, la mano derecha 0 en esta asignación de PORTB fija pin B0 a cero voltios (LED 'off'). A continuación, puesto que B1 es una entrada, el 1 en la asignación de PORTB escribe un 1 en una entrada (B1) que activa la resistencia de pull-up de B1.

  4. uint8_t: entero sin signo de 8 bits, que generalmente se llama un 'byte'. Este tipo de variable mantenga números consisten en 8 bits. Esta variable puede variar de 0 a 11111111 255 (o 0 a 0xFF). El uint8_t es carácter definido y no es nativo de C y C++ aunque esas lenguas tienen 'carácter' y 'unsigned char'. Nota que un byte 'firmado' por ejemplo int8_t también tendría un valor de 0 a 0xFF pero el pedacito más significativo (es decir, la z en 0bzxxxxxxx) es 1 para negativos y 0 para números positivos.

  5. Máscara de uint8_t = 0b00000010: define una variable de 8 bits máscara que se le da el valor de 0b00000010. La máscara se utilizará para eliminar los bits 0 y 2-7 de consideración.

  6. Uint8_t MaskL = 0b00000001: define un 8 bit masking MaskL variable con un valor de 0b00000001. El L MaskL sirve como un recordatorio de que se aplica a lo LED. MaskL servirá para quitar los B1 a B7 de consideración y sólo afecta al bit B0.

  • Prueba de uint8_t = 1: una variable de 8 bits el valor inicial de 0b00000001. En este caso, el valor inicial no importa puesto que la variable prueba le dará un valor antes de comprobar su valor. La parte '= 1' podría haber quedado sin embargo, el punto y coma sigue siendo necesario.

  • Prueba = PINB & máscara: declaración del PINB leerá los bits en el registro que representa los bits B7 a B0. El '&' representa un poco a poco lógico (ver cuadro 2). Sólo broca #1 en la variable de prueba (es decir, el bit correspondiente a B1) conserva el valor original de PINB después el enmascaramiento (es decir, & máscara) [16]. Por lo tanto según la tabla 2, la variable para que prueba tendrá todos los ceros excepto posiblemente bit B1 que puede ser 0 o 1.

    Cuando el extremo del cable se conecta en el riel de 0v, pin B1 será de cero y así máscara & PINB producirá cero para todos los bits y prueba por lo tanto, tendrá el valor de 0. El MCU luego conducirá el LED 'encendido'. Si se quita el extremo del alambre, la resistencia de pull-up colocará Vcc en el pin B1 para que el valor de la máscara & PINB tendrá el valor 0b00000010. El MCU ver un valor distinto de cero para la prueba y desactiva el LED.

  • if(x): un control de flujo que ejecuta sentencias entre las dos siguientes llaves {} cuando la declaración x es cierto. En este caso, la declaración de x tiene la forma de prueba == 0. El doble signo de igual '==' le pregunta si la variable 'prueba' es igual a 'cero' (es decir, 0 x 00). En C y C++, el lógico 'false' es equivalente al valor '0', pero la lógica 'true' es cualquier cosa no '0' como '1' o 5' y así sucesivamente. Para Blinky dos, la variable 'Test' es cero cuando el interruptor está cerrado y que ha cuando queremos que parpadee el LED. Para que usar la declaración "si (prueba == 0)'.

  • PORTB | = MaskL: generalmente, la línea vertical | significa bit a bit o [16]. La declaración es un atajo para

    PORTB = PORTB | MaskL

    La mano derecha PORTB lee el valor anterior a portB. La mano izquierda PORTB después escribe los resultados de la bit a bit o a portB. El enmascaramiento utiliza MaskL = 0b00000001 con 1 sólo en la posición #0 (correspondiente a B0), que controla el LED. O será entonces sólo afectan bit B0 estableciendo en lógica 1 (pin 12 será Vcc) como se analizó en conjunto con la tabla 3. Los otros bits en la escritura del portB será el mismo cuando se lee primero. Así cuando PORTB está escrito, ninguna de las resistencias de pull-up será activada o desactivada! 1 que luego coloque 5v en el pin B0 físico y que activará el LED, se escribirá sólo el bit menos significativo (por ejemplo, B0).

  • PORTB & = ~ MaskL: esta declaración es el atajo para PORTB = PORTB & ~ MaskL donde y es la operación bit a bit (véase tabla 4). La mano derecha PORTB Lee los valores anteriormente escritos a portB. La mano izquierda PORTB escribe el resultado de la y de vuelta a portB. Dado que MaskL = 0b00000001 entonces ~ MaskL = 11111110. El y establezca el bit #0 de PORTB a lógica 0. Los bits restantes del PORTB no serán afectados y los valores originales se escribe de nuevo a portB. Por lo tanto no se afectará la conectividad de las resistencias de pull-up. El pin B0, que conduce el LED, se pondrá a cero y el LED estará 'off'.

  • Artículos Relacionados

    Atmel Inicio 3: Binky uno – puerto, PIN, DDR y LED

    Atmel Inicio 3: Binky uno – puerto, PIN, DDR y LED

    M. A. Parker c2015Blinky, el LED que parpadea, se muestra cómo utilizar el lenguaje C y C++ en el estudio de Atmel (AS) para controlar el Atmel MCU puertos de entrada y salida (es decir, IO) y revela la vida 'secreta' de los registros del puerto de A
    Atmel Inicio 5: Lifeline

    Atmel Inicio 5: Lifeline

    M. A. Parker c2015La vida es un circuito simple basado en el microcontrolador de Atmel ATTiny2313A unidad (MCU) que funciona como una fuente de reloj sustituto para un objetivo MCU inoperante de fusibles reloj incorrecto. El proyecto, destinado a ser
    Atmel Inicio 2: Fusibles y circuitos de microcontroladores

    Atmel Inicio 2: Fusibles y circuitos de microcontroladores

    M. A. Parker c2015Fusibles y circuitos crea un circuito simple pero importante en protoboard de un experimentador que se utilizará como plataforma básica para muchos proyectos de microcontrolador y los parámetros del microcontrolador (es decir, fusib
    Powered USB interruptor de badajo - HW muy poco necesaria!

    Powered USB interruptor de badajo - HW muy poco necesaria!

    Hi all!¡ Gracias por echar un vistazo en mi instructable!  Si por casualidad usted ha visto mi original clap-clap / Plas Plas circuito instructable.  Este circuito de la chapaleta es muy diferente de mi original, que no requiere absolutamente ninguna
    Atmel arranque 1: Estudio de Atmel y programador

    Atmel arranque 1: Estudio de Atmel y programador

    M. A. Parker c2015Estudio instalación de Atmel (AS) y un programador representan los primeros pasos [0] en el camino al uso de una unidad individual de Atmel AVR microcontrolador MCU [1] en contraposición a la MCU-en-una-junta como Arduino [2]. Aquí
    Construcción de su propio miniordenador de compañero Micromite

    Construcción de su propio miniordenador de compañero Micromite

    La Minicomputadora de compañero Micromite es la próxima generación de la serie de Mini computadora de bolsillo.Es la combinación de dos sistemas de código abierto, el software Micromite, una creación de PIC32 por Geoff Graham y el propulsor de la par
    Arduino Nano: Con resistencia de pull-up de Visuino

    Arduino Nano: Con resistencia de pull-up de Visuino

    Una de las características más infrautilizadas de Arduino son las Resistencias pull-up de los pines digitales. Todos sabemos que están ahí, y todavía nos seguimos olvidando de que podemos usarlos y seguir agregando resistores externos cuando no son n
    Lectura de interruptores con ATtiny2313

    Lectura de interruptores con ATtiny2313

    ha habido varios tratar de Instructables con salidas del ATtiny2313 y similares dispositivos del AVR. Por ejemplo,. Trabajando en el último de ellos desde el verdadero Elliot, que demostró cómo controlar motores paso a paso, encontré que sería muy út
    Arduino programable constante actual potencia resistencia carga ficticia

    Arduino programable constante actual potencia resistencia carga ficticia

    Da gusto ver que han llegado a esta pagina para aprender a construir una carga ficticia de corriente continua constante programable. Esta carga le permitirá dibujar un conjunto actual de cualquier fuente. Esta carga también se puede definir a una res
    Interruptor controlado de SORBO y soplo de Arduino

    Interruptor controlado de SORBO y soplo de Arduino

    Arduino la serie de microcontroladores se abre un mundo enorme de posibilidades para los programadores novatos y aficionados! Con sistemas de libre desarrollo y tutoriales y una amplia gama de funciones de la biblioteca y muestra bocetos, casi cualqu
    Pantallas de inicio

    Pantallas de inicio

    Nota: por fin tengo mi cámara averiguado por lo que solo debe haber 1 o 2 imágenes borrosas. En con el Instructable!Pantallas LCD es una de las mejores cosas para añadir a cualquier proyecto ahora. Usted puede utilizarlos para mostrar cosas de la vel
    Solar Powered corazón Blinky LED colgante joyas

    Solar Powered corazón Blinky LED colgante joyas

    Este instructable es solar powered corazón con un pulso rojo LED. Mide aproximadamente 2" de 1.25", incluyendo la ficha USB. Tiene un agujero por la parte superior de la Junta, facilitando la suspensión. Lo usa como un collar, pendientes, bono e
    R/C control interruptor de abejones

    R/C control interruptor de abejones

    Aunque hay muchos buenos circuitos disponibles en internet para proyectos similares, tuve un problema dedicado a resolver. La mayoría de los circuitos disponibles enciende sus salidas en posición de palo media (50%). Mi abejones todos utilizan seis c
    Hacer una resistencia Variable con 1 millón

    Hacer una resistencia Variable con 1 millón

    la semana pasada en mi colegio de física laboratorio tenemos que utilizar estas 'cajas' de resistencia variable. Tenían dos entradas y seis diales y podrían generar 1 millón resistencias diferentes en las dos entradas. Yo sabía que tenía que tener un