Paso 1: ¿Cómo podemos obtener dos microcontroladores para hablar?
Ya que estamos comenzando a expandir nuestro proyecto para que nuestro producto final se compone de una colección de piezas más pequeñas que vamos a necesitar más pines que puede proporcionar un único Atmega328P. Por lo tanto vamos a hacer cada pieza del proyecto global en un microcontrolador independiente y luego indíqueles que compartan datos entre ellos.
Así que el problema que necesitamos resolver es ¿cómo podemos nosotros llegar a un método simple para los controladores de hablar y transferir datos entre ellos?
Bueno, una cosa acerca de estos controladores es que cada uno de ellos ejecutar 16 millones de instrucciones por segundo. Esto precisamente se mide el tiempo y así podemos usar este tiempo para transferir datos. Si usamos retardos de milisegundos para constituir los datos entonces no debemos ser todo lo que precisa ya que la CPU está ejecutando instrucciones de 16.000 en un solo milisegundo. En otras palabras, un milisegundo es una eternidad para el CPU.
Así que vamos a intentarlo con los rodillos de los dados. Quiero transmitir el resultado de un rodillo de dados de la viruta del rodillo de dados a la viruta del analizador. Supongamos estaban de pie en la calle y quería la señal para el resultado de mi rollo de un par de dados. Lo que pude hacer, si ambos teníamos un reloj, es que podría encender una linterna, luego cuando esté listo para recibir mis datos enciende su linterna y ambos comenzamos nuestros relojes. Luego seguir mi linterna para el exacto número de milisegundos que el rollo de dados y luego apáguela. Así que si me lió un 12 mantengo mi luz 12 milisegundos.
Ahora el problema con esto es que, para usted y para mí, no hay ninguna manera podríamos tiempo cosas con la suficiente precisión para distinguir entre 5 milisegundos y 12 milisegundos. Pero, ¿esto: Supongamos que decidimos que sería mantener mi luz en un año para cada número en los dados? ¿Entonces si la voy a liar un 12 brillaría la luz te 12 años y creo que estarán de acuerdo que no hay ninguna posibilidad de que se comete un error en averiguar el número correcto? Podría tomar un descanso e ir a jugar béisbol, usted incluso podría ir jugar al craps en las Vegas para 6 meses, siempre y cuando en algún momento durante el año a miró a través de la calle para ver que si la luz estaba en no faltaría un recuento. Bueno, eso es exactamente lo que estamos haciendo para los microcontroladores! Un solo milisegundo para el CPU es como un año. Así que si se activa la señal de 12 milisegundos no hay casi ninguna posibilidad de que el otro microcontrolador confunde para 10 o 11 no importa qué interrupciones y todo eso suceden mientras tanto. Para los microcontroladores, un milisegundo es una eternidad.
Así que aquí está lo que hacemos. Primero vamos a elegir dos puertos de la controladora que nuestros puertos de comunicación. Voy a utilizar PD6 para recibir datos (podríamos llamarla Rx si nos gusta) y voy a elegir PD7 para transmisión de datos (podríamos llamarla Tx si nos gusta). El chip de analizador comprobará periódicamente es pin Rx y si ve una señal que caiga una "subrutina de comunicación" y entonces transmiten una señal de retorno para el rodillo de dados diciendo que está listo para recibir. Van ambos iniciar el cronometraje y el rodillo de dados transmitirá una señal (por ejemplo 5V) para un milisegundo por cada número en los dados. Así que si el rollo era doble seises, o un 12, luego el rodillo de dados es PD7 5V 12 milisegundos y luego ponerlo a 0V. El analizador comprobará su PD6 pin cada milisegundo, contando cada vez, y cuando vuelve a 0V entonces salidas el número resultante para el analizador de muestra, mostrando un doce en binario en los LED.
Por lo es el plan. Vamos a ver si podemos implementarlo.