Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

04/05/2010 #1


pic con un gps en Basic
necesito ayuda con un proyecto para comunicar un pic con un modulo gps por PICBASIC estoy utilizando un 16F876A.
el problema es el siguiente hice el siguiente código:

Código PHP:
Include "modedefs.bas"


'RCSTA: RECEIVE STATUS ANInclude "modedefs.bas"


'
RCSTARECEIVE STATUS AND CONTROL REGISTER (ADDRESS 18h)
DEFINE OSC 4 'se define el oscilador en MHz
DEFINE HSER_RCSTA 90h ' 
Set receive register to receiver enabled
DEFINE HSER_TXSTA 20h 
' Set transmit register to transmitter enabled
DEFINE HSER_BAUD 4800 ' 
Set baud rateD CONTROL REGISTER (ADDRESS 18h)
DEFINE OSC 4 'se define el oscilador en MHz
DEFINE HSER_RCSTA 90h ' 
Set receive register to receiver enabled
DEFINE HSER_TXSTA 20h 
' Set transmit register to transmitter enabled
DEFINE HSER_BAUD 4800 ' 
Set baud rate
DEFINE HSER_SPBRG 25 
' Set SPBRG directly (normally set by HSER_BAUD)


Define    LCD_DREG    PORTB
Define    LCD_DBIT    4
Define    LCD_RSREG    PORTB
Define    LCD_RSBIT    2
Define    LCD_EREG    PORTB
Define    LCD_EBIT    3

hora var byte
minutos var byte
segundos var byte

latitudp1 var byte
latitudp2 var byte
latitudp3 var byte
latitudp4 var byte
ns var byte

longitudp1 var word
longitudp2 var byte
longitudp3 var byte
longitudp4 var byte
oe var byte

kmh var byte

TRISB = 0


GPS:
high PORTB.0 ' 
prendo un led al principio del programa
pause 200
low PORTB.0 
' apago led
gosub lee  ' 
esta sub rutina lee la trama del gps al final coloco como es la trama
pause 500
gosub muestra 
' muestra los datos que toma de la trama
goto GPS
end
  
lee:
hserin 4800,timeout,[wait("$GPGGA"),dec2 hora,DEC2 minutos,DEC2 segundos,skip 5,dec2 latitudp1,DEC2 latitudp2,DEC2 latitudp3,DEC2 latitudp4,skip 1,ns,dec3 longitudp1, dec2 longitudp2,dec2 longitudp3,dec2 longitudp4,skip 1,oe] ' 
4800 es un tiempo según para que cuando no se recibe trama el llama otra rutina en este caso timeout

return

muestra:
lcdout $FE1
lcdout 
"UTC: ",dec hora
lcdout 
":",dec minutos
lcdout 
":",dec segundos
pause 1200
lcdout $FE
1
pause 50
lcdout 
"lat:",dec latitudp1
lcdout 
%10110000 'simbolo °
lcdout dec latitudp2
lcdout "."
lcdout dec latitudp3
lcdout dec latitudp4
lcdout "'"
lcdout ns
lcdout 
$FE$C0
lcdout "
lon"
lcdout dec longitudp1
lcdout dec longitudp2
lcdout %10110000 'simbolo °
lcdout "
."
lcdout dec longitudp3
lcdout dec longitudp4
lcdout "'"
lcdout oe

clear ' 
borro las variables de la memoria

return


timeout:
lcdout $FE1
pause 500
lcdout 
"no hay trama"
pause 500
return 

'la trama que envío es asi:
'$GPGGA,563452.000,9876.9876,N,23455.6538,E,#,##,2 .5,607.75,M,47.6,M,,*67<CR>

ahora bien el problema es que el programa solo lee a primera ves que se ejecuta después no lee mas y se va a la subrutina timeout como si no recibiera tramas . Una de mis preguntas es wait sirve para que el espere $GPGGA, pero el timeout espera también a $GPGGA o solamente espera a que cualquier tipo de trama llegue?

les agradecería su ayuda por favor, la verdad no tengo ni idea que esta pasando.
nose si quieren que les envíe el archivo para simularlo en proteus
04/05/2010 #2

Avatar de tecnogirl

Respuesta: pic con un gps en Basic
Confirma la validez de la trama enviandola desde la Hyperterminal de Windows en vez del micro.
Saludos
04/05/2010 #3


Respuesta: pic con un gps en Basic
tecnogirl dijo: Ver Mensaje
Confirma la validez de la trama enviandola desde la Hyperterminal de Windows en vez del micro.
Saludos

nuevamente yo, te cuento que parra evitar problemas ahora estoy utilizando GPS Generator PRO que es como un emulador de un gps esta versión que baje es de prueba y solo envia tramas $gprmc basadas en NMEA 0183 v3

$GPRMC,223629.69,A,0000.337,N,00000.022,E,21.60,6. 24,040510,0.0,E,A*06
mas informacion :
http://www.codepedia.com/1/The+GPRMC+Sentence

el programa lo conecto con proteus por COMPIM y Virtual serial port driver 6.

debido a que la trama es diferente a la que tenia pensado en un principio le hice unos cambios al pbp:

Código PHP:
Include "modedefs.bas"

DEFINE OSC 4 'se define el oscilador en MHz
DEFINE HSER_RCSTA 90h ' 
Set receive register to receiver enabled
DEFINE HSER_TXSTA 20h 
' Set transmit register to transmitter enabled
DEFINE HSER_BAUD 4800 ' 
Set baud rate
DEFINE HSER_SPBRG 25 
' Set SPBRG directly (normally set by HSER_BAUD)


Define    LCD_DREG    PORTB
Define    LCD_DBIT    4
Define    LCD_RSREG    PORTB
Define    LCD_RSBIT    2
Define    LCD_EREG    PORTB
Define    LCD_EBIT    3

hora var byte
minutos var byte
segundos var byte

latitudp1 var byte
latitudp2 var byte
latitudp3 var byte
latitudp4 var byte
ns var byte

longitudp1 var word
longitudp2 var byte
longitudp3 var byte
longitudp4 var byte
oe var byte

kmh var byte

TRISB = 0


GPS:
high PORTB.0
pause 200
low PORTB.0
gosub lee
gosub muestra
pause 500
goto GPS
end
  
lee:
hserin 4800,timeout,[wait("$GPRMC,"),dec2 hora,DEC2 minutos,DEC2 segundos,skip 6,dec2 latitudp1,DEC2 latitudp2,DEC2 latitudp3,DEC2 latitudp4,ns,dec3 longitudp1, dec2 longitudp2,dec2 longitudp3,dec2 longitudp4,oe]

return

muestra:
lcdout $FE, 1
lcdout "UTC: ",dec hora
lcdout ":",dec minutos
lcdout ":",dec segundos
pause 1200
lcdout $FE, 1
pause 50
lcdout "lat:",dec latitudp1
lcdout %10110000 '
simbolo °
lcdout dec latitudp2
lcdout 
"."
lcdout dec latitudp3
lcdout dec latitudp4
lcdout 
"'"
lcdout ns
lcdout $FE
$C0
lcdout 
"lon"
lcdout dec longitudp1
lcdout dec longitudp2
lcdout 
%10110000 'simbolo °
lcdout "."
lcdout dec longitudp3
lcdout dec longitudp4
lcdout "'"
lcdout oe

clear

return


timeout:
lcdout 
$FE, 1
pause 500
lcdout "
no hay trama"
pause 500
goto lee 

ahora el problema es aun peor ahora no lee lada y se va directamente a la subrutina timeout
05/05/2010 #4


Respuesta: pic con un gps en Basic
josb86 dijo: Ver Mensaje
nuevamente yo, te cuento que parra evitar problemas ahora estoy utilizando GPS Generator PRO que es como un emulador de un gps esta versión que baje es de prueba y solo envia tramas $gprmc basadas en NMEA 0183 v3

$GPRMC,223629.69,A,0000.337,N,00000.022,E,21.60,6. 24,040510,0.0,E,A*06
mas informacion :
http://www.codepedia.com/1/The+GPRMC+Sentence

el programa lo conecto con proteus por COMPIM y Virtual serial port driver 6.

debido a que la trama es diferente a la que tenia pensado en un principio le hice unos cambios al pbp:

Código PHP:
Include "modedefs.bas"

DEFINE OSC 4 'se define el oscilador en MHz
DEFINE HSER_RCSTA 90h ' 
Set receive register to receiver enabled
DEFINE HSER_TXSTA 20h 
' Set transmit register to transmitter enabled
DEFINE HSER_BAUD 4800 ' 
Set baud rate
DEFINE HSER_SPBRG 25 
' Set SPBRG directly (normally set by HSER_BAUD)


Define    LCD_DREG    PORTB
Define    LCD_DBIT    4
Define    LCD_RSREG    PORTB
Define    LCD_RSBIT    2
Define    LCD_EREG    PORTB
Define    LCD_EBIT    3

hora var byte
minutos var byte
segundos var byte

latitudp1 var byte
latitudp2 var byte
latitudp3 var byte
latitudp4 var byte
ns var byte

longitudp1 var word
longitudp2 var byte
longitudp3 var byte
longitudp4 var byte
oe var byte

kmh var byte

TRISB = 0


GPS:
high PORTB.0
pause 200
low PORTB.0
gosub lee
gosub muestra
pause 500
goto GPS
end
  
lee:
hserin 4800,timeout,[wait("$GPRMC,"),dec2 hora,DEC2 minutos,DEC2 segundos,skip 6,dec2 latitudp1,DEC2 latitudp2,DEC2 latitudp3,DEC2 latitudp4,ns,dec3 longitudp1, dec2 longitudp2,dec2 longitudp3,dec2 longitudp4,oe]

return

muestra:
lcdout $FE, 1
lcdout "UTC: ",dec hora
lcdout ":",dec minutos
lcdout ":",dec segundos
pause 1200
lcdout $FE, 1
pause 50
lcdout "lat:",dec latitudp1
lcdout %10110000 '
simbolo °
lcdout dec latitudp2
lcdout 
"."
lcdout dec latitudp3
lcdout dec latitudp4
lcdout 
"'"
lcdout ns
lcdout $FE
$C0
lcdout 
"lon"
lcdout dec longitudp1
lcdout dec longitudp2
lcdout 
%10110000 'simbolo °
lcdout "."
lcdout dec longitudp3
lcdout dec longitudp4
lcdout "'"
lcdout oe

clear

return


timeout:
lcdout 
$FE, 1
pause 500
lcdout "
no hay trama"
pause 500
goto lee 

ahora el problema es aun peor ahora no lee lada y se va directamente a la subrutina timeout

ya encontré mi error y no eran ni conexiones ni nada era un problema con una instrucción de basic que todavía es la hora y no se por que no trabaja bien.
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.