Los que usamos Proteus para simular algún proyecto sabemos que los módulos simulados no son muy actuales.
Particularmente el módulo GPS (GpsTEP) no solo emite unas sentencias NMEA que, aunque no sería un problema, son fechadas en el 2013 sino que además están mal simuladas.
Emite cada segundo 3 ráfagas de sentencias RMC y GGA, pero todas juntas y cada sentencia con diferente horario .
$GPRMC,045103.000,A,3014.1984,N,09749.2872,W,0.67,161.46,030913,,,A*7C
$GPGGA,045104.000,3014.1985,N,09749.2873,W,1,09,1.2,211.6,M,-22.5,M,,0000*62
$GPRMC,045200.000,A,3014.3820,N,09748.9514,W,36.88,65.02,030913,,,A*77
$GPGGA,045201.000,3014.3864,N,09748.9411,W,1,10,1.2,200.8,M,-22.5,M,,0000*6C
$GPRMC,045251.000,A,3014.4275,N,09749.0626,W,0.51,217.94,030913,,,A*7D
$GPGGA,045252.000,3014.4273,N,09749.0628,W,1,09,1.3,206.9,M,-22.5,M,,0000*6F
Es imposible que un GPS real envíe los datos de esa forma (cada pareja de sentencias RMC, GGA deberían tener la misma hora, como mínimo), así es difícil obtener resultados correctos en una simulación, sobre todo con librerías como NeoGps que son más "estrictas" con los datos que otras, como por ej. TinyGps++ (y a la vez también más precisas).
Por otro lado, solo trabaja a 9600 bps.
Dado que necesitaba algo más parecido a un GPS real, generé un nuevo código para el citado módulo.
El mismo emite una serie de 16 grupos de 3 sentencias NMEA (GGA, GSA y RMC) por segundo, como lo haría un GPS real. A modo de ej. muestro las enviadas los 3 primeros segundos
$GPGGA,000055.000,3436.510,S,05822.397,W,1,12,1.0,0.0,M,0.0,M,,*67
$GPGSA,A,3,01,02,03,04,05,06,07,08,09,10,11,12,1.0,1.0,1.0*30
$GPRMC,000055.000,A,3436.510,S,05822.397,W,011.9,088.1,110423,000.0,W*7E
$GPGGA,000056.000,3436.510,S,05822.393,W,1,12,1.0,0.0,M,0.0,M,,*60
$GPGSA,A,3,01,02,03,04,05,06,07,08,09,10,11,12,1.0,1.0,1.0*30
$GPRMC,000056.000,A,3436.510,S,05822.393,W,011.0,090.0,110423,000.0,W*78
$GPGGA,000057.000,3436.510,S,05822.389,W,1,12,1.0,0.0,M,0.0,M,,*6A
$GPGSA,A,3,01,02,03,04,05,06,07,08,09,10,11,12,1.0,1.0,1.0*30
$GPRMC,000057.000,A,3436.510,S,05822.389,W,011.0,085.9,110423,000.0,W*7F
Obviamente, la secuencia se repite indefinidamente, pero a los fines de simulación es mucho mejor que la secuencia original.
Para usar el firmware, se debe descomprimir el archivo adjunto en la carpeta LIBRARY de Proteus, generalmente
C:\Program Files (x86)\Labcenter Electronics\Proteus 8 Professional\DATA\LIBRARY
o en la equivalente en la carpeta de usuario, normalmente
C:\Users\**TU_USUARIO**\AppData\Local\Labcenter Electronics\Proteus\DATA\LIBRARY
o incluso en cualquier otra carpeta aunque no sea específica de Proteus (una buena ubicación podría ser la propia carpeta del proyecto).
Luego, ya en Proteus, con el proyecto abierto, se selecciona el GPS, se editan las propiedades y se modifica Program file seleccionando el nuevo archivo .hex
En el archivo adjunto se encuentran 2 versiones del código:
GPS_Module_for_Proteus_9600.hex para trabajar con serial a 9600 bps
GPS_Module_for_Proteus_19200.hex para trabajar a 19200 bps, obviamente.
GPS_Module_for_Proteus.zip (7,9 KB)
Espero que les sea de utilidad.
Saludos
PD: Para los curiosos, los datos simulan unos segundos de caminata en la Plaza de Mayo, de la ciudad de Buenos Aires.