Haz una pregunta
  Foros de Electrónica » Sistemas de Audio » Audio: Pequeña señal
Foros Registrarse ¿Olvidaste tu contraseña?
19/03/2008 #1


Preamplifiicador PGA2311
Hola a todos! estoy realizando un proyecto de un preamplificador basado en el control de volumen PGA2311PA y este esta controlado mediante un microcontrolador PIC18F452. El proyecto es casi el mismo que salió en la revista elektor, lo que yo estoy realizando todo el software y hardware de nuevo, aqui podeis encontrar el proyecto de elektor http://www.dh3ben.de/html/electronic...1_preamp.shtml.
El PGA2311 es un control de volumen de alta fidelidad, en el qual el volumen se controla digitalmente mediante SPI. Por el momento lo he montado en una placa de pruebas y he conseguido variar el volumen con pulsadores. El codigo lo he escrito en CCS, las funciones SPI del CCS no no me funcionan, pero lo he conseguido hacer funcionar con unas funciones SPI por software. Tambien quiero que se pueda variar el volumen con mando a distancia (codigo RC5 de phillips), he utilizado el codigo que hay publicado en el foro, lo malo es que no funciona por interrupciones y no me acaba de funcionar del todo bien, a veces detecta bien el codigo y a veces no.
Estoy diseñando las placas de cirtcuito impreso, de momento he hecho la fuente de alimentacion y ahora voy a hacer la placa principal del microcontrolador con el control de volumen, pero todavia no tengo claro que puertos del PIC utilizar.
Necesito a alguien que me ayude con la programacion del codigo en CCS, gracias.
19/03/2008 #2


Este és el codigo para decodificar el mando a distancia, he puesto unos mensajes por el RS232 para saber si funciona la decodificacion, por el momento no me funciona. Estoy hablando con el que ha escrito el programa para ver si se puede solucionar.
Código PHP:
//main

//*******************************************************************************
// 
//        Simple program to decode commands of RC5 infrared remote controls                                                         
//                                     
//                                                            
//          01/01/2006 by Daniel Porzig                 [url]www.base32.de.vu[/url]
//                                                            
//                                                            
//                                                            
//                                                            
//   ATTENTION! All timervalues just fit, if the controller runs with 20 MHz!
//   When you use another frequency, the values have to be adapted!
//
//
//
//
//*******************************************************************************


#include <18F452.h>

#fuses NOWDT,HS, PUT, NOPROTECT, BROWNOUT, NOLVP, NOCPD

#use delay(clock=20000000)
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)


#include <IR.c>
   

void main()
{
   
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   
setup_timer_1(T1_INTERNAL|T1_DIV_BY_8);
   
EXT_INT_EDGE(H_TO_L); 
   
enable_interrupts(INT_EXT);
   
enable_interrupts(GLOBAL);

   
   
rc5.state=0;  
   
//input(PIN_B0);// this sets up PIN B0 as an input pin. You could use "set_tris_b(...)" too.
   
set_tris_b(0b00000001);
   while(
1)
   { 
      if(
rc5.state==1)
      {  
         
puts("works");
         
rc5.state=0;
         
enable_interrupts(INT_EXT);
      }
   }   
}


//Libreria IR.c

#define IR_INPUT PIN_B0

#define IR_STATUS (!input(IR_INPUT))

   

typedef struct
{
   
int8 data[2];
   
int8 state;
rc5_struct;

rc5_struct rc5;

int1 get_RC5(void)
{
   
int16 tmp,t;
   
int i;
   
int1 inp;
   
   
set_timer1(0);  
   while(
IR_STATUS == 1);
   
t=get_timer1(); 
   
puts("debugg2");
   
   if ((
t<400) || (t<800)){
   
puts("not works");
   return 
0;
   }
   
   for (
i=0;i<13;i++)
   {
      
inp=IR_STATUS;
      
set_timer1(0);
      
puts("debugg3");
      
      while (
IR_STATUS==inp)
      {
         
t=get_timer1();
         if (
t>800) return 0;
      }
      
      
tmp<<=1;
      
      if (
inp==0tmp++;
      
      
set_timer1(0);
      while (
get_timer1()<776);
   }
   
   
tmp=tmp 0x3000;
   
tmp=tmp 0x37FF;
   
   
rc5.data[0]=tmp 0xFF;
   
tmp>>=8;
   
rc5.data[1]=tmp 0xFF
      
   
rc5.state=1;
   
   
disable_interrupts(INT_EXT);
   
   return 
1;
}   


#int_EXT
void EXT_isr()
{
   
puts("debugg1");
   
get_RC5();
   

19/03/2008 #3


Este es el programa que envia por el SPI el volumen al PGA y lo muestra en el LCD.-El voumen se controla mediante 35 pasos, lo ideal seria utilizar los 255 que permite el PGA. El programa no esta muy bien escrito pero funciona! que ya es mucho, jejejje
Código PHP:
//main

#include <18F452.h>
#include "funciones_preamp.c"

#fuses HS,NOWDT,NOPROTECT,NOLVP

#use delay(clock=20000000)

#include <lcd.c>

void main()
{
   
int tab_vol [26]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25};
   
int i=5;
   
int tab_volum;
   
unsigned char volll=50;
   
lcd_init();
   
output_bit(PIN_D3,1);
   
tab_volum=tab_vol[i];
   
printf(lcd_putc,"OCS Preamplificadorfier");
   
lcd_putc('\n');
   
printf(lcd_putc,"Volum %u",tab_volum);
   
delay_ms(1000);
   
volume_set(volll,volll);
   
   while(
TRUE)
   {
      if((!
input(PIN_A0))&&(i<25)) //PIN_A0 aumenta volumen
      
{
         
delay_ms(200);
         
i++;
         
tab_volum=tab_vol[i];
         
volll=volll+10;
         
lcd_putc('\f');
         
printf(lcd_putc,"OCS Preamplificadorfier");
         
lcd_putc('\n');
         
printf(lcd_putc,"Volum %u",tab_volum);         
         
volume_set(volll,volll);
      }
            
      if((!
input(PIN_A1))&&(i>0)) //PIN_A1 disminuye volumen
      

         
delay_ms(200);
         
i--;
         
tab_volum=tab_vol[i];
         
volll=volll-10;
         
lcd_putc('\f');
         
printf(lcd_putc,"OCS Preamplificadorfier");
         
lcd_putc('\n');
         
printf(lcd_putc,"Volum %u",tab_volum);         
         
volume_set(volll,volll);
      } 
   }         

Código PHP:
//libreria funciones_pream.c


void volume_set(unsigned char rightunsigned char left)
{
   
unsigned char i,b;
   
output_bit(PIN_B7,0); //Activa el PGA /CS
   
output_bit(PIN_B4,1); //Zero Crossing ZCEN
   
   
b=right;
   for(
i=8;i>0;i--)  //clock
   
{
      
unsigned char x;
      
x=1<<(i-1);
      if (
b>=x)
      {
         
output_bit(PIN_B6,1); //SDI
         
b-=x;
      }
      else
      {
         
output_bit(PIN_B6,0); //SDI
      
}
      
output_bit(PIN_B5,0); //SCLK
      
output_bit(PIN_B5,1); //SCLK
   
}
   
b=left;
   for(
i=8;i>0;i--)  //clock
   
{
      
unsigned char x;
      
x=<< (i-1);
      if (
b>=x)
      {
         
output_bit(PIN_B6,1); //SDI
         
b-=x;
      }
      else
      {
         
output_bit(PIN_B6,0); //SDI
      
}
      
output_bit(PIN_B5,0); //SCLK
      
output_bit(PIN_B5,1); //SCLK
   
}
   
output_bit(PIN_B7,1); //Desactiva el PGA /CS

21/06/2009 #4


Hola Downtown,

No se si el prototipo llego a buen puerto y aun te acuerdas de el.
Tienes algun esquematico del preamplificador?
Necesito un control de volumen para unos Bose preamplificados que a salida de linea te dejan sordo.
Estaba jugando con un posible esquematico cuando me he encontrado tu proyecto.

Lo que es la parte PIC y programacion, no me supone mucho problema pero este sera mi primer proyectillo en el mundo del audio y jugar con los bose puede suponer gran disgusto

Por lo que veo en el datasheet, se necesita una fuente +-5v y no queria llegar a la doble fuente.
He visto en tu foto que tiene una fuente simple. Correcto?

tienes algun esquematico? alguna recomendacion al usar este IC?

muchas gracias
24/06/2009 #5


Hola motruito,
mira en estas webs...hay proyectos con en el PGA, aqui encontraras inormación y esquemas.
http://www.dh3ben.de/html/electronic...1_preamp.shtml, este es el mejor link, de aqui saque la idea, mi esquema es muy parecido.
en algunas webs tendras que registrarte para ver los archivos adjuntos y fotos.
http://www.head-fi.org/forums/f6/min...ontrol-280515/
http://www.diyaudio.com/forums/showthread/t-106377.html
http://bygselvhifi.dk/alephp.htm
http://www.elektor.es/revistas/2008/...o.406956.lynkx
he vuelto a la carga..estoy diseñando las PCB, me va a salir por un ojo de la cara...pero lo quiero hacer bien hecho.
Recomendación....ummm no se..puedes pedir samples a ti.com...las hay en encapsulado DIP.
24/06/2009 #6


puedes usar solo una fuente de +/-5V para alimentar la parte analogica y la digital, auq es preferible usar dos fuentes separadas para unir las masas (analogicas y digitales) en un solo punto por el tema de las interferencias.
15/08/2009 #7


Hola a todos! despues de unos de meses diseñando las placas os voy a mostrar los resultados, bueno aun no estan terminadas...pero ya falta poco. En alguna solo me me falta hacer pequeños retoques y poner las vias, la placa principal del microcontrolador la tengo a medias, esta es mas complicada y me la tomo con calma, quizas la voy a hacer de 4 capas.
Aun me queda muchisimo trabajo por hacer bufffff, pero cada vez veo mas cerca el final jejeje, veo los resultados y eso me anima. Me queda por terminar las placas...acabarlas de pulir y asegurarme que no haya errores, volver a montar el prototipo para asegurarme que todo funciona y pulir el software. Y finalmente que quedará por hacer el diseño mecánico.
He pensado en diseñarlo con un software de CAD/CAM, en el trabajo tenemos el FIKUS para diseñar los paneles frontales de los equipos o en CIMATRON y lo mandare a fresar a aqui http://www.modushop.biz/ecommerce/index_l2.php.
No he colgado todas las placas, a parte de estas he diseñado otras con indicadores leds de alimentación, una de entrada de DC con filtraje, una adaptadora para el LCD, y la del sensor de infrarojos.
Imágenes Adjuntas
Tipo de Archivo: jpg placa_principa_851.jpg (168,4 KB (Kilobytes), 38 visitas)
Tipo de Archivo: jpg placa_entradas_salidas_2_454.jpg (122,4 KB (Kilobytes), 30 visitas)
Tipo de Archivo: jpg placa_entradas_salidas_1_157.jpg (135,9 KB (Kilobytes), 23 visitas)
Tipo de Archivo: jpg fuente_de_alimentacion_972.jpg (124,6 KB (Kilobytes), 26 visitas)
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Buscar más temas sobre:
Lupa Audio: Pequeña señal

Preamplificadores, Ecualizadores, Mezcladores, Controles de tono y volumen, Filtros activos, Efectos y pedales.

Cerrar
Foros de Electrónica » Sistemas de Audio » Audio: Pequeña señal

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.