sinal de audio

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

sinal de audio

Mensagempor alex1000 » 02 Dez 2010 07:22

pessoal, estoiu usando um 18f2550 para gerar um sinal de audio de 1khz.
fiz um programa básico e no osciloscópio obtive 250 hz.
algo esta errado mas a compreensão me escapa.

programa:
#include<18f2550.h> // tipo de pic
#fuses NOWDT,NOPROTECT,PUT,NOLVP,NOMCLR,INTRC_IO //fuses9
#use delay(clock=4000000) // frequencia utilizada




void main() // função principal
{

set_tris_b(0x00); // seta a direção dos pinos da portB
output_b(0x00); // carrega o valor de portB com 0x00
port_b_pullups(true); //aciona open colector

while(1)
{
output_high(pin_b0); //seta para 1 pino B0
delay_us(500); // mantem a instrução anterior por 0.5 segundos

output_low(pin_b0); //seta para 0 pino B0
delay_us(500); // mantem a instrução anterior por 0.5 segundos
}
}

poderiam dr uma olhada e comentar?
alex1000
Byte
 
Mensagens: 104
Registrado em: 02 Out 2007 23:39

Mensagempor styg » 02 Dez 2010 10:11

cara, nao manjo de pic, mas tu ta usando 4MHz mesmo?
o clk do pic nao é freq. xtal/4 ?? se for isso deverias ta setando essa linha assim:

#use delay(clock=1000000) // frequencia utilizada
Lucas
Avatar do usuário
styg
Word
 
Mensagens: 799
Registrado em: 16 Out 2006 08:24
Localização: Floripa abaixo de zero.

Mensagempor Guri » 02 Dez 2010 12:46

HEHEHEH...por isso é que programo em ASM...AAAAASSSSSSMMMMMM...

Será que o teu erro não esta no delay de 500us...

Lembra da regra: 1/T...onde 1 é a base de tempo e T é a frequencia, originando assim no time ...

1 / 1000hz = 0.001us, logo para ter a frequencia do jeito que voce fez o sw...vc tem que manter essa relação...

experimenta mexer nesse delay...

Outra alternativa muito elegante e precisa é vc utilizar o sistema DDS por software mesmo, dá para obter um ótima precisão se esse é seu caso...ou também utilizar o timer 1 do pic...

Usa o timer na interrupção, fica mais elegante.
Guri
Byte
 
Mensagens: 457
Registrado em: 25 Abr 2010 09:05
Localização: Minas Gerais

Mensagempor renatokodaira » 02 Dez 2010 16:15

O oscilador interno do 18F2550 eh de 8MHz, e voce escolheu essa opçao nos fuses. Alem disso voce precisa configurar os POSTSCALER no registrador OSCCON bits 4 a 6 pra ver qual frequencia de clock esta indo realmente para a CPU.

Se voce diz ao compilador que seu clock eh de 4MHz (use delay clock 40000000) mas na verdade ele funciona com outra frequencia, ficarah tudo errado.
renatokodaira
Byte
 
Mensagens: 402
Registrado em: 11 Out 2006 15:15


Voltar para PIC

Quem está online

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

x