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 mi uso. Fueron introducidos al concepto de microcontroladores cómo funcionan; y también fueron introducidos para el programador, el dispositivo que ayuda a transferir el programa en el microcontrolador. Se construyó una cómoda interfaz que se utiliza para conectar los pines SPI a los pines correctos del microcontrolador. Se verifica que los controladores de programador (USBTinyISP) fueron instalados correctamente para las versiones 32-bit y 64-bit de Windows (XP, 7 y Vista). También instaló la programación ambiente instalado el "entorno de programación" llamado WinAVR para que puedan tener un ambiente en el que escribir su programa y luego transferirlo en el microcontrolador. Y para asegurarse de que todo funciona correctamente, que solía avrdude probado el programador mientras enchufado en el ordenador y el microcontrolador. Hay que recordar que este programa es la utilidad de transferencia de programa para mover nuestro programa compilado en la memoria en el microcontrolador. Finalmente, se construyó el primer circuito para que pudiéramos tener algo que escribir un programa para. ¡ UF... eso fue mucho! Pero desde que saltó a través de todos esos obstáculos, el trabajo es sobre y navegación lisa desde aquí en. Esperemos que hayas podido obtener a través de los pasos anteriores sin problemas, así que ahora vamos a obtener con nuestro primer programa.
Aras de la simplificación, vamos a categorizar la función del microcontrolador en tres categorías: Control, detección y comunicación. Dejaremos los detalles de cómo desarrollar cada una de estas funciones y profundizar en estos detalles que escribimos los programas. Tenga en cuenta que hay muchas formas de programar estas funciones. Para el primer programa, haremos el microcontrolador "controlar" algo. Y como ustedes saben desde el post anterior, usaremos un LED para este propósito. Básicamente, encenderá el LED. ¿Sí ya sé... aburrido, derecho? Bien tengo que empezar en alguna parte! Como te llevo a través de la experiencia de programación, voy a añadir más complejidad un poco a la vez por lo que son fácilmente capaces de envolver su cabeza alrededor de estos conceptos importantes.
Así que en este momento estás probablemente preguntando... ¿Cómo hacemos un programa para controlar un LED? Bueno, es muy fácil: simplemente diremos Pin0 en PORTB a 5 voltios de salida. Recuerde que este es el pin al que está conectado el positivo (ánodo). La primera clave en este escenario es «salida», y la siguiente es "5 voltios." Hay una manera que podemos decir un pin especial para ajustarse a ser una salida de la MCU. Una vez que se ha establecido un pin para proporcionar una salida, entonces será capaz de controlar que pin y sea alto (5 voltios) o hacerlo bajo (voltaje cero). Y puesto que hay solamente dos Estados para el pin en el modo de salida (5v o 0v) y sólo dos Estados para el modo de sí mismo (de entrada o de salida), usted sólo necesita establecer el valor lógico 1 o un 0. Tenga en cuenta que debe realizarse para cada pin que queremos utilizar en nuestro circuito. Pero antes de llegar a conectar en un 1 o 0, vamos a hablar de entrada y salida. Cuando un perno está en modo de entrada, escucha un voltaje. Cuando el pasador está en modo de salida, la it puede cargar 5v o no cargada de 0v. Eso es todo!
Hay muchas maneras de hacer esto. Se trata de no confundirte, sino hacer las cosas más simples. Va ser introduciéndote a una de las muchas maneras de realizar esta tarea, y más adelante voy a explicar otros métodos al escribir otros programas. Observe sin embargo que si bien este primer método es ideal para introducir el concepto, probablemente no es tan buena en la práctica. Por lo tanto, verá otros métodos en futuros programas que dejarán pernos contextuales (los pernos a cada lado del pin de interés) inafectado, como puede muy bien han sido previamente puesto en el programa. Pero ya que estamos escribiendo un programa sencillo, no preocuparse de esta complejidad en este momento.
Para seleccionar el modo de salida de un pin, se utiliza el registro de dirección de datos (DDR). ¡ Oh hombre! ¿Qué es un registro? No dejes que esto te preocupa. Un registro es simplemente una ubicación de memoria que hace el microcontrolador reacciona de alguna manera. Utilice un registro para establecer un estado para el microcontrolador, o hacer que el microcontrolador haga algo. Es como reflejos, o le hace cosquillas. Cuando una persona hace cosquillas a otra persona, invoca a la risa. Podemos hacer el MCU hacer algo mediante el establecimiento de un valor específico en un registro. Eso es todo lo que necesitas saber en este momento.
Así que cuando se utiliza el registro DDR, que son capaces de configurar el pin salida de datos, o aceptar entrada de datos. Pero dijimos de entrada o de salida, ahora estás diciendo que los datos también. El término "datos" usados aquí simplemente añade otra dimensión a esta idea en forma de "tiempo". Si usted hace un pin de 5 voltios, entonces cero voltios y 5 voltios otra vez... realmente están enviando 1s y 0s. Con el conector, esto no es más que un estado alto (5 voltios) y luego un estado bajo (cero voltios): MCU la ve esta lógica de alta y baja. Y también puede recibir datos de la misma manera.
Hay varias formas de programar el pin0 para el puerto B de salida. Una manera de hacer esto es escribir:
DDRB = 0b00000001;Me explico. "DDRB" se refiere al registro de dirección de datos para el puerto B; "0b" es decirle al compilador que lo que sigue es la expresión binaria de un número; y el "1" al final indica la posición del pin 0 (el primer pin en el puerto B). Recordar que hay 8 pins para el puerto B; pasadores de 0 aunque 7. También hay 8 dígitos en la línea de código. Así que cada dígito representa un pin en el puerto, y podemos utilizar los dígitos individuales para referirse específicamente a alguno de los pines en el puerto B. Así que el '1' al final de nuestra declaración del código se refiere al primer pin en Puerto B, que en este caso es pin 0. (Recordar que C y C++ son cero, por lo que se refiere el primer índice de una estructura de datos es el elemento zero'th, el segundo índice se refiere al primer elemento, etc.). No necesitamos llegar más compleja en este punto, como esto se cubre en más detalle en el futuro tutoriales. Sin embargo si quieres saber más sobre el sistema binario, marque aquí.
Ahora necesitamos aplicar 5v al pin. Esto funciona igual que la DDR código declaración hemos usado arriba. Vamos a utilizar un número binario a 5v en este pin (pin 0) con esta declaración:
PORTB = 0b00000001;La única diferencia entre esto y lo anterior es que ahora estamos utilizando el registro del puerto. Este registro sabe los pines de este puerto específico y nos da acceso para especificar el valor de datos real (lógico 0 o 1) para estos pines.
Ahora tenemos que hablar un poco sobre la estructura general de nuestro programa. Todos los programas necesitan un lugar especificado para comenzar la ejecución. Es como darle a alguien un conjunto de instrucciones sobre cómo hacer un pastel sin decirles que paso iniciar. La función "principal" es el lugar donde todos los programas C y C++ inician la ejecución. Así que vamos a crear una función principal.
int Main{
}
En orden para el programa entender el DDR y puerto de registro de información y cómo éstos funcionan dentro del microcontrolador, se debe agregar una instrucción include que contiene toda la información acerca de los microcontroladores AVR. Esto incluye instrucción será probablemente en todos sus programas.
#include < avr/io.h >int Main
{
}
Cuando se inicia el proceso de compilación, la porción del preprocesador del compilador busca en el directorio "avr" del archivo "io.h". La extensión ". h" aquí indica que se trata de un archivo de encabezado, y (como su nombre lo indica) el código dentro de ese archivo se insertará al principio (cabeza) del archivo de fuente que se está creando. Ahora podemos insertar las declaraciones de DDR y el puerto en nuestro código, ya que la inclusión del archivo de cabecera io.h informó el compilador acerca de ellos.
#include < avr/io.h >int Main
{DDRB = 0b00000001; //Data dirección registro ajuste pin0 en salida y los pernos restantes como entrada PORTB = 0b00000001; //Set pin0 a 5 voltios
}
Ahora se establece la dirección del pin0 en salida, con un valor de 5v. Pero estamos todavía no terminados. Tenemos que mantener el microcontrolador ejecuta indefinidamente, así que tenemos una rutina para hacer esto. Esto se llama un bucle sin fin (o infinito). El bucle infinito se cerciora de que el microcontrolador no deja de realizar sus operaciones. Explicaré esto con más detalle cuando tenemos cosas que hacer dentro de este bucle. Hay varios tipos de bucles que podemos usar para este propósito, pero para esta demostración se uso el tiempo bucle. Significa lo mismo en inglés como en el código: por ejemplo, que "mientras que" tengo mi mano hacia arriba, usted debe seguir aplaudiendo.
#include < avr/io.h >int Main
{DDRB = 0b00000001; Datos dirección registro ajuste pin0 en salida y los pernos restantes como entrada
PORTB = 0b00000001; Set pin0 a 5 voltios
While(1)
{
//Code sería aquí lo necesario para la ejecución de más y otra vez... sin parar
}
}
Nota que utilizamos un '1' como argumento el tiempo bucle, porque cualquier cosa que no sea '0' es una verdadera lógica. Por lo tanto el tiempo condición bucle nunca será cualquier cosa otro que lógicamente verdadera, y el programa continuará a ejecutar indefinidamente (es decir; Me quedo con mi mano levantada).
Así que, aquí está el fruto de nuestro trabajo. Era un largo recorrido hasta ahora, pero te prometo, todo de aquí en adelante va a ser gratificante y menos desperdiciador de tiempo. En el siguiente video y la instrucción, vamos a hacer el parpadeo del LED. Vamos a investigar cómo crear un retraso por lo que el LED no parpadea tan rapido que parece que no es intermitente.