Fórum

Canario eletronico ...
 
Notifications
Clear all

Canario eletronico 18F250

2 Posts
2 Users
0 Likes
1,392 Leituras
 vtrx
(@vtrx)
New Member
Joined: 4 anos ago
Posts: 2
Topic starter  

Olá.

Alguém teria a alteração do canario eletrônico,mas usando um 18F2550?

Tentei montar um circuito teste,alterando o código original,mas não funcionou.

Eu não cheguei a montar o circuito baseado no original.

segue esboço.

******************************************************************************/
#include <18F2550.h>
#fuses XTPLL,NOWDT,PROTECT,NOLVP,NODEBUG,USBDIV,PLL1,CPUDIV1,VREGEN,MCLR,CPB,CPD //4MHZ,USB-48MHZ,CPU-48MHZ
//#fuses XTPLL,NOWDT,NOLVP,NODEBUG,USBDIV,PLL1,CPUDIV1,VREGEN,MCLR,CPB,BROWNOUT,BORV20 //SEM PROTEÇÃO
//#fuses XTPLL,NOWDT,PROTECT,NOLVP,NODEBUG,USBDIV,PLL1,CPUDIV1,VREGEN,NOMCLR,CPB,CPD //4MHZ,USB-48MHZ,CPU-48MHZ (NOMCLR=RE3 como entrada)

#use delay(clock=48000000)

#use fast_io(c)
#use fast_io(b)

//#bit flagt2 = 0x0C.1 //flag do timer 2
//#bit som = 0x06.3 //pino 9 saida de som
//#bit tris_som = 0x86.3 //sentido
//#bit mosi = 0x05.1 //pino 18
//#bit miso = 0x05.4 //pino 3
//#bit cs = 0x05.3 //pino 2
//#bit slk = 0x05.0 //pino 17
#define mosi PIN_B0
#define miso PIN_B1
#define cs PIN_B2
#define slk PIN_B3

// Define taxa de amostragem
#define FOSC 48000000
#define T2_FREQ 8000 //22050 // 22 KHz
#define Tam_wav 65535
#define PR2 FOSC/4/T2_FREQ
#define wav11025 4
#define wav22050 2

//variáveis globais
unsigned int16 b;//auxiliar
int wait;

/*==============================================================================

ROTINAS DE COMUNICAÇÃO SPI

==============================================================================*/

/*==============================================================================
GERA SINAL DE CLOCK PARA A FLASH
==============================================================================*/

void clock(void){ output_high(slk); delay_us(1);output_low(slk); delay_us(1);}

/*==============================================================================
ENVIA 8 BITS PARA A FLASH
==============================================================================*/
void env8(int8 zbuf1)
{
int8 a3;
for(a3=0;a3<8;a3++)
{
if(bit_test(zbuf1,7)) output_high(mosi); else output_low(mosi);
clock();
zbuf1<<=1;
}
}
/*==============================================================================
RECEBE 8 BITS DA FLASH
==============================================================================*/

int8 recebe_flash_8bits(void)
{
int8 a5,b;
b=0;
for (a5=0;a5<8;a5++)
{
shift_left(&b,1,miso); //original
clock();
}
return (b);
}

/*==============================================================================
ROTINA DE REPRODUÇÃO DE SOM GRAVADO NA MEMÓRIA FLASH EXTERNA
==============================================================================*/

void reproduzir(int32 address)
{
int8 buf;
int16 i;

output_low(cs); //inicia instrução de leitura
env8(0x03);//comando de reproduzir em modo contínuo
env8(make8(address,2));//pega endereço inicial
env8(make8(address,1));
env8(make8(address,0));
//tris_som=0;//port de som como saída
for(i=0; i < 65535; i++)
{// reproduz até encontrar 0x22 no código
buf = recebe_flash_8bits(); //recebe byte
//if(buf==0x22) {/*tris_som=1; */output_high(cs);break;} //para no fim do arquivo
wait=wav11025;
while(wait);
set_pwm1_duty(buf);
}
output_high(cs); //finaliza a leitura
}

/*==============================================================================
ROTINAS DE ENDEREÇAMENTO DA FLASH 25q64
==============================================================================*/
void canario()
{
reproduzir(0x16c0);//
}

// --------------------------------------------------------------------------
#INT_TIMER2
void int_tmr2()
{
if(wait) wait--;
}
link removido
/*==============================================================================
ROTINA MAIN
==============================================================================*/
void main()
{
// set_tris_a(0b11111111);
set_tris_b(0b11110000);
set_tris_c(0b11110001);
// output_b ( 0x00 );

setup_timer_2(T2_DIV_BY_1, PR2, 1);
setup_ccp1(CCP_PWM);

enable_interrupts(GLOBAL);
enable_interrupts(INT_TIMER2);

output_high(cs);
output_low(mosi);
output_low(slk);

/*
fala_nome_montagem();//nome do aparelho
delay_ms(100);
fala_blog();//blog
*/

/*==============================================================================
LOOP PRINCIPAL DE REPETIÇÃO
==============================================================================*/
for(;;)
{
reproduzir(0x0000);
delay_ms(1000);
}//for(;;)
}//main

Uso esta configuração para tocar um arquivo .wav de uma Eeprom 24c512.

   
Quote
(@clarios)
Reputable Member Admin
Joined: 12 anos ago
Posts: 357
 

Se eu entendei bem,  você esta tentando usar uma 24c512 para reproduzir um conteúdo .wav. Essa memória trabalha com comunicação I2C. Mas parece que você está tentando ler  usando SPI. Creio que terá que trocar o código do protocolo para I2C para funcionar.


   
ReplyQuote
 vtrx
(@vtrx)
New Member
Joined: 4 anos ago
Posts: 2
Topic starter  

Olá.

Eu tentei usar o código original que usa uma 25Q64.

Estou tentando alterar do 16f628 para o 18f2550.


   
ReplyQuote
Back To Top