ImagenImagenImagenImagen
Hazte Socio (El Foro siempre Gratis)
Paga con Tarjetas+ Info www.arde.cc/socios

Comunicación serie entre PIC y PC en ASM

Foro para postear los temas de ensamblador

Moderador: Junta Directiva

Avatar de Usuario
Mif
Usuario Desarrollador
Usuario Desarrollador
Mensajes: 1094
Registrado: Jue Mar 23, 2006 6:24 pm
Nombre: Ángel
Ubicación: Madrid
Contactar:

Comunicación serie entre PIC y PC en ASM

Mensaje por Mif » Vie Jul 14, 2006 3:40 pm

Este hilo lo abro, porque no hay ninguno asi en el foro, y además de necesitar ayuda, pretendo resumir aqui lo que implica este tipo de conexión.

Materiales que nos hacen falta:
-Un pic, preferiblemente con USART, yo empleo un 16F876
-Un ordenador con puerto serie, o un adaptador USB Serie
-Max232 o 233 conectado del siguiente modo:
Imagen
-Los componentes que necesitamos para hacer que todo esto funcione, especificados tb en el esquema.

Además de esto, para realizar la comunicación entre PC y PIC, debe haber un programa en el PC para comunicarse por RS232, y otro en el PIC para que haga lo mismo, cada uno de ellos en sus lenguajes.

En el PC lo más rápido para probar es usar el hyper terminal, que viene en todos los windows del mundo. Más adelante adaptaré un programa de Visión artificial para que pueda comunicarse con el PIC via RS232 y mandar ordenes a un par de servos.

En el PIC he elegido ensamblador, por costumbre. Peeero, aqui está mi problema, ¿cómo leches se configura el 16F876 para que haga esta comunicación? ¿Tenemos algun ejemplo básico de comunicación con este micro? Hay mucha información en internet, pero siempre de programas demasiado complicados para lo que tiene que ser, o muy mal explicados, o programas en los que se saltan la configuración...

en fin, que para seguir con mi proyecto necesito una ayuda de alguien que sepa cómo hacerlo, asi, además de desatascarme, conseguimos hacer un hilo aclarativo de este tipo de comunicación.

Muchas gracias por vuestra ayuda.
Ángel.


www.TupperBot.es

Mi sitio en YouTube

Avatar de Usuario
Apoka
Usuario Avanzado
Usuario Avanzado
Mensajes: 313
Registrado: Vie May 19, 2006 5:31 pm

Re: Comunicación serie entre PIC y PC en ASM

Mensaje por Apoka » Vie Jul 14, 2006 5:01 pm

Hola Mif todavia no estoy muy puesto en el tema pero e encontrado esto tal vez te sirva para establecer la comunicación o tal vez para guiarte
http://www.electronic-engineering.ch/mi ... jects.html
http://www.electronic-engineering.ch/mi ... _test.html

Salu2

EDITO:

Convertidores rs232 USB
http://www.areasx.com/index.php?D=1&id=9
http://pinouts.ru/data/usb_serial_adapter_pinout.shtml

Avatar de Usuario
Mosvack
Forero Habitual
Forero Habitual
Mensajes: 126
Registrado: Sab Mar 11, 2006 2:44 pm
Ubicación: Algeciras

Re: Comunicación serie entre PIC y PC en ASM

Mensaje por Mosvack » Vie Jul 14, 2006 5:59 pm

Hola Mif

Supongo que deseas aprovechar la USART que lleva implementada el PIC... en ese caso:

1º) Debes configurar la patilla RC6 como salida y la RC7 como entrada, pues son las que tiene asignadas en el PIC que dices.

2º) Luego tendrás que poner el bit SYNC a cero (del registro TXSTA) y el bit SPEN a uno (del registro RCSTA). Con esto ya está preparado el PIC para la comunicación asíncrona.

3º) Si los datos son de 9 bits en lugar de ser de 8, pon el bit TX9 = 1 (en el registro TXSTA). Este bit se suele usar en algunas transmisiones generalmente para transportar la información de paridad... aunque le puedes dar el uso que quieras siempre y cuando PC y PIC se pongan de acuerdo en su finalidad. Este noveno bit está accesible en el registro TXSTA bajo el nombre de TX9D.

4º) Cargando el generador de Baudios:... El protocolo RS-232C admite diversas velocidades de transmisión normalizadas en baudios (bits por segundo), como por ejemplo: 600, 1200, 2400, 4800, 9600, 19200, etc... Debes indicar la velocidad a usar (y lo mismo deberás hacer en el otro extremo; el de PC...). Para ello, el PIC dispone de un registro en el que se ha de introducir un número cuyo valor determina la velocidad de las comunicaciones. Este registro es el SPBRG. Además de este registro, la velocidad de transmisión depende de otros dos factores, que son: la frecuencia del cristal que uses en el PIC, y el valor del bit BRGH en el registro TXSTA. Si llamamos "X" al valor que cargas en el registro SPBRG, la velocidad en baudios viene dada por la fórmula:

Velocidad Baudios = (Fosc)/(K*(X+1))

Siendo K:

64 cuando el bit BRGH = 0
16 cuando el bit BRGH = 1

Por ejemplo: Si queremos una velocidad de 9600 baudios y tenemos un cristal de 10 Mhz, si ponemos (por poner algo) que BRGH = 0... tenemos:

9600 = (10*10^6)/(64*(x+1)) -> 64*(x+1) = (10*10^6)/9600 ->
x+1 = (10*10^6)/(9600 * 64) -> x = [(10*10^6)/(9600 * 64)] - 1

x= 15.276041

Como "X" debe ser un número entero, elegimos 15... pero, al no ser el número exacto, cometeremos un "error" en los 9600 baudios que habíamos planeado tener... en este caso sale:

Velocidad = (10*10^6)/(64*(15+1)) = 9765.625 Baudios

Dependiendo del sistema, este pequeño error será tolerable o no... puedes jugar con los parámetros de la fórmula, cambiando el cristal y el valor del bit, a fin de obtener un número lo más cercano posible a un entero... no obstante, los errores que se obtienen en la mayoría de los casos son despreciables...

5º) Activa el bit TXEN, del registro TXSTA, para permitir las transmisiones.

6º) Coloca cuando quieras el byte a transferir en el registro TXREG, y listo... En el momento que se vacíe el registro, el bit TXIF del registro PIR1 se colocará a 1, indicando que el byte fue transferido. (puedes activar la interrupción (TXIE = 1) para que te avise, en lugar de estar mirando este banderín constantemente) (ah, si lo haces que no se te olvide activar también el permiso global).

*-*-*-*-*-*-

Además, para permitir la recepción... debes colocar:

RX9 = 1 (registro RCSTA) para recibir 9 bits.

ADDEN=1 (RCSTA) si quieres que se detecten direcciones (éste es otro uso del 9º bit... cuando está activado ADDEN y el noveno bit vale 1, se entiende que los 8 bits restantes forman una dirección)

CREN = 1 (RCSTA) para permitir la recepción.

RCIF = 1 implica que se ha recibido un dato (hace las veces de TXIF pero en las recepciones).

El dato se recibe en RCREG...


*-*-*-*-*

Espero que te sirva... SALUDOS

Avatar de Usuario
Mif
Usuario Desarrollador
Usuario Desarrollador
Mensajes: 1094
Registrado: Jue Mar 23, 2006 6:24 pm
Nombre: Ángel
Ubicación: Madrid
Contactar:

Re: Comunicación serie entre PIC y PC en ASM

Mensaje por Mif » Sab Jul 15, 2006 2:18 pm

Maaaaaaaaadre mia, que de cosas hay que hacer, no? y yo que pense que era... "tu... ch ch pic, ale, Ejcucha al PC que te quiere comentar algo" bueno, muchííísimas gracias por vuestra ayuda, os lo habeis currado un monton, asi si que se curra bien;) seguro que con esto consigo que haga algo.
Me pondre con ello esta misma noche.
www.TupperBot.es

Mi sitio en YouTube

Avatar de Usuario
Mif
Usuario Desarrollador
Usuario Desarrollador
Mensajes: 1094
Registrado: Jue Mar 23, 2006 6:24 pm
Nombre: Ángel
Ubicación: Madrid
Contactar:

Re: Comunicación serie entre PIC y PC en ASM

Mensaje por Mif » Dom Jul 16, 2006 4:36 pm

Mosvack, ya tengo algo rulando, pero da problemas, porque al enviar caracteres por el HyperTerminal, leo en el ordenador caracteres extraños, es decir, si mando un 1 recibo algo asi:

~»¿ÿÿïóüøbã¸ÿ¿¾»÷îó¾ÿÿ¾¼ÿ¾ÿæ÷»¿ÿü¿¿¼1þ¿¾2þ¾2÷¿Î6ÿ»31»1÷æ84
ÿÿÿÿïµ5ÿÿÿÿÿþÿþÿ¿µ5ÿÿÿ

Como ves hay de todo menos unos casi... y evidentemente, al reportar esto por el puerto B, me salen tb cosas extrañas... qué crees que puede ser?

En cualquier caso es muy emocionante ver que responde cuando pulsas alguna tecla... queeeeeeeeeeeeee guapo!
Muchas gracias a los dos, Apoka y Mosvack
www.TupperBot.es

Mi sitio en YouTube

Avatar de Usuario
acicuecalo
Usuario Experto
Usuario Experto
Mensajes: 652
Registrado: Mar Sep 27, 2005 12:53 pm
Nombre: Francisco Carabaza
Ubicación: Palencia
Contactar:

Re: Comunicación serie entre PIC y PC en ASM

Mensaje por acicuecalo » Dom Jul 16, 2006 9:20 pm

Con lo fácil que es usar un compilador que tenga alguna instrucción para envío y recepción de datos por puerto serie...
En esta página tenéis un compilador de prueba del pic basic pro de melabs, que tiene instrucciones de ese tipo, tanto para comunicaciones con emulación por software para pics sin usart como instrucciones para comunicaciones usando el hardware usart:
http://www.melabs.com/pbpdemo.htm

Avatar de Usuario
Mif
Usuario Desarrollador
Usuario Desarrollador
Mensajes: 1094
Registrado: Jue Mar 23, 2006 6:24 pm
Nombre: Ángel
Ubicación: Madrid
Contactar:

Re: Comunicación serie entre PIC y PC en ASM

Mensaje por Mif » Lun Jul 17, 2006 1:47 am

si, la verdad es que hay veces que usar ensamblador es un poco desesperante, pero cuando consigues que las cosas funciones te dices... ¡queeeeeeee guapooooo! y sientes que lo has hecho tu, y lo has entendido a fondo... bueno, al menos es lo que me pasa a mi, que no soy un experto en esto, casi estoy empezando...
Esta noche la dedicaré a arreglar esos problemills de comunicación, que sospecho que se deben al error que comentaba Mosvack:
Mosvack escribió:Hola Mif
Como "X" debe ser un número entero, elegimos 15... pero, al no ser el número exacto, cometeremos un "error" en los 9600 baudios que habíamos planeado tener... en este caso sale:

Velocidad = (10*10^6)/(64*(15+1)) = 9765.625 Baudios

Dependiendo del sistema, este pequeño error será tolerable o no... puedes jugar con los parámetros de la fórmula, cambiando el cristal y el valor del bit, a fin de obtener un número lo más cercano posible a un entero... no obstante, los errores que se obtienen en la mayoría de los casos son despreciables...
Os informaré sopbre el tema.
Acicuecalo, algun dia tendre que dar el paso, porque es mucho más cómodo programar en C o Basic, pero entiendo que es mejor hacerlo cuando lo tienes dominado, y sabes lo que esta haciendo por debajo... ¿no crees?
¿En qué sueles programar tu? he hecho cosillas en CCS y MikroBasic, pero no se por cual decidirme...
www.TupperBot.es

Mi sitio en YouTube

Avatar de Usuario
acicuecalo
Usuario Experto
Usuario Experto
Mensajes: 652
Registrado: Mar Sep 27, 2005 12:53 pm
Nombre: Francisco Carabaza
Ubicación: Palencia
Contactar:

Re: Comunicación serie entre PIC y PC en ASM

Mensaje por acicuecalo » Lun Jul 17, 2006 11:47 am

Yo uso Pic Basic Pro, con el Microcode Studio.

Avatar de Usuario
Mif
Usuario Desarrollador
Usuario Desarrollador
Mensajes: 1094
Registrado: Jue Mar 23, 2006 6:24 pm
Nombre: Ángel
Ubicación: Madrid
Contactar:

Re: Comunicación serie entre PIC y PC en ASM

Mensaje por Mif » Lun Jul 17, 2006 3:03 pm

Ok, cuando me decida a dar el paso me lo pensaré seriamente...
Mientras tanto...
Alguien puede decirme por qué al mandar datos por rs232 en el micro muchas veces leo datos erroneos? cómo puedo corregir esto? puede ser debido al error que comenté antes?
www.TupperBot.es

Mi sitio en YouTube

Avatar de Usuario
Juliovmd
Usuario Avanzado
Usuario Avanzado
Mensajes: 201
Registrado: Jue Sep 08, 2005 8:05 pm
Nombre: Julio
Ubicación: Valencia
Contactar:

Re: Comunicación serie entre PIC y PC en ASM

Mensaje por Juliovmd » Lun Jul 17, 2006 3:22 pm

Hola mif, has de esperar a que se vacien los buffers, si la comunicacion es bidireccional te sugiero que hagas un control de tramado para controlar errores.

Yo empleo actualmente Mikrobasic, sencillo, rapido y... lo mejor...barato!

Saludos

Responder

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 2 invitados