• Viernes 12 de Junio de 2026, 05:27

Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Temas - Bixix

Páginas: [1]
1
Programación en C / De Float A Integer
« en: Miércoles 8 de Junio de 2005, 08:05 »
Hola amigos,
Tengo un problemilla con un código de control automático de ganancia, consigo el resultado en float, y para trabajar con el dsPIC30F6014 necesito que esta variable sea int. He intentado cambiar de tipo a lo "bestia".. poniendo (int) pero no me redondea bien me quita demasiada información.

He buscado información en Internet, pero no he podido conseguir resultados..
me podeis hechar una mano?
Me valdría si me dijerais como pasar de float a integer perdiendo lo menos
información posible..
Gracias.
(He escrito este mensaje en la entrada del foro porque no sabía que había esta sección específica para programación en C.)

Este sería el código:


RXBUF0 es el buffer de entrada, y TXBUF0 es el de salida.
Fractional es un int.
He intentado multiplicar por 10000 y después hacer el cambio..

void __attribute__((__interrupt__)) _DCIInterrupt(void) {



xxx[0]=RXBUF0;

if (xxx[0]>=xmin)
{
h[k]=h[k-1]+mu*(nivel-abs(y[k-1]));
}
else
h[k]=h[k-1];

if(h[k]<=0)
{
h[k]=0.0001;
}
if (h[k]>=hmax)
{
h[k]=hmax;
}

//h[k]=min(h[k],hmax);

y[0]=(h[k]*xxx[0]);

//y[0] = y[0]*10000;
//y[0] = (abs(y[0]))/1000;
//y_final[0] = (fractional)((y[0])/10000);
TXBUF0=(int)(y[0]);

k++;

if(k == 79)
{
k = 0;
}
}

GRACIAS

2
Microcontroladores / De Float A Integer
« en: Lunes 6 de Junio de 2005, 14:40 »
Hola amigos,
Tengo un problemilla con un código de control automático de ganancia, consigo el resultado en float, y para trabajar con el dsPIC30F6014 necesito que esta variable sea int. He intentado cambiar de tipo a lo "bestia"..  poniendo (int) pero no me redondea bien...
He encontrado información en Internet, pero no he podido conseguir resultados..
me podeis hechar una mano?
Gracias.
Este sería el código:


RXBUF0 es el buffer de entrada, y TXBUF0 es el de salida.
Fractional es un int.
He intentado multiplicar por 10000 y después hacer el cambio..

void __attribute__((__interrupt__)) _DCIInterrupt(void) {

   
   
   xxx[0]=RXBUF0;
   
   if (xxx[0]>=xmin)
   {
       h[k]=h[k-1]+mu*(nivel-abs(y[k-1]));
   }
      else
       h[k]=h[k-1];
   
      if(h[k]<=0)
   {
         h[k]=0.0001;
      }
   if (h[k]>=hmax)
   {
      h[k]=hmax;
   }
            
  //h[k]=min(h[k],hmax);

   y[0]=(h[k]*xxx[0]);
   
   //y[0] = y[0]*10000;
   //y[0] = (abs(y[0]))/1000;
   //y_final[0] = (fractional)((y[0])/10000);
   TXBUF0=(int)(y[0]);
   
   k++;

   if(k == 79)
   {
      k = 0;
   }
}

GRACIAS

3
Microcontroladores / Calidad De Señal
« en: Viernes 15 de Abril de 2005, 17:03 »
:P
Sabría alguien decirme si el codec Si-3000 puede muestrear a más de 8KHz?

MI DUDA:

En las características del principio pone 8KHZ pero más adelante habla de la relación Reloj y la frecuencia de muestreo.. donde la relación nos lo dan dos valores de un registro que se pueden cambiar mediante software..
Adjunto el datasheet!!


GRACIAS COMO SIEMPRE!! :lol:

4
Microcontroladores / Firlms
« en: Lunes 21 de Marzo de 2005, 11:27 »
Hola a todos otra vez!! :P

Dado que mi objetivo principal es meter en un rango dado cualquier señal dada creo que conseguiré mas facilmente este objetivo usando la funcion de normalización integrada en las librerías de MPLAB que programando un control automático de ganancia.

Creo que la función que debo usar FIRLMSNorm. Pero.. no encuentro el source file firlmsn.asm......................
Es un archivo especial, o es simplemente un filtro FIR?
RefSamps son coeficientes?
Alguién que me pueda ayudar?
Algún ejemplo??
Gracias!! :rolleyes:

5
Microcontroladores / Control Automático De Ganancia
« en: Miércoles 16 de Marzo de 2005, 16:06 »
Hola otra vez!!! :P

Esta vez también sigo preguntando sobre software :comp:

Tengo problemas con la señal aun habiéndola pasado por un filtro. :o

Tengo un programa que es un reconocedor de voz, y parece que este programa necesita una señal  filtrada y acotada.(Quiero tratar la señal con la placa de evaluación del dsPIC30F6014 (El filtrado lo he conseguido......GRACIAS!!  ;) ))

Después de quitarle el ruido...(Pasarlo por un filtro paso banda de frecuencia de voz), quiero acotar la señal con el fin de

1) Al hablarle bajo le de una ganancia alta

2) Al hablarle alto me disminuya la señal, para que el reconocedor no se sature..

el algoritmo puede ser algo asi...

El problema lo tengo en la ganancia..
El control automático de ganancia podría ser mi solución...

El problema...que no soy lo que se dice una experta en C....

Si alguien me pudiera echar una mano.. :(

GRACIAS!!!!!!!!!!!!!!!!!!!!!!!!!!! :lol:

6
Microcontroladores / Adaptar Variables A La Función Del Filtro
« en: Jueves 10 de Marzo de 2005, 14:34 »
Hola gente!! :P


Creo que sé porqué al llamar a la función
FIR_FIR150_5500be.filter(arrayEntrada, arraySalida, 1, &FIR_FIR150_5500be);
el programa no funcióna..

Las variables arrayEntrada y arraySalida son de tipo float , y txBuf y rxBuf son de tipo int.

Entonces he intentado buscar información y me he encontrado con esta tabla adjunta, que relaciona fractional con integer...

Yo me pregunto si float=fractional...


Gracias!! :hola:

7
Microcontroladores / Leer Y Mandar Datos: Soft
« en: Martes 8 de Marzo de 2005, 10:08 »
Hola!   :comp:

Parece que hardware está en marcha, pero lo de programar no es lo mio!!

Tengo un programa que funciona:  tiene un main.c donde incializa la función codec que está en codec.c y la de timer que está en timer.c

El programa  solo coge y emite la información, y  tiene dos buffers:

uno de entrada RXBUF y uno de salida TXBUF.
La transferencia de la información se hace en codec.c de esta forma:

void __attribute__((__interrupt__)) _DCIInterrupt(void) {
//static    float x[INSZ1], y[OUTSZ1];
 //int in_count;



  TXBUF0 = RXBUF0;
  TXBUF1 = RXBUF1;
  TXBUF2 = RXBUF2;
  TXBUF3 = RXBUF3;
  IFS2bits.DCIIF = 0;

(esto es lo que hace cuando se genera una interrupción.)

Viendo como cambian de valor las variables he descubierto que mientras que los valores de RXBUF cambian al meterle sonido, la igualdad no se cumple y el TXBUF siempre es 0x0000!!!!!!

Y el programa funciona!!! :o

Alguien me podría explicar esto?



Por otro lado tengo un soft que solo procesa la información y quiero integrarle un filtro..
No encuentro modo alguno!!
Tengo el código en C del filtro y tengo un programa que lee y emite la misma señal en mi tarjeta (devlopment target dsPIC30f6014..)

Ayuda..
GRACIAS  :)

8
Microcontroladores / Solución Al Warning Icdwar0020
« en: Martes 8 de Marzo de 2005, 09:25 »
Hola! he encontrado una respuesta!  :kicking:

Después de haber intentado todo lo lógico y lo no lógico he encontrado la razón de este warning que no me dejaba programar!!!!

ICDwar0020: El cable que une el ICD2 con la placa es un cable que solo se puede poner en una dirección. Probar conectándolo en el otro sentido!!

9
Microcontroladores / Filtros + Warnings
« en: Viernes 4 de Marzo de 2005, 14:43 »
Tres preguntitas  :(  :(  :(

Pregunta numero uno :(

Sigo teniendo problemas para introducir un filtro FIR en un proiecto. Intento seguir los pasos, pero tengo problemas. No tendrá alguien un Fir integrado ya en cualquier proiecto que trate la señal en una interrupción

Ademas el ICD2 me está dando problemas v6.50

Pregunta numero dos :(  
Y no hay manera de quitarlo...

"ICDWarn0020: Invalid target device id expected=0x18, read=0x0)
El error aparece al programar.

Pregunta numero tres: :(

Como he leido que el problema puede ser de la versión de MPLAB he instalado la versión 7.0
pero aquí me da constantemente otro error.

el 0058 y tambien he leido que puede ser de la versión.

Qué puedo hacer?

Creeis que puede tener relación  la dircción en la que pones el cable que conecta la tarjeta  con el ICD2?

Gracias !!!!
 :hola:

10
Microcontroladores / Problemas Con Filtrado Y Mplab
« en: Viernes 4 de Marzo de 2005, 12:27 »
HOLA!! :lol:

Pregunta 1:

No consigo acabar de filtrar!!   :angry:

creo mi código en C del filtro con la herramienta  DsPICfdLite

en mi programa se produce una interrupción para que el dsPIc se comunique con el codec Si3000.

Y es entonces, en la interrupción donde se da la igualdad TXBUF=RXBUF;
(TXBUF es un int no?? )

Entiendo que la data que se recibe se copia directamente en el buffer de salida.
Luego, que es aquí donde tengo que filtrar mi señal.

Paso todos los parametros que necesita (incluyendo los coeficientes) a este. c llamado codec.c .

El rebuild me hace bien. Los ficheros están bien.
Entonces inicializo la función;
init_fir_float (&FIR_FIR150_5500be);


y a continuación en vez de escribir (con esto sale lo que entra y fundiona) :


void __attribute__((__interrupt__)) _DCIInterrupt(void) {

/*TXBUF0 = RXBUF0;
TXBUF1 = RXBUF1;
TXBUF2 = RXBUF2;
TXBUF3 = RXBUF3;
IFS2bits.DCIIF = 0;}*/

intento llamar a la función de filtrar de esta otra forma


void __attribute__((__interrupt__)) _DCIInterrupt(void) {
/*
arrayEntrada64[0+i_i] = RXBUF0;
arrayEntrada64[1+i_i] = RXBUF1;
arrayEntrada64[2+i_i] = RXBUF2;
arrayEntrada64[3+i_i] = RXBUF3;}

FIR_FIR150_5500be.filter(arrayEntrada64, arraySalida64, 64, &FIR_FIR150_5500be);

for (j_j=0; j_j>=64; j_j= j_j+4;)

TXBUF0 = arraySalida64[0+j_j];
TXBUF1 = arraySalida64[1+j_j];
TXBUF2 = arraySalida64[2+j_j];
TXBUF3 = arraySalida64[3+j_j];
}
IFS2bits.DCIIF = 0;
i_i=i_i+4;


y No oigo nada!!



què puede pasar??
Alguien tiene un ejemplo de un filtro integrado a un proyecto cualquiera ya creado?

Pregunta 2:
Dado que derrepente me aparecía warning 0020 me he bajado la versión MPLAB 7.0
y este me da otro error del que he leido en este foro que parece que es de la versión el 0083!! Alguien lo confirma? Tiene solución?

Luego voy a volver a la versión vieja 6.5!

Pregunta 3:

Alguien me podría decir si el error 0020 puede ser debido al conector del cable que conecta el ICD2 con la placa?  Importa qué lado del cable coloques en el ICD2?


Gracias a todos como siempre!!! :hola:

(Esto de las versiones.. &lt;_&lt; )



GRACIAS

11
Microcontroladores / Integración Dspicfdlite
« en: Martes 1 de Marzo de 2005, 11:39 »
Hola amigos! :lol:

He descubierto que microchip facilita con MPLAB un programa muy adecuado para filtras señales.
Se trata de facilitar las características de tu filtro y el programa facilita toda la información sobre el filtro..
respuesta a un escalón unitario, evolución de la fase respecto  a diferentes frecuencias...

Y eso no es todo!!
cuando hayas diseñado tu super filtro, te genera el código en C!!!!!

Pero aquí es cuando empiezan mis problemas, porque no controlo mucho C, y tengo dificultades para insertar este código en mi programa..

he insertado el FIR_Highpass_400.c en mi proyecto. y tambien el ged_cgen.h y el
 qed_filt.c
pero al compilar me da error

main.c:3:22: qed_cgen.h: No such file or directory
main.c:4:22: qed_filt.c: No such file or directory

Alguien me podría echar una mano?? :hola:

12
Microcontroladores / Software
« en: Miércoles 23 de Febrero de 2005, 09:32 »
Hola foro!! estoy de buelta!!  :P

El hardware parece que va en marcha solo me queda una duda:

Los pines que no voy a usar, los puedo dejar al aire??
Creo entender que conviene tenerlos a cero 0 a 1. cómo puedo saber a dónde hay que conectarlos??

Hablo del dsPIC30f6014...

Software:

Si alguien puede facilitarme algún programilla para la placa de evaluación del dsPIC30f6014.., se lo agradecería profundamente!!

Como siempre...gracias!!!  :hola:

13
Microcontroladores / Timer2 Dspic30f6014
« en: Lunes 14 de Febrero de 2005, 17:19 »
Hola otra vez FORO!!  :P

esta vez la pregunta va por software... :comp:
(Siguiendo con el dsPIC y el Si3000...)

tengo un ejemplo de audio, y el proyecto incluye un archivo llamado timer2.c
en este apartado, hay dos funciones; init_timer2 y _ISR_T2Interrupt.
entiendo que el primero inicializa lor registros necesarios y que la segunda crea una interrupción cada cierto tiempo.

Mi pregunta es doble...

1 Porqué el dsPIC crea una interrupción? para qué? si solamente tiene que comunicarse con el codec... no debería de ser el codec quien produjera las interrupciones?

2 Qué sentido tienen los ticks? cómo puedo saber cada cuanto tiempo se dá la interrupción? Cuando llega ticks a 100?
                                            qué era ^=    ??(Lo sé muy básico... :( )???

14
Microcontroladores / Lista De Componentes
« en: Martes 8 de Febrero de 2005, 10:36 »
Hola a todos!  :lol:

quiero agradecer a todo el foro por responderme con muchísima paciencia!!!

Y para agradeceroslo....
otra preguntita...

Estoy trabajando con el development board del dsPIC30F6014. E intento fabricar mi propio hardware, pero más sencillo, simplemente con el dsPIC y el codec.

Mi pregunta es...
Al comprar el development board debería de traer la lista de todos los componentes? Eske no lo encuentro por ningun lado...
Me podríais echar una mano? Tiene alguien la lista de todos los componentes???

 
Gracias!

15
Programación en C / Inicialización De Registros
« en: Jueves 27 de Enero de 2005, 14:54 »
Hola jente!!

Esta vez tengo una prgunta sobre el código..
DCICON1 y DCICON2 son registros, que contienen 16 bits. y aquí les está dando un valor para iniciarlos..0 o 1.
Eso es lo que no entiendo...
Qué hace con el &???

A qué valor están inicializados??

DCICON1value =  DCI_FSM_MULTI &    /* multichannel frame sync */
                        DCI_DJST_OFF &     /* data begins 1 clock after Fs */
                        DCI_SDO_TRISTAT &  /* CSDO pin will be tri-stated */
                        DCI_TX_ZERO_UNF &  /* transmit zero during underflow */
                        DCI_FSD_OUP &      /* COFS pin is an output */
                        DCI_SAMP_CLK_FAL & /* sample data on falling clock edge */
                        DCI_SCKD_OUP &     /* CSCK pin is an output */
                        DCI_DIGI_LPBACK_DIS & /* loopback mode is disabled */
                        DCI_IDLE_CON &     /* DCI will continue in CPU IDLE mode */
                        DCI_DIS;           /* DCI is disabled for now */
                       
        DCICON2value =  DCI_DATA_WORD_16 & /* data word size is 16 bits */
                        DCI_FRAME_LEN_8 &  /* data frame is 8 words */
                        DCI_BUFF_LEN_2;    /* 2 words buffered per interrupt */

                                           /* calculate DCI bit clock control */
                                           

Gracias..

16
Microcontroladores / Hardware Para Dspic30f6014
« en: Lunes 24 de Enero de 2005, 11:35 »
Hola peña..
Gracias por responderme! soluciones utiles.

He estado estudiando los esquematicos del dsPIC30f6014
Tengo una pregunta sobre el papel que desempeña el codec si3000 en mi proiekto.

Quiero usar mi placa para tratar una señal, la de la voz.

 el datasheet de si3000 me dice que éste puede trabajar como maestro o como esclavo.

en mi aplicación el codec trabajaría siempre como esclavo no?



Sabe alguien como se conectan  MCLK, SCLK SDI and SDO? para trabajar como esclavo?  

thank you...

17
Microcontroladores / Dspic30fxxxx
« en: Jueves 20 de Enero de 2005, 10:40 »
Estoy trabajando con dsPIC30f6014 y no encuentro en su datasheet las funciones que puedo asignar a los pins.
Ni la definición de los registros..
alguien sabría ayudarme...

18
Microcontroladores / Rs232 Conexion Pc Micro
« en: Martes 18 de Enero de 2005, 08:47 »
Siendo esta mi conexión, podría programar el mikro desde el PC?
porqué las patas 6 y 4 están cortocircuitadas?
para què esta la resistencia R5?

me ayudais?

19
Microcontroladores / Programar Dspic30f6014 Sin Icd2
« en: Viernes 14 de Enero de 2005, 16:17 »
Mi objetivo principal es el de programar el dsPIC30F6014 sin usar el ICD2, para ello me han informado de que:

   
     Tengo que adecuar el AN851 (que al final es un bootoader) para un dsPIC30F6014 puesto que el AN851 se utiliza para PIC16 yPIC18.

No se por donde empezar...

Ademas ni siquiera tengo el AN851...

Alguien me podía informar sobre esto?

o darme otra solución para mi objetivo principal? (El de programar el dsPIC30F6014 sin usar el ICD2)

Alguien que me ayude...

Páginas: [1]