Manejar 2 rs232 con un pic16f876

hola!

tengo un proyecto que necesito poder leer un GPS (Solo leer) y controlar un Modem GSM (leer/enviar).

Solo se hacerlo con un puerto,¿comohago con CCS para tener 2 buffers?.

gracias!

--
---------------------------------------------------
http://www.gestionagricola.com
http://www.carmelosoft.com
Reply to
Carmelo J. Morales Muñoz
Loading thread data ...

Mírate el manual del CCS, recuerdo q está explicado en los ejemplos del final, puedes tener todos los puertos serie q quieras, lo q pasa es q sólo uno de ellos irá por hardware, el resto se implementan por software, pero eso para ti será transparente, sólo te puede limitar la velocidad.

-- Saludos.

---------------------------------------- Quitar las XX para responder por mail.

----------------------------------------

Carmelo J. Morales Muñoz escribió:

Reply to
Robert M. L.

El compilador incluye librerías de funciones, para implementar UART's virtuales, tantas como quieras.

Reply to
Cangrejo Moruno

yo no he usado css pero creo recordar que para usar un puerto tienes que poner una directiva del preprocesador, no ? En esa instruccion pones velocidad, pines, etc.... bueno pues solo tienes que poner la instruccion varias veces con distintos pines y/o velocidades, y en lo que sigue a dicha instrcucion se usará tal como lo has definido en ella.

Reply to
Nolo Pongo

Exacto, si en esa directiva defines los pines donde el micro tiene la UART física usará su UART por hardware, si no pues implementará unas rutinas por software, todo ello transparente para ti. La directiva es USE RS232 con un carro de opciones detrás.

-- Saludos.

---------------------------------------- Quitar las XX para responder por mail.

----------------------------------------

Nolo Pongo escribió:

Reply to
Robert M. L.

Gracias!... voy a ponermea ello!

--

---------------------------------------------------

formatting link
formatting link

"Carmelo J. Morales Muñoz" escribió en el mensaje news:Gf1Pf.734978$ snipped-for-privacy@telenews.teleline.es...

Reply to
Carmelo J. Morales Muñoz

Hola nuevamente,,, me queda una duda.... ya he configurado el acceso a dos puertos, antes solo tenía uno, y tenía definida esta interrupción para ir recibiendo datos:

#int_rda void serial_isr() { // Interrupción recepción serie USART

rcvchar=0x00; // Inicializo caracter recibido if(kbhit()){ // Si hay algo pendiente de recibir ... rcvchar=getc(); // lo descargo y ... addcbuff(rcvchar); // lo añado al buffer

} }

Mi duda es.... ¿como genero otra interrupción para el otro puerto?. Porque creo que esta int se lanza cuando hay información de cualquiera de los puertos. ¿pueden ayudarme con este asunto?

gracias!

--
---------------------------------------------------
http://www.gestionagricola.com
http://www.carmelosoft.com

"Carmelo J. Morales Muñoz"  escribió en el mensaje 
news:Gf1Pf.734978$kp.5210514@telenews.teleline.es...
> hola!
>
> tengo un proyecto que necesito poder leer un GPS (Solo leer) y controlar 
> un Modem GSM (leer/enviar).
>
> Solo se hacerlo con un puerto,¿comohago con CCS para tener 2 buffers?.
>
> gracias!
>
> -- 
> ---------------------------------------------------
> http://www.gestionagricola.com
> http://www.carmelosoft.com
>
>
Reply to
Carmelo J. Morales Muñoz

Yo nunca he utilizado el CCS, así que...

Esta función tiene que estar documentada en el manual..

Bien, como yo lo veo, te tendrás que meter en la definición de esa librería y buscar dos cosas:

1º-Cuales son lo Flag de interrupción de los serials, y cuando se genere una interupción, mirr cual de los dos te la ha generado. Si alguno es por hardware, ya sabes que un flag es el RCIF, pero tendrás que saber como llama el CCS a estos flags de puertos virtuales...

if (RCIF) //Priemr serial por hardware { ..... }

if(CCS_RCIF)//segundo por soft { .... }

2º-Cual es la variable temporal o el buffer donde se almacenan los datos que llegan por el serial.... el serial por hardware es RCREG y solo tiene una capacidad de dos bytes, pero el que serial virtual tendrá otro nombre, se lo pueden currar y darle un tamaño de más de 2 bytes... (16 por lo menos jejejej) y completar el código:

if (RCIF) //Priemr serial por hardware { TempSerial1=RCREG; }

if(CCS_RCIF)//segundo por soft { TempSerial2=CCS_RCREG; }

Recuerda, por la estabilidad de tu programa, minimiza el código dentro de las interrupciones!!!

Saludos.

P.D: Hay una cosa que me desconcierta un poco, y es que, según veo, el CCS tiene un función de interrupción para cada posible causa (en este caso el serial), y el código que te he escrito arriba es más bien para el caso de que tengas una función que atienda todas la interrupciones... como si estuviese programando de ensamblador.

Reply to
Fleming

yo es que dudo que los puertos emulados por sotware sean iguales al propio del pic. El del pic puede generar interrupciones y se puede usar de un modo desatendido, tienes bastante tiempo entre byte y byte para hacer otras cosas. Pero un puerto por software requiere que el micro esté leyendo continuamente el bit de netrada y calculando los tiempos, etc... es decir que ni va a ser full duplex, ni generará interrupciones, incluso si tienes otras interrupciones te estropearan el funcionameinto de este puerto.

Recuerdo que ya le dije algo así a kt88, y él decía que no, que el compilador de c se ocupa de todo, él había usado bastante este complilador y yo no lo he usado nunca, así que tu mismo :-)

Ya nos contarás lo que vayas everiguando sobre este tema, no está nunca demás saber estas cosas.

Reply to
Nolo Pongo

Yo me imagino que la gestión de los puertos serie virtuales se hará por métodos de tipo polling, mediante una interrupción periódica, y cuando haga falta generará una interrupción por soft. Esto limita mucho las posibilidades de esos puertos serie, y consume potencia de cálculo, pero es la única forma que se me ocurre de implementar esos puertos de forma más o menos transparente al usuario. Así el compilador consigue que sea muy fácil implementar esos puertos, a costa de que éstos sean poco eficaces.

Personalmente ese compilador (junto a otro que hay por ahí de Basic) siempre me ha dado la impresión de estar enfocado a facilitar las cosas al programador, aunque el código generado sea poco eficaz, y en algunos casos poco estable.

--

Saludos de Jose Manuel Garcia snipped-for-privacy@terra.es http://213.97.130.124

"Nolo Pongo" escribió en el mensaje news: snipped-for-privacy@4ax.com...

Porque

Reply to
Pepitof

Y yo añadiría "código muy grande" como consecuecnia de que sea poco eficaz. Es lo que me gusta del HiTech, el código que genera está muy optimizado, yo que soy un novato, he aprendido muchos trucos inspeccionando el código que genera el compilador (Disassembling list), porque en su día, desconfiaba mucho del C y me paraba mucho a mirar como traducía los If, operaciones booleanas, etc... deje de hacerlo cuando empecé a hacer operaciones en punto flotante...j#der que complicada es la IEEE745!!! ;)

Reply to
Fleming

Gracias!....

Pues investigaré un poco a ver si encuentrola forma dehacerlo, porque tengo que leer constantemente de un GPS (solo leer) y controlar un modem GSM (leer/escribir) que es lo que ya controlo,mefaltair leyendo las lineas nmea que envia el gps.

a ver sidoy con una solución que no pierda información.

chao!

Reply to
Carmelo J. Morales Muñoz

Si el gps permite control de flujo por hardware, no tienes problema. Puedes para la recepción de datos activando una señal, y cuando tu programa pueda dedicarse a ello, desactivar esa señal y leer los datos que entran de un tirón.

--

Saludos de Jose Manuel Garcia snipped-for-privacy@terra.es http://213.97.130.124

"Carmelo J. Morales Muñoz" escribió en el mensaje news:su2Qf.771335$ snipped-for-privacy@telenews.teleline.es...

tengo

nmea

Reply to
Pepitof

Un microcontrolador con 2 UART, que los hay. Y aunque los hagas por simulación, no perderás nada, la velocidad de NMEA para GPS, y comandos AT para el GSM, no requieren grandes velocidades, funcionará perfectamente.

Reply to
Cangrejo Moruno

Las dos soluciones anteriores no deberían darte muchos problemas, control de flujo y velocidad a 9600 (o si puedes, por debajo), pero si quieres complicarte un poquillo... (no mucho ehhh!!)

formatting link

Reply to
Fleming

gracias!...acabo de encontrar info sobre como hacerlo con CCS (manejo 2 com), peromefalta probar,a ver si hago algo y lo posteo por aqui si hay éxito, ya que solo me falta controlar el GPS, el GSM ya lo control obien.

gracias!

Reply to
Carmelo J. Morales Muñoz

¿ Te he "spam-eado" (no viene de mear, o si ?) ya con la direccion de mi alarma ? Es esta:
formatting link

Maneja una entrada de gps, una salida irda, una e/s de telefono gsm, una e/s conexion directa a un pc. Respecto al telefono hace/recibe llamadas de voz, recibe conexiones de datos, envia/recibe sms. Todo con un 16f84. La verdad es que tiene truco (varios trucos) :-)

Reply to
Nolo Pongo

hola!

si lo había visto hace algún tiempo, me parece casi inposible que hayasmetido todo eso en un f84, pero claro, usas assembler, el lenguaje de los Dioses y Dios lo puede todo ;).

Espero me puedas echar una mano con mi proyecto si me atasco.

Un saludo!

Reply to
Carmelo J. Morales Muñoz

Si ya estas manejando el movil, no creo que te atasques ya, el gps es mas sencillo. Solo tienes que leer, nada de escribir. De todas formas si en algo te puedo echar una mano, ya dirás algo sobre el tipo de aplicacion que estas haciendo.

Reply to
Nolo Pongo

Muchas gracias!

Es lo mismo que tu,tengo un modem GSM de Xacom, un GSM Base y lo estoy cacharreando con un 16f876, por ahora todo va bíen, almenos conectarme, enviar comando AT, recibir respuestas, enviar PIN, llamar.

Me falta probar algunas cosillas mas y luego me paso al gsm.

quiero hacer algo como lo tuyo, que cuando le haga un ring al modem, mire el nº de quien llama, si soy yo(autorizado) que me envie la última posición tomada del gps. Lo quiero montar en mi vehículo.!

bye!

Reply to
Carmelo J. Morales Muñoz

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.