Principio microcontroladores parte 7: Revisar el primer programa para hacer el parpadeo del LED

Ha escrito el primer programa, que enciende un LED. sí, eso fue espectacular! Bueno, no realmente, pero vamos a introducir un poco de locura para el LED. Le daremos una personalidad "bipolar" por lo que es blink. Luego paso a otro nivel y hacer parpadear muy rápido. El programa es sorprendentemente concisa y fácil de implementar.

Compruébelo usted mismo:

 #include <avr/io.h>#include <util/delay.h> int main(void){ 
DDRB | = 1 << PINB0;
mientras (1)
{
PORTB ^ = 1 << PINB0;
_delay_ms(100);
 } 
 01001011 &10001101equals00001001 

¡ HOLA! Cuáles son esos símbolos loco!! Loco parece ser un tema común aquí. Bueno, voy a explicar. Pero te prometo, es bastante fácil. Basta con memorizar algunas cosas. Me meteré en un poco de detalle, pero si no entiendes, no te preocupes, solo memorizar lo que logra la declaración entera y va a estar bien. Le dará un toque en el camino. Aquí viene el detalle de operaciones bit a bit:

Hay operadores lógicos llamados y, o, no y XOR que nosotros estamos en este momento. Que realmente quieren decir lo que dicen. Esto es todo por el bien de comparación de dos bits, "1" y "0". ¿Ver? Cómo puede simplemente comparar dos números ser difícil! "1" y "1" es verdadero o "1". Y sí, adivinaron, "0" y "0" es falso o "0". Pero ¿qué es "0" y "1" y viceversa? Bueno, falso o "0", obviamente. Esos tipos son diferentes, así que, realmente, son falsas.

Ejemplo operación número binario (el "&" se utiliza en programación para C y):

 01001011 |10001101equals11001111 

Fácil, ¿verdad? Así, o es aún más fácil! "1" o "1" es "1", obviamente. "0" o "0" también es "0". Está empezando a ser muy similar a y, pero aquí está la diferencia. Si los dos números son distintos, esto resultará en "1". Así, "1" o "0" es "1".

Vamos a usar el mismo número binario por ejemplo (ese personaje gracioso "|" es el o, a veces se encuentra por encima de la "\" en el teclado):

 01001011 ^10001101equals11000110 

Hmm, que enciende todos los lugares donde allí faltaban unos! Esto es donde la magia sucede. Sí, mantuvo en el primer número y donde se encuentran en el segundo número binario, pero no el primero, cambió a los. Muy simple. NO simplemente toma todos los bits y les flipa. Por ejemplo, para este número binario: 01001101 se convertirá en 10110010. Se convirtió el 0 en 1 en 0 y 1, pero no se confunda esta con el XOR.

XOR es similar a la OR pero el "1" XOR "1" es "0". Sólo te voy a mostrar el ejemplo y usted puede averiguar qué happenes.

 #include <util/delay.h> 

Sí, lo has adivinado, el "^" sobre el "6" es el símbolo de la XOR. Hmmm... El "|" y el "^" en el programa. Enfriar. Bien, ya que somos el programa de pensamiento, vamos a disect las cosas no sabemos aún!

 DDRB = 0b00000001; 

Ya sabes lo que hace el < avr/io.h >, así que no pierdas tu tiempo con eso, pero hay una nueva declaración #include. El delay.h nos ofrecerá un par de métodos convenientes para usar. Como su nombre lo indica, el delay.h nos proporcionará una manera de crear retrasos en nuestro programa.

Pasando por alto la "principal" ya que sabemos ya, vemos el DDRB cambió. No te asustes! Aquí está el proceso desde donde fuimos a donde nos encontramos:

Esto es lo que teníamos antes. Esto no es una buena forma de minipulating las clavijas ya que acaba de cambiar todos los pernos de 1 a 7 como entrada, pero "Qué pasa si" hemos tenido un programa más grande que usa los pernos para otras cosas, como por ejemplo, pin 2 control de la presión del freno de la allpies para el sistema de frenos antibloqueo. Usted no querría establecer sólo arbitrariamente como entrada. Haría que sus frenos inútil (que serían realmente malos).

 DDRB = DDRB | 0b00000001; 

Necesitamos una forma sólo afectan un poco, el pin bit 0. Bueno, si te fijas arriba en la "o", esto lo podemos hacer con una máscara (no la máscara de carnaval que está pensando, pero una máscara binaria.

 DDRB |= 0b00000001; 

Este se toma su auto antiguo y "O" a una máscara. La máscara es: 0b00000001. Si esto parece el número binario real, pero si el anterior DDRB fue, digamos, 0b01001010, luego hacer un OR para que con nuestra máscara sería: 0b01001010 | 0b00000001 = 0b01001011. Qué es diferente en el resultado. Así es, sólo el pin 0 bit se cambia!

Este statememt puede ser más comprimido en C++:

 PORTB |= 1 << PINB0;_delay_ms(100);PORTB &= ~(1 << PINB0);_delay_ms(100); 

Pero no lo es en el programa. Aunque esto es perfectamente válido, por qué no aprovechamos algunas de las definiciones en el fichero de cabecera io.h. Quiero decir, es que para nuestra comodidad, ¿no? Cuenta mi uso de contracciones! Esto es lo mismo en C++: «es» es realmente «es», como «DDRB | = 0b00000001 "es lo mismo que" DDRB = DDRB | 0b00000001 ". Me hundo en mi silla, con esa mala analogía. Whataver, ayuda!

¿Por qué "DDRB | = 1 << PINB0"?

1 << PINB0 es el acto de crear la máscara. El "1" representa lo que se inserta en la máscara, el << es un operador de cambio izquierda. Hace exactamente lo que dice, y PINB0 es un número de posiciones que el "1" puede cambiar de posición izquierda. En esencia, PINB0 es exactamente igual a 0. Así, se empieza con un 0b00000000 y agregar un "1" para hacer 0b00000001 y luego usted cambia de puesto posiciones 0 a la izquierda. Así te queda 0b00000001, el mismo número de arriba. Entonces, ¿qué pasa si fue PINB4? La Declaración sería: 1 << PINB4. El "1" se trasladaría izquierda 4 veces dando como resultado: 0b00010000. Recuerde, estamos utilizando un índice de cero, así que hay cuatro 0s después de la 1.

Vamos a pasar en el tiempo del lazo. Tienes razón, no tenemos nada en el "bucle infinito" antes. Bien, ahora tenemos el microcontrolador mostrar alguna acción. Esto sólo es posible dentro del bucle. El lazo es donde la acción se repite una y otra vez. Si la acción se encontraba antes del bucle, entonces la acción sólo pasaría una vez, como establecer la dirección del perno, que es apropiado para este programa. Pero para crear siempre parpadeando, necesitamos hacer la PINB0 y dentro del bucle. Aquí es también donde los retrasos. Si no tuviéramos retrasos, no veríamos el LED parpadeando en todo, le parece que es justo, ya que el parpadeo se produciría más rápido que el ojo podía percibir, por lo que necesitamos ralentizarlo.

Sabemos cómo establecer un bit específico del número binario, pero no sabemos cómo hacer algo específico "0" Si todavía es un "1". El siguiente código lo hace solo, pero te darás cuenta que es no lo que muestra el programa. El primer par de líneas se convierte los bits a "1" (5 voltios, claros) y hace una pausa de 100 milisegundos (por cierto, usted puede utilizar microsegundos cambiando las "ms" a "nosotros"). El segundo dos líneas activa el bit PINB0 en "0" (0 voltios, no luz). No, la comparación y no puede hacer un "0" de la broca, pero si usted no "~" la máscara del número binario, se convertirá todo el 0s a 1s y todo el 1s a 0s. Esto permitirá que sólo afectan la broca PINB0 y convertirlo en un "0". He añadido el paréntesis justo para contener la operación de enmascaramiento tan no podría no maks enteros y no sólo el "1" antes de la cambio izquierda "<<".

 PORTB ^= 1 << PINB0;_delay_ms(100); 

Si el retraso va a ser el mismo para encendido y apagado, podemos acortar las líneas anteriores de cuatro a sólo dos y tomar ventaja de la operación XOR. Recuerde, la XOR convertirá nuestro pin específico para un 1 si es 0 y viceversa. Esta instrucción solo afectará a la PINB0. Cada vez que se ejecuta la instrucción, moverá de un tirón la broca al contrario.

Eso es todo. Ver que no fue doloroso en absoluto.

Artículos Relacionados

Principio microcontroladores parte 6: Escribir el primer programa para encender un LED

Principio microcontroladores parte 6: Escribir el primer programa para encender un LED

Sé que estás listo para escribir el primer programa. Han sido a través de mucho hasta ahora! Mientras estamos en el tema, vamos a recapitular los acontecimientos. Salió y compró el Microcontrolador AVR de Atmel de su elección. Elegí theATMega32 para
Principio microcontroladores parte 3: Transferencia de un programa en el microcontrolador (conductores)

Principio microcontroladores parte 3: Transferencia de un programa en el microcontrolador (conductores)

¡ Bienvenido a parte 3. Este es un pequeño tutorial que tratará simplemente cargar los controladores para hacer que el programador pueda comunicarse con el ordenador correctamente.Tenga en cuenta que a veces los dispositivos TinyISP y USBAVR ahora vi
Principio microcontroladores parte 9: Botón y Software contra rebotes métodos

Principio microcontroladores parte 9: Botón y Software contra rebotes métodos

En esta parte del tutorial vamos a discutir el botón y software contra rebotes.Queremos estudiar botón contra rebotes primero y en detalle, así que tenemos una buena comprensión de lo que ello conlleva. Botón contra rebotes es importante y no debe se
Principio microcontroladores parte 11: Temporizadores, contadores y el reloj del microcontrolador

Principio microcontroladores parte 11: Temporizadores, contadores y el reloj del microcontrolador

Temporizadores y contadores son tan esenciales que usted verá muchos ejemplos que a lo largo de esta serie. Como el nombre lo dice, se utilizan temporizadores para tiempo y contando. Cuenta y el tiempo le permite hacer algunas cosas muy prolijo como
Principio microcontroladores parte 8: Agregar un botón al microcontrolador y lo que es hacer algo

Principio microcontroladores parte 8: Agregar un botón al microcontrolador y lo que es hacer algo

Una manera muy simple y fácil para proporcionar para la interacción humana con el microcontrolador es insertar un botón en el circuito. Comunicarse con equipos mediante dos principales dispositivos de entrada: el ratón y el teclado. Un teclado no es
Principio microcontroladores parte 5: Pruebas del programador y la construcción del primer circuito

Principio microcontroladores parte 5: Pruebas del programador y la construcción del primer circuito

Hasta ahora, tienes todo el software instalado y había construido la interfaz que proporcionará una conveniente conexión del programador al microcontrolador (MCU). Para el siguiente paso, usted necesitará un protoboard (los números son muy útiles), u
Principio microcontroladores parte 2: Creación de una interfaz SPI del programador para el microcontrolador

Principio microcontroladores parte 2: Creación de una interfaz SPI del programador para el microcontrolador

Hola, esperamos que te ha gustado la parte 1 del principio microcontroladores. Vamos a mover a lo largo de a parte 2 y empezar a hablar acerca de cómo obtener tu microcontrolador para comunicarse con una computadora e interfaces.Por lo tanto, en este
Principio microcontroladores parte 13: Introducción a la interfaz de LCD

Principio microcontroladores parte 13: Introducción a la interfaz de LCD

El microcontrolador es una maravillosa pieza de ingeniería y puede hacer muchas cosas (con la ayuda de alguna gran programación), pero sigue siendo una caja negra opaca. Si desea compartir información, o mostrar lo que está tratando de hacer, necesit
Principio microcontroladores parte 4: Instalar el entorno de programación (WinAVR)

Principio microcontroladores parte 4: Instalar el entorno de programación (WinAVR)

Bienvenido al siguiente paso en nuestra serie. Vamos a introducir algunos elementos básicos de programación ahora. Este tutorial es simplemente acerca de cómo instalar el entorno de programación. El entorno de programación que vamos a usar se llama W
Cubo del LED extensible 4 x 4 x 4 con 8051 de ejemplo de programa

Cubo del LED extensible 4 x 4 x 4 con 8051 de ejemplo de programa

el cubo led es impresionante. Permítanme tratar de crear uno. Mi versión del curso de :D (como puedo no tengo todos los componentes listados de instructables del otro).Paso 1: El plan y el resultado Tienen menos de 100 rojo led ahora, pero tendrá más
KeyChainino - llavero juego primera programable con Arduino

KeyChainino - llavero juego primera programable con Arduino

KeyChainino es un vintage llavero juego programable con Arduino donde cualquiera puede subir su propio juego con el IDE de Arduino.Si realmente te gusta el juego de Arcade, KeyChainino es para ti!No tiene ningún LCD, pero sólo 30 LEDs controlado por
: Aprendizaje su primer programa en Java!

: Aprendizaje su primer programa en Java!

Programación es divertida, interesante pasatiempo que todo el mundo debería aprender. Con equipo de programación o codificación, la gente da una computadora básica, simples comandos que agregan hasta crear un programa complejo, útil o divertido que s
Partir de microcontroladores parte 1

Partir de microcontroladores parte 1

Esta es la primera de una larga serie de tutoriales dirigidos a proporcionar una guía de principiantes y un tutorial basado en el Microcontrolador AVR de Atmel Atmega32. Voy a mostrar que, a través de ejemplos y proyectos, cómo programar y prever fun
Primer programa de ensamblador

Primer programa de ensamblador

ensamblador puede ser más difíciles de escribir que la mayoría de los otros idiomas, pero eso no significa que no merece la pena aprender.  Hay algunas cosas que son más fáciles en ensamblador como escribir unos y ceros a un determinados controlador