Propósito: El propósito de este proyecto es utilizar programas de ensamblaje que se integrarán en el entorno Arduino C, pero también se introducirán en la realización de entradas y salidas desde la placa Arduino. La entrada será un interruptor para iniciar el programa con una resistencia pull-up o pull-down y la salida activará un LED que parpadeará en un SOS en código Morse. Parece que será complicado, pero te dan pistas en cada paso del camino. Y puede utilizar la función de retardo del laboratorio anterior y R16 para los diferentes tiempos de retardo.
En la época de los telegramas y la radiotelegrafía, antes e incluso después de que se codificara la voz, el medio de comunicación era mediante un 'tapper' o un interruptor de aspecto elegante, que usaba el código Morse, mediante el cual el remitente podía escribir un mensaje usando mensajes largos y cortos. duraciones o 'grifos'. En el extremo receptor habría un relé o un tono que repetiría los toques para que uno pudiera escucharlo y traducirlo en palabras. En código Morse, la letra S está codificada con 3 puntos cortos o duraciones y la O está codificada con tres guiones largos o duraciones. El código Morse para auxilio o ayuda es SOS, que se parece a …---… …---… y así sucesivamente.
Esta práctica de laboratorio enviará SOS en código Morse a un LED cuando un interruptor esté encendido y se detendrá después de enviar el SOS completo cuando el interruptor esté apagado.
Aquí hay un ejemplo de cómo debería sonar: https://www.youtube.com/watch?v=Zsb7stKelq4
Creando una entrada para un interruptor. Una operación aparentemente tan sencilla requiere cierta reflexión cuando se realiza en un microprocesador.
A continuación se detallan algunos pasos generales para realizar una entrada:
Consulte la sección 14 de la hoja de datos del AVR sobre los puertos de E/S. Observe a continuación el hardware para un pin de E/S en el AVR.
Hardware interno para un pin de E/S en el AVR
Todo este hardware es necesario para poder configurar el pin como entrada o salida, además de algunas otras características como resistencias pullup internas, modos de suspensión y sincronización con el reloj. Claramente, los pines de E/S no son simples, pero en esta práctica solo nos ocuparemos de una entrada o salida simple. Para ello necesitamos el registro DDR y el Puerto de la entrada o salida que estaremos utilizando.
Anteriormente vimos cómo se configuraban las salidas para que el LED del bit 5 de PORTB parpadeara.
Puedes seleccionar cualquier pin de puerto que esté disponible para esto en tu Arduino, pero luego debes determinar su puerto y bit.
Salida: PORTB, registro 5, bit 5, se usa internamente para el LED y también se conecta a un conector (pin 13 en UNO), pero no lo use externamente; no tiene suficiente capacidad de corriente para controlar dos LED.
• Sugerencia: use PORTB, registre 5 bits 4 (pin 12 en UNO) para la salida
Entrada: Hay muchas otras opciones que puede usar (excepto no usar los pines de E/S 0 o 1, ya que son necesarios para comunicarse con la computadora). • Sugerencia: PORTB, registro 5 bit 3 (pin 11 en UNO) se puede utilizar como entrada.
Configuración típica: usted elige los pines para la entrada y la salida.
Lectura de una entrada: para leer una entrada conociendo el puerto, deberá utilizar la instrucción IN que se muestra a continuación y la dirección de los pines del puerto que está utilizando. Por ejemplo, para leer el PORTB, bit 4 (pin 18 de UNO), usaría esta instrucción para leer el puerto.
Bucle:
EN r17, 0x03; //lee los pines PORTB en el registro 17
Ahora necesita seleccionar el bit 4 haciendo un AND con 0x10 para enmascarar todos los demás bits. Después de esto, depende de su configuración de entrada y de si está utilizando un menú desplegable o desplegable. Aquí estamos usando una resistencia desplegable.
Si está utilizando una resistencia Pull-up, el cierre del interruptor dará como resultado un 0; de lo contrario, será un 1, por lo que puede realizar la instrucción AND y luego bifurcar si es cero.
ANDI r17, 0x08; //Y r17 con 08h
Inicio del BRNE; //si el interruptor no está cerrado (es decir, 1), entonces regresa y realiza un bucle
Si usa una resistencia desplegable, el cierre del interruptor dará como resultado un 1; de lo contrario, será un 0:
ANDI r17, 0x08; //Y r16 con 08h
inicio de BREQ; //si el interruptor no está cerrado (es decir, 0), entonces regresa y realiza un bucle
Crear una salida es muy similar a crear una entrada. Tienes que configurar el pin del puerto para que sea una salida. Luego puedes usar el CBI o SBI para convertirlo en cero o uno.
A continuación se detallan algunos pasos generales para generar un resultado:
Diseño del programa Esta práctica de laboratorio es muy similar a la práctica anterior para el LED parpadeante. Ese boceto se adjunta como base para que puedas empezar. Sólo tiene que cambiar la estructura para crear el SOS según las reglas anteriores y usar una entrada para que el interruptor ejecute el SOS y una salida para controlar el LED. Utilice la subrutina de retraso para configurar diferentes retrasos para los puntos, rayas, etc., como se muestra a continuación en el cuadro.
Consulte el documento que define las relaciones de tiempo y siga estas reglas al diseñar su programa para el Código Morse SOS.