Autor Tema: proteus y HX711  (Leído 7060 veces)

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

Desconectado elvysr44

  • PIC10
  • *
  • Mensajes: 15
proteus y HX711
« en: 10 de Diciembre de 2015, 21:43:15 »
Desde venezuela, saludo a todos los foristas.
Amigos tengo tiempo si pasear por aca, de igual manera tiempo con mi proyecto empolvado dentro de las gabetas, por aca les traigo una duda a ver quien me colabora.
Quiero leer un modulo analogico HX711 con un pic 18f4550 y simularlo en proteus respectivamente, mas no tengo ni idea de como simularlo.
Mil gracias de antemano por toda la colaboracion que me puedan brindar.

Desconectado elvysr44

  • PIC10
  • *
  • Mensajes: 15
Re:proteus y HX711
« Respuesta #1 en: 10 de Diciembre de 2015, 21:44:41 »
Olvidava mencionar que trabajo con PIcC para la edicion de los Codigos !!!
Mil gracias nuevamente.

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:proteus y HX711
« Respuesta #2 en: 10 de Diciembre de 2015, 22:17:01 »
Si el HX711 no esta en el proteus es dificil que lo puedas simular.
Si tu problema es como conectarlo entonces sugiero que leas el datasheet del HX711 ahi dice como es la comunicacion con el micro, es tan simple como leer una entrada y si esta en 0 usar el codigo que te provee el datasheet en C...
« Última modificación: 11 de Diciembre de 2015, 04:28:10 por KILLERJC »

Desconectado Rseliman

  • PIC16
  • ***
  • Mensajes: 239
Re:proteus y HX711
« Respuesta #3 en: 13 de Diciembre de 2015, 15:18:26 »
Hola a todos

estoy usando la misma placa ....

esta tiene una resolucion de 24 bits ...es sencilla de leer ...no creo que haya nada en proteus ...y uso esta libreria

Código: [Seleccionar]
unsigned long ReadCount(void)
{
unsigned long Count;
unsigned char i;
ADDO=1;
ADSK=0;
Count=0;
while(ADDO);
for (i=0;i<24;i++)
{
ADSK=1;
Count=Count<<1;
ADSK=0;
if(ADDO) Count++;
}
ADSK=1;
Count=Count^0x800000;
ADSK=0;
return(Count);
}

y lo que saco de aca lo trasnmito por la UART

Código: [Seleccionar]
      datos = ReadCount();
      sprintf (salida,",%u,",datos);
      USARTWriteString(salida);

el tema es que lo que transmito es no mayor a 65535 ...y nesecito los 24 bits del dac hx711

pienso en leer un MSB y un LSB bit mas significativo y bit menos significativo ...y armar entre los dos uno de 24

   data = msb << 8;
   data |= lsb;

pero no me doy cuenta como modificar la libreria ...


gracias y saludos

espero esto le sirva a  elvysr44


Perdon ...estoy usando un pic16f628 compilando xc8 y mplabx ...y una celda de carga de 150 kg

« Última modificación: 13 de Diciembre de 2015, 15:22:54 por Rseliman »
Las Grandes Obras las sueñan los grandes locos , mientras los inutiles las critican !!

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:proteus y HX711
« Respuesta #4 en: 13 de Diciembre de 2015, 16:11:46 »
Tal ves por que estas recortandolo...

Código: C
  1. // Envio
  2. long datos;
  3. short int *ptr, i;
  4.  
  5. datos = ReadCount();
  6. ptr = &datos;
  7. for(i=0;i<3;i++) UARTWrite(*ptr++)

Código: C
  1. //Repecion
  2. long datos;
  3. shor int *ptr=&datos, i;
  4. bool dato_listo;
  5.  
  6. interrupcion(){
  7.  *ptr++=RCREG;
  8.  if (++i < 3) i=0; ptr=&datos; dato_listo=1
  9. }

Ahora si envias mas cosas podrias enviarlo como hexa.. y algun tipo de printf sobre la UART.

Desconectado Rseliman

  • PIC16
  • ***
  • Mensajes: 239
Re:proteus y HX711
« Respuesta #5 en: 13 de Diciembre de 2015, 16:45:21 »
Gracias KILLERJC

Pero no la entiendo ....

La recepcion no me interesa porque mando por uart y recibo en delphi ...rs232

ptr++  ??  porque ??

Gracias muchas gracias




Tal ves por que estas recortandolo...

Código: C
  1. // Envio
  2. long datos;
  3. short int *ptr, i;
  4.  
  5. datos = ReadCount();
  6. ptr = &datos;
  7. for(i=0;i<3;i++) UARTWrite(*ptr++)

Código: C
  1. //Repecion
  2. long datos;
  3. shor int *ptr=&datos, i;
  4. bool dato_listo;
  5.  
  6. interrupcion(){
  7.  *ptr++=RCREG;
  8.  if (++i < 3) i=0; ptr=&datos; dato_listo=1
  9. }

Ahora si envias mas cosas podrias enviarlo como hexa.. y algun tipo de printf sobre la UART.
Las Grandes Obras las sueñan los grandes locos , mientras los inutiles las critican !!

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:proteus y HX711
« Respuesta #6 en: 13 de Diciembre de 2015, 17:05:11 »
Tengo un pointer de un entero de 8 bits llamado ptr, tengo ademas una variable "datos" de 24bits

lo que hice fue asignar al ptr la direccion de comienzo de la variable "datos.

Algo mas grafico. Supongamos que datos esta ubicado en 0x100 de la RAM

0x100 - 0x21
0x101 - 0x3F
0x102 - 0x89

Suponete que ese es tu numero de 24 bits, 0x213F89
hago que ptr sea 0x100

Envio lo que hay en 0x100 ( 0x21 ) e incremento, al incrementar como mi puntero es un short int ( 8 bits ) va a incrementar solo 1 byte. es decir va a apuntar a 0x101, y voy a enviar ahora 0x3F, luego ocurre lo mismo y envio 0x89.

Luego en tu programa en delphi vas a tener que recomponer eso.. puede ser muy simple si es un entero ( me explico en C )
Supongamos que los datos los guardas en un array asi: dato[0] = 0x21 , dato[1]= 0x3F , dato[2]= 0x89 , que son los valores y que llegan en ese orden

dato_recibido = (dato[0] << 16) + (dato[1] << 8 ) + dato[0]; // 0x210000 + 0x3F00 + 0x89 = 0x213F89

Y ya tenes tu dato en tu PC armado como lo tenias antes.

Tambien podes hacer una union con un array de 3 enteros. Eso depende de vos

Desconectado Rseliman

  • PIC16
  • ***
  • Mensajes: 239
Re:proteus y HX711
« Respuesta #7 en: 13 de Diciembre de 2015, 17:54:19 »
Ahora si KILLERJC ...entendido ...voy a probar si funciona lo posteo como para que quede terminada la libreria en xc8 porque no esta en el foro

Mil Gracias




Tengo un pointer de un entero de 8 bits llamado ptr, tengo ademas una variable "datos" de 24bits

lo que hice fue asignar al ptr la direccion de comienzo de la variable "datos.

Algo mas grafico. Supongamos que datos esta ubicado en 0x100 de la RAM

0x100 - 0x21
0x101 - 0x3F
0x102 - 0x89

Suponete que ese es tu numero de 24 bits, 0x213F89
hago que ptr sea 0x100

Envio lo que hay en 0x100 ( 0x21 ) e incremento, al incrementar como mi puntero es un short int ( 8 bits ) va a incrementar solo 1 byte. es decir va a apuntar a 0x101, y voy a enviar ahora 0x3F, luego ocurre lo mismo y envio 0x89.

Luego en tu programa en delphi vas a tener que recomponer eso.. puede ser muy simple si es un entero ( me explico en C )
Supongamos que los datos los guardas en un array asi: dato[0] = 0x21 , dato[1]= 0x3F , dato[2]= 0x89 , que son los valores y que llegan en ese orden

dato_recibido = (dato[0] << 16) + (dato[1] << 8 ) + dato[0]; // 0x210000 + 0x3F00 + 0x89 = 0x213F89

Y ya tenes tu dato en tu PC armado como lo tenias antes.

Tambien podes hacer una union con un array de 3 enteros. Eso depende de vos
Las Grandes Obras las sueñan los grandes locos , mientras los inutiles las critican !!

Desconectado elvysr44

  • PIC10
  • *
  • Mensajes: 15
Re:proteus y HX711
« Respuesta #8 en: 14 de Diciembre de 2015, 21:35:21 »
Agradecido por los aportes de los amigos KILLERJC y Rseliman.
Lo pondre en practica y publicare los resultados.
Nuevamente mil gracias.


 

anything