Índice:
- Etapa 1: Materiais e construção
- Etapa 2: soldando o AVR aos LEDs e alto-falante
- Etapa 3: Programando o Attiny13a
- Etapa 4: Criando o Firmware para Marioman
- Etapa 5: deixando o Marioman solto
Vídeo: Piscando, cantando, Marioman: 5 etapas
2024 Autor: John Day | [email protected]. Última modificação: 2024-01-30 11:40
Use um attiny13a, dois LEDs e um alto-falante de cartão comemorativo para criar um Marioman piscando que reproduz a música tema do Super Mario Brothers. Este pode ser um projeto fácil de baixo custo para quem está procurando uma maneira divertida de entrar na programação AVR! as notas das músicas são geradas por uma onda quadrada emitida em um único pino do microcontrolador AVR. Os LEDs que se alternam em cada nota são conectados a 2 pinos cada um do mesmo chip.
Etapa 1: Materiais e construção
1 attiny13a
www.mouser.com/Search/ProductDetail.aspx?qs=sGAEpiMZZMvu0Nwh4cA1wRKJzS2Lmyk%252bEP0e%2f7dEeq0%3dCusto: $ 1,40
- 2 LEDs - qualquer LED servirá
- 1 bateria de célula tipo moeda de lítio
www.sparkfun.com/commerce/product_info.php?products_id=338Custo: $ 2,00
1 porta-célula de moeda
www.sparkfun.com/commerce/product_info.php?products_id=8822Custo: $ 1,25
1 pequeno alto-falante de um cartão musical
Custo total dos materiais ~ $ 5 Os dois LEDs foram conectados diretamente a dois pinos de cada um do attiny13A. Dois pinos são usados para cada LED, o segundo pino é definido como baixo para ser usado como uma conexão de aterramento. O limite de corrente dos pinos de E / S no AVR impedirá que os LEDs puxem muito, então um resistor não é necessário para conectar série. O alto-falante usado é típico de um cartão musical, qualquer alto-falante pequeno serve, visto que ele está emitindo um tom de onda quadrada, não é muito importante se preocupar com a direção do alto-falante ou com a qualidade do som.
Etapa 2: soldando o AVR aos LEDs e alto-falante
Para que os LEDs se estendam como braços, um pino é dobrado sobre o AVR de cada lado. Orientar o AVR dessa forma facilita a conexão com o alto-falante (segunda imagem), uma vez que as conexões estão nos dois pinos inferiores. Para a estética, você deseja que a frente do chip fique voltada para fora, então certifique-se de que o alto-falante esteja voltado da mesma maneira quando está anexado.
Etapa 3: Programando o Attiny13a
Existem muitas opções diferentes para programar AVRs.para este projeto, o USBtiny foi usado, que está disponível como um kit no site da ladyadahttps://www.ladyada.net/make/usbtinyisp/index.htmlPara conectar o AVR ao programador, você pode conecte os fios ao soquete fêmea e conecte-os a uma placa de ensaio ou, melhor ainda, obtenha um adaptador de programação AVR barato como estehttps://www.sparkfun.com/commerce/product_info.php? products_id = 8508 junto com conectores macho 3x2 para conectar o plugue.
Etapa 4: Criando o Firmware para Marioman
O attiny13A tem 1K de flash programável e 64 bytes de SRAM. O arquivo tar anexado contém o arquivo de origem, bem como o firmware compilado para download. Três matrizes no código c foram usadas para gerar a música
- freq - frequências de cada nota
- comprimento - comprimento de cada nota
- atraso - pausa entre cada nota
A matriz de frequência não tem as frequências reais, mas sim o valor a ser colocado no registro TTCROB para gerar a onda quadrada do pino PB0. Aqui está um breve resumo dos cálculos e configuração do pino para geração de onda quadrada:
- O attiny13A tem um oscilador interno definido para 9,6 MHz
- O clock interno para IO é o oscilador dividido por 8 ou 1,2 MHz
- Um temporizador interno é configurado em um registrador de 8 bits para contar cada ciclo de clock com pré-escala de 8.
- Isso resulta em um tick igual a 1 / (1,2 MHz / 8) = 0,006667ms
- O attiny13A é configurado para comparar o que está no registro TCCR0B de 8 bits com o temporizador e alternar um pino quando eles corresponderem.
- Por exemplo, para gerar uma onda quadrada em 524 Hz (uma oitava acima do dó médio) que tem um período de 1,908 ms.
1,908 ms = 286 tiques do relógio (1,908 / 0,0067) Divida 286 por 2 para alternar o pino em t / 2 (286/2 = 143) Coloque 143 no registrador TTCR0B para gerar esta nota. Este é todo o código necessário para configurar o cronômetro, compare e produza uma onda quadrada:
TCCR0A | = (1 << WGM01); // configura o temporizador 1 para o modo CTC TCCR0A | = (1 << COM0A0); // alterna OC0A na comparação de correspondência TCCR0B | = (1 << CS01); // clk / 8 pré-escala TTCR0B = 143; // gera uma onda quadrada em 524 HzPara atrasar os tons e as pausas entre eles, uma função de atraso simples foi usada
anular o sono (int ms) {int cnt; para (cnt = 0; cnt <(ms); cnt ++) {int i = 150; while (i--) {_asm ("NOP"); }}}Isso faz uma contagem regressiva de 150, onde cada ciclo NOP é de aproximadamente 0,006667ms. A última coisa que o código faz é percorrer os arrays, gerar a música e piscar os dois LEDs. Isso é feito em um loop for contínuo com o seguinte código
const uint8_t freq PROGMEM = {… dados}; const uint8_t comprimento PROGMEM = {… dados}; const uint8_t atraso PROGMEM = {… dados};… while (1) {for (cnt = 0; cnt < 156; cnt ++) {OCR0A = pgm_read_byte (& freq [cnt]); output_toggle (PORTB, PB3); output_toggle (PORTB, PB4); dormir (pgm_read_byte (& comprimento [cnt])); output_toggle (PORTB, PB3); output_toggle (PORTB, PB4); // parar o cronômetro TCCR0B = 0; dormir (pgm_read_word (& delay [cnt])); // inicia o temporizador TCCR0B | = (1 << CS01); // clk / 8 prescale}}Existem 156 elementos nas matrizes de frequências / comprimentos / atrasos, este loop os atravessa. Os pinos PB3 e PB4 são alternados para alternar com cada nota. O primeiro sono é a duração da nota que tocamos depois de definir o registro OCR0A para o valor apropriado. O segundo sono é a pausa entre as notas que tocamos. No código acima você deve ter notado as duas funções pgm_read_byte () e pgm_read_word (), bem como a palavra-chave PROGMEM. Com um chip embutido como o attiny, a quantidade de SRAM é muito limitada, neste caso apenas 64 bytes. As matrizes que estamos usando para todos os dados de frequência / atraso / comprimento são muito maiores do que 64 bytes e, portanto, não podem ser carregadas na memória. Usando a diretiva especial do PROGMEM avr-gcc, esses grandes conjuntos de dados são impedidos de carregar na memória, em vez disso, eles são lidos da memória flash.
Etapa 5: deixando o Marioman solto
O vídeo acima mostra Marioman em ação. O consumo médio de energia é de cerca de 25mA, então ele pode piscar e fazer barulho por cerca de 10 horas antes de drenar a célula tipo moeda de lítio. A única maneira de ligá-lo e desligá-lo é remover a bateria de célula tipo moeda, a resistente listada nos materiais é bem adequado para isso. Um switch pode ser adicionado, mas há algo a ser dito para mantê-lo simples.
Recomendado:
Decoração de árvore piscando PCB: 5 etapas (com fotos)
PCB Flashing Tree Decoration: Neste tutorial, você aprenderá como fazer um projeto eletrônico de forma eficaz. Como exemplo, farei um PCB com luzes piscando do início ao fim. Todos os componentes eletrônicos funcionam por si próprios, sem a necessidade de codificação. Tudo que você precisa fazer é conectar
StickC M5Stack LED piscando: 7 etapas
StickC M5Stack LED Blink: Neste projeto, aprenderemos como conectar e fazer um LED Blink usando um módulo M5StickC ESP32. Assistir ao vídeo
Arduino: caixa de aniversário cantando para presentes: 14 etapas
Arduino: Caixa de aniversário cantante para presentes: Esta caixa de aniversário cantante é feita com a finalidade de embalar presentes de aniversário, com a ajuda do Arduino para fornecer funções especiais, incluindo cantar e acender uma vela de LED. Com a habilidade de cantar a canção de feliz aniversário e acender o LED c
Quebra-nozes cantando Arduino: 8 etapas
Singing Arduino Nutcracker: Este quebra-nozes abre sua boca com base no áudio de entrada. Isso pode ser feito facilmente em menos de 3 horas para um iniciante ir de uma pilha de peças a um quebra-nozes cantante. Para este projeto, você vai precisar de um quebra-nozes com uma boca móvel, um protótipo
Objeto de busto cantando: 7 etapas
Cantante Bust Prop: Você já se perguntou como funcionavam os Singing Busts na Haunted Mansion ou até mesmo quis tentar torná-los bem? Este Instructable irá mostrar a você como fazê-los e é realmente simples