Tutorial de ensamblador AVR 7 (7 / 12 paso)

Paso 7: Escribir el handler de interrupción

En el último paso hemos visto que nos hemos fijado para arriba un flanco ascendente en PD2 activará un análogo a la conversión digital de PC0 y cuando esta conversión es completa producirá una interrupción completa de conversión ADC. Ahora queremos hacer algo con esta interrupción.

Si se examina la tabla 12-6 en la página 65, verá una lista de las posibles interrupciones. Ya hemos visto la interrupción RESET en la dirección 0 x 0000 y la interrupción de desbordamiento del Timer/Counter0 en dirección 0x0020 en tutoriales anteriores. Ahora queremos mirar la interrupción ADC que vemos en la tabla es en dirección 0x002A. Así que al principio de nuestro código de lenguaje ensamblador, se necesita una línea que dice:

 .org 0x002Arjmp ADC_int 

que saltarán a nuestro manejador de interrupción con la etiqueta ADC_int cuando el ADC ha completado una conversión. Entonces, ¿cómo debemos escribir nuestro manejador de interrupción?

La manera en que funciona el ADC es realizando el siguiente cálculo:

 ADC = Vin x 1024 / Vref 

Así que vamos a ver lo que pasa si presiono el botón "redial" en el teclado. En ese caso cambiará el voltaje de la PC0 a algún valor, dice 1.52V, y puesto que Vref está en 5V tendremos:

 ADC = (1.52V) x 1024 / 5V = 311.296 

y así mostraría como un 311. Si quisiéramos convertir esto en una tensión que simplemente invertir el cálculo. No necesitamos hacer esto sin embargo puesto que no estamos interesados en los voltajes reales sólo en la distinción entre ellos.

Cuando la conversión haya terminado, el resultado se almacena en un número de 10 bits en los registros ADCH y ADCL y hemos causado a "izquierda ajustarse" que significa que los 10 bits comienzan en el bit 7 de ADCH y van abajo a bit 6 de ADCL (hay total en estos dos registros de 16 bits y utilizamos sólo 10 de ellos es decir, 1024 canales). Podríamos tener el resultado "bien ajustado" si queríamos despejando ADLAR bit en el registro ADMUX. La razón elegimos izquierda ajustado es porque nuestras señales son lo suficientemente aparte que los dos últimos dígitos del número de canal no son relevantes y son probablemente apenas ruido por lo que distinguiremos la pulsación de las teclas utilizando solamente los 8 dígitos superiores, en otras palabras, sólo necesitamos mirar ADCH averiguar qué botón se presionó.

Así que nuestro manejador de interrupción debe leer simplemente decir el número de registro ADCH, convertir el número en un valor de teclado, y luego enviar ese valor a nuestro analizador de registro de LED para que podamos verificar empujando un "9", hará que el LED correspondiente a "00001001" para iluminar.

Antes ahora si necesitamos ver primero qué demuestra para arriba en ADCH cuando empujamos los diferentes botones. ¡ Sólo tienes que escribir un manejador de interrupción simple que solo envía el contenido de ADCH a la pantalla del analizador.

Así que aquí está lo que necesitamos:

 ADC_int:lds analyzer, ADCH ;load the value of ADCH into our analyzersbi EIFR,0 ; clear the external interrupt flag so that it is ready to go againreti 

Por ahora, podrá simplemente copiar el código de nuestro analizador en tutorial 5 y añadir esta interrupción y la configuración de la palanca y ejecutarlo.

Ejercicio 2: Escribir el código y ejecutarlo. Ver que sacan la ADCH mostrando en la pantalla del analizador. Prueba presionando la misma tecla varias veces. ¿Siempre obtengo el mismo valor de ADCH?

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