Autor Tema: Necesito ayuda sobre RS232 sin MAX  (Leído 5835 veces)

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

Desconectado gbene

  • Colaborador
  • PIC10
  • *****
  • Mensajes: 35
Necesito ayuda sobre RS232 sin MAX
« en: 17 de Octubre de 2003, 13:26:00 »
Hola a todos:  

        Estoy programando en ASM un 16f627, el cual quiero comunicarlo a una PC via RS232, el tema es que me niego a utilizar un MAX232. Tengo visto  que  se puede conectar directamente el PIC a la PC solo con un par de resistencias y transmitiendo en forma invertida.
Si no estoy equivocado alguna vez vi una rutina en ASM que justamente era para invertir las señales en la comunicacion serial, lo que no recuerdo es si esta aca , en el foro, o en la pagina. Hace rato que la estoy buscando y no la encuentro, si alguien la tiene vista o sabe de alguna podria avisarme?.
Otra duda es que entre todas las pruebas que hice para tratar de sacarlo funcionando, fue colocar un divisor de tension y un par de compuertas inversoras, con lo cual las pocas comunicaciones que probe funcionaron. Alguien sabe si en realidad eso es confiable y puede funcionar relativamente bien?

Vale aclarar que estoy utilizando el puerto usart del pic.

Por ser el primer msj. no quiero taparlos de preguntas, ya que dudas me sobran, las voy a ir largando de a poco.

Muchas gracias.

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2569
RE: Necesito ayuda sobre RS232 sin MAX
« Respuesta #1 en: 17 de Octubre de 2003, 13:46:00 »
La verdad no conocía que se pudiese hacer así, si funcionara nos ahorraríamos el MAX del PIC.

¿La fuente es fiable? Podrías poner el conexionado.

Un saludo

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7918
RE: Necesito ayuda sobre RS232 sin MAX
« Respuesta #2 en: 17 de Octubre de 2003, 14:23:00 »
Si, Pocher, yo lo he probado y anda bien, en PBP.
No lo hice nunca en assembler, por lo cual te la debo Gbene.

Como ejemplo que anda tienes el famoso programador In Circuit de Pacala, con tres cables y resistencia, conectado al puerto serial del PC directamente, y todos sabemos que anda.
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado gbene

  • Colaborador
  • PIC10
  • *****
  • Mensajes: 35
RE: Necesito ayuda sobre RS232 sin MAX
« Respuesta #3 en: 17 de Octubre de 2003, 14:24:00 »
Pocher:

La fuente no es nada fiable, es diseño propio por eso pedia la aprobacion de alguien con experiencia. Yo para al electronica soy medio bruto, no calculo nada, conecto si anda bien, y si que quema me pongo triste 3 segundos y pruebo otra cosa.

El diagrama que adjunto es como lo tengo conectado y a 9600 bps se comunico. el programita que utilice era muy sensillo, solo hace un eco de lo enviado con el Hyperterminal, ademas el cable que utilizo es de 2mt mas o menos, no se que pasa con distancia mayores o mas velocidad, o una gran cantidad de informacion enviada.
Para mi proyecto a simple vista serviria.

Dejo la evaluacion para los expertos, que por suerte por lo que vi, tenemos varios y muy buenos.

Saludos

Desconectado marmatar

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1220
    • MSTools
RE: Necesito ayuda sobre RS232 sin MAX
« Respuesta #4 en: 17 de Octubre de 2003, 15:07:00 »
MGLSOFT...
Tanto gbene como yo , somos la prueba viviente de que el programador de pacala no le funciona a todos...
así que no lo trates de convencer con eso...jajajaja
Estuvimos en la misma mesa de trabajo tratando de hacerlo funcionar... y casi terminamos ahorcándonos con el dichoso cable.
Bueno... por suerte volvió pacala y dijo que para todos los que tienen dudas va a hacer un manualsillo.

Bueno... un abrazo...y, trátenlo bien gbene en el fondo es un buen pibe (cuando lo atan en el fondo de la casa)

Un abrazo...
marmatar
Lo posible ya está hecho, entonces hagamos lo imposible - Platón

Desconectado jorgeansuini

  • PIC18
  • ****
  • Mensajes: 340
RE: Necesito ayuda sobre RS232 sin MAX
« Respuesta #5 en: 17 de Octubre de 2003, 16:02:00 »
Buenas gente:

No se porque queres ahorrarte los pocos centavos que vale un max,que realmente aparte de invertir la señal,lo mas interesante es que tenes una proteccion extra de los puertos, pero te doy una idea que a mi me ha funcionado:
en ves de invertir la comunicacion, he invertido la conexion del comun del micro a la pc, mas claro, normalmente al pin del comun de comunicaciones le conectas el negativo de la alimentacion del pic.Bueno ,si conectas el positivo y el negativo queda flotante, ya se invierte la comunicacion.Esto se da en los casos de que las fuentes sean independientes.-
Por supuesto que hay que tener cuidado con estas practicas porque a veces podes eliminarte el puerto,y si es una portatil como en mi caso,terminas utilizando un conversor usb-232 porque seguramente el arreglo te sale mas caro.-
saludos
jorge

Desconectado gbene

  • Colaborador
  • PIC10
  • *****
  • Mensajes: 35
RE: Necesito ayuda sobre RS232 sin MAX
« Respuesta #6 en: 17 de Octubre de 2003, 16:22:00 »
Jorgeansuini:

Muchas gracias por la alternativa planteada, pero si el riesgo de estropear el puerto es grande, paso, porque si de quemar cosas se trata, yo debo estar entre los mejores.
El tema de querer sacar el max, es por un lado reducir costos, con el max tengo 1.8u$s y con el inversor solo 0,3 u$s (ademas que ya utilizo inversores en otra parte del circuito, y me quedan compuertas libres que puedo aprovechar), no es mucho el ahorro pero todo suma, ademas tengo poca experiencia con los max pero se me han quemado varios, sin darle supuestamente tan mal trato. Son un poco delicados verdad?.. Ademas reducir el tamaño del inpreso, y soy de la idea que cuanto menos cosas hay, menos posibilidad que falle.

Te aclaro que tengo muy poca experiencia en electronica, con lo cual me viene etupendo todo consejo que puedan darme.

Gracias.
Saludos

Desconectado marmatar

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1220
    • MSTools
RE: Necesito ayuda sobre RS232 sin MAX
« Respuesta #7 en: 17 de Octubre de 2003, 17:10:00 »
El diagrama de lo de gbene está  AQUI

Un abrazo..
marmatar
Lo posible ya está hecho, entonces hagamos lo imposible - Platón

Desconectado RGL

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 634
RE: Necesito ayuda sobre RS232 sin MAX
« Respuesta #8 en: 17 de Octubre de 2003, 20:04:00 »
Hola foro,

Yo he realizado algunos dispositivos (más de 100 placas) con este sistema invertido y me han funcionado todas en condiciones reales con un software de comunicaciones de PC. La velocidad de trabajo es de 2400 baudios a 4MHz.

El montaje que yo he hecho es el propuesto por MELABS, del puerto de recepción del PIC una R en serie al TX del PC de valor 22K. El otro pin, el  de transmisión del PIC al de recepción del PC una R de 1K. Eso es todo. La programación la realicé en PBP, pero eso es lo de menos, si tu trabajas en ensablador te costará más tiempo pero debe funcionar igual.

Personalmente me gusta utilizar un verdadero MAX232 (no tiene porque ser MAXIM, puede ser ST; LT, TEXAS, etc...) porque te permite utilizar la UART serie del micro, liberando estas funciones de transmisión del soft y pasandolas al hard que para eso está hecho. Si buscas abaratar tu circuito, claro,  te recomiendo OSC interno y comunicación serie invertida, es menos robusto pero más barato.

Saludos
Ricky

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2569
RE: Necesito ayuda sobre RS232 sin MAX
« Respuesta #9 en: 18 de Octubre de 2003, 05:25:00 »
RGL ¿No hay inversores en este montaje de MELABS? Si no hay, como haces por software para comunicación serie invertida, que es lo que en un principio preguntaba gbene.

Respecto al "programador de Pacala" seguramente no os iba por el famoso diodo 1N4118 que va al MCLR del PIC (Ver placa base en su WEB)

Un saludo

Desconectado gbene

  • Colaborador
  • PIC10
  • *****
  • Mensajes: 35
RE: Necesito ayuda sobre RS232 sin MAX
« Respuesta #10 en: 18 de Octubre de 2003, 09:49:00 »
RGL:
La solucion que aplicaste, solo con dos resistencias, funciona cuando utilizas un lenguaje de alto nivel, PBP,C,etc que traen funciones que te permiten configurar la TX y RX invertidas, ya que no utilizan la uart del micro, sino que escriben todo el codigo de manejo del RS232, con lo cual en realidad podriamos decir que es un simil del RS232, ya que la norma establese claramente los niveles que debe tener cada señal (start,stop,cantidad de datos,etc) y los interpretados por dicha rutina no son los mismos, sino que justamente invertidos.
Con lo que deduzco es que lo que pretendia desde un principio, que era Tx y Rx con el puerto usart, utilizando toda la funcion interna del micro que esto implica, y sin la colocacion del max, dbian invertir las señales de alguna manera. Crei que se podia llegar a hacer por soft, (peo no confundir, sin escribir todo el "protocolo rs232" sino solo la inversion de los niveles de senal). Pero esto me parese no ser posible, ya que no veo la forma de modificar lo que la usar espera recibir (que no se si esta implementado internamente por hard o soft).

Bueno espero que se entienda algo de todo el matete que intente explicar.

Saludos

Desconectado Elena2000

  • PIC24F
  • *****
  • Mensajes: 722
RE: Necesito ayuda sobre RS232 sin MAX
« Respuesta #11 en: 18 de Octubre de 2003, 10:10:00 »
Hola gbene!!

A estas alturas ya sabes que los max invierten la señal.. (mi sorry for decirte lo contrario hace unos días... las prisas son muy malas).  Bueno, voy a ver si lo arreglo y puedo echarte una mano, además de la que te están echando los superexpertos amigotes.

Aunque digas que no sabes mucho de electrónica (mentirosoooo... ) seguro que sabes que normalmente, el protocolo de comunicación RS232 sobre el puerto COM funciona de forma que para un voltaje negativo envía un "1", y para un voltaje positivo envía un "0".

Podemos entonces mandar el max a freir espárragos, siempre y cuando adaptes voltajes entre TTL y el puerto serie. Podemos hacer que en condiciones normales de espera, la condición "alto" será para  0 voltios, y el bit inicial, cuando entre la alimentación, será "0", (+5V).
Sería bueno poner una resistencia en serie para limitar la corriente, y diodos para limitar el voltaje... Bueno, eso seguro que lo controlas, y además tienes a mano a Marmatar que maneja muy bien los subidones de corriente y voltaje y de lo que sea...

OJO: necesitas en total 8 ciclos de instrucciones para completar una transferecia!!
 tienes que jugar con los "nop" y delays..

Vale, al grano, a ver que te parece estas rutinas
Primero debes declarar registros... por ejemplo:

txreg              ;registra el byte que va a transmitir
rxreg              ;registra el byte que recibe
char               ;registra el carácter que se va a transmitir
bitcount           ;contador de bits transmitidos

;RUTINA PARA TRANSMITIR
tx:
         movwf txreg          
         comf txreg, f        
         movlw D"8"            
         movwf bitcount
         bsf PORTB, 7        
         nop                  
         nop                  
         nop
         nop
         nop
txloop:
         rrf txreg, f        
         rrf PORTB, f          
         nop                  
         nop                  
         decfsz bitcount, f    
         goto txloop          
         bcf PORTB, 7        
         nop                  
         nop                  
         nop
         nop
         return

;-----------------------------------------------------------------------;
;RUTINA PARA RECIBIR
rx:      movlw 8    
         movwf bitcount
waitstart:
         btfss PORTA, 0
         goto waitstart
         nop          
         nop          
         nop          
         nop          
         nop
receive:
         nop
         nop
         rrf PORTA, f
         rrf rxreg, f
         decfsz bitcount, f  
         goto receive        
         comf rxreg, W        
         nop                  
         nop
         nop
         nop
         return


; Y AHORA UN BUCLE PRINCIPAL, por ejemplo
main:                      
         call init ; aqui configuras los puertos... depende del
               PIC que vayas a usar
   ; aquí pon además 1 segundo de delay, par estabilizar...
loop:
         call rx
         movwf char
         incf char, f
         movf char, W
         call tx
         incf char, f
         movf char, W
         call tx
         incf char, f
         movf char, W
         call tx
         goto loop

----------
Ya.... Si algo no entiendes del código dímelo, vale? A ver si te funciona y dejas de churruscar pics...

Besotes
Elena


Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7918
RE: Necesito ayuda sobre RS232 sin MAX
« Respuesta #12 en: 18 de Octubre de 2003, 10:12:00 »
Cuando tenes razon, tenes razon!!...je..je..
Estuve leyendo el datasheet y no encuentro forma de invertir señales desde la Usart, y no veo como hacerlo usando la Usart desde el PBP tampoco.

Dejo el tema planteado para los PBP maniacos tambien, a ver si le encontramos la vuelta....
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado jorgeansuini

  • PIC18
  • ****
  • Mensajes: 340
RE: Necesito ayuda sobre RS232 sin MAX
« Respuesta #13 en: 18 de Octubre de 2003, 10:39:00 »
Buenas gente:

Me parece que si quieren eliminar el max del circuito, para ahorrar unos pocos pesos,otra opcion para invertir la señal es utilizar un par de transistores,y mas interesante seria con un par de optoacopladores del tipo 4n35 que aparte brindar una muy buena proteccion.-

Yo arme un circuito con los 4n35 porque tenia necesidad de aislar la comunicacion entre el micro y una remota de telecontrol y funciona sin inconveniente,pero en el puerto de la remota tengo tensiones auxiliares positivas y negativas. No he probado el mismo circuito con un puerto de pc,pero si les interesa podemos hacer el intento.-
Tambien he conectado el micro de manera directa al puerto rotegido por una resistencia como aconseja melabs,y funciona sin inconvenientes,aunque me sigue gustando la opcion del max.-
Por otro lado,los puertos serie de las pc,dentro de todo,soportan trato bastante rudo,el conversor 232 esta bien protegido,mi caso particular de quemada de puerto,se debió a una conexion realmente muy mala.-
Normalmente nosotros lo conectamos y desconectamos muchas veces ,siempre con los equipos andando y soportan ese mal trato.-
seguimos en contacto
Jorge

Desconectado gbene

  • Colaborador
  • PIC10
  • *****
  • Mensajes: 35
RE: Necesito ayuda sobre RS232 sin MAX
« Respuesta #14 en: 18 de Octubre de 2003, 15:35:00 »
Hola Elena:
Te felicito has echo toda la tarea. Te agradezco muchisimo el trabajo que te tomaste. Estuve analizando el codigo y creo haberlo entendido, ya que me parecio muy claro.
Espero que no tomes a mal los comentarios siguientes, es con la sola intención de poder aportar algo mas, no de criticar el buen trabajo. ademas sabiendo que es solo un codigo como para empezar a formar la idea y no una aplicacion final.
Propongo en vez de rotar todo el portB para ir transmitiendo cada bit, con lo cual estariamos ocupando todo el puerto para utilizar un solo bit, en su lugar seria cambiar solo el bit correspondiente a TX (en este caso el 7) segun el valor del acarreo. Otro cambio este si importante es el retardo entre cada rotacion, que si no lo respetamos, no nos vamos a poder comunicar nunca. Segun lo calculado deberia ser de 104us ( para una transmisión  a 9600bps.
Esto es si no entendi mal tu idea, porque el codigo no lo corri, solamente lo estuve analizando en papel.
Por otro lado en realidad estamos cayendo otra vez en desarrollar una emulacion del rs232, con lo cual no era la idea inicial.
Lo que queria solo era ver si se podia invertir los niveles por soft, antes que los interprete la usart, Imposible verdad?

Muchas gracias


 

anything