【问题标题】:GPS ublox-6 neo6 communication with Microcontroller using SPIGPS ublox-6 neo6 使用 SPI 与微控制器通信
【发布时间】:2015-06-05 16:13:24
【问题描述】:

我正在使用 GPS 模块 ublox-6 neo6 并尝试使用 SPI 从 pic32 微控制器中提取数据。我正在使用 GPIO 引脚来执行此操作,因此 SPI 库不在桌面上。

显然,我需要做的就是发送 0xFF 并读取同时返回的内容以获取数据。当我自己尝试对其进行位敲击时,我发送了 0xFF,但我从 GPS 接收到的只是 0xFF。

我也尝试过实现 SoftSPI 库,因为我担心我尝试发送和接收信息的速度太快,但同样,当我发送 0xFF 时,我仍然会从 GPS 收到 0xFF。

这是我的代码:

#include <plib.h>  
#include <Math.h>
#include <p32xxxx.h> 

void setup() {
  pinMode( RB05_GPSmosi, OUTPUT );
  pinMode( RB02_GPSmiso, INPUT );
  pinMode( RB03_GPSsclk, OUTPUT );
  pinMode( RB04_GPScs  , OUTPUT );
  digitalWrite( RB04_GPScs, 1 );
  digitalWrite( RB03_GPSsclk, 0 );
}

void loop() {
  gpsHit();
}


void gpsHit() {
  char received = 0;

  digitalWrite(RB04_GPScs, LOW);

  int i = 0;
  for(i = 0; i < 8; i++) {
    digitalWrite(RB05_GPSmosi, ((0xFF >> (7-i)) & 0x01));
    digitalWrite(RB03_GPSsclk, 1);
    received |= digitalRead(RB02_GPSmiso) << (7-i);
    digitalWrite(RB03_GPSsclk, 0);
  }

  if((received & 0xFF) != 0xFF)
    Serial.println(received);

  digitalWrite(RB04_GPScs, HIGH);
}

现在是 SoftSPI 代码:

#include <SoftSPI.h>
#include <Math.h>
#include <p32xxxx.h> 

#define RB05_GPSmosi 21
#define RB04_GPScs   15
#define RB03_GPSsclk 20
#define RB02_GPSmiso 14

uint8_t recBuf[80];

SoftSPI gps;

void setup() {
  Serial.begin(9600);
  gps.begin(RB04_GPScs, RB05_GPSmosi, RB02_GPSmiso, RB03_GPSsclk);
  gps.setSpeed(80000);
  gps.setDirection(SSPI_SHIFT_LEFT);
  gps.setDelay(10);

  //Reset gps
  sendReset();
}

void loop() {
  int i = 0;
  for(i = 0; i < 80; i++) {
    Serial.print((char) recBuf[i]);
    recBuf[i] = 0;
  }
  Serial.println();

  gps.setSelect(LOW);
  gps.transfer(80, 0xFF, recBuf);
  gps.setSelect(HIGH);
}

在这两种情况下,每当我尝试发送 0xFF 时,我都会收到 0xFF。有趣的是,当我向它发送不是 0xFF 的垃圾时,我收到了实际的 NMEA 字符串,但这些 NMEA 字符串中没有实际数据,它看起来像:

$GPGLL,,,,,,,V*32

$GPGSA,,,,,A*49

等等。

^这些示例只是从内存中提取的,因此可能与我返回的内容不完全相同,但非常相似。

知道是什么导致了这个问题吗?该设备的数据表只是说如果您没有要发送的任何内容,则发送 0xFF,然后读取您返回的数据。我尝试通过向设备发送 UBX 代码将设备重置为出厂默认设置,但这根本没有帮助。

任何建议或信息将不胜感激。

【问题讨论】:

    标签: gps arduino microcontroller spi pic32


    【解决方案1】:

    所以我没有使用 SPI 而是使用 UART 来实现我的 Ublox LEA6T。但是,我可以说,如果 GPS 接收器没有天线或信号,您收到的 NEMA 看起来是有效的。如果您发布实际的 SPI digitalWrite 代码,我可能会提供更多帮助。您是否可以使用逻辑分析仪或示波器来探测线路?

    【讨论】:

    • 所以我发现每当我尝试重置设备时,我在尝试重置之前忘记选择gps。我也在一栋没有任何信号的大楼里。因此,一旦我修复了这两个问题,gps 就可以正常工作。我真的很感谢你的回应。谢谢!
    猜你喜欢
    • 2011-02-24
    • 2013-12-19
    • 2014-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-10
    相关资源
    最近更新 更多