搜索
bottom↓
回复: 15

刚刚接触GPS,问个非常BC的问题,前辈请进!

[复制链接]

出0入0汤圆

发表于 2013-4-24 14:15:40 | 显示全部楼层 |阅读模式
问题是这样的,小弟刚刚接触GPS模块。。。然后往淘宝上一搜!发现卖家们都提供了这样三种接口,USB  串口  TTL,我就想知道TTL是如何通信的,于是找卖家一问!结果发现。。。卖家跟我说了一个NMEA 0183协议并且给我发了一份文档,我看了一下发现这个0183协议说的是当你收到一整条字符串时,每个字段所代表的意思,,可我不懂啊,我的疑问是TTL怎么通信?这条字符串该如何去接收?又不是串口或者USB。。。那可是TTL!应该要有通信的时序图?就好像RFID卡的韦根协议 红外38k的NEC协议那样子。。。请前辈指点指点啊,小弟是硬件BC。。。在线等前辈指教了!

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2013-4-24 14:19:55 | 显示全部楼层
如果是想把GPS模块接到电脑上,最简单的是 买USB的,他插到电脑上 装上驱动是一个串口设备。卡开串口设备就可以 接收到0183的 报文了。

出0入0汤圆

发表于 2013-4-24 14:20:40 | 显示全部楼层
如果电脑又DB9 的标准 RS232接口,串口,买串口的也行。我用过佳明的就是这个。

出0入0汤圆

发表于 2013-4-24 14:21:44 | 显示全部楼层
如果想接到单片机,或者其他的MCU上用TTL的。直接寄到uart的接收端就行了。
一般是 4800 ,或者9600  的波特率。

出0入0汤圆

发表于 2013-4-24 14:23:47 | 显示全部楼层
串口呢,在单片机上,是标准的设备。常见的,主流的单片机上都有uart的。极个别的没有。
不需要时序图的。设置好 波特率,数据位长度(8),没有流控,1个停止位。直接操作寄存器就可以。

出0入0汤圆

 楼主| 发表于 2013-4-24 14:44:01 | 显示全部楼层
censtar 发表于 2013-4-24 14:23
串口呢,在单片机上,是标准的设备。常见的,主流的单片机上都有uart的。极个别的没有。
不需要时序图的。 ...

我理解了!就是说它输出是TTL电平,按串口的时序输出的?所以直接接MCU的串口IO就可以了?

出0入0汤圆

发表于 2013-4-24 14:53:50 | 显示全部楼层
zjx_arm 发表于 2013-4-24 14:44
我理解了!就是说它输出是TTL电平,按串口的时序输出的?所以直接接MCU的串口IO就可以了? ...

没错。就是这个意思。标准的 4800 8 N1 ,或者 9600 8 N 1

出0入0汤圆

发表于 2013-4-24 14:58:00 | 显示全部楼层
NMEA 0183协议只是GPS输出数据的格式定义。。它TTL接口就相当于单片机的串口,只不过它的波特率是固定的,4800,或者9600. 对于GPS模块,你可以通过232电平转换将数据发送到电脑上:GPS.TX ----> 232转换----> PC.RX .也可以直接和单片机连接通信,GPS.TX ---->  MCU.RX  。GPS 的RX基本是不用的,GPS主要是不断地向外发送数据。

出0入0汤圆

 楼主| 发表于 2013-4-24 15:15:10 | 显示全部楼层
御风逍遥Fly 发表于 2013-4-24 14:58
NMEA 0183协议只是GPS输出数据的格式定义。。它TTL接口就相当于单片机的串口,只不过它的波特率是固定的 ...

嗯嗯,那再请教个问题,它的0183协议有多种输出?它会输出那种字符串?它GGA,GLL等输出,我的意思是它会输出哪一种?哎呀  我都不知道该怎么描述我的问题了,看下面的图:

比如输出的是GGA字符串,那它所表达的信息就是时间 位置 定位类型等,如果输出的是GLL,那它表达的信息就是经度纬度 UTC时间等,那它每秒输出一次  是输出GGA还是GLL?


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2013-4-24 15:15:35 | 显示全部楼层
censtar 发表于 2013-4-24 14:53
没错。就是这个意思。标准的 4800 8 N1 ,或者 9600 8 N 1

嗯嗯,那再请教个问题,它的0183协议有多种输出?它会输出那种字符串?它GGA,GLL等输出,我的意思是它会输出哪一种?哎呀  我都不知道该怎么描述我的问题了,看下面的图:

比如输出的是GGA字符串,那它所表达的信息就是时间 位置 定位类型等,如果输出的是GLL,那它表达的信息就是经度纬度 UTC时间等,那它每秒输出一次  是输出GGA还是GLL?


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2013-4-24 15:33:52 | 显示全部楼层
这个就不一定了。有些模块是固定的。有些是可以配置的。
不会这些语句都有的。
一般是这样:GPRMC、GPGGA、GPGSA是有的。

出0入0汤圆

发表于 2013-4-24 15:34:19 | 显示全部楼层
这个,各个模块之间有差异。

出0入0汤圆

发表于 2013-4-24 15:35:37 | 显示全部楼层
每秒把这些信息都输出一次。选上的语句都输出。
其实,GPS模块输出格式很多的。。二进制的还都不一样。具体的看是哪种模块了。

出0入0汤圆

发表于 2013-4-24 14:15:41 | 显示全部楼层
zjx_arm 发表于 2013-4-24 15:15
嗯嗯,那再请教个问题,它的0183协议有多种输出?它会输出那种字符串?它GGA,GLL等输出,我的意思是它会 ...

这个协议里的几种帧数据里,都会输出,具体如下: GPGGA(1 次/1 秒)、GPGSA(1 次/5 秒)、GPGSV(1 次/5 秒)、GPRMC(1 次/1 秒)、GPVTG(1 次/1 秒)。其中常用的是GPGGA 或者GPRMC这两帧数据。  GPS模块输出的数据是有规律的,你根据协议里的格式说明把你想要的数据如 经纬度,时间,速度等信息提取出来就行了。使用起来还是很简单的。

出0入0汤圆

发表于 2013-4-24 16:31:45 | 显示全部楼层
这个是我之前做的一个提取 经纬度的 函数,楼主可以参考一下。

//需要接收的数据格式:$GPRMC,090113.00,A,3958.2847,N,11616.6454,E,0.00,0.00,080110,,,A*60
//$在第一个字节处,M在第5个字节处,A在第18处,纬度数据在20~28处,经度数据在32~41处。
void GPSReceive(uchar temp)
{
        if (temp == '$')//收到协议头
        {
                ReceiveFlag = 1;//协议数据标志位置1
                Bytes_counter = 0;//接收数据字节个数清0
        }

        if (ReceiveFlag == 1)
        {
                Bytes_counter++;

                if (Bytes_counter == 5 && temp == 'M')//收到GPRMC格式数据
                {
                        RMCFlag = 1;
                }

                if (RMCFlag == 1)
                {
                        if (Bytes_counter == 18 && temp == 'A')//GPS处于有效状态
                        {
                                GPSValidFlag = 1;       
                        }

                        if (GPSValidFlag == 1 && DataProcOKFlag == 1)//上一次接收的数据已经处理转换完毕,才能接收新的经纬度信息
                        {
                                if (Bytes_counter >= 20 && Bytes_counter <= 28)//接收纬度信息,并进行初步转换
                                {
#if GPS_DEBUG
                                        Lat[Bytes_counter - 20] = temp;
#endif
                                        LatArray[Bytes_counter - 20] = temp - '0';       
                                }
                               
                                if (Bytes_counter >= 33 && Bytes_counter <= 42)//接收经度信息,并进行初步转换
                                {
#if GPS_DEBUG
                                        Long[Bytes_counter - 33] = temp;
#endif                                               
                                        LongArray[Bytes_counter - 33] = temp - '0';       
                                }

                                if(Bytes_counter >= 43)        //接收经纬度信息完毕,清除所有标志位
                                {
                                        GPSValidFlag = 0;       
                                        RMCFlag = 0;
                                        ReceiveFlag = 0;
                                        DataProcOKFlag =0;

                                        //关闭UART接收使能和中断
                                        UCSRB &= ~(_BV(RXEN) | _BV(RXCIE));
                                }
                        //        USART_PutChar(temp);
                                                                       
                        }//end if   if (StatusFlag == 1)
                }//end of   if (RMCFlag == 1)
        }//end of   if (ReceiveFlag == 1)
}


//在串口接收中断中 提取 经纬度信息
ISR(USART_RXC_vect)
{
        char temp = 0;
        temp = UDR;
        GPSReceive(temp);
}

出0入0汤圆

发表于 2013-6-17 21:06:20 来自手机 | 显示全部楼层
路过.........学习一下....
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-18 20:27

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表