Autor Tema: control de volumen digital mediante SPI (PGA2310)  (Leído 1543 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado erdanieee

  • PIC10
  • *
  • Mensajes: 44
control de volumen digital mediante SPI (PGA2310)
« en: 04 de Febrero de 2011, 11:00:11 »
Hola buenas, a ver si me podeis echar una mano con el amplificador de audio PGA2310 que me está volviendo locooooo!! He hecho un miniprograma para probarlo pero no funciona (os pongo sólo el código relevante)

Código: [Seleccionar]
#use spi(DI=PIN_B4,ENABLE=PIN_B5,DO=PIN_B6,CLK=PIN_B7, BITS=16,MODE=0,stream=SPI)

int16 vol = 0xFFFFL;
spi_xfer(SPI,vol);

while(true){
   generate_tone(A_NOTE[2],1000L);
   delay_ms(400);
}


He probado a cambiar el mode por 1, 2 y 3 con la siguiete variación del código:

Código: [Seleccionar]
int16 vol = 0xFFFFL;

while(true){  
   printf("mode 0\n\r");
   #use spi(DI=PIN_B4,ENABLE=PIN_B5,DO=PIN_B6,CLK=PIN_B7, BITS=16,MODE=0,stream=SPI)
   spi_xfer(SPI,vol);
   generate_tone(A_NOTE[2],1000L);
   delay_ms(400);

   printf("mode 1\n\r");
   #use spi(DI=PIN_B4,ENABLE=PIN_B5,DO=PIN_B6,CLK=PIN_B7, BITS=16,MODE=1,stream=SPI)
   spi_xfer(SPI,vol);
   generate_tone(A_NOTE[2],1000L);
   delay_ms(400);
 
   printf("mode 2\n\r");
   #use spi(DI=PIN_B4,ENABLE=PIN_B5,DO=PIN_B6,CLK=PIN_B7, BITS=16,MODE=2,stream=SPI)
   spi_xfer(SPI,vol);
   generate_tone(A_NOTE[2],1000L);
   delay_ms(400);

   printf("mode 3\n\r");
   #use spi(DI=PIN_B4,ENABLE=PIN_B5,DO=PIN_B6,CLK=PIN_B7, BITS=16,MODE=3,stream=SPI)
   spi_xfer(SPI,vol);
   generate_tone(A_NOTE[2],1000L);
   delay_ms(400);
}


y por supuesto tampoco funcionó. Pero lo realmente raro fué cuando una vez, por casualidad lo dejé correr varios ciclos y derrepente empezó a funcionar!!! Concrétamente en el tercer ciclo, al llegar al "mode 3" empezaba a sonar!!! Hize una nueva modificación del código de esta manera:

Código: [Seleccionar]
#use spi(DI=PIN_B4,ENABLE=PIN_B5,DO=PIN_B6,CLK=PIN_B7, BITS=16,[b]MODE=3[/b],stream=SPI)
int16 vol = 0xFFFFL;

delay_ms(3000);

while(true){  
   printf("mode 3\n\r");
   spi_xfer(SPI,vol);
   generate_tone(A_NOTE[2],1000L);
   delay_ms(400);
}

y efectívamente, al tercer ciclo empezó a sonar el buzzer así que descartado que pudiera ser un tema de estabilización del integrado! Yo ya no sé qué más hacer... es subrealista!! ¿¿Alguna sugerencia??


PD: quizás debería haber puesto el post en foro técnico...
« Última modificación: 04 de Febrero de 2011, 11:44:13 por erdanieee »