Objetivo: O objetivo deste projeto é usar programas Assembly que serão incorporados ao ambiente Arduino C, mas também serão introduzidos para fazer uma entrada e uma saída da placa Arduino. A entrada será uma chave para iniciar o programa com um resistor pull-up ou pull-down e a saída acionará um LED piscando um SOS em Código Morse. Parece que será complicado, mas você receberá dicas a cada passo do caminho. E você pode usar a função de atraso do laboratório anterior e R16 para os diferentes tempos de atraso.
Na época do telegrama e da radiotelegrafia, antes e mesmo depois da codificação da voz, o meio de comunicação era um 'tapper' ou um interruptor de aparência sofisticada, em código Morse, por meio do qual o remetente podia digitar uma mensagem usando palavras longas e curtas. durações ou 'toques'. Na extremidade receptora haveria um relé ou um tom que repetiria os toques para que se pudesse ouvir e traduzir de volta em palavras. No código Morse, a letra S é codificada com 3 pontos curtos ou durações e o O é codificado com três travessões longos ou durações. O código Morse para socorro ou ajuda é SOS que se parece com…---… …---… e assim por diante.
Este laboratório enviará SOS em código Morse para um LED quando um interruptor estiver ligado e irá parar após enviar o SOS completo quando o interruptor estiver desligado.
Aqui está um exemplo de como deveria soar: https://www.youtube.com/watch?v=Zsb7stKelq4
Criando uma entrada para um switch. Uma operação aparentemente simples requer alguma reflexão ao ser realizada em um microprocessador.
Aqui estão algumas etapas gerais para fazer uma entrada:
Consulte a seção 14 da folha de dados do AVR sobre portas de E/S. Observe abaixo o hardware para um pino de E/S no AVR.
Hardware interno para um pino de E/S no AVR
Todo esse hardware é necessário para poder configurar o pino como entrada ou saída, além de alguns outros recursos como resistores pullup internos, modos de suspensão e sincronização com o relógio. Claramente, os pinos de E/S não são simples, mas neste laboratório nos preocuparemos apenas com uma entrada ou saída simples. Para isso precisamos do registrador DDR e da Porta de entrada ou saída que iremos utilizar.
Anteriormente vimos como as saídas foram configuradas para que o LED do bit 5 da PORTB piscasse.
Você pode selecionar qualquer pino de porta disponível para isso em seu Arduino, mas então você deve determinar sua porta e bit.
Saída: PORTB, registro 5, bit 5, é usado internamente para o LED e também é levado a um conector (pino 13 no UNO), mas não é usado externamente - ele não tem capacidade de corrente suficiente para acionar dois LEDs.
• Sugestão: Utilize PORTB, registre 5 bit 4 (pino 12 no UNO) para a saída
Entrada: Existem muitas outras opções que você pode usar (exceto não usar os pinos de E/S 0 ou 1, pois eles são necessários para a comunicação com o computador). • Sugestão: PORTB, registro 5 bit 3 (pino 11 no UNO) pode ser usado como entrada.
Configuração típica: você escolhe os pinos para entrada e saída.
Lendo uma entrada: Para ler uma entrada conhecendo a porta, você usaria a instrução IN mostrada abaixo e o endereço dos pinos da porta que está usando. Por exemplo, para ler o PORTB, bit 4 (pino 18 do UNO), você usaria esta instrução para ler a porta.
Laço:
EM r17, 0x03; //lê os pinos PORTB no registro 17
Agora você precisa escolher o bit 4 aplicando AND com 0x10 para mascarar todos os outros bits. Depois disso, depende da sua configuração de entrada e se você está usando um pull-up ou um pull-down. Aqui estamos usando um resistor pulldown.
Se você estiver usando um resistor pull-up, o fechamento da chave resultará em 0, caso contrário será 1, então você pode executar a instrução AND e então ramificar se for zero.
ANDI r17, 0x08; //E r17 com 08h
início BRNE; //se a chave não estiver fechada (ou seja, 1), então volte e faça o loop
Se estiver usando um resistor pull-down, o fechamento da chave resultará em 1, caso contrário, será 0:
ANDI r17, 0x08; //E r16 com 08h
Início do BREQ; //se a chave não estiver fechada (ou seja, 0), então volte e faça o loop
Criar uma saída é muito semelhante a criar uma entrada. Você deve definir o pino da porta como uma saída. Então você pode usar o CBI ou SBI para torná-lo zero ou um.
Aqui estão algumas etapas gerais para criar uma saída:
Projetando o programa Este laboratório é muito semelhante ao laboratório anterior sobre o LED piscando. Esse esboço está anexado como base para você começar. Basta alterar a estrutura para criar o SOS conforme as regras acima e usar uma entrada para o switch executar o SOS e uma saída para acionar o LED. Use a sub-rotina de atraso para configurar diferentes atrasos para os pontos, traços, etc., conforme mostrado abaixo na caixa.
Consulte o documento que define as relações temporais e siga estas regras ao projetar seu programa para o Código Morse SOS.