Autor Tema: enviar cadenas de un gps a un micro y despues a un lcd  (Leído 6432 veces)

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

Desconectado ivan_1980

  • PIC10
  • *
  • Mensajes: 5
enviar cadenas de un gps a un micro y despues a un lcd
« en: 17 de Junio de 2008, 21:43:12 »
Hola a todos, he leido mucho su foro y ahora yo vengo con una duda. Primeramente quiero decirles que soy novato en todo esto.

Esta es mi problematica:

quiero recibir la cadena $GPGGA de un GPS y guardarla en un microcontrolador para despues mandarla a un lcd.

ya tengo toda la circuiteria y la describo en el siguiente parrafo:

 El gps tiene una salida TX, esa salida la conecto al RX del microcontrolador y despues envio por 4 bits al lcd.

La señal que envia el GPS es TTL y el micro si la soporta ya que es un 18f452.   la patilla rx del 18f452 se encuentra en el puerto C en la patilla 7  y los bits de salida hacia el lcd estan en el puerto b del micro ( de RB7 a RB4) y los bits de control para el lcd estan tambien en el puerto B (rb2 y rb3 para el Rs y E del lcd respectivamente).

El programa para el micro lo estoy haciendo en proton ide y es el siguiente:


device = 18f452

 dim cad1 as string *66
 dim X as byte

 serin portc.7,16468,[wait("$GPGGA"),cad1[0]]

 loop: 
 cls
 for X=1 to 65
serin portc.7,16468,[cad1[X]]
next
 print cad1
 delayms 4000
 goto loop
 
segun yo estoy bien , pero a la hora de probarlo me manda caracteres al lcd  que no son los de la cadena y ni siquiera son numeros o letras con un orden , si no que son puros caracteres raros, la verdad ya no se me ocurre nada. cabe mencionar que el GPS trabaja a 9600 baudios con 8 bits de datos , sin paridad y un bit de parada.

Espero que alguien me pueda ayudar.

De antemano muchas gracias.  :o
« Última modificación: 17 de Junio de 2008, 21:59:51 por ivan_1980 »

Desconectado navaismo

  • Jubilado Todopic
  • PIC24H
  • ****
  • Mensajes: 1973
Re: enviar cadenas de un gps a un micro y despues a un lcd
« Respuesta #1 en: 17 de Junio de 2008, 21:57:22 »
Es preferible que en vez de narrar nos pongas el circuito. Y en proton te conviene usar en vez de serin, rsin.

Este te puede almacenar o recibir los caracteres de mejor forma, mira en este ejemplo de matriz de leds, el rsin lo uso para recibir la cadena desde la PC.
"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 ivan_1980

  • PIC10
  • *
  • Mensajes: 5
Re: enviar cadenas de un gps a un micro y despues a un lcd
« Respuesta #2 en: 17 de Junio de 2008, 22:08:58 »
Gracias navaismo por tu pronta respuesta , ahorita a la mano no tengo la imagen del  circuito, pero la hago y la  pongo, una pregunta, el micro lo activo con un cuarzo a 4mhz fisicamente y no se si en el programa le tengo que poner xtal 4 no se si sea necesario , si tu  ves que le hace falta algo para completar el programita te agredeceria si lo pones en el foro para verlo, en este momento revisare la instruccion rsin para usarla...

te recuerdo que apenas estoy empezando a utilizar micros  y como que algunas cosas se me dificultan,. y la verdad no se si lleve esa estructura el programa o si me hace falta declarar algo, no lo se ..

espero tu respuesta y gracias nuevamente

Desconectado navaismo

  • Jubilado Todopic
  • PIC24H
  • ****
  • Mensajes: 1973
Re: enviar cadenas de un gps a un micro y despues a un lcd
« Respuesta #3 en: 17 de Junio de 2008, 22:49:51 »
Si es necesario que declares el XTAL, sobre la estructura en general esta bien. Me surgen algunas dudas, ya habias hecho algo con LCD's? Es decir, ya estas seguro de como enviar mensajes a un LCD y como poner las variables o el valor de las variables en los LCD's.

El hecho de que seas novato no tiene nada de malo, por ejemplo la idea esta muy bien plasmada falta que las instrucciones se lleven a cabo, te recomiendo leas la ayuda de proton para que te saques de dudas con respecto a los comandos. No olvides mirar el ejemplo pues es muy similar yo recibo la cadena de un PC y la muestro en una matriz, y tu la recibes de un Celular y la pintas en un LCD.

Saludos
"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 firepic

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1130
    • JC Servicios
Re: enviar cadenas de un gps a un micro y despues a un lcd
« Respuesta #4 en: 17 de Junio de 2008, 23:04:01 »
Saludos Ivan, bienvenido al foro!
Una pregunta... qué módulo GPS estás usando?
Y otra cosa... estás seguro que esa es la velocidad de transmisión? Ese 16468 lo veo un poco raro... tú qué opinas navaismo?
Has intentado conectar el gps a la PC a través de un MAX232 y ver si envía la cadena correctamente?
Ok nos leemos!  :mrgreen:
"Por la presunción solo se ocasiona una lucha, pero con los que consultan juntos hay sabiduría" (Proverbios 13:10).
Visita Mi Sitio Web

Desconectado ivan_1980

  • PIC10
  • *
  • Mensajes: 5
Re: enviar cadenas de un gps a un micro y despues a un lcd
« Respuesta #5 en: 18 de Junio de 2008, 11:20:40 »
hola NAVAISMO Y FIREPIC , la verdad no se a que te refieres con modulo GPS, pero estoy usando un GPS reb12r7 de royaltek, ya he conectado el gps a un pc con un max232 y con una hyperterminal, y sí me envia las cadenas correctamnete. Yo no habia trabajado antes con lcd, lo unico que hice fue mandar mensajes para verificar que el lcd estuviera bien conectado y si esta bien.

firepic , lo que me comentas de la velocidad (16468), me fije en la ayuda de proton en los comandos serin y serout, y ahi viene una tabla con los valores para varios tipos de velocidades , y para 9600 , dice que ponga 16468 o 84 , lo he probado con los  dos y  obtengo el mismo resultado... en un rato mas agragare esa tabla para que la vean. gracias
« Última modificación: 18 de Junio de 2008, 11:23:56 por ivan_1980 »

Desconectado firepic

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1130
    • JC Servicios
Re: enviar cadenas de un gps a un micro y despues a un lcd
« Respuesta #6 en: 18 de Junio de 2008, 11:32:42 »
Ya entiendo lo del "16468"... estás usando el número de "modo de transmisión" que tiene Pic Basic...
Pero tampoco encuentro "16468", lo que sí veo es un "16486" que corresponde a una tasa de baudios de 9600, invertida, sin paridad... que no entiendo por qué usas la inversión si dices que el GPS te da valores TTL...
Ahora bien, cuando monitoreaste con la pc usaste el hyperterminal de windows?
Qué valor de baud rate has colocado en la hyperterminal?
Yo creo que deberías probar con algo así como:
Código: [Seleccionar]
serin portc.7,T9600,[wait("$GPGGA"),cad1[0]]
Si estoy en lo correcto al decir que no hace falta inversión...
Ese es el problema de los caracteres raros, es cuando no configuras la rata de baudios apropiada para el dispositivo emisor, entonces el receptor recibe pero no interpreta correctamente los datos...
Prueba eso que te digo a ver qué tal... debe arreglarse así.

Ok saludos, nos leemos!  :mrgreen:

"Por la presunción solo se ocasiona una lucha, pero con los que consultan juntos hay sabiduría" (Proverbios 13:10).
Visita Mi Sitio Web

Desconectado ivan_1980

  • PIC10
  • *
  • Mensajes: 5
Re: enviar cadenas de un gps a un micro y despues a un lcd
« Respuesta #7 en: 18 de Junio de 2008, 15:46:36 »
Hola FIREPIC ya he probado la instrucción poniendo T9600 y al momento de compilar me marca un error:

variable 'T9600' not found

yo tambien creo que el error esta ahi , pero no he encontrado solución seguiré intentando, pero si sabes algo te agradecería mucho si lo comentas por aqui

gracias...espero tu respuesta :)

Desconectado navaismo

  • Jubilado Todopic
  • PIC24H
  • ****
  • Mensajes: 1973
Re: enviar cadenas de un gps a un micro y despues a un lcd
« Respuesta #8 en: 18 de Junio de 2008, 16:10:58 »
No el error no esta ahi, como lo pones esta bien, pues como lo explica la ayuda es valido usar esa nomenclatura para el baudaje. Y eso forma de definir el baudaje es de PBP cuando incluyes el "modedefs.bas"

Yo creo que lo que pasa es cuando quieres recibir la cadena el serin no da para mas, te lo digo porque cada que yo quiero recibir una cadena serin no me daba el ancho. En PBP tenia que usar SERIN" y en proton RSIN ya que estos pueden recibir despues del "wait" la cantidad de caracteres que desees y estos se depositan en el arreglo de tu variable.

Digo no me gusta ser pedante ni repetir los ejemplos pero de verdad deberias intentarlo como te decia, no por molestar mas bien por que a mi siempre me ha funcionado asi.
"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 ivan_1980

  • PIC10
  • *
  • Mensajes: 5
Re: enviar cadenas de un gps a un micro y despues a un lcd
« Respuesta #9 en: 18 de Junio de 2008, 16:53:11 »
saludos navaismo, gracias por responder y no te preocupes todos los consejos son bienvenidos, bueno acabo de leer como se usa el rsin y segun yo deje el programa asi:

device = 18f452
 
xtal 4
 

dim cad1 as string *254
dim X as byte

DECLARE RSIN_PIN PORTc.7
DECLARE SERIAL_BAUD 9600

loop: 
 cls
 print "detectando"
 RSIN WAIT( "$GPGGA" ) , cad1[0]
 cls
 print "correcto"
 delayms 1000
 cls
 
   for X=1 to 253
     rsin cad1[X]
   next

 print cad1
 delayms 4000

goto loop

pero tampoco me funciono :( , no se si sea la forma correcta de usar el rsin ¿como ves tu ?

Desconectado firepic

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1130
    • JC Servicios
Re: enviar cadenas de un gps a un micro y despues a un lcd
« Respuesta #10 en: 18 de Junio de 2008, 16:57:47 »
A bueno si estás programando en protón ahí sí no sé...  :D

En basic no más he trabajado con Pic Basic Pro...
Y eso forma de definir el baudaje es de PBP cuando incluyes el "modedefs.bas"
Sé que es correcto, yo mismo también usé esa forma algunas veces... ahora bien, no sé si las definiciones de proton sean distintas (supongo que sí), porque si fuera pic basic estaría incorrecto así. Por lo que mencioné acá:
Pero tampoco encuentro "16468", lo que sí veo es un "16486" que corresponde a una tasa de baudios de 9600, invertida, sin paridad... que no entiendo por qué usas la

Entonces te dejo este hilo a tí navaismo, porque tú si eres experto en proton... yo de proton no sé un comino  :D
Saludos, nos leemos!  :mrgreen:
Ivan, te deseo éxito en tu proyecto!  :P

"Por la presunción solo se ocasiona una lucha, pero con los que consultan juntos hay sabiduría" (Proverbios 13:10).
Visita Mi Sitio Web

Desconectado raraavis

  • PIC10
  • *
  • Mensajes: 47
Re: enviar cadenas de un gps a un micro y despues a un lcd
« Respuesta #11 en: 19 de Junio de 2008, 00:44:40 »
Amigo Ivan:

A Mi me sale así

Código: [Seleccionar]
DECLARE HSERIAL_BAUD  = 9600 ' Set baud rate to 9600
DECLARE HSERIAL_RCSTA = %10010000       ' Enable serial port and continuous receive
DECLARE HSERIAL_TXSTA = %00100100       ' Enable transmit and asynchronous mode
DECLARE HSERIAL_CLEAR = ON ' Enable Error clearing on received characters

DECLARE LCD_TYPE = 0       
DECLARE LCD_DTPIN PORTB.0
DECLARE LCD_RSPIN PORTB.4
DECLARE LCD_ENPIN PORTB.5
DECLARE LCD_LINES 2
DECLARE LCD_INTERFACE 4

DIM cad1[18]    AS BYTE
 
    CLS
    PRINT AT 1,1, "detectando.."
   
    'Espera hasta Recibir $GPGGA, lo que venga detras de eso lo guarda en la variable cad1
    ' En el Ejemplo: *RaraAvis-TodoPic* y lo muestra en el LCD.
   
    HSERIN [WAIT( "$GPGGA" ) , STR cad1]
   
    PRINT AT 1,1, "Recibido:    "
    PRINT AT 2,1,STR cad1
   
    STOP



Adjunto archivo zip con .Hex, el source .bas y la simulacion en Proteus 7.2

Saludos  :)

Desconectado firepic

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1130
    • JC Servicios
Re: enviar cadenas de un gps a un micro y despues a un lcd
« Respuesta #12 en: 19 de Junio de 2008, 00:51:38 »
Raraavis, el detalle es que una cadena NMEA GPGGA tiene unos 50 caracteres...
No sé si sirva esa solución...
Aunque yo lo he hecho de forma parecida en C y me ha funcionado de maravilla...
Así que, como dice el maestro RedPic: "a probar que no se quede!"
Saludos, nos leemos!  :mrgreen:
"Por la presunción solo se ocasiona una lucha, pero con los que consultan juntos hay sabiduría" (Proverbios 13:10).
Visita Mi Sitio Web

Desconectado raraavis

  • PIC10
  • *
  • Mensajes: 47
Re: enviar cadenas de un gps a un micro y despues a un lcd
« Respuesta #13 en: 19 de Junio de 2008, 11:10:11 »

Hola amigo firepic

Creo que con la cantidad de Caracteres no va a tener problemas, yo he transmitido cadenas de 101 caracteres de Pic a Pic con este método sin problemas.
En el ejemplo, solo envié unos pocos caracteres porque el display es de 20 posiciones y si mandase 60 no los podria ver todos.   :D


Saludos. Luis