Programación de microcontroladores para principiantes avr. ¿Ya estás programando microcontroladores? ¡Entonces vamos a ti! Qué microcontrolador elegir para trabajar

Las operaciones bit a bit se basan en operaciones lógicas, que ya hemos cubierto anteriormente. Desempeñan un papel clave en la programación de microcontroladores AVR y otros tipos. Casi ningún programa puede prescindir del uso de operaciones bit a bit. Hasta ahora, los hemos evitado deliberadamente para facilitar el aprendizaje de la programación MK.

En todos los artículos anteriores, solo programamos puertos de E/S y no usamos nodos integrados adicionales, como temporizadores, convertidores de analógico a digital, interrupciones y otros dispositivos internos sin los cuales el MK pierde toda su potencia.

Antes de pasar a dominar los dispositivos MK incorporados, debe aprender a controlar o verificar bits individuales de los registros AVR MK. Previamente, realizamos una verificación o configuramos los bits de todo el registro a la vez. Veamos cuál es la diferencia y luego continuemos.

Operaciones bit a bit

La mayoría de las veces, cuando programamos microcontroladores AVR, lo usamos, ya que tiene una mayor claridad en comparación con los programadores MK novatos y es más comprensible para ellos. Por ejemplo, necesitamos configurar solo el 3er bit del puerto D. Para esto, como ya sabemos, podemos usar el siguiente código binario:

PUERTO = 0b00001000;

Sin embargo, con este comando, establecemos el 3er bit a uno y reiniciamos todos los demás (0, 1, 2, 4, 5, 6 y 7) a cero. Y ahora imaginemos la situación en la que los dígitos 6 y 7 se usan como entradas de ADC y en este momento llega una señal de algún dispositivo a las salidas correspondientes del MK, y reiniciamos estas señales usando el comando anterior. Como resultado, el microcontrolador no los ve y cree que las señales no llegaron. Por lo tanto, en lugar de dicho comando, deberíamos usar otro que establezca solo el tercer bit en uno, sin afectar al resto de los bits. Para ello se suele utilizar la siguiente operación bit a bit:

PUERTO |= (1<<3);

Analizaremos su sintaxis en detalle a continuación. Y ahora otro ejemplo. Digamos que necesitamos verificar el estado del tercer bit del registro PIN, verificando así el estado del botón. Si este bit se restablece a cero, entonces sabemos que se presiona el botón y luego se ejecuta el código de comando, que corresponde al estado del botón presionado. Previamente, habríamos utilizado la siguiente notación:

si (pind == 0b00000000)

(cualquier código)

Sin embargo, con la ayuda de él, no verificamos uno solo, el tercero, sino todos los bits del registro PIND a la vez. Por lo tanto, incluso si se presiona el botón y se restablece el bit deseado, pero en ese momento se recibe una señal en cualquier otro pin del puerto D, el bit correspondiente se establecerá en uno y la condición entre paréntesis será falsa. Como resultado, el código entre llaves no se ejecutará incluso cuando se presione el botón. Por lo tanto, para verificar el estado de un tercer bit individual del registro PIN, se debe usar una operación bit a bit:

si (~PIND & (1<<3))

(cualquier código)

Para trabajar con bits individuales del microcontrolador, el lenguaje de programación C tiene en su arsenal, con el que puede cambiar o verificar el estado de uno o más bits individuales a la vez.

Configuración de un solo bit

Para establecer un solo bit, como el puerto D, se utiliza una operación OR bit a bit. Eso es lo que usamos al principio del artículo.

PUERTO = 0b00011100; // valor inicial

PUERTO = PUERTO | (una<<0); применяем побитовую ИЛИ

PUERTO |= (1<<0); // сокращенная форма записи

PUERTO == 0b00011101; // resultado

Este comando pone el bit a cero y deja el resto sin cambios.

Por ejemplo, configuremos el sexto bit del puerto D.

PUERTO = 0b00011100; // estado inicial del puerto

PUERTO |= (1<<6); //

PUERTO == 0b01011100; // resultado

Para escribir uno en varios bits separados a la vez, por ejemplo, cero, sexto y séptimo puerto B se aplica la siguiente notación.

PUERTOB = 0b00011100; // valor inicial

PUERTOB |= (1<<0) | (1<<6) | (1<<7); //

PUERTOB == 0b1011101; // resultado

Puesta a cero (puesta a cero) de bits individuales

Para restablecer un solo bit, se utilizan tres comandos discutidos anteriormente a la vez: .

Restablezcamos el tercer bit del registro PORTC y dejemos el resto sin cambios.

PUERTO = 0b00011100;

PUERTO &= ~(1<<3);

PUERTO == 0b00010100;

Realicemos acciones similares para los dígitos 2 y 4:

PUERTO = 0b00111110;

PUERTO &= ~((1<<2) | (1<<4));

PUERTO == 0b00101010;

Cambiando el ritmo

Además de establecer y restablecer, también se utiliza un comando útil que cambia un solo bit al estado opuesto: uno a cero y viceversa. Esta operación lógica se usa ampliamente en la construcción de varios efectos de iluminación, por ejemplo, como una guirnalda de Año Nuevo. Considere el ejemplo de PORTA

PORTA = 0b00011111;

PORTA^= (1<<2);

PORTA == 0b00011011;

Cambiar el estado de los bits cero, segundo y sexto:

PORTA = 0b00011111;

PORTA^= (1<<0) | (1<<2) | (1<<6);

PORTA == 0b01011010;

Comprobación del estado de un bit individual. Permítame recordarle que la verificación (en lugar de la escritura) de un puerto de E/S se lleva a cabo mediante la lectura de datos del registro PIN.

La prueba más común se realiza mediante una de dos sentencias de bucle: if y while. Ya estamos familiarizados con estos operadores anteriormente.

Comprobación de la descarga por la presencia de un cero lógico (reinicio) con si

si (0==(PIN & (1<<3)))

Si se borra el tercer bit del puerto D, se ejecuta Code1. De lo contrario, se ejecuta Code2.

Acciones similares se realizan con y en esta forma de grabación:

si (~PIND & (1<<3))

Comprobación de la descarga para detectar la presencia de una unidad lógica (configuración) con si

si (0 != (PIN & (1<<3)))

si (PIND & (1<<3))

Los dos bucles anteriores funcionan de manera similar, pero debido a la flexibilidad del lenguaje de programación C, se pueden escribir de manera diferente. La operación != significa no igual. Si el tercer bit del puerto de E/S de PD está establecido (uno), entonces se ejecuta Code1, si no, Code2.

Esperando un poco de reinicio con tiempo

mientras (PIND & (1<<5))

El código 1 se ejecutará siempre que se establezca el quinto bit del registro PIND. Restablecerlo comenzará a ejecutar Code2.

Esperando a que se establezca el bit tiempo

Aquí, la sintaxis del lenguaje C le permite escribir código de dos de las formas más comunes. En la práctica, se utilizan ambos tipos de registro.

Ministerio de Educación y Ciencia de la Federación Rusa

institución educativa estatal

educación profesional superior

"ESTADO DE SAN PETERSBURGO

UNIVERSIDAD TÉCNICA DEL MAR»

E. V. Korotitsky, Yu. E. Korotitskaya

Lenguaje C básico para microcontroladores avr

Tutorial

San Petersburgo

1. Lenguaje C básico para microcontroladores avr

El lenguaje Universal C se desarrolló como una herramienta para escribir el entorno operativo UNIX.

El lenguaje C admite un paradigma de programación orientado a procedimientos, es decir Un paradigma es un conjunto interconectado de procedimientos.

El lenguaje C se caracteriza por la concisión, un conjunto moderno de construcciones de control de flujo, estructuras de datos y un amplio conjunto de operaciones.

    1. El preprocesador del lenguaje C y sus comandos

Un preprocesador (macroprocesador) es un componente del lenguaje C que procesa el código fuente de un programa antes de que pase por el compilador. El preprocesador lee líneas de texto y realiza acciones especificadas por líneas de comando. Si el primer carácter que no es un espacio en blanco en una línea es #, entonces el preprocesador considera esa línea como una línea de comando. Las líneas de comando se llaman directivas preprocesador.

El preprocesador del compilador CodeVisionAVR tiene varias directivas. En mesa. 1 da una breve descripción de ellos.

Pestaña. 1 - Directrices del preprocesador del compilador CodeVisionAVR

Directiva

Objetivo

Solía ​​estar incluido en el programa.

otro archivo

Sirve para reemplazar algunas unidades léxicas del lenguaje C por otras, así como para generar macros

Se usa para anular el efecto de la directiva #define

Se utiliza para la compilación condicional

Se utiliza para cambiar las macros integradas _LINE_y _FILE_

Le permite detener la compilación y mostrar un mensaje de error

Se utiliza para incluir código ensamblador en el programa fuente.

Habilita directivas de compilador especiales

TODAS las directivas del preprocesador comienzan con #. NO coloque un punto y coma después de las directivas del preprocesador.

      1. directiva #include

Ejemplo:

Directiva # incluir

#incluir "nombre de archivo" y #incluir<имя_файла>

Nombre del archivo consta de un nombre de archivo.

Directiva # incluir es ampliamente utilizado para incluir los llamados archivos de cabecera (archivos con extensión . h), que contiene definiciones de dispositivos periféricos y vectores de interrupción del microcontrolador utilizado, prototipos de funciones de biblioteca, prototipos de funciones definidas por el usuario, etc.

#include "nombre de archivo.h"

      1. Directivas #define, #undef

Directiva # definir sirve para sustituir algunas unidades léxicas del lenguaje C (constantes, palabras clave, operadores o expresiones) de uso frecuente por otras, las denominadas identificadores Los identificadores que reemplazan texto o constantes numéricas se denominan constantes nombradas. Los identificadores que reemplazan fragmentos de programa se denominan definiciones de macros, y las definiciones de macro pueden tener argumentos.

Directiva # definir tiene dos formas sintácticas:

#define el texto del identificador

#define el texto del identificador (lista de parámetros)

Antes de compilar el programa, el preprocesador según la directiva # definir reemplazará todos los identificadores encontrados en el programa con su texto correspondiente.

Ejemplo:

#define A 15 #define B (A+20) // Estas directivas serán reemplazadas en el texto del programa

cada identificador A con el número 15, y cada identificador B con la expresión (15+20) junto con los paréntesis que lo rodean.

Ejemplo:

#define X(a,b,c) ((a)*(b)-(c)) // El preprocesador reemplazará el fragmento de acuerdo con esta directiva Y=X(k+m,k-m,n); por fragmento

Los microcontroladores (en lo sucesivo, MK) han entrado firmemente en nuestras vidas, en Internet puede encontrar muchos circuitos interesantes que se ejecutan en MK. Lo que no se puede recopilar en el MK: varios indicadores, voltímetros, electrodomésticos (dispositivos de protección, dispositivos de conmutación, termómetros ...), detectores de metales, varios juguetes, robots, etc. la lista puede ser muy larga. Vi el primer circuito en un microcontrolador hace 5 o 6 años en una revista de radio, y casi de inmediato volteé la página, pensando para mis adentros: "Todavía no puedo ensamblarlo". De hecho, en ese momento MK para mí era un dispositivo muy complicado e incomprendido, no tenía idea de cómo funcionan, cómo flashearlos y qué hacer con ellos en caso de un firmware incorrecto. Pero hace aproximadamente un año, armé por primera vez mi primer circuito en un MK, era un circuito de voltímetro digital en indicadores de 7 segmentos y un microcontrolador ATmega8. Dio la casualidad de que compré el microcontrolador por accidente cuando estaba parado en el departamento de repuestos de radio, el tipo frente a mí estaba comprando un MK, y también decidí comprar e intentar ensamblar algo. En mis artículos te contaré sobre microcontroladores AVR, le enseñaré cómo trabajar con ellos, consideraremos los programas de firmware, haremos un programador simple y confiable, consideraremos el proceso de firmware y, lo más importante, los problemas que pueden surgir no solo para los principiantes.

Los principales parámetros de algunos microcontroladores de la familia AVR:

microcontrolador

Memoria flash

memoria RAM

memoria EEPROM

puertos de E/S

usted suministra

Parámetros adicionales de MK AVR mega:

Temperatura de funcionamiento: -55…+125*С
Temperatura de almacenamiento: -65…+150*С
Voltaje en el pin RESET relativo a GND: max 13V
Tensión de alimentación máxima: 6,0 V
Corriente máxima de línea de E/S: 40 mA
Corriente máxima en la línea de alimentación VCC y GND: 200mA

Asignaciones de pines para modelos ATmega 8X

Asignaciones de pines para modelos ATmega48x, 88x, 168x

Asignación de pines para modelos ATmega8515x

Asignaciones de pines para modelos ATmega8535x

Asignación de pines para modelos ATmega16, 32x

Asignaciones de pines para modelos ATtiny2313

Al final del artículo, se adjunta un archivo con hojas de datos para algunos microcontroladores.

Puntas de ajuste FUSIBLE MK AVR

Recuerde, un fusible programado es 0, uno no programado es 1. Tenga cuidado al configurar los fusibles, un fusible mal programado puede bloquear el microcontrolador. Si no está seguro de qué fusible necesita programar, es mejor flashear el MK sin fusibles por primera vez.

Los microcontroladores más populares para radioaficionados son ATmega8, seguidos de ATmega48, 16, 32, ATtiny2313 y otros. Los microcontroladores se venden en paquetes TQFP y DIP, recomiendo que los principiantes compren en DIP. Si compra TQFP, será más problemático flashearlos, tendrá que comprar o soldar la placa. sus piernas están muy cerca una de la otra. Aconsejo microcontroladores en paquetes DIP, colóquelos en sockets especiales, es conveniente y práctico, no tiene que soldar el MK si desea volver a flashearlo o usarlo para otro diseño.

Casi todos los microcontroladores modernos tienen la capacidad de programar ISP en circuito, es decir, si su microcontrolador está soldado a la placa, entonces para cambiar el firmware no tenemos que desoldarlo de la placa.

6 pines se utilizan para la programación:
REINICIAR- Entrada MK
CCV- Plus alimentación, 3-5V, depende del MK
TIERRA- Cable común, menos potencia.
MOSI- Entrada MK (señal de información en MK)
MISO- Salida MK (señal de información de MK)
SCK- Entrada MK (señal de reloj en MK)

A veces también se utilizan las salidas XTAL 1 y XTAL2, el cuarzo se adhiere a estas salidas si el MK funcionará desde un generador externo, en ATmega 64 y 128 las salidas MOSI y MISO no se utilizan para la programación de ISP, sino que las salidas MOSI se conectan a el tramo PE0 y MISO a PE1. Al conectar el microcontrolador al programador, los cables de conexión deben ser lo más cortos posible y el cable del programador al puerto LPT tampoco debe ser demasiado largo.

La marca del microcontrolador puede contener letras incomprensibles con números, por ejemplo, Atmega 8L 16PU, 8 16AU, 8A PU, etc. La letra L significa que el MK funciona a un voltaje más bajo que el MK sin la letra L, generalmente 2.7V . Los números después del guión o espacio 16PU o 8AU indican la frecuencia interna del oscilador que está en el MK. Si los fusibles están configurados para trabajar desde un cuarzo externo, el cuarzo debe configurarse a una frecuencia que no exceda el máximo según la hoja de datos, esto es 20MHz para ATmega48/88/168 y 16MHz para otros atmegas.

Lección 0

Entonces, hoy abrimos una serie de lecciones sobre la programación de microcontroladores de la familia AVR.

Las siguientes preguntas serán discutidas hoy:

  1. ¿Qué es un microcontrolador?
  2. ¿Dónde se utilizan los microcontroladores?

Introducción.

Los microcontroladores están en todas partes. En teléfonos, lavadoras, "casas inteligentes", máquinas herramienta en una fábrica, así como en innumerables dispositivos técnicos. Su uso generalizado permite reemplazar circuitos analógicos complejos por circuitos digitales más comprimidos.

Entonces, ¿qué es un microcontrolador?

microcontrolador (Unidad de microcontrolador, MCU) - un microcircuito diseñado para controlar dispositivos electrónicos. Puede imaginarlo como una computadora simple que puede interactuar con dispositivos externos. Por ejemplo, abrir y cerrar transistores, recibir datos de sensores de temperatura, mostrar datos en pantallas LCD, etc. . Además, el microcontrolador puede realizar varios procesamientos de datos de entrada, al igual que su computadora personal.

Es decir, los microcontroladores nos abren posibilidades casi ilimitadas para controlar cualquier dispositivo, gracias a la presencia de puertos I / 0 (puertos de entrada (entrada) / salida (salida)), así como la posibilidad de programarlos.

¿Dónde se utilizan los microcontroladores?

  1. Electrodomésticos (Lavadoras, hornos microondas, etc.).
  2. Tecnología móvil (Robots, sistemas robóticos, comunicaciones, etc.).
  3. Equipos industriales (Sistemas de control de máquinas).
  4. Equipos de cómputo (placas base, sistemas de control de dispositivos periféricos).
  5. Equipos de entretenimiento (Juguetes infantiles, decoraciones).
  6. Vehículos (sistemas de gestión de motores de automóviles, sistemas de seguridad)

Esta no es una lista completa de aplicaciones para microcontroladores. A menudo, es muy beneficioso reemplazar el conjunto de chips de control con un solo microcontrolador, debido a la simplificación de la producción, menor consumo de energía.

Primeros pasos con AVR

AVR- una familia de microcontroladores Atmel.Tienen un rendimiento suficiente para la mayoría de los dispositivos de aficionados. También son ampliamente utilizados en la industria.

Hay muchas herramientas de desarrollo para programar microcontroladores AVR, sin embargo, el más popular, por supuesto, debe reconocerse como el paquete Estudio AVR. Hay una serie de razones para tal popularidad: este es un paquete gratuito desarrollado por la compañía ATMEL, combina un editor de texto, un ensamblador y un simulador. El paquete AVR Studio también se usa junto con el hardware de depuración. Este artículo analiza cómo trabajar con el paquete mediante ejemplos, que ayudarán a los programadores novatos a comprender rápidamente la interacción de los componentes individuales de AVR Studio.

En la siguiente parte del artículo, hablaremos sobre la depuración de programas escritos en lenguaje C en el entorno AVR Studio.

El paquete AVR Studio tiene un sólido historial de desarrollo, que se refleja en la cantidad de versiones existentes. A fines de 2003, se lanzó la versión 4.08, que tiene una serie de adiciones útiles, y a principios de 2004, se lanzó una actualización (Service Pack 1) que agrega soporte para controladores AVR de tercera generación de la familia ATmega48. La producción de chips de esta familia está prevista para el segundo semestre de 2004.

El kit de distribución del paquete y el Service Pack se pueden descargar de www.atmel.com o puede obtener un CD con este kit de distribución del distribuidor ruso de ATMEL.

Es conveniente considerar el trabajo del paquete AVR Studio en cualquier programa específico. Como ilustración, consideraremos crear un proyecto para un programa simple que encenderá dos LED a la vez. Para mayor precisión, tomemos un microcircuito atmega128 y conecte dos LED a los pines 31 y 32 (estos son los bits 6 y 7 del puerto D del chip ATmega128). Controladores AVR tienen potentes etapas de salida, la corriente típica de cada salida es de 20 mA, la corriente de salida máxima es de 40 mA, y esto se aplica tanto a la corriente de entrada como a la de salida. En nuestro ejemplo, los LED están conectados mediante ánodos a las salidas del controlador y los cátodos están conectados a tierra a través de resistencias de extinción. Esto significa que el LED se enciende aplicando un "1" al pin del puerto correspondiente. El diagrama esquemático se muestra en la figura. El diagrama también muestra dos botones que se utilizarán en uno de los programas.

Aquí es apropiado hacer una pequeña digresión sobre la elección del tipo de microcircuito para el ejemplo más simple. De hecho, a primera vista puede parecer extraño por qué se necesita un cristal tan potente en un paquete de 64 pines cuando un microcircuito de 8 pines es suficiente. entiny12? Sin embargo, hay lógica en este enfoque. Se sabe que casi cualquier controlador AVR se basa en el mismo núcleo. En general, los controladores difieren en la cantidad de memoria, la cantidad de puertos de E/S y el conjunto de módulos periféricos. Características de cada controlador específico: vinculación de nombres lógicos de registros de E / S a direcciones físicas, direcciones de vectores de interrupción, definiciones de bits de puerto, etc. se describen en los archivos .inc que se incluyen con el paquete AVR Studio. Por lo tanto, utilizando un tipo específico de cristal, es posible depurar el programa tanto para él como para cualquier cristal más joven. Además, si usa el cristal más antiguo como chip de depuración, hoy es ATmega128, puede depurar un programa para casi cualquier controlador AVR, solo necesita no usar recursos de hardware que el microcontrolador de destino no tiene. Así, por ejemplo, es posible depurar un programa en el ATmega128 que se ejecutará en entiny13. En este caso, el código fuente seguirá siendo prácticamente el mismo, solo cambiará el nombre del archivo incluido de 128def.inc a tn13def.inc. Este enfoque también tiene sus ventajas. Por ejemplo, se pueden usar puertos de E/S "adicionales" para conectar indicador LCD, al que puede generar información de depuración. O use un emulador en circuito que se conecte al puerto JTAG del chip ATmega128 (el controlador ATtiny13 no tiene ese puerto). Por lo tanto, puede usar la única placa de depuración en la que está instalado el controlador AVR "superior" para depurar cualquier sistema desarrollado recientemente, naturalmente, también basado en microcontroladores AVR. Una de estas placas se llama AS-megaM. Fue ella quien se utilizó para crear los programas de ejemplo que se dan en el artículo. Este es un controlador universal de placa única basado en el chip ATmega128, que contiene RAM externa, dos puertos RS-232, puerto para conectar indicador LCD, programador en circuito y emulador EN JTAG HIELO. La placa también tiene un lugar para desoldar el chip FLASH-ROM de la serie AT45 en los casos TSOP32/40/48 y DAC de dos canales de la serie AD5302/ AD5312/ AD5322. Ahora, después de explicar las razones para usar un monstruo AVR para encender un par de LED, podemos continuar.

Al programar en el entorno AVR Studio, debe seguir la secuencia estándar de acciones:

  • Compilacion
  • La creación del proyecto comienza seleccionando la barra de menú Proyecto\Nuevo proyecto. En la ventana "Crear nuevo proyecto" que se abre, debe especificar el nombre del proyecto (en nuestro caso, muestra1) y el nombre del archivo de inicialización. Después de hacer clic en el botón "Siguiente", se abre la ventana "Seleccionar plataforma y dispositivo de depuración", donde se seleccionan la plataforma de depuración (simulador o emulador) y el tipo de microcontrolador.

    Puede elegir uno de los emuladores en circuito propuestos, tenga en cuenta que cada emulador tiene su propia lista de microcircuitos compatibles. Para este ejemplo, elegimos el simulador AVR y el chip ATmega128 como plataforma de depuración. Después de presionar el botón "Finalizar", nuestros ojos verán las ventanas de trabajo reales del paquete AVR Studio, que aún están vacías. El texto fuente del programa debe colocarse en la ventana derecha. Esto se puede hacer de dos maneras, ya sea escribiendo todo el texto directamente en la ventana del editor o cargando un archivo existente. A continuación se muestra el texto completo del programa más simple con comentarios.

    ; Ejemplo "control de LED"; escrito para placa de depuración AS-MegaM; Frecuencia del oscilador maestro 7,37 MHz; Los LED están conectados a los pines PD6 y PD7 y a través de resistencias, a un cable común. ; conexión del archivo de descripción de E/S del chip ATmega128 .incluye "m128def.inc" ; comienzo del programa comienzo: ; la primera operación es la inicialización de la pila; si esto no se hace, entonces una llamada a una subrutina o interrupción; no devolverá el control; el puntero de fin de pila se establece en la última dirección RAM interna - RAMEND ldi r16,low(RAMEND) out spl,r16 ldi r16,high(RAMEND) out sph,r16 ; para controlar los LEDs conectados a los pines PD6 y PD7, ; es necesario declarar estas conclusiones como vacaciones. ; para ello se escribe "1" en los bits correspondientes del registro DDRD (DataDiRection) ldi r16,(1<<6) | (1<<7) out DDRD,r16 ; основной цикл программы loop: ldi r16,(1<<6) ; светится один светодиод out PORTD,r16 rcall delay ; задержка ldi r16,(1<<7) ; светится второй светодиод out PORTD,r16 rcall delay ; задержка rjmp loop ; повторение цикла; процедура задержки; примерно полсекунды при частоте 7,37 МГц; три пустых вложенных цикла соответственно delay: ldi r16,30 ; 30 delay1: ldi r17,200 ; 200 delay2: ldi r18,200 ; и еще 200 итераций delay3: dec r18 brne delay3 dec r17 brne delay2 dec r16 brne delay1 ret ; возврат в главную программу

    Un proyecto puede constar de varios archivos, con un archivo designado como el principal. Todas las operaciones se realizan cómodamente con el botón contextual del ratón. Después de conectar el archivo fuente, las ventanas se ven así.

    Un proyecto se compila usando el comando \Project\Build o presionando el botón F7. El proceso de compilación se muestra en la ventana "Salida". Esta ventana se puede "sacar" con el comando \View\Output.

    En principio, ya hemos recibido un archivo de salida en formato .hex, que ya se puede cargar en el microcircuito y observar el parpadeo de los LED. Sin embargo, el propósito del artículo es mostrar el ciclo completo de trabajo en el entorno de AVR Studio, por lo que pasamos a la etapa de depuración. Esto se hace con el comando \Debug\Start Debugging.

    Ahora establecemos la frecuencia del cuarzo en 7,3728 MHz en la ventana "Opciones del simulador" para medir con precisión el tiempo de ejecución del programa.

    El resto de las opciones deben dejarse sin cambios. Ahora puede recorrer el programa usando el mouse o la tecla F11.

    El paquete AVR Studio contiene poderosas herramientas para ver y editar el estado de los registros internos y los puertos de entrada/salida del microcontrolador que se está depurando, así como el tiempo de ejecución del programa. Se accede a ellos a través de la ventana “I/O”.

    De hecho, la cantidad de información disponible a través de las ventanas gráficas de AVR Studio es tan amplia que es necesario usar la computadora en una configuración de dos monitores para obtener la máxima comodidad.

    Para depurar nuestro ejemplo, para acceder a los bits del puerto D, expanda la línea I/O ATMEGA128 y luego la línea PORTD. Los tres registros para este puerto ahora están visibles, PORTD, DDRD y PIND. Para ver los campos Valor, Bits y Dirección, deberá expandir el borde derecho de la ventana, mientras empuja la ventana con el código fuente del programa.

    Ahora, pasando el programa en modo paso a paso, puede ver el cambio en los estados actuales de estos registros en el campo Bits. Es posible cambiar rápidamente el estado de cualquier bit de los registros del puerto, y esto se puede hacer escribiendo un nuevo código en el campo Valor o directamente haciendo clic en el bit de registro deseado.

    Para ejercicios independientes se propone el siguiente programa, que se diferencia del anterior en que dos botones controlan el encendido de los LEDs.

    ; Ejemplo "Control de LEDs desde botones"; escrito para placa de depuración AS-MegaM; Los LED están conectados a los pines PD6 y PD7 y a través de resistencias, a un cable común. ; botones - en PE4 y PE5 .incluir "m128def.inc" ; inicio del programa principal: ; inicialización de pila ldi r16, bajo (RAMEND) fuera spl, r16 ldi r16, alto (RAMEND) fuera sph, r16; inicializacion de leds ldi r16,(1<<6) | (1<<7) out DDRD,r16 ; инициализация выводов, к которым подключены кнопки (на вход) ; внутренние подтягивающие резисторы подключены; для этого в PORTE нужно установить соответствующие биты в единицы ldi r16,(1<<4) | (1<<5) out PORTE,r16 ; а в DDRE - в нули ldi r16,0 out DDRE,r16 ; бесконечный цикл forever: in r16,PINE ; теперь в r16 находится текущее "состояние" кнопок com r16 ; кнопка "нажимается" нулем, поэтому инвертируем регистр lsl r16 ; переносим биты 4,5 в позиции 6,7 lsl r16 ; и обновляем "показания" светодиодов andi r16,(1<<6) | (1<<7) out PORTD,r16 rjmp forever ; цикл выполняется бесконечно

    Por lo tanto, en el ejemplo de los programas más simples, se muestran algunas características del paquete AVR Studio. Debe entenderse que este es solo el primer conocimiento, lo que le permite acostumbrarse rápidamente a los comandos básicos del paquete. Mientras tanto, las posibilidades del paquete en consideración son mucho más amplias. Por ejemplo, aquí puede depurar programas escritos en lenguajes de alto nivel. En particular, el compilador C de ImageCraft usa el depurador AVR Studio "como un nativo". Para ello, al compilar el código fuente, debe configurar la opción para generar un archivo de salida en un formato compatible con AVR Studio. En este caso, es posible depurar en los códigos fuente.

    Otra de las muchas funciones del paquete AVR Studio es la posibilidad de conectar programas externos. Por ejemplo, para garantizar que se invoque el shell del programador en circuito AS2, se deben realizar varias operaciones simples.

    En el menú Herramientas de la ventana principal de AVR Studio, seleccione el elemento Personalizar;

    En la ventana Personalizar, seleccione el elemento Herramientas;

    Al hacer doble clic en el botón del mouse o presionar Insertar en el teclado, agregue un nuevo comando a la lista y asígnele el nombre "Programador AS2";

    Especifique la ruta al archivo ejecutable del programador ingresándolo directamente en el campo de entrada "Comando", o haciendo clic en el botón "..." a la derecha de este campo;

    Ahora en el menú Herramientas hay un elemento "Programador AS2".

    Las herramientas del paquete AVR Studio 4.08 le permiten conectar programas auxiliares: complementos. El primer complemento para AVR Studio es un programa de edición de gráficos que simplifica el proceso de inicialización de LCD, que puede ser controlado directamente por el controlador ATmega169 AVR. El tamaño lógico máximo del indicador LCD es de 100 segmentos, a cada elemento del indicador se le asigna un bit en un registro especial del controlador. Para simplificar el procedimiento rutinario de asignación de ciertos bits a cada segmento, se puede utilizar el programa anterior.

    Mientras visitaba la "patria" de AVR, la oficina noruega de ATMEL, uno de los autores del artículo habló con Lars Kvenild, jefe del equipo de programación que creó y mantiene el paquete AVR Studio. Este hombre, un programador clásico, con barba, suéter y calzado con sandalias y calcetines, habló sobre las perspectivas para el desarrollo del paquete. La próxima versión (4.09) incluirá una interfaz para un nuevo emulador en circuito: JTAGICE mkII (también llamado AT JTAGICE2), que reemplazará a AT JTAGICE en la segunda mitad del año. Este emulador tiene dos diferencias significativas. Por un lado, se ha agregado soporte para una nueva interfaz de depuración de un solo cable para controladores AVR de gama baja, debugWIRE. ¡Esta interfaz es interesante porque no necesita pines adicionales del microcontrolador para su trabajo, ya que usa el pin de reinicio del microcontrolador para el intercambio! Por otro lado (esta expresión se puede entender literalmente), el emulador AT JTAGICE2 finalmente tendrá una interfaz USB para comunicarse con una computadora.

    Literatura

    1. Materiales de la jornada técnica Formación Técnica AVR. Atmel. Noruega. diciembre de 2003.
    2. Nikolai Korolev, Dmitry Korolev Microcontroladores AVR de segunda generación: herramientas para desarrolladores. // Componentes y tecnologías, 2003 No. 7
    3. Microcontroladores AVR de segunda generación: nuevas capacidades de hardware // Componentes y tecnologías. 2003. Nº 4.
    4. Nikolái Korolev, Dmitry Korolev. Microcontroladores AVR: grande en pequeño. //Esquematécnica", 2001, No. 5
    5. Nikolái Korolev, Dmitry Korolev. Microcontroladores AVR: software // Componentes y tecnologías, 2000. No. 4.
    6. Nicolás Korolev. AVR: hardware para desarrolladores // Componentes y tecnologías, 1999 No. 1
    7. Nicolás Korolev. Microcontroladores RISC de ATMEL // Chip-News 1998, No. 2
    8. Nikolai Korolev, Dmitry Korolev AVR: nuevos microcontroladores RISC de 8 bits de ATMEL // Microprocessor Review, 1998, No. 1