BTC Sound Enconder

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

BTC Sound Enconder

Mensagempor luiggibr » 13 Jul 2007 15:48

Alguem já usou o BTC Sound Encoder do Roman Black?

Quem não conhecer o link é este:
http://www.romanblack.com/picsound.htm

O programa já gera o código pronto para o microcontrolador PIC. Para ele reproduzir em uma saída de audio a onda semelhante àquela que foi convertida em .wav

Para isso ele usa um comando do PIC "RETLW" e uma sequencia de zero´s e um.
Algo do tipo

retlw b'10010101' ; 95
retlw b'01011001' ; 59
retlw b'01010101' ; 55
retlw b'01010101' ; 55
retlw b'01010101' ; 55
retlw b'01010101' ; 55
retlw b'10101010' ; aa
retlw b'10010101' ; 95

Eu não entendo nada de PIC. Estava desenvolvendo em 8051 que é com quem tenho mais familiaridade.

Segundo pesquisei esse comando move o conteudo para W, do bit mais significativo para o menos, correto?

Mas o que seria esse W exatamente no PIC? Se puderem me ajudar.

Alguem já usou esse software do Roman Black, sabe se esse btc reproduz sons de forma satisfatória?

Desde já muito obrigado.
luiggibr
Bit
 
Mensagens: 16
Registrado em: 10 Jul 2007 17:48

Mensagempor fabim » 13 Jul 2007 15:56

EX.

MOVLW 0X0F .. W = carriola de carregua 1 e 0 acumulador etc.
CALL retorna_VALOR



retorna_valor
ADDWF PCL .. la encima voce colocou 15 no w aqui ele soma com o PCL e pula 15 linhas para frente. na linha 15 ele retorna la pra cima com o valor que esta na frente do retlw.
retlw 0X01
retlw 0x02
....................
retlw 0XEE ; <<<---- linha 15 .. W = 0XEE e retorna ..

para retornar de uma sub voce usa "return = volta"
RET = volta // L = literal // w = em W..

Abraços

Fabim
fabim
Dword
 
Mensagens: 5001
Registrado em: 16 Out 2006 10:18
Localização: aqui uái!!!?

Mensagempor luiggibr » 18 Jul 2007 18:18

valeu Fabim entendi aqui...

Alguem já implementou esse projeto do Roman Black e sabe se funciona bem?

Esse b antes dos numeros e depois do comando retlw significa oq exatamente?

que manda pra porta b, algo assim?

Porque ainda não entendi como que esses dados iriam pra uma porta de saída que seria utilizada pra produzir o audio, somente com o comando retlw. Acho q o "segredo" esteja nesse b provavelmente.

Se alguem ja implementou isso ai ou tiver um esquema de ligação do ci pra esse projeto do roman black tb me ajudaria bastante.
luiggibr
Bit
 
Mensagens: 16
Registrado em: 10 Jul 2007 17:48

Mensagempor mastk » 19 Jul 2007 10:48

retlw b'xxxxxxxxx'

significa retorner com o literal em work, b' ' significa que se trata de numero binario. Pela aplicação acredito que vc busca numa tabela o valor atual da saída, ou seja sua "musica" é plotada na flash do PIC.

W é como se fosse um acumulador do PIC, nos PIC vc não tanta fexilibidade como no 8051 pra realizar certas operações.

Para mover ao PORTB é vc fazer por ex:

movwf PORTB

nos PIC o LSB é o primeiro bit contado da direita para esquerda.

Imagino que o audio gerado dessa forma fique com qualidade de linha telefonica, eu acho, só fazendo pra ter certeza...
Avatar do usuário
mastk
Dword
 
Mensagens: 4407
Registrado em: 14 Out 2006 20:43

Mensagempor luiggibr » 24 Jul 2007 13:55

Andei pesquisando mais aqui e tb segundo comentário acima
eu teria que fazer um loop com
movwf portB que chamasse para os comandos retlw lá...

Pelo que pesquisei essa PortB são vários pinos, como eu implementaria isso pra sair o som em uma saída de som? Alguem sabe?

Ninguem nunca implementou esse projeto do Roman Black não?

Se alguem puder me ajudar a implementar isso, ficaria mto grato.
luiggibr
Bit
 
Mensagens: 16
Registrado em: 10 Jul 2007 17:48

Mensagempor mastk » 24 Jul 2007 16:35

Vou ver se implemento isso aqui em casa numa HCS08, luigi.
Avatar do usuário
mastk
Dword
 
Mensagens: 4407
Registrado em: 14 Out 2006 20:43

Mensagempor luiggibr » 24 Jul 2007 17:52

valeu pela ajuda
mastk!
luiggibr
Bit
 
Mensagens: 16
Registrado em: 10 Jul 2007 17:48

Mensagempor luiggibr » 25 Jul 2007 15:30

O problema é que relendo o help do software,
eu acho que confirmei novamente aquilo que eu sabia,

"The system of playing the sound is the "standard" method of turning a digital pin on and off in response to the 0 and 1 bits. The BTc algorithm is a system to model the performance of the playback filter and generate (encode) the correct sequence of 0 and 1 bits so that playback is as close as possible to the original sound."

Ou seja o que teria de variar é apenas um pino do microcontrolador, seguindo aquela sequencia de 0 e 1 que o software gera. Como implementar isso?

Usando o movwf portB como pensamos mandamos 0 e 1 para varios pinos.

Mais um pouco do help:
"Exporting as .ASM data

You can export (save) the sound data as PIC assembler format. This is a TEXT format that can be compiled into your assembler program and the sound inserted directly into your PIC program. This is suitable for short sounds. With 8kword PICs you can fit playback code in a hundred instructions, leaving almost 8000 bytes (64736 bits) for sound, enough for talking buttons that say "on", "off", "up", "down" etc in a one-chip solution. Files are saved as *.ASM by default and can be viewed in any text viewer."


O arquivo da onda digital do som ele me gera, atraves dakeles comandos retlw b'10010101' e etc...

Agora como criar um programa pra rodar isso nessa sequencia fazendo variar apenas um pino do microcontrolador?

Bem que o Roman Black podia já ter disponibilizado isso também né. (risos)
luiggibr
Bit
 
Mensagens: 16
Registrado em: 10 Jul 2007 17:48

Mensagempor mastk » 25 Jul 2007 16:07

Em C ou Delphi. etc XD. Eu pretendo fazer uma bagacinha pra testar isso em delphi.

Se ele fornecer o asm de PIC tá facil luigi, só mover e shiftar no tempo certo e pronto.

Ai que ficam as duvidas. Tipo assim, vamos gerar um PWM, ele deve começar com um determinado patamar e periodicamente devemos checar no buffer gigante, formado de N valores de 1 bit se devemos aumentar ou diminuir o valor do PWM. A qualidade fica dependendo do numero de amostragem, mas ainda assim vai acontecer um efeito de arredondamento, alinsing, se não me engano, pq vai acontecer a limitação da reposta do algoritmo nos picos brusco do audio.

Pra um teste vou mandar periodicamente para o PC um dado qlqr, para ter uma base de tempo. Disso o PC vai me cuspindo o WAV e vou adequando o PWM conforme o valor recebido, essa é a ideia.

No hardware luigi, é como disse um resistor e um capacitor. Disso se obtem o sinal analogico disso amplifica-se e blz.
Avatar do usuário
mastk
Dword
 
Mensagens: 4407
Registrado em: 14 Out 2006 20:43

Mensagempor luiggibr » 26 Jul 2007 15:37

pode me demonstrar como mover e shiftar isso mastk,

pra mover para um pino do pic aqueles 0e1 do retlw que o software me gera?
luiggibr
Bit
 
Mensagens: 16
Registrado em: 10 Jul 2007 17:48

Mensagempor mastk » 26 Jul 2007 18:34

No caso luigi, vc tem que fazer mais ou menos o seguinte:

crie uma rotina de leitura dos valores gerados pelo programa do roman.

LEITURA:
addwf PCL;confira se o PCL é a parte baixa do contador do programa não lembro -.-'

retlw b'100101010' ;Aqui vai os valores gerados pelo prog do roman
....
....


A main poderia ser algo do tipo:

MAIN:
call LEITURA
movw BUFFER, F
incf LEITURA, F

bcf PORTA, 0 ;Repita esse treço 8 vezes
btfsc BUFFER, 0
bsf PORTA, 0
rlf BUFFER, F

goto MAIN;volta pro começo e é isso ai.






Luigi, que PIC vc usa?
Avatar do usuário
mastk
Dword
 
Mensagens: 4407
Registrado em: 14 Out 2006 20:43

Mensagempor Vonnilmam » 27 Jul 2007 12:11

Olá a todos,

Só como informação gostaria de sugerir a utilização por conversão direta ou seja PCM, voce gera o arquivo wav no PC e transfere o mesmo para uma memoria como por exemplo uma memoria serial i2c (voce poderia montar um banco de wavs nessas memorias) e depois transfira os wavs a serem reproduzidos para um memoria ram de 32k ou superior conforme sua necessidade....seu software teria que apenas puxar via serial por exemplo os dados wav do PC e gravalos na eeprom e ir transferinco para a ram conforme necessario, o fato de ser utilizar uma ram é por que elas são veloses e adquadas para trabalhar com audio, a conversão poderia ser feita por um chip DAC do tipo tda1311 ou diretametne numa rede resistiva r2r de 8 bits, a qualidade de som dependerá da amostra feita e o tempo dependerá da quantidade de memoria utilizada para armazenar os dados no caso a eeprom...

Se voce quer alguma coisa que funcione com maior qualidade e versatilidade utilize o sistema PCM...
Esse negocio de conversão atraves de PWM para audio, não funciona profissionalmente e deixa muito a desejar e pode até frustrar os aventureiros, então vá no mais certo PCM....

Essa é uma dica de quem já fez muitos testes praticos com wav.....

Utilizando a tecnica que demonstrei no inicio é possivel voce gerar sons diversos e também montar palavras de excelente qualidade outra ideia é voce armazenar os dados wav num cartão de memoria e só ir descarregando as frases ou sons que desejar na ram conforme sua necessidade....vale a pena ir por esse caminho....

Boa sorte,
VonNilmam "Assembler" e agora "C"
Avatar do usuário
Vonnilmam
Byte
 
Mensagens: 446
Registrado em: 19 Out 2006 14:25
Localização: espacial

Mensagempor mastk » 27 Jul 2007 13:38

Valeu vonnil, esse é o metodo mais pratico sim.

Mas eu quero testar esse esquema, se pá, dando um som esquisito, tipo telefone, já é lucro.
Avatar do usuário
mastk
Dword
 
Mensagens: 4407
Registrado em: 14 Out 2006 20:43

Mensagempor mastk » 30 Jul 2007 15:46

Luigi, mano, que PIC vc pretende usar?

Esta implementando essa ideia tb?

Pretende fazer o q?
Avatar do usuário
mastk
Dword
 
Mensagens: 4407
Registrado em: 14 Out 2006 20:43

Mensagempor mastk » 01 Ago 2007 15:24

Lembrando, quando usava 386, eu não tinha placa de som, e usei um driver que permitia ouvir WAV no speaker, o som fica até que razoalvel, espero estar terminado esse projeto nesse fds.
Avatar do usuário
mastk
Dword
 
Mensagens: 4407
Registrado em: 14 Out 2006 20:43

Próximo

Voltar para PIC

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

cron

x