Autor Tema: Problemas con niveles RS-232  (Leído 2345 veces)

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

Desconectado Motherfunkerz

  • PIC10
  • *
  • Mensajes: 7
Problemas con niveles RS-232
« en: 21 de Octubre de 2013, 10:30:52 »
Buenas tardes;

Estoy realizando la programacion de un PIC18F para comunicarme con un modem WAVECOM para el envio y recepcion de SMS. El PIC tiene una alimentacion de 3.3V, por lo que uso el MAX3232 para la conversion de niveles TTL a RS232, y enviar la informacion del PIC al modem mediante un puerto DB9. Todos las lineas RX y TX estan bien conectadas, ya que envio y recibo informacion.

El problema esta en que a la salida del MAX3232 consigo unos niveles de +6V a -5.6V, que estan dentro del estandar RS232. He verificado los niveles en el puerto COM1 del ordenador y da -10.8V a 11V.

Durante las pruebas, si conecto el modem al ordenador, y utilizo hyperterminal para comunicarme con el, todo funciona correcto. Luego el modem no esta dañado.
Si conecto el PIC al ordenador, y envio un simple putc(0xAA), en hyperterminal no se recibe nada, sin embargo se envian datos, ya que en el osciloscopio aparece la forma de onda correspondiente, pero con los citados niveles (+6V a -5.6V).
Si intento enviar algo al PIC mediante hyperterminal, utilizando la interrupcion de UART, en el momento que toco una tecla, entro en la interrupcion, sin embargo no recibo la informacion de la tecla pulsada, solo recibo 1111 1111 (255).

He monitorizado el puerto tambien con la herramienta que trae el PIC C compiler de CCS, obteniendo en la transmision de datos PIC-PC: 00 00 00 00, perfectamente sincronizado con la forma de onda del osciloscopio, pero no interpretando la informacion. En esta herramienta, la luz RX se pone verde cada vez que se reciben los datos, indicando que si extiste comunicacion por la linea RX.

Por supuesto, al no funcionarme las pruebas con el ordenador, no me funciona la comunicacion PIC-modem.

He probado a cruzar las lineas RX y TX en la comunicacion con el ordenador sin ningun resultado. Por supuesto la configuracion en la transmision de los datos es (que deberia ser correcta):

9600 bps
Sin paridad
8 bits
1 bit parada
sin control de flujo


Interpreto que es una especie de problema de mala codificacion o de probelmas con los niveles de tension, pero no consigo dar con el problema y por lo tanto tampoco con la solucion, y acudo a este foro activamente por primera vez, ya que sin ser usuario antes he aprendido y solucionado muchos errores gracias a vosotros.

Comentar que los C electroliticos que lleva el MAX son de 1uF, que segun el datasheet de MAXIM, estan dentro de los rangos (aunque recomienda 0.1uF, pero no creo que este sea el problema)


¿Que puedo estar haciendo mal?

Gracias por vuestro tiempo.





Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Problemas con niveles RS-232
« Respuesta #1 en: 21 de Octubre de 2013, 11:21:43 »
  Imagino que tendrás las masas conectadas entre tu circuito y el PC. De lo contrario no existe una referencia entre ambas partes y por lo tanto la comunicación fallará.
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado Motherfunkerz

  • PIC10
  • *
  • Mensajes: 7
Re: Problemas con niveles RS-232
« Respuesta #2 en: 21 de Octubre de 2013, 13:33:51 »
Si claro, conecto las líneas TX, RX y GND de la salida del MAX al PC. Pero lo hago línea a línea, tirando cable de pin a pin, el resto de pines tanto del DB9 de la placa como del puerto COM1 quedan al aire. No se sí eso será un problema.

Yo sigo pensando que el problema son los niveles de tensión, ya que todo lo que envio desde PIC se interpreta como 0, y todo lo que recibo en el PIC de hyperterminal se interpreta como 1...

Pero le veo difícil solución, ya que los niveles del MAX3232 deberian ser estándar y entendibles por todos los periféricos.

¿Que pensáis, se os ocurre otra razón?

Desconectado Motherfunkerz

  • PIC10
  • *
  • Mensajes: 7
Re: Problemas con niveles RS-232
« Respuesta #3 en: 21 de Octubre de 2013, 14:24:54 »
Os copio el codigo que estoy usando para probar la comunicacion, muy sencillos los dos, y que deberian funcionar sin problemas (comprobados con el osciloscopio)...
A ver si esque me falta alguna directiva imprescindible o algo por el estilo...

Para probar la transmision programo:

#include <18F24J50.h>
#fuses NOWDT
#use delay(clock=40000000)
#use rs232(UART1,baud=9600, xmit=PIN_C6, rcv=PIN_C7, parity=N, bits=8, stop=1)

void main()
{
      while(1)
      {
           putc(0xAA);
           delay_ms(500);
      }
}




Y para probar la recepcion desde hyperterminal:

#include <18F24J50.h>
#fuses NOWDT
#use delay(clock=40000000)
#use rs232(UART1,baud=9600, xmit=PIN_C6, rcv=PIN_C7, parity=N, bits=8, stop=1)

void main()
{
       enable_interrupts(INT_RDA);
       enable_interrupts(GLOBAL);
}

#int_RDA

void  RDA_isr()
{
      char value;
      int i;

      value=getchar();
      i++;

}


(utilizo la variable i para ver que entra bien en la interrupcion, aunque tambien lo comprobe con un breakpoint)

Desconectado Motherfunkerz

  • PIC10
  • *
  • Mensajes: 7
Re: Problemas con niveles RS-232
« Respuesta #4 en: 22 de Octubre de 2013, 12:41:41 »
Hola, ya he solucionado el problema de la comunicacion, era un problema con la frecuencia de reloj y los baudios.

Pero ahora programando ya el envio de SMS desde el pic me surge otro problema, no me envia el mensaje desde el pic.

Leyendo y probando distintos comandos AT he llegado a que si compruebo si el modem esta registrado en la red con AT+CREG=? el modem me responde CREG:0,2    que significa que no esta registrado. No se como solucionar este error, ya que desde Hyperterminal si me envia los SMS, y el problema aparece solo cuando intento enviar los sms desde el PIC. He probado a forzar el registro con AT+CREG=1 pero no he conseguido nada. El PIN entra bien, y el resto de comando AT el modem responde OK, solo me da ERROR despues del Control+Z para el envio del SMS.

¿Teneis la solucion?

Gracias

Desconectado RICHI777

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1498
Re: Problemas con niveles RS-232
« Respuesta #5 en: 22 de Octubre de 2013, 15:50:29 »
Es raro lo que te esta pasando ... Si mal no entendí el módulo Wavecom es externo y lo conectas a un PC o al PIC via RS-232, con lo cual el módulo tiene su propia alimentación y no es un problema de consumo, todos los módulos GPRS requieren que la fuente sea capaz de entregar hasta 1.5 A pico. Si con el PC y el programa terminal no necesitas realizar nada adicional para enviar un SMS debe ser una cuestión de tiempos, lo que yo haría sería esperar hasta que el módulo este registrado ( comando CREG ) y recién cuando este registrado tratar de enviar el SMS. La operación de registración puede demorar varios segundos.

Saludos !

Desconectado Motherfunkerz

  • PIC10
  • *
  • Mensajes: 7
Re: Problemas con niveles RS-232
« Respuesta #6 en: 23 de Octubre de 2013, 07:12:49 »
Hola de nuevo. Siento ser pesado con el tema, pero como bien dices, son cosas raras las que me pasan, y no les encuentro explicacion.

Hoy he conseguido enviar varios SMS desde el PIC con el mismo codigo, configuracion y tarjeta SIM que lo intentaba ayer. Sin embargo me sigue dando error de vez en cuando, y cuando intento añadir nuevos elementos al codigo, por ejemplo, que para enviar el SMS haya que pulsar un boton, entonces me da ERROR a la hora de  enviar el mensaje. No se que hacer la verdad.

Este es el codigo al que añadi el IF para comprobar si el boton esta pulsado y enviar el SMS, y que me da error, y con el que sin el IF ni nada si consegui enviar 3 SMS:


#include <18F24J50.h>
#fuses NOWDT
#use delay(internal=8000000)
#use rs232(UART1,baud=9600, xmit=PIN_C6, rcv=PIN_C7, parity=N, bits=8, stop=1)

#byte ucon=0xF65
#byte ucfg=0xF39                     // regs. para configurar RC4 y RC5
#byte ancon1=0xF49

void main()                           
{
   set_tris_c(0b10110000);
   bit_set(ancon1,3);
   bit_set(ucfg,3);                     // configuracion para usar RC4 y RC5 como entradas digitales
   bit_clear(ucon,3);
   output_high(pin_A3);            // led ON

   if(input(pin_C4))               // switch
   {
       delay_ms(500);
       //printf("ATZ\r\n");                         // comando para reinicio de modem
       delay_ms(5000);
       //printf("AT+CPIN=47...    \r\n");
       delay_ms(5000);
       printf("AT+CMGF=1\r\n");
       delay_ms(5000);
       printf("AT+CMGS=\"660...      \"\r\n");
       delay_ms(5000);
       printf("SMS desde PIC. Prueba de pulsar para enviar.");
       putc(26);
       delay_ms(5000);
   }
}



Y lo que recibo del modem monitorizando por hyperterminal es:


ATZ

OK
AT+CMGF=1

OK
AT+CMGS="660....       "

> SMS desde PIC. Prueba de pulsar para enviar.
ERROR



Gracias por vuestra ayuda, la verdad que estoy atascado y avanzo poco y lento, y lo peor de todo, no doy con los porque.

« Última modificación: 23 de Octubre de 2013, 07:23:21 por Motherfunkerz »

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Problemas con niveles RS-232
« Respuesta #7 en: 23 de Octubre de 2013, 09:07:13 »
  ¿Lo que recibes en hyperterminal, es utilizando la sentencia IF? porque yo aprecio todo el mensaje bien, con el agregado del ERROR (que aparentemente sería causado pro putc(26) ). ¿Qué función cumple ese 26?
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado Motherfunkerz

  • PIC10
  • *
  • Mensajes: 7
Re: Problemas con niveles RS-232
« Respuesta #8 en: 23 de Octubre de 2013, 15:18:18 »
Bueno, he encontrado la solución y parece que ya todo funciona correctamente, a espensas ahora de realizar el codigo completo bastante más complejo. Comparto con vosotros los errores que he tenido:

En ningún momento ha habido problemas o confusiones con los niveles, el MAX entregue lo que entregue, tiene que estar dentro del estándar RS 232 y tiene que ser entendido por cualquier otro dispositivo bajo la misma comunicación, y así ha sido. El problema ha sido el reloj; 40Mhz era demasiada frecuencia y daba problemas a 9600 bps. He cambiado el cristal externo por uno de 4Mhz y funciona perfectamente, así como con el interno de 8Mhz. No se sí tiene sentido, pero ha sido el cambio que ha hecho que todo funcionase.

Luego el error que me devolvía el modem a la hora de enviar el SMS no era otro más que la intensidad de la señal. Tras utilizar el comando AT+CQS y comprobar la señal con el osciloscopio, esta era algo baja. El modem lo tenía alimentado a los 5V de la alimentación de la placa. En el momento que alimente el modem a 12V todo funciono, y envió y recibió mensajes perfectamente.

En respuesta a AngelGris, el Putc(26) es la manera de enviar el CTRL+Z en decimal, hay muchas formas de hacerlo, yo uso esa porque me parece cómoda ;)

Conclusión; tras llevar 4 días peleándome con el modem, mi impresión es que el Modem WAVECOM FASTRACK es bastante pejiguero y "mirame y no me toques", ya que estos errores son tontos, tontos... Incluso el datasheet del fabricante es algo confuso...

Gracias por el interés mostrado, espero que siga funcionando así de bien este foro.

Un saludo.

Desconectado Maya

  • PIC10
  • *
  • Mensajes: 5
Problemas
« Respuesta #9 en: 06 de Diciembre de 2015, 07:35:11 »
Buenos días,

Estoy trabajando con una FPGA que conecto a mi PC a través del conector RS-232 y a la cual envío comandos desde el Hypertherminal. Sin embargo, no consigo hacerlo, es decir, creo una nueva conexión y al escribir en el hypertherminal (en mi caso seleccionar qué SLAVE de mi código usar fijando direcciones con SXX y AXX) no me reconoce nada. Escribo S80 y al darle al intro debería recibir un OK! y en vez de eso sigue como si nada, sólo puedo escribir letras y números todo seguido, lo cual no sirve de nada.

Estoy desesperada y agradecería mucho una ayudita! :)

Gracias!

Desconectado stk500

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4919
Re:Problemas con niveles RS-232
« Respuesta #10 en: 06 de Diciembre de 2015, 09:42:07 »
No conozco el FPGA que tu usa,
la pregunta es como tiene la conexion con el Cable, TX , RT, que deberia ser cruzado ;-)
tambien podria hacer un puente en el extremo del cable con los pines de TX y RX y al usar el HYPER TERMINAL deberia recibir contesta.
Saludos