Autor Tema: transmision serial RS-232  (Leído 4233 veces)

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

Desconectado epacho1

  • PIC10
  • *
  • Mensajes: 10
transmision serial RS-232
« en: 06 de Octubre de 2006, 13:07:25 »
HOLA A TODOS!!

Tengo un problema con una transmision serial PIC - PC lo cual voy a tratar de explicar lo mas claro posible.

Estoy haciendo una comunicacion serial (RS-232) PIC - PC, estoy utilizando un PIC 16F871 conectado a un MAX-232, en primer lugar estaba con un oscilador de 10MHZ pero por nada del mundo quiso transmitir, luego reemplace el oscilador por uno de 4MHZ y transmitio!!!! pero, logicamente, transmite datos completamente errados; he probado con varios algoritmos de programa, ya sea una transmision por software (serout portc.6,T9600,["A"], por ejemplo), y tambien por hardware USART (HSEROUT .....) inclusive incluyendo una parte de asembler en el programa, y con todas esas formas sigue saliendo lo mismo. Asi que empece a dudar de la velocidad de transmision "Baudios" ya que con un cristal de 4MHZ se tiene un alto porcentaje de error, pero igual, e cambiado el cable, la PC, etc... y no encuentro solucion, POR FAVOR!!! alguna alma caritativa que tenga una idea, una solucion, algo pero en serio nececito una mano, muchas gracias.

P.D. les cuento que la tarjeta la he revisado varias veces y esta bien, y tambien e cambiado los componentes.

Desconectado navaismo

  • Jubilado Todopic
  • PIC24H
  • ****
  • Mensajes: 1973
Re: transmision serial RS-232
« Respuesta #1 en: 06 de Octubre de 2006, 13:19:34 »
Hola epacho1, esta raro el problema ya que yo siempre que comunico el pic al pc uso 4mhz y todo va de lujo, lo del 10mhz si definiste la linea de DEFINE OSC 10.

Y cuando lo hago siempre lo hago por software usando serout. Seria bueno que nos pusieras parte del codigo y el esquematico para revisarlo. otra cosa que note cuando lo comunicaba es que el pc debe estar bien configurado por ejemplo cuando usaba N2400 llegaban datos medio raros pero cuando lo cambie a T2400 ya se veina tal cual. ¿que programa usas para recibir o transmitir desde la "compu"?
« Última modificación: 06 de Octubre de 2006, 15:35:32 por navaismo »
"Mi tercer deseo, que otra cosa podría ser, poner un final a todo el sufrimiento, que sólo con mi propia extinción el planeta podrá ser aliviado. Pobre de mí, Si tuviera tres deseos hoy, la elección no sería dificil para mí, Sólo tres deseos serían suficientes, No tendría uso para más."

"He sido un hombre que busca y aun lo sigo siendo, pero ya no busco en las estrellas y en los libros, sino en las enseñanzas de mi sangre."

Desconectado LordLafebre

  • Moderador Global
  • DsPIC30
  • *****
  • Mensajes: 3529
    • Micros & micros
Re: transmision serial RS-232
« Respuesta #2 en: 06 de Octubre de 2006, 13:23:29 »
Hola:

Cuando pusiste el cristal de 10MHZ lo especificaste? yo he trabajado con cristales de 4Mhz y todo perfecto y sin problemas.  Este por ejemplo es un pequeño codigo, pero que tengo usando a 20Mhz, y desde el programador selecciono la opcion HS.

Código: FreeBasic
  1. include "modedefs.bas"    
  2. DEFINE OSC 20
  3. TRISB=%11111111
  4. TRISA.2=1
  5. TRISB.3=1
  6. dato var byte
  7. inicio:
  8.     if PORTB.0=0 then
  9.         serout PORTA.1,T1200,[0,"A"]  
  10.     endif
  11.     if PORTB.1=0 then
  12.         serout PORTA.1,T1200,[0,"B"]
  13.     endif
  14.     if PORTB.2=0 then
  15.         serout PORTA.1,T1200,[0,"C"]
  16.     endif
  17.     if PORTB.3=0 then
  18.         serout PORTA.1,T1200,[0,"D"]
  19.     endif
  20.     if PORTB.4=0 then
  21.         serout PORTA.1,T1200,[0,"E"]
  22.     endif
  23.     if PORTB.5=0 then
  24.         serout PORTA.1,T1200,[0,"F"]
  25.     endif
  26.     if PORTB.6=0 then
  27.         serout PORTA.1,T1200,[0,"G"]
  28.     endif
  29.     if PORTB.7=0 then
  30.         serout PORTA.1,T1200,[0,"H"]
  31.     endif
  32.     if PORTA.2=0 then
  33.         serout PORTA.1,T1200,[0,"I"]
  34.     endif
  35.     if PORTA.3=0 then
  36.         serout PORTA.1,T1200,[0,"J"]
  37.     endif
  38.     goto inicio
  39. end

Para definir el HS desde el programa no recuerdo como se lo hacia.  :?

Desconectado epacho1

  • PIC10
  • *
  • Mensajes: 10
Re: transmision serial RS-232
« Respuesta #3 en: 06 de Octubre de 2006, 13:43:39 »
Gracias navaismo y LordLafebre por su ayuda, desde luego que defini que tipo de oscilador use cuando lo hice con el de 10MHZ, el software con el que me comunico es LabView pero en las pruebas iniciales lo estoy haciendo con el Hiper Terminal y con Serial Comunicator que viene en PIC BASIC, y si he tomado en cuenta lo de la inversion de los datos, osea, T9600 o N9600, les comento que yo tambien e realizado varias comunicasiones RS-232, pero en ASM, es la primera vez que me a tocado hacerlo en BASIC, respondiendote LordLafebre, tu codigo es muy similar al mio, el circuito te lo muestro mas tarde, yo pienso y sigo convencido que es la velocidad de transmision, nuevamente voy a cambiar el cable por uno apantallado, por que quien quita que sea cosa del ruido. Les voy a mantener informado en este extraño caso de "el PIC y la PC que nunca se entendieron".

Desconectado LordLafebre

  • Moderador Global
  • DsPIC30
  • *****
  • Mensajes: 3529
    • Micros & micros
Re: transmision serial RS-232
« Respuesta #4 en: 06 de Octubre de 2006, 13:49:04 »
Hola:

Esperamos el diseño circuito, quisiera saber si lo tienes montado en un Project board o en una placa.

Desconectado Alanbrito

  • PIC10
  • *
  • Mensajes: 5
Re: transmision serial RS-232
« Respuesta #5 en: 06 de Octubre de 2006, 17:41:01 »
Hola: Hace este programa de prueba

include "modedefs.bas"
define osc 20
i var word
inicio:
for i = 0 to 15
serout porta.1,i,["funciona con =",#i,10,13]
pause 500
next i
goto inicio

si la transmicion es correnta deberia mostrar "funciona con = x) siendo x el modo de transmicion. editando el archivo modedefs.bas te vas a dar cuenta

el otro dia publike esto http://www.todopic.com.ar/foros/index.php?topic=14132.0
es un coversor de ttl a rs232 sin max
sale mas economico y 100% probado

si quieres probar tu cable puentea los pines 2 y 3 de tu pc y hace una transmicion

Desconectado epacho1

  • PIC10
  • *
  • Mensajes: 10
Re: transmision serial RS-232
« Respuesta #6 en: 10 de Octubre de 2006, 09:34:22 »
GRACIAS A TODOS!!!!

Gracias a todos por su ayuda e interes, ya lo logre, y lo hice de la siguiente manera, utilice un cristal de 16MHZ ya que este es el que menor error en velocidad de transmicion tiene (a 9600 baud) y por si acaso tambien coloque un cable apantallado (con par trensado). Despues de esta experiencia, si alguien va ha hacer una transmision serial ocupando un PIC16F871, es mejor que usen un cristal de 16MHZ. La transmision la pueden hacer ya sea por software o por hardware,(yo me e inclinado por hardware ya que uso el MAX232 y el pic tiene USART). Gracias de todas maneras.

Desconectado LordLafebre

  • Moderador Global
  • DsPIC30
  • *****
  • Mensajes: 3529
    • Micros & micros
Re: transmision serial RS-232
« Respuesta #7 en: 10 de Octubre de 2006, 11:18:51 »
Hola:

Pues para el 871, lo tengo trabajando bien a 4, 12 y 20Mhz sin problema alguno.  Pienso que en tu caso se debe haber producido algun pequeño error o algo.  :?

Desconectado epacho1

  • PIC10
  • *
  • Mensajes: 10
Re: transmision serial RS-232
« Respuesta #8 en: 10 de Octubre de 2006, 14:10:52 »
Como lo dices tu LordLafebre es posible que excista algun tipo de error pequeño, pero analizandolo de una forma mas segura, lo mas logico es elegir las condiciones mas apropiadas para un tipo de transmision, me explico:
Si quiero hacer una transmision a 9600baud pienso que se debe elegir el cristal mas apropiado para esta transmision de acuerdo al porsentaje de error excistente, dependiendo si va ha ser en alta o baja velocidad, estos datos estan en el datasheet del micro en la seccion de USART. Claro que si no tenemos remedio de ocupar otro oscilador pues bienvenido sea. Ademas PIC BASIC PRO hace los calculos para un oscilador de 4MHZ por defoult como tu lo sabes, asi que si utilizamos otro oscilador para realizar una transmision, lo mejor es utilizar DEFINE HSER_SPBRG (y el numero en decimal que corresponda) en lugar de DEFINE HSER_BAUD ......  Bueno espero no haberles cansado con tanta lata pero creo que no esta demas indicar estos detalles pequeños que a la larga nos pueden valer.

Desconectado LordLafebre

  • Moderador Global
  • DsPIC30
  • *****
  • Mensajes: 3529
    • Micros & micros
Re: transmision serial RS-232
« Respuesta #9 en: 10 de Octubre de 2006, 18:07:04 »
Hola:

Todas las explicaciones, aclaraciones y experiencias son bien venidas, gracias por compartir y contarnos tus experiencias y soluciones.  :mrgreen:


 

anything