Tutorial de ensamblador AVR 7 (6 / 12 paso)

Paso 6: Qué interruptores ¿deberíamos establecer?

Primero pensemos en cómo vamos a este código para que el controlador puede leer la entrada desde el teclado y convertirlo en un valor numérico correspondiente a la tecla que se presionó.

Vamos a usar el analógico al convertidor Digital (ADC) que se construye en al Atmega328p. Utilizaremos AREF como nuestro voltaje de referencia y nuestra salida de teclado se conectará a PortC0 o PC0. Tenga en cuenta que este pin también se llama ADC0 para convertidor de analógico a Digital 0.

Podría ser una buena idea para su lectura a través de la sección 12.4 de interrupciones para el ATmega328P y también el capítulo 24 del convertidor de analógico a Digital antes de empezar o al menos con las secciones para referencia.

Para configurar el microcontrolador para que sepa qué hacer con una señal de entrada analógica y cómo interactuar con nuestro programa, primero debemos establecer algunos de los varios ADC relacionadas con registro de bits. Estos son esencialmente equivalentes a los antiguos interruptores de palanca en los primeros ordenadores. O tirón de un interruptor de encendido o apagado, o incluso más atrás que conectar cables entre una toma y otra para que electrones alcanzando esa bifurcación en el camino de encontrar una puerta cerrada y otra abierta forzando por un camino diferente en el laberinto de circuitos y así realizar una tarea distinta de la lógica. Cuando la codificación en lenguaje ensamblador tenemos cerca del acceso a estas funciones del microcontrolador que es una de las cosas atractivas de hacerlo en primer lugar. Es más "hands on" y mucho menos va en "detrás de las escenas" por así decirlo. Así que no creo que de la creación de estos registros como una tarea tediosa. Esto es lo que hace interesante a lenguaje ensamblador. Estamos ganando una muy personal relación con el funcionamiento interno y la lógica de la viruta y lo que es hacer exactamente lo que queremos, no más y no menos. Sin ciclos de reloj perdido.

Así que aquí está una lista de los interruptores que es necesario establecer:

  1. Apague el ADC de reducción de potencia poco, PRADC, que es bit 0 del registro PRR, puesto que si este bit está en cerrará el ADC. El registro de reducción de energía es esencialmente una forma de cerrar varias cosas que usan energía cuando no los necesita. Como estamos usando al ADC que queremos para asegurarse de que no se deshabilita de esta manera. (Véase PRADC en página 46)
  2. Seleccione el canal de entrada analógico que ADC0 apagando MUX3... 0 en el registro del ADC multiplexor selección (ADMUX) (ver tabla 24-4 de la página 249) son ya apagado por defecto por lo que no necesitamos hacer esto. Sin embargo, estoy incluyendo lo ya que si alguna vez utiliza un puerto diferente ADC0 tendrá que alternar estos interruptores por consiguiente. Varias combinaciones de MUX2, MUX3, MUX1, MUX0 permite utilizar cualquiera de los puertos analógicos como su entrada y también puede cambiar estas sobre la marcha si quieres mirar un montón de diferentes señales analógicas a la vez.
  3. Desactivar REFS0 y REFS1 pedacitos en el registro ADMUX así que usaremos AREF como nuestra tensión de referencia en lugar de una referencia interna (pág. 248).
  4. Gire la broca ADLAR en ADMUX por lo que el resultado es "izquierda ajustar" vamos a discutir esta opción en el paso siguiente.
  5. Configure el bit ADC0D en Digital entrada desactivar Register (DIDR0) para desactivar la entrada digital a PC0. Estamos utilizando ese puerto de entrada por lo que también podríamos desactivar la entrada digital pues analógica.
  6. ISC0 y ISC1 en el exterior interrumpir Control registro A (EICRA) para indicar que queremos provocar en el flanco ascendente de una señal de voltaje al pin INT0 (PD2), consulte la página 71.
  7. Borrar bits INT0 y INT1 en el externo interrumpir máscara de registro (EIMSK) para indicar que no estamos utilizando interrupciones en este pin. Si habilitar interrupciones en este pin necesitamos un manejador de interrupción en la dirección 0x0002 pero en cambio nosotros estamos configurarlo para que una señal en este pin desencadena la conversión ADC, la conclusión de que es manejada por la interrupción completa de la conversión ADC en dirección 0x002A. Consulte la página 72.
  8. El ADC habilitar (ADEN) pedacito (7) en el control ADC y estado registro A (ADCSRA) para permitir que el ADC. Vea la página 249.
  9. Podríamos comenzar una conversión única estableciendo el bit de conversión ADC start (ADSC) cada vez que quería leer la señal analógica, sin embargo, ahora más bien sería tener leer automáticamente cada vez que alguien empuja el botón, así que en lugar de ello nos permitirá la ADC Autotrigger habilitar (ADATE) en el ADCSRA registro para que el disparo se realiza automáticamente.
  10. También establecemos el ADPS2... 0 bits (los bits Prescalar del anuncio) a 111 para que el reloj del ADC es el reloj de la CPU dividido por un factor de 128.
  11. Seleccionamos la fuente de la ADC accionar para ser PD2 que también se llama INT0 (petición de interrupción externa 0). Lo hacemos activando los distintos bits en el registro ADCSRB (ver tabla 24-6 en la página 251). Vemos de la tabla que queremos ADTS0 de ADTS1 en ADTS2 apagado para que el ADC se activará ese perno. Tenga en cuenta que si queríamos continuamente muestra el puerto analógico como si estábamos leyendo algunos continuo señal analógica (como muestreo de sonido o algo) cambialo a modo de marcha libre. El método que estamos utilizando de configuración de activación en la PD2 desencadena un ADC de lectura del puerto analógico PC0 sin causar una interrupción. La interrupción vendrá cuando la conversión es completa.
  12. Habilitar el bit de interrupción del ADC que permiten (ADIE) en el registro ADCSRA para que cuando termine el análogo a la conversión digital generará una interrupción que podemos escribir un manejador de interrupción para y poner en .org 0x002A.
  13. Establecer bit en SREG para habilitar las interrupciones.

Ejercicio 1: Asegúrese de leer las secciones pertinentes en la hoja de datos para cada una de las opciones anteriores para que usted entiende lo que está sucediendo y qué pasaría si cambiamos a la configuración alternativa.

Artículos Relacionados

Tutorial de ensamblador AVR 11

Tutorial de ensamblador AVR 11

Bienvenido a Tutorial 11!En este breve tutorial, finalmente vamos a construir la primera parte de nuestro proyecto final.Lo primero que debes hacer es ir al último paso de este tutorial y ver el video. Luego vienen aquí. [pausa mientras haces eso...]
Tutorial de ensamblador AVR 1

Tutorial de ensamblador AVR 1

He decidido escribir una serie de tutoriales sobre cómo escribir programas del lenguaje ensamblador para el Atmega328p que es el microcontrolador utilizado en el Arduino. Si la gente sigue interesada voy a seguir poner a uno una semana o así hasta qu
Tutorial de ensamblador AVR 6

Tutorial de ensamblador AVR 6

Bienvenido a Tutorial 6!Tutorial de hoy será corto donde desarrollamos un método sencillo para comunicar datos entre uno atmega328p y otro con dos puertos conectan. Luego tomar los dados rodillo del Tutorial 4 y el analizador de registro de 5 Tutoria
Tutorial de ensamblador AVR 8

Tutorial de ensamblador AVR 8

Bienvenido a Tutorial 8!En este breve tutorial vamos a tomar un poco de diversión de introducir nuevos aspectos de la programación de lenguaje ensamblador para mostrar cómo mover nuestros componentes prototipos a un separado "" del circuito impr
Tutorial de ensamblador AVR 9

Tutorial de ensamblador AVR 9

Bienvenido a Tutorial 9.Hoy nos muestra cómo controlar un display de 7 segmentos y un display de 4 dígitos utilizando nuestro código de lenguaje ensamblador ATmega328P y AVR. En el curso de hacer esto que tendremos que hacer desvíos cómo utilizar la
Tutorial de ensamblador AVR 10

Tutorial de ensamblador AVR 10

Bienvenido al Tutorial de 10!Lo siento que tomó tanto tiempo para salir esta próxima entrega, pero esta es una época bastante ajetreada del año. En cualquier caso, aquí está!Hemos recorrido un largo camino y probablemente ya eres lo suficientemente c
Tutorial de ensamblador AVR 5

Tutorial de ensamblador AVR 5

Hoy vamos a tomar un vistazo a los distintos lugares de la memoria en el microcontrolador Atmega328p y ver si podemos comprender mejor cómo se almacenan las cosas, donde se almacenan y cómo funcionan los punteros y tablas de búsqueda.El tutorial se s
Tutorial de ensamblador AVR 4

Tutorial de ensamblador AVR 4

Bienvenido a tutorial número 4!En este tutorial vamos construir un circuito que simulará el balanceo de dos dados. Entonces vamos primero a escribir un programa de fuerza bruta que hace el trabajo. A continuación simplificamos ese programa de varias
Tutorial de ensamblador AVR 2

Tutorial de ensamblador AVR 2

Este tutorial es una continuación de "AVR Assembler Tutorial 1"Si no has ido por 1 Tutorial debe parar ahora y hacer que uno primero.En este tutorial vamos a continuar nuestro estudio de programación del lenguaje ensamblador de la atmega328p en
Tutorial de ensamblador AVR 3

Tutorial de ensamblador AVR 3

Bienvenido a tutorial número 3!Antes de empezar quiero hacer un punto filosófico. No tenga miedo de experimentar con los circuitos y el código que estamos construyendo en estos tutoriales. Cambiar los cables alrededor de añadir nuevos componentes, sa
Un enfoque avanzado de programación de Arduino y AVR

Un enfoque avanzado de programación de Arduino y AVR

Este instructable es obligada lectura para todo aquel que esté familiarizado con núcleo AVR virutas y Arduino.Bien, para ser más específicos, al leer el instructivo, usted será capaz de:1) saber la diferencia correcta entre el AVR y Arduino.2) progra
Placa de desarrollo para microcontrolador Attiny84

Placa de desarrollo para microcontrolador Attiny84

Se trata de una placa de desarrollo para microcontrolador Attiny84. Tha Attiny84 chip tiene 11 pines direccionables con el IDE de Arduino, 8k de memoria flash para el almacenamiento de programa y 512 bytes de RAM disponible para las variables de pila
La tortura de Raven, aguda

La tortura de Raven, aguda

este es un pequeño dispositivo que diseñé para el sencillo propósito de ser discretamente molesta. Espera una cantidad predeterminada de tiempo, y luego empieza a emitir pitidos agudos. Yo he programado mina para tomar ventaja de una propiedad intere
Cariño, encogi lo Arduino: pasar de Arduino a ATtiny y escribir el código en C de AVR puro

Cariño, encogi lo Arduino: pasar de Arduino a ATtiny y escribir el código en C de AVR puro

Arduino es una plataforma de software y de gran dura - pero con todas sus características también está un poco hinchado y a menudo necesita sólo una pequeña parte de todas las funciones. A veces el proyecto requiere dispositivos más pequeños y más ba