Interconexión de circuitos electrónicos para Arduinos (3 / 6 paso)

Paso 3: Conversión de las formas de onda en código

Paso 3: convertir diagramas de sincronización de código
El entorno de desarrollo Arduino protege al usuario de muchos de los detalles del código desordenado. Esto es bueno cuando están empezando y quieren a parpadear un LED. Sin embargo, cuando queremos interactuar con otros circuitos electrónicos, debemos interactuar más directamente con el microprocesador.

Primero vamos a discutir cómo leer eficientemente en los 16 pines en el bus de datos. Desde que estoy usando la Arduino Mega porque tiene un montón de alfileres de IO, puedo usar Puerto A y Puerto C que mi bus de datos de 16 bits. Puerto A y Puerto C son pernos 22 – 37 en el Arduino Mega. El bus de datos es bidireccional, lo que significa que a veces los pasadores se utilizan como salidas y otras veces como entradas por lo que necesitamos configurar rápidamente los modos de pin y lectura/escritura a los pines se. La lenta forma de usar estos pines sería la siguiente:
pinMode(22,INPUT);
pinMode(23,INPUT);
pinMode(24,INPUT);

pinMode(37,INPUT);
torcedura1 = digitalRead(22);
BIT2 = digitalRead(23);
bit3 = digitalRead(24);

Bit16 = digitalRead(37);

En este caso perderíamos datos sería leer que los datos más lentos que la información se recibe. Tenemos que acelerar esta interfaz directamente con el microprocesador de Arduino.

El microprocesador de Arduino es como el motor dentro de la Porsche. Veces más un conductor de un coche realmente sólo necesita comprender cómo hacer que el coche pare y vaya y no es necesario comprender el funcionamiento interno del motor del coche. Un piloto de carreras, sin embargo, debe comprender los límites y las capacidades del motor para empujar para ganar la carrera. Además tenemos que entender los detalles de la ATMEL AVR que es motor de Arduino para interactuar con otros circuitos electrónicos.

Para entender el microcontrolador Arduino podemos leer la hoja de datos AVR. El Arduino Mega utiliza el ATMEGA1280 que pueden encontrarse aquí: www.atmel.com/dyn/resources/prod_documents/doc2549.pdf

Sí, se trata de 444 páginas de información detallada que puede ser intimidante a primera vista. Usted encontrará en las páginas 100 y 101 que se pueden establecer todas las clavijas en el puerto A y Puerto C con una sola escritura a la dirección PORTA y PORTC dirección. También podemos leer de estos puertos, pero lo hacemos no por lectura de la PORTA y PORTC direcciones pero de direcciones de la PINA y PINC. Asimismo podemos establecer todas las clavijas de los modos de pin en el puerto a la vez escribiendo a DDRA y DDRC direcciones, un '1' pone el pin a '0' a la entrada y salida.

Ahora podemos establecer los pines en entradas y leer mucho más rápidamente utilizando estos comandos:
DDRA = 0 X 00;
DDR = 0 X 00;
Byte1 = PINA;
Byte2 = PINC;

Y escribir a los pines del puerto:
DDRA = 0XFF;
DDR = 0XFF;
PORTA = Byte1;
PORTC = Byte2;

Ahora que eficientemente podemos leer y escribir a los pines del bus, que tenemos que mirar cómo eficiente leer y escribir los otros pines normales. En mi proyecto de ejemplo usé pasadores Arduino 2 – 12 para controlar las señales de control de bus no 11 entre el DEI1016 y el Arduino. Si queremos escribir código eficiente para estos pasadores también (y nosotros) tenemos que evitar las rutinas digitalWrite y digitalRead que son lentas porque hacen cosas como comprobación para ver que los pines son los modos correctos, etc.. Para escribir rápidamente una vez más podemos escribir directamente a los pines de hardware evitando la sobrecarga de Arduino. El avrio.h de archivo incluyen incluye las funciones avrio_WritePin y avrio_ReadPin que escribe y Lee rápido. Tomé una pista de la librería glcd y definir mi propia rutina fastWrite que es #defined a avrio_WritePin para hacer el código más legible. Si lo desea puede revisar cómo la librería glcd soluciona su escribe rápido, aunque tendrás que recorrer las pocas capas de direccionamiento indirecto.

¿Una última parte de la dificultad que tenemos en la traducción de los diagramas de momento en código, sólo cómo retrasamos el número especificado de nanosegundos? ¿Cuál es un nanosegundo? Pregunta: ¿Cuánto tiempo ¿tomar para que se deslice en una cáscara y caer? Respuesta: Un bananosecond. Perdón por el mal juego de palabras. El Arduino tiene un delay(milliseconds) y delayMicroseconds() pero no tiene una función delayNanoseconds(). Al trabajar en un lenguaje de alto nivel como C, tenemos menos conocimiento de cuánto tiempo llevará un microcontrolador ejecute nuestros comandos. Esto es muy complicado como los procesadores llegan a ser más complejos y tienen tuberías de instrucción con L1 y L2 memoria caché, etc.. En nuestro caso de Arduino no es demasiado difícil como podemos utilizar la capacidad del lenguaje C para incluir código de ensamblado en línea. Mediante Asamblea podemos contar las instrucciones y saber cuántos reloj ciclos (normalmente 1/16000000 de segundo) una operación de toma. Usa 'inline', las instrucciones no Haz implementadas como subrutinas y por lo tanto no tarda más tiempo en proceso con el que salta a la subrutina y empujando y apareciendo datos de la pila. La desventaja de ensamblado en línea es que el código de objeto compilado obtiene más largo, pero es aceptable ya que no estamos haciendo un montón de estas demoras de nanosegundo.

Otra vez robo la solución dentro de la biblioteca del glcd. Allí incluye el archivo delay.h que contiene la función _delay_cycles. Entonces definir esta función como el DelayNanoseconds más fácil de leer como sigue:

Rutina de ciclo de demora de Hans Heinrichs:
#define DelayNanoseconds(__ns) _delay_cycles ((doble) (F_CPU) * (__ns (doble)) / 1.0e9 + 0.5)

Te darás cuenta que hay doble matemáticas de punto flotante en aquí que generalmente se evita porque es muy lento y queremos demoras muy pequeñas. Esta rutina utiliza el flotante punto rutinas matemáticas para ajustar automáticamente la frecuencia de reloj del microcontrolador para insertar la cantidad correcta de montaje código en línea con el código de C y la mejor parte es que el flotante punto cálculos se llevan a cabo cuando se compila y no se ejecutan por el Arduino en tiempo de ejecución. Este método puede resultar en una solo-instrucción 'NOP' se inserta como un retraso ocupado.

Artículos Relacionados

La introducción de Digital reloj temperatura voltaje módulo electrónico para Arduino STM8 AVR 51 STM32 brazo

La introducción de Digital reloj temperatura voltaje módulo electrónico para Arduino STM8 AVR 51 STM32 brazo

Hola amigos, hoy le presento este maravilloso reloj electrónico digital temperatura voltaje módulo de ICStation en detalles. Este producto es desarrollado recientemente por el equipo de ICStation. Compartimos a usted y bienvenida todo amigo para eval
Cómo hacer un dado electrónico usando ARDUINO

Cómo hacer un dado electrónico usando ARDUINO

Hey chicos estamos con otra fresco proyecto Arduino para usted. En este Instructable le mostrará cómo hacer un dado electrónico utilizando Arduino. Sé que le va a gustar. Ver el video.Paso 1: componentes1. LED (7)2. IC 4017 (contador de década)3. pue
Visor electrónico para cámaras digitales compactas

Visor electrónico para cámaras digitales compactas

este Instructable es específico para hacer un visor electrónico para la S95 de Canon, pero suponiendo que tu cámara digital tiene capacidad de salida de vídeo y usted puede encontrar el conector correcto y los pines, se puede adaptar a sus necesidade
Discreto inspector electrónico para la cremallera

Discreto inspector electrónico para la cremallera

La gente siempre me pregunta cómo es hago tantas cosas inventivas. Para mí es normales. Solo lo hago. Simplemente no sé cómo hacer nada más. Lo me asombra es los demás hagan esas otras cosas como limpiar sus casas, alimentarse y vestirse por la mañan
Construir su propia interfaz de Sampler electrónico para Ableton

Construir su propia interfaz de Sampler electrónico para Ableton

Hola. Actualmente soy un estudiante de tecnología de música de segundo año. El objetivo de este proyecto fue diseñar un nuevo instrumento de alguna forma.En definitiva, es una interfaz electrónica y se puede volver a asignar una variedad de propósito
Introducción a los relais usando Snap circuitos electrónicos

Introducción a los relais usando Snap circuitos electrónicos

¿qué es un relé? Probablemente has visto una carrera de relevos donde un corredor entrega un bastón a otro corredor. Asimismo, un relé electrónico entrega control de un circuito a otro. Un relé es un dispositivo muy simple que consiste en un electroi
Cómo hacer placas de circuitos electrónicos y otras cosas relacionadas con

Cómo hacer placas de circuitos electrónicos y otras cosas relacionadas con

Se trata de cómo usar las cosas y circutry juntas.Yo no soy viejo, así que esto es muy, muy, muy básica.bueno para arrancadores que quieren aprender robótica.permite comenzar!Paso 1: Paso 1: servos y conexiones inalámbricasSe necesita uno de esos jug
Leer correo electrónico con Arduino y protector de la onda

Leer correo electrónico con Arduino y protector de la onda

como parte de mi proyecto (ese proyecto es en un concurso así que si usted esta entonces vota por que!) que usa un Arduino para interrumpir una fuente de sonido extrernal (es decir, iPod) para hacerle saber acerca de cosas que a tu alrededor, lo tení
Fuegos artificiales electrónicos programables Arduino

Fuegos artificiales electrónicos programables Arduino

Aquí hay un video del show de fuegos artificiales que hice el año pasado con este proyecto para empezar.Antes de empezar a conocer tus leyes locales, estatales y federales sobre lo que puede y no puede utilizar en su área los fuegos artificiales. En
IOhmy - aplicación para circuitos electrónicos

IOhmy - aplicación para circuitos electrónicos

Te gustan los circuitos de electrónica?, ¿es usted usuario de Arduino?Esta aplicación es fácil de usar y lo suficientemente inteligentes para calcular los valores de circuito al editar cualquier entrada de datos.¿Por qué esta aplicación?,Estamos defi
Fabricación de papel plantillas de soldadura para placas de circuitos electrónicos de mano

Fabricación de papel plantillas de soldadura para placas de circuitos electrónicos de mano

para soldar componentes de montaje superficiales es fácil y difícil.Fácil porque el tamaño pequeño la conduce calor rápidamente y dibujar en la soldadura. La soldadura también se dibuja a las pastillas. Esto puede ayudar a centrar y alinear los compo
Adaptación de proyectos de percusión electrónico para interactuar con mi máquina de ruido CMOS Lunetta parche abierto

Adaptación de proyectos de percusión electrónico para interactuar con mi máquina de ruido CMOS Lunetta parche abierto

Me he pasado los últimos 9 meses construyendo y mejorando mi Lunetta CMOS basan sintetizador de ruido. Hace algunos sonidos impresionantes, pero una cosa que me he saltado es la percusión. Deje engañar con varios circuitos de tambor básico pero nada
DIY Robot autónomo inteligente (animal doméstico electrónico) /w Arduino

DIY Robot autónomo inteligente (animal doméstico electrónico) /w Arduino

Me encanta a todo tipo de robots especialmente autónoma o robots inteligentes, que tienen una inteligencia un poco más que evitar un obstáculo. Así que he decidido que voy construir mi propio robot inteligente barato tiene una estructura en la cámara
El más simple circuito electrónico

El más simple circuito electrónico

Circuito de electrónica más simpleHola chicos, aquí es el circuito más simple; está constituida por una resistencia, un LED y una batería.Cálculo se expone a continuación.Vs: 9Vdc.Tensión para el LED, digamos 3Vdc,Corriente a través de LED 20mA.A tra