Fork me on GitHub

27/05/13

PIC: Hino de Clubes

PIC: Hino de Clubes


Utilizando a biblioteca Sound do MikroC, podemos gerar frequências na saída de um pino.

Nota: A frequência máxima é freq_max = Fosc/(80*3). E a frequência mínima é Freq_min = Fosc/(80*255).

Foi criado uma matriz com as notas e tempos de cada hino. Está disponíveis os hinos do Corinthians, São Paulo, Palmeiras e Santos.

A repetição será feita através do botão RESET.

Foi utilizado PIC16F628A, configurado para utilizar o clock interno de 4Mhz.
DOWNLOAD:
Firmware: Hino.hex;
Simulação: Hino.DSN;
Frequência das Notas: Pitches.c; (incluir esse arquivo no projeto)
Outras Melodias

EXEMPLO: Hino do Corinthians
#include "Pitches.c"
/*
*Projeto: Hino de Clubes
*MCU: PIC16F628A
*Clock: INTOSC 4MHz
*Descrição: Toca o hino do seu time de coração com um PIC
*Compilador: MikroC PRO PIC
*Autor: Tiago H. Melo
*/

const code int melodiaTimao[] = {
NO_SOUND, NOTE_C5,NOTE_B4,NOTE_G4,NOTE_E4,NOTE_E4,
NO_SOUND,NOTE_B3,NOTE_E4,NOTE_F4,NOTE_G4,NOTE_B4,NOTE_A4,NOTE_G4,NOTE_F4,NOTE_F4,
NO_SOUND,NOTE_A4,NOTE_F4,NOTE_E4,NOTE_DS4,NOTE_DS4,
NO_SOUND,NOTE_DS4,NOTE_DS4,NOTE_E4,NOTE_F4,NOTE_A4,NOTE_G4,NOTE_F4,NOTE_B4,
NO_SOUND,NOTE_B4,NOTE_A4,NOTE_GS4,NOTE_A4,NOTE_A4,
NO_SOUND,NOTE_A4,NOTE_A4,NOTE_B4,NOTE_C5,NOTE_E5,NOTE_C5,NOTE_A4,NOTE_G4,
NO_SOUND,NOTE_E5,NOTE_B4,NOTE_G4,NOTE_F4,NOTE_F4,
NO_SOUND,NOTE_A4,NOTE_B4,NOTE_C5,NOTE_B4,NOTE_A4,NOTE_G4,NOTE_F4,NOTE_E4,
NO_SOUND,NOTE_B3,NOTE_CS4,
NOTE_DS4,NOTE_E4,NOTE_F4,NOTE_G4,NOTE_A4,NOTE_F4,NOTE_C5,NOTE_C5,NOTE_B4,NOTE_A4,NOTE_G4,NOTE_A4,
NOTE_B4,NOTE_B3,NOTE_CS4,
NOTE_DS4,NOTE_E4,NOTE_F4,NOTE_G4,NOTE_A4,NOTE_F4,NOTE_C5,NOTE_C5,NOTE_B4,NOTE_A4,NOTE_G4,NOTE_A4,
NOTE_B4,NOTE_B4,
NO_SOUND,NOTE_B4,NOTE_A4,NOTE_GS4,NOTE_A4,NOTE_A4,
NO_SOUND,NOTE_A4,NOTE_G4,NOTE_F4,NOTE_G4,NOTE_G4,
NO_SOUND,NOTE_E5,NOTE_B4,NOTE_G4,NOTE_F4,
NO_SOUND,NOTE_F4,NOTE_G4,NOTE_A4,NOTE_B4,NOTE_A4,NOTE_G4,NOTE_F4,NOTE_E4
};

const code char tempoNotasTimao[] = {
4,4,4,4,2,2,
8,8,8,8,8,8,8,8,2,2,
4,4,4,4,2,2,
8,8,8,8,8,8,8,8,1,
4,4,4,4,2,2,
8,8,8,8,8,8,8,8,1,
4,4,4,4,2,2,
8,8,8,8,8,8,8,8,1,
4,8,8,
8,8,8,8,8,8,8,8,8,8,8,8,
4,8,8,
8,8,8,8,8,8,8,8,8,8,8,8,
2,2,
4,4,4,4,2,2,
4,4,4,4,2,2,
4,4,4,4,1,
8,8,8,8,4,8,8,2,2
};

const int compasso = 1000; // Altera o compasso da musica

void main()
{
char nota;
unsigned tempo;

Sound_Init(&PORTB, 1);//Define pino RB1 como saída do sinal

for(Nota = 0; Nota < sizeof(melodiaTimao); Nota++) //sizeof() recupera o tamanho da matriz
  {
     tempo = compasso / tempoNotasTimao[Nota];
     Sound_Play(melodiaTimao[Nota], tempo);//toca a nota durante um tempo
     VDelay_ms((tempo*12)/10);// Para distinguir as notas adicionamos um tempo entre elas(tempo + 20%)
  }
}

Referência: LabdeGaragem

7 comentários:

  1. eu testei no proteus e não funcionou, vc tem o teste ai no proteus?

    ResponderExcluir
  2. Showwwwwwwwww

    voce tem outras ? Muito bom

    http://usandoaeletronica.blogspot.com.br/

    ResponderExcluir
  3. boa noite projeto muito bom mais no meu o no_sound esta definido como zero mais esta gerando som parecendo um grilo como deixar sem esse som ???

    ResponderExcluir
    Respostas
    1. Coloca isso pra ver:

      if( melodiaTimao[nota] != NO_SOUND )
      Sound_Play(melodiaTimao[Nota], tempo);

      Excluir
  4. queria saber se tem algum programa para pegar uma musica e gerar esses códigos ???

    ResponderExcluir
    Respostas
    1. Que eu saiba, não. Se voce conseguir algum programa que faça isso, coloque o link aqui pra gente.

      Excluir
  5. Eu passei esse mesmo programa para o Arduino fazendo apenas pequenas alterações no tutorial Tone: http://arduino.cc/en/Tutorial/Tone
    Troquei a biblioteca de "Pitches.c" para "Pitches.h"
    copiei as notas, mas adicionei um S em todas as notas F para corrigir o tom ex:NOTE_F4 pra NOTE_FS4
    mudei a comparação no "for" para <119
    gerei o arquivo .elf e .hex (ambos rodam no ISIS)
    Funcionou perfeito no Arduino!!!, só a simulação esta com o clock um pouco diferente no ISIS

    ResponderExcluir

Postagens Relacionadas!!