Autor Tema: duda sobre RS232  (Leído 3832 veces)

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

Desconectado championz

  • PIC16
  • ***
  • Mensajes: 127
duda sobre RS232
« en: 08 de Mayo de 2006, 23:19:14 »
que tal! bueno la duda es simple... como hago para enviar numeros en hexadecimal por rs232... no se si me explico bien... lo que necesito es mandar hexa y no ASCII, no se si esoty preguntando una estupidez o tiene sentido...

suerte!

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: duda sobre RS232
« Respuesta #1 en: 09 de Mayo de 2006, 00:16:18 »
que tal! bueno la duda es simple... como hago para enviar numeros en hexadecimal por rs232... no se si me explico bien... lo que necesito es mandar hexa y no ASCII, no se si esoty preguntando una estupidez o tiene sentido...

Si estamos hablando del PIC, configurando la USART TRANSMITTER y utilizando un MAX232 o similar.

Y con cargar el dato en el TXREG se transmite solo.  El dato en el TXREG es un dato de 8 bits que será un dato que en hexa podrá tomar un valor de 0x00 a 0xFF.    En C, esto se hace gralmente con una funcion putc() o putchar() y como parámetro se envía una variable o constante de 8 bits.

Espero haber evacuado tu duda.

Saludos
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado championz

  • PIC16
  • ***
  • Mensajes: 127
Re: duda sobre RS232
« Respuesta #2 en: 09 de Mayo de 2006, 14:19:39 »
Gracias Maunix por tu respuesta!

esta algo confuso todavia... Lo que me genera la duda es que la funcion putc() manda un caracter en ASCII...  osea que si yo quiero enviar el dato 09 con putc() enviaria el ASCII del 0 y el ASCII del 9. lo que no coresponderia con el 09hex  que pretendo enviar.

un saludo! si alguien me puede ayudar le estaria muy agradecido

Conectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5544
    • Picmania by Redraven
Re: duda sobre RS232
« Respuesta #3 en: 09 de Mayo de 2006, 14:37:53 »
No, amigo Championz.

Si mandas putc(0x09) mandas exactamente el 09 Hex que pretendes ...

para enviar el '0' y el '9' deberias mandar

putc('0') ó putc(0x30) ó putc(48) que son lo mismo y mandan el caracter ASCII correspondiente al cero y
putc('9') ó putc(0x39) ó putc(57) que son lo mismo y mandan el caracter ASCII correspondiente al nueve.

De hecho si haces un bucle de este estilo:

int i;

for(i=0;i<10;i++){
  putc('0'+i);
}

mandarías consecutivamente los ASCII's de  '0', '1', '2', '3' ...

Espero que te sirva.  :)

Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado Hidalgork

  • PIC10
  • *
  • Mensajes: 7
Re: duda sobre RS232
« Respuesta #4 en: 09 de Mayo de 2006, 17:47:07 »
Hola amigos
 espero poder ayudar

 La verdad es que si la linea de codigo imprime o no en Hexa da lo mismo, pues al final lo que envias por el serial es un   Byte. Ahora, para visualizar estos datos en Hexa debes darle formato por ejemplo con printf

para j=143 decimal
printf("%x",j); mostrara la variable j en hexadecimal con letras minusculas.
si j=0b10001111   ====>  8f     

printf("%X",j); mostrara la variable j en hexadecimal con letras mayusculas.
si j=0b10001111   ====>  8F

printf("%d",j); mostrara la variable j en decimal con signo.
si j=0b10001111   ====>  -113

printf("%u",j); mostrara la variable j en decimal sin signo.
si j=0b10001111   ====>  143

putc(j); enviara la variable sin formato o sea solo el byte 0b10001111


Cualquier cosa estare observando el foro


Desconectado ALE1973

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 229
Re: duda sobre RS232
« Respuesta #5 en: 11 de Mayo de 2006, 16:37:59 »
Buenas, aprovecho este tema ya que mi duda es sobre el RS232, bueno en realidad son varias, pero vamos por las mas complicadas....

Revisando el asm que genera el compilador ccs, vi que cuando uno hace printf.... para enviar por el puerto serie, por mas que uno declare usar la USART, el envio no lo hace con interrupciones..., bueno e ahi  mi duda, el printf,  facilita bastante el envio de datos, sobre todo si son del tipo float, ahora si yo quiero enviar por rs232 completamente manejado por las interrupciones... como envio un float, se me ocurre que tendria que luego "armarlo" en la PC, es esto asi...? primera duda... la otra que no he logrado hacer funcionar es cuando declaramos el pin de enable en
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7, ENABLE=PIN_C5)
el pin C5, no hace nada.....

Bueno, estas son algunas dudas por ahora...

Desde ya gracias...

Saludos.
Alejandro.

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: duda sobre RS232
« Respuesta #6 en: 11 de Mayo de 2006, 19:24:27 »
Revisando el asm que genera el compilador ccs, vi que cuando uno hace printf.... para enviar por el puerto serie, por mas que uno declare usar la USART, el envio no lo hace con interrupciones..., bueno e ahi  mi duda, el printf,  facilita bastante el envio de datos, sobre todo si son del tipo float, ahora si yo quiero enviar por rs232 completamente manejado por las interrupciones... como envio un float, se me ocurre que tendria que luego "armarlo" en la PC, es esto asi...?

Es así como comentas.  Los compiladores de C no usan interrupciones cuando se usan las printf.  También hace lo mismo el C18 de Microchip. 

En cuanto a transmitir por la usart con interrupciones puedes enviar directamente los 4 bytes que conforman el tipo float o bien convertirlo en ascii y luego ese string enviarlo byte por byte con interrupciones.

Para transmitir los 4 bytes del float, puedes declarar un puntero de tipo byte (o char) y puntar a la direccion de la variable float, con uun offset 0, 1, 2, 3.

No se como codificarlo en CCS pero si sabes usar punteros lo podrás resolver ;)

la otra que no he logrado hacer funcionar es cuando declaramos el pin de enable en
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7, ENABLE=PIN_C5)
el pin C5, no hace nada.....

Seguramente el C5 se usa para comunicarte por 485 con algún integrado del tipo MAX485 o DS75176.  El enable permite estando en alto habilitar la transmisión del integrado y en bajo, la recepción.

Saludos
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado ALE1973

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 229
Re: duda sobre RS232
« Respuesta #7 en: 11 de Mayo de 2006, 21:58:05 »
Hola maunix, exactamente eso quiero hacer con el enable, el problema es que no funciona...
Respecto a lo que dices del float, probare a ver que sale....

Gracias...

Saludos.
Alejandro.

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: duda sobre RS232
« Respuesta #8 en: 12 de Mayo de 2006, 07:42:42 »
Hola maunix, exactamente eso quiero hacer con el enable, el problema es que no funciona...

Es que al principio dices RS232 y luego RS485. 

Si quieres comentanos bien que quieres hacer, asi te echamos una mano.  Si estas usando el enable para que en un RS232 lo uses como señal DSR o CTS para comunicarte con una PC , ten en cuenta que el pin se pondrá en 1 al enviar el dato y se pondrá en 0 inmediatamente despues (si funciona en modo automático).  Si este es tu caso y lo conectarás con la PC, la PC no puede ver esos cambios en las señales tan velozmente a causa de que el sistema operativo hace muchas cosas al mismo tiempo.

Respecto a lo que dices del float, probare a ver que sale....

Veo si te busco un ejemplo en C18 a ver si te sirve de ayuda, al menso para direccionar variables de 16 bits con punteros char.


- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: duda sobre RS232
« Respuesta #9 en: 12 de Mayo de 2006, 08:09:11 »
Ejemplo de como direccionar una cada byte de una variable int.   En C18 el tipo int es una variable de 16bits.

Código: C
  1. unsigned char a1,a2;
  2. unsigned int b;
  3.  
  4. a1 = ( *( (unsigned char*) &(b)+0) );  // byte menos significativo
  5. a2 = ( *( (unsigned char*) &(b)+1) );  // byte más significativo

Tratándose de variables de mas bytes.  Lo que se va incrementando el el número posterior al puntero.  Es decir lo que dice +0 , +1, etc.

Hay paréntesis de más pero es para hacer mas legible el código y separarlo por secciones.


Saludos
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado ALE1973

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 229
Re: duda sobre RS232
« Respuesta #10 en: 12 de Mayo de 2006, 13:05:46 »
Hola, el problema con el 485 es el siguiente, segun la ayuda del compilador, agregando la opcion ENABLE, en la linea #use 232, podemos tener un pin para hablilitar la comunicacion 485, bueno, pruebo en 232, sin enable y la comunicacion anda de maravillas, pero cuando cambio el max232, por un 485, y defino el pin de enable, este no funciona...., solo eso.
Probe a hacerlo manualmente.... levantar el pin antes de transmitir, etc y anda bien, seria en teoria (me parece raro), que la directiva #use232, no funciona correctamente.... investigo y luego les comento....

Ahh, gracias por el codigo, voy a ver como lo implemento en CCS....

Saludos.
Alejandro.

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: duda sobre RS232
« Respuesta #11 en: 12 de Mayo de 2006, 14:56:07 »
Hola, el problema con el 485 es el siguiente, segun la ayuda del compilador, agregando la opcion ENABLE, en la linea #use 232, podemos tener un pin para hablilitar la comunicacion 485, bueno, pruebo en 232, sin enable y la comunicacion anda de maravillas, pero cuando cambio el max232, por un 485, y defino el pin de enable, este no funciona...., solo eso.
Probe a hacerlo manualmente.... levantar el pin antes de transmitir, etc y anda bien, seria en teoria (me parece raro), que la directiva #use232, no funciona correctamente.... investigo y luego les comento....

Que pena, no uso el CCS como para darte algun detalle más específico. 

Una consulta, estas seguro que el RC5 está como salida? Si es así, ¿puede ser que este siendo utilizado para el SPI?

- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)