Autor Tema: Pregunta acerca de una instrucción!  (Leído 4415 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado Enigma

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 609
    • www.toroscoleados.com
Pregunta acerca de una instrucción!
« en: 23 de Enero de 2010, 23:27:24 »
Hola chicos, que tal.... Estoy haciendo un programa y bueno el pic me está saltando está instrucción .....

      aux_val5    =(val_alto5<<8)|val_bajo5;

En realidad lo que quiero hacer es hacer de val_alto5 y val_bajo 5 una palabra de 8 bits cada una, para así hacer un palabra de 16 bits que requiere un conversor para que me pueda leer bien el dato de voltaje!!!! pero no me hace caso a la instrucción, no se si la estoy escribiendo mal... Alguien me puede corregir??

Atte: Enigma... La llanerita de Guayana :D
No hay nada como cabalgar en la sabana y sentir la brisa con olor a mastranto, bosta y ganado. ¡¡O Fortuna, velut luna, status variabilis, semper crescis, aut decrescis, vita detestabili!! Que viva el coleo, la musica LLanera y la gótica!

Desconectado KALLITOS

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1256
Re: Pregunta acerca de una instrucción!
« Respuesta #1 en: 23 de Enero de 2010, 23:59:55 »
hola ENIGMA, segun veo estas usando lenuaje C, yo uso CCS y para hacer lo que deseeas se hace lo siguiente:

Código: C
  1. valor16 = make16(byte_alto,byte_bajo);


saludos


A un microcontrolador hay que sacarle hasta el ultimo byte....(YO)

Cómo puede ser que un pic24EP512 me quede corto de memoria, señores de MICROCHIP saquen pics con más memoria flash

Más de 45 mil lineas de codigo y aun no termino el equipo, asu mare!!

S34ML08G1TFI200 no necesito mas memoria externa.

Desconectado Enigma

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 609
    • www.toroscoleados.com
Re: Pregunta acerca de una instrucción!
« Respuesta #2 en: 24 de Enero de 2010, 00:41:47 »
Ahhh o.k, osea que esa instrucción que estoy usando no es la correcta??? y que hace la que estoy usando entonces??? :?


Enigma... La llanerita de Guayana :g)
No hay nada como cabalgar en la sabana y sentir la brisa con olor a mastranto, bosta y ganado. ¡¡O Fortuna, velut luna, status variabilis, semper crescis, aut decrescis, vita detestabili!! Que viva el coleo, la musica LLanera y la gótica!

Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Pregunta acerca de una instrucción!
« Respuesta #3 en: 24 de Enero de 2010, 09:40:39 »
Es correcta y hace exactamente los mismo. Es solo cuestión de analizar, observa que val_alto lo estas rotando 8 veces hacia la izquierda pero en una variable de 16 bits, entonces ésta se guarda en los bits 8-15 de val_auxiliar, y luego le sumas val_bajo colocandolo en los bits 0-7 de val_auxiliar.

Puede que a esto se deba agregar casting para que no haya truncamiento y se trate como variable de 16-bits:


Código: C
  1. aux_val5    =(((long)val_alto5<<8)|val_bajo5;


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado Enigma

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 609
    • www.toroscoleados.com
Re: Pregunta acerca de una instrucción!
« Respuesta #4 en: 25 de Enero de 2010, 23:17:50 »
Ahhhh o.k, ya bueno voy a intentar hacerlo de otra manera porque no me le hace caso a la instrucción... CCS me está jugando una mala pasada! JUM1 :5]


Enigma... La llanerita de Guayana
No hay nada como cabalgar en la sabana y sentir la brisa con olor a mastranto, bosta y ganado. ¡¡O Fortuna, velut luna, status variabilis, semper crescis, aut decrescis, vita detestabili!! Que viva el coleo, la musica LLanera y la gótica!

Desconectado Enigma

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 609
    • www.toroscoleados.com
Re: Pregunta acerca de una instrucción!
« Respuesta #5 en: 27 de Enero de 2010, 23:40:20 »
Hola chicos otra vez.... No me da la instrucción (que raro!!!)  tengo una dificultad, dificultosa jejejeje! es lo siguiente, estoy tomando un dato analogico desde los ADC de un pic, la cuestión es que debo de llevar ese dato a uno con el mismo valor pero de mayor longitud, es decir de 16 bits, estoy trabajando el ADC con 10 bits.... Ustedes se preguntarán pero para que hacer esto? :? Bueno es que debo llevar enviar el dato que recojo en los ADC´s del pic vía SPI a un DAC para un posterior procesamiento de la señal, pero resulta que mi DAC (TLC5615) tiene que recibir un dato de 16 bits para poder procesarlo bien.... Ahora. estoy aplicando estás instrucciones para convertir mi dato proveniente desde el conversor del PIC a uno de 16 bits, pero en la salida del DAC pues el valor de voltaje me sale erroneo, no se si es que estoy aplicando las instrucciones mal, si alguien me orientase se lo agradecería!


Código: [Seleccionar]
int16 c;
int16 analg_b,analg_a,val_dac;
signed int16 ADC;

                     ADC=read_adc();                    // ADC=dato digital del ADC
                     analg_b= ADC;
                     analg_a= ADC>>8;
                     val_dac=(analg_a<<8)|analg_b;
                     RA5=0;                     // Activo el DAC
                     c=val_dac;
                     SPI_Envia (c);             // Envía dato
                     RA5=1;                     // Desactivo el DAC


int16 SPI_Envia ( int16 c)
 {
    SSPBUF = c;    // Envia dato
    while (! BF ); // Espera a que se transmita
    return SSPBUF ;
 }

Atte: Enigma... La llanerita de Guayana :?
« Última modificación: 27 de Enero de 2010, 23:42:42 por un Moderador »
No hay nada como cabalgar en la sabana y sentir la brisa con olor a mastranto, bosta y ganado. ¡¡O Fortuna, velut luna, status variabilis, semper crescis, aut decrescis, vita detestabili!! Que viva el coleo, la musica LLanera y la gótica!

Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Pregunta acerca de una instrucción!
« Respuesta #6 en: 28 de Enero de 2010, 02:06:19 »
Te estas complicando la vida, lo que quieres realizar es sencillo de la siguiente forma:

Código: C
  1. // Seleccionar los pines correctos:
  2. /*#define DA_SCL PIN_B0
  3. #define DA_SDO PIN_B1
  4. #define DA_SDI PIN_B2
  5. #define DA_CS PIN_B3*/
  6.  
  7. // Colocar force_hw si se usa hardware del PIC para comunicacion SPI y sino force_sw.-
  8. #use spi(MASTER,CLK=DA_SCL, DO=DA_SDO, DI=DA_SDI, BITS=16, MODE=3, MSB_FIRST, stream=DA_spi, FORCE_HW)
  9.  
  10.  
  11. int16 ADC, val_dac;
  12.  
  13.       ADC=read_adc();
  14.       val_dac=ADC<<2;
  15.       output_low(DA_CS);
  16.       spi_xfer(DA_spi,val_dac);/* |4 bits dummy|10bits DA|2 bits x */
  17.       output_high(DA_CS);

Se puede simplificar más si se entiende de la siguiente manera:

Código: C
  1. output_low(DA_CS);
  2.       spi_xfer(DA_spi,(read_adc()<<2));/* |4 bits dummy|10bits DA|2 bits x */
  3.       output_high(DA_CS)

Es importante que el conversor este definido a 10 bits.


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado Enigma

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 609
    • www.toroscoleados.com
Re: Pregunta acerca de una instrucción!
« Respuesta #7 en: 28 de Enero de 2010, 23:44:32 »
Pero allí no estoy mandando 16 bits.... estoy enviando 8bits de la manera en que lo planteas! porque al rotarlo dos veces hacía la derecha no le estaria quitando 2 bits al dato de 10 bits el cual me quedará en 8 bits????


Atte: Enigma... La llanerita de Guayana :D
No hay nada como cabalgar en la sabana y sentir la brisa con olor a mastranto, bosta y ganado. ¡¡O Fortuna, velut luna, status variabilis, semper crescis, aut decrescis, vita detestabili!! Que viva el coleo, la musica LLanera y la gótica!

Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Pregunta acerca de una instrucción!
« Respuesta #8 en: 29 de Enero de 2010, 00:07:16 »
Pero allí no estoy mandando 16 bits.... estoy enviando 8bits de la manera en que lo planteas! porque al rotarlo dos veces hacía la derecha no le estaria quitando 2 bits al dato de 10 bits el cual me quedará en 8 bits????


Atte: Enigma... La llanerita de Guayana :D

No, porque la variable declarada es de 16 bits.


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado Enigma

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 609
    • www.toroscoleados.com
Re: Pregunta acerca de una instrucción!
« Respuesta #9 en: 30 de Enero de 2010, 00:22:16 »
Aja ya va... pero es que igual si la variable es de 16 bts y la rotas, pues no estaría manando 14 bits por el bus....?
No hay nada como cabalgar en la sabana y sentir la brisa con olor a mastranto, bosta y ganado. ¡¡O Fortuna, velut luna, status variabilis, semper crescis, aut decrescis, vita detestabili!! Que viva el coleo, la musica LLanera y la gótica!

Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Pregunta acerca de una instrucción!
« Respuesta #10 en: 30 de Enero de 2010, 08:55:25 »
Aja ya va... pero es que igual si la variable es de 16 bts y la rotas, pues no estaría manando 14 bits por el bus....?

 :rolleyes: Porque piensas eso? Acá las variables son de tamaño fijo, 8 16 o 32 bits. Donde los bits internos los podes manejar a gusto, y en este caso tomas 10 de ellos y los rotas a la izquierda, pero sigue siendo un conjunto de 16-bits.  ;-)


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado Enigma

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 609
    • www.toroscoleados.com
Re: Pregunta acerca de una instrucción!
« Respuesta #11 en: 30 de Enero de 2010, 15:54:08 »
Ummm creo que no estoy entendiendo bien....

En realidad no se modifica el tamaño de la palabra de bits cuando le hago la rotación?
No hay nada como cabalgar en la sabana y sentir la brisa con olor a mastranto, bosta y ganado. ¡¡O Fortuna, velut luna, status variabilis, semper crescis, aut decrescis, vita detestabili!! Que viva el coleo, la musica LLanera y la gótica!

Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Pregunta acerca de una instrucción!
« Respuesta #12 en: 30 de Enero de 2010, 16:05:57 »
Ummm creo que no estoy entendiendo bien....

En realidad no se modifica el tamaño de la palabra de bits cuando le hago la rotación?

No, por ahí te conviene utilizar un simulador y observar la variable al ejecutar las rotaciones y entenderás como trabaja  ;-)


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado Enigma

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 609
    • www.toroscoleados.com
Re: Pregunta acerca de una instrucción!
« Respuesta #13 en: 30 de Enero de 2010, 16:25:48 »
Mierrrr  :shock: toda mi vida he tenido un concepto errado acerca de esto....

Aja, pero entonces que es lo que sucede con la rotación.....?
No hay nada como cabalgar en la sabana y sentir la brisa con olor a mastranto, bosta y ganado. ¡¡O Fortuna, velut luna, status variabilis, semper crescis, aut decrescis, vita detestabili!! Que viva el coleo, la musica LLanera y la gótica!

Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Pregunta acerca de una instrucción!
« Respuesta #14 en: 30 de Enero de 2010, 16:31:33 »
Mierrrr  :shock: toda mi vida he tenido un concepto errado acerca de esto....

Aja, pero entonces que es lo que sucede con la rotación.....?

Un ejemplo sencillo fijando el Carry como 0.

0000001001100101  0
0000010011001010
0000100110010100  0

Ahora con carry en 1.

0000001001100101  1
0000010011001011
0000100110010111  1


Cuando hacemos Variable<<4 se rota 4 veces a la izquierda con carry igual a 0.


Saludos!
No contesto mensajes privados, las consultas en el foro


 

anything