Índice:
- Etapa 1: Definindo endereços de registro
- Etapa 2: Matrizes e Variáveis Globais
- Etapa 3: a função "serial.begin"
- Etapa 4: a função "serial.available"
- Etapa 5: a função "serial.read"
- Etapa 6: a função "serial.write"
- Etapa 7: A função de configuração
- Etapa 8: as funções de loop e ISR
- Etapa 9: Fiação
- Etapa 10: Juntando tudo
Vídeo: Gerador de tons Arduino sem biblioteca ou funções seriais (com interrupções): 10 etapas
2024 Autor: John Day | [email protected]. Última modificação: 2024-01-30 11:38
Isso não é algo que eu normalmente faria um instrutível, eu prefiro meu trabalho em metal, mas como sou um estudante de engenharia elétrica e tenho que fazer uma aula de microcontroladores (Embedded Systems Design), pensei em fazer um instrutível sobre um dos meus projetos. Quando fiz originalmente o projeto e outros para esta classe, descobri que há poucos ou nenhum tutorial que não usa as funções da biblioteca do Arduino ou funções seriais, o que é outro motivo pelo qual pensei que seria um bom instrutor.
Este código é projetado para o microcontrolador Atmega 2560, então se você quiser implementá-lo em outra placa, você precisará alterar os registros de endereço no código com base no manual do usuário de seus controladores. A ideia básica por trás do código é que sempre que você inserir uma tecla no teclado no monitor serial, o arduino mega produzirá uma certa frequência com base na tecla que você pressionar, com "q" reinicializando-a. Eu fiz isso para que "a" produza a freqüência A bemol e "A" produza a freqüência A sustenido, "b" produzindo B bemol, "c" para dó bemol, "C" para dó sustenido e assim por diante. O código completo é carregado no final, mas cada etapa dividirá o código em partes para que seja mais fácil de explicar.
Etapa 1: Definindo endereços de registro
Esta etapa é fácil, se você estiver usando o atmega 2560, você só precisa usar os endereços que usei, embora se você usar uma placa com um chip diferente, você precisará encontrar os endereços de cada um desses registros em seu manual do usuário dos chips. As definições no topo são apenas constantes que serão usadas para nossas funções mais tarde. Especificamos os endereços como voláteis sem sinal porque não queremos que o compilador mexa com eles.
Etapa 2: Matrizes e Variáveis Globais
Aqui, queremos definir a matriz de frequência que conterá todas as frequências que cada tecla deve produzir. Esses valores são calculados a partir das freqüências reais das notas e, honestamente, esqueci como os obtive, mas são os valores corretos quando os testei em um osciloscópio para ter certeza. Também estamos definindo a matriz de notas que contém todas as teclas a serem pressionadas para cada tom, bem como as variáveis de que precisaremos para nossas funções posteriores.
Etapa 3: a função "serial.begin"
Chamaremos nossa função personalizada que replica a função "serial.begin" U0init (). Ele pega a taxa de transmissão desejada como entrada e inicia a porta serial nessa taxa de transmissão.
Etapa 4: a função "serial.available"
Chamaremos a função que imita "serial.available" U0kbhit (). Ele não aceita entrada, mas em vez disso, detecta se há uma alteração feita no teclado usando o bit de status RDA e retorna verdadeiro quando uma alteração é detectada.
Etapa 5: a função "serial.read"
Chamaremos a função que imita a função "serial.read" U0getchar (), que não recebe nenhuma entrada e produz qualquer alteração feita no teclado, que é armazenada no registrador UDR0.
Etapa 6: a função "serial.write"
Chamaremos a função que imita "serial.write" U0putchar (), que obtém os dados do registro UDR0 enquanto uma alteração é detectada e armazenada, e envia essa alteração de volta para o monitor serial.
Etapa 7: A função de configuração
Esta é a função de configuração básica que usará nossa imitação "serial.begin" para inicializar a porta serial e inicializará nossas configurações de bits para os registradores do temporizador e definirá PB6 para emitir nossos tons.
Etapa 8: as funções de loop e ISR
O loop funciona da seguinte forma: se uma alteração for detectada com nossa função "serial.available", nossa função "serial.read" armazena essa alteração, e nossa função "serial.write" coloca essa alteração no monitor serial. Contanto que uma variável i seja menor que o tamanho da matriz de frequência, ela definirá a saída como a posição de i nessa matriz, gerando a frequência nessa posição. O ISR funciona como o reset, onde se a posição da matriz de frequência não for igual a 0 (em outras palavras, se "q" não for pressionado), ele emitirá a frequência, mas quando "q" for pressionado, ele será redefinido. Observe: este código usa interrupções, mas pode ser feito com interrupções desabilitadas. Vou postar o código sem interrupções se receber alguma solicitação, só acho que a versão de interrupção é mais divertida.
Etapa 9: Fiação
A fiação para este código é extremamente fácil, simplesmente coloque um fio de saída de PB6 em uma placa de ensaio, conecte uma campainha ou alto-falante em série com isso e conecte-o de volta ao aterramento. Nota: se você usar um alto-falante, coloque um pequeno resistor antes do alto-falante. Se você quiser apenas ver a saída, mas não ouvi-la, basta conectar PB6 ao fio vermelho de um osciloscópio e o fio preto ao aterramento.
Etapa 10: Juntando tudo
Eu adicionei o código completo a esta etapa, já que expliquei todas as suas partes nas etapas anteriores. Leva apenas uma entrada de teclado para diferentes frequências e envia essa frequência para PB6. Espero que você tenha gostado de ler uma maneira diferente de codificar com o IDE!
Além disso, vote nele no concurso Microcontrolador: D
Recomendado:
Um gerador de tons simples: 7 etapas (com imagens)
Um gerador de tom simples: o gerador de tom do Arduino é um conjunto de interruptores que compartilham um terminal comum com o GND enquanto os pinos restantes são conectados a 2, 3, 4, 5, 6, 7, 8 e 9 pinos digitais do Arduino e também com um alto-falante instalado entre GND e pino digital 11 do Arduino Uno
Arduino Synth / Gerador de tons: 5 etapas
Arduino Synth / Tone Generator: Este é um Synth / Tone Generator que usa o comando Tone nativo do Arduino. Possui 12 teclas individuais que podem ser configuradas para reproduzir qualquer frequência de onda quadrada. Ele tem a capacidade de subir e descer oitavas com um botão. Também tem um s
Gerador de tons "Jimikky Kammal" usando Arduino Pro Mini: 5 etapas
Gerador de tons "Jimikky Kammal" usando o Arduino Pro Mini: este é um projeto simples de gerador de tons usando o Arduino Pro Mini. Uma parte do super hit " Jimikky Kammal " do filme " Velipadinte Pusthakam " é desenvolvido em monotônico. As notas musicais ocorrem na natureza como sinusos suaves e ondulantes
Gerador de tons de tecido do microcontrolador em código C: 8 etapas (com imagens)
Gerador de tom de tecido do microcontrolador em código C: No final de outubro do ano passado, o usuário instructables carmitsu me enviou uma mensagem depois de ver meu sintetizador de lancheira. De sua mensagem: Eu ensino música na escola primária. Tocamos muita música de flauta. ou seja, as crianças tocam flautas pequenas …… eu cortei
Resfriador / suporte de laptop de custo zero (sem cola, sem perfuração, sem porcas e parafusos, sem parafusos): 3 etapas
Resfriador / suporte para laptop de custo zero (sem cola, sem furação, sem porcas e parafusos, sem parafusos): ATUALIZAÇÃO: ATUALIZAÇÃO ESPECIALMENTE VOTE MEU INSTRUTÁVEL, OBRIGADO ^ _ ^ VOCÊ TAMBÉM PODE GOSTAR DE VOTO EM MEU OUTRO CONCURSO INSCREVA-SE EM www.instructables.com/id/Zero-Cost-Aluminum-Furnace-No-Propane-No-Glue-/ OU TALVEZ VOTE NO MEU MELHOR AMIGO