ラベル GPS の投稿を表示しています。 すべての投稿を表示
ラベル GPS の投稿を表示しています。 すべての投稿を表示

2012年12月31日月曜日

USB接続のGPSをmbedに繋げてみた(BaseUsbHost編)

上海問屋でみつけたUSBタイプのGPS(DN-UGR200)をセリアのUSBハブ経由でmbedにつなげてみた。
このGPSはGT-730FLと同じくPL-2303なので、ボーレートを4800bpsにするだけで動作します。





これは99円マイクロSD。もちろんmbedで動きました。


(2012/12/31)
---

2012年12月13日木曜日

NMEAからDegreeへの変換

USBホストでGPSドングリのGT730FLからの受信をしていたが意外とスタックの使用量が多かった。
調べてみたらDegree形式に変換するためのatof()が300バイト以上消費しているようだった。
atoi()を使うだけに書きなおした。(NMEAが少数点以下4桁以内を前提にしている)

float DMMtoDegree(const char *s)
{
    char *p = strchr(const_cast<char*>(s), '.');
    if (p == NULL) {
        return 0.0;
    }
    const uint32_t k[] = {10000,1000,100,10,1};
    uint32_t i3 = atoi(p+1) * k[strlen(p+1)];
    uint32_t i2 = atoi(p-2);
    uint32_t i1 = atoi(s) / 100;

    uint32_t i = i1*10000*60 + (i2*10000 + i3);
    return i / 10000.0 / 60.0;
}

(2012/12/13)
---

2012年4月30日月曜日

USB接続のGPSをmbedに繋げてみた(USBHostLite編)

OHCIホストを理解するためにMSCUSBHostが使っているUSBHostLiteを使って、GT-730F/L(GPS USB Dongle)を繋げてみた。
既にUSBHostShellで繋げていたので簡単にできるだろうと思っていたが、
USBHostLiteのパラメータ付きのコントロール転送の不具合を修正しなければならなかった。
作成したプログラムはmbedサイトに置きました。

GPSUSBHost

参考にした資料:

(2012/4/30)
---

2011年10月18日火曜日

USB接続のGPSをmbedに繋げてみた

秋月のUSB接続のGPSモジュール(GT-730F/L)をmbedに繋げてみた。
全然データが流れてこないと思ったら、ボーレートを設定するのを忘れていた。
PL-2303にコマンドで38400bpsに設定して、バルク転送で読み込むとGPSデータがNMEA形式で流れ込んできます。

PL-2303 Driver for BeOSのソースコードが参考になりました。ありがとうございました。

// pl2303.cpp 2011/10/14
#include "mbed.h"
#include "USBHost.h"
#include "Utils.h"

#define PL2303_SET_LINE_CODING 0x20

u8 pl2303_buf[64];

void pl2303_Callback(int device, int endpoint, int status, u8* data, int len, void* userData)
{
    //printfBytes("pl2303_bulk_Callback", data ,len);
    for (int i = 0; i < len; i++) {
        printf("%c", data[i]);
    }    
    USBBulkTransfer(device, 0x83, pl2303_buf, sizeof(pl2303_buf), pl2303_Callback, userData);
}

int OnPL2303Insert(int device) 
{
    printf("PL-2303 inserted of %d\n",device);
    USBBulkTransfer(device, 0x83, pl2303_buf, sizeof(pl2303_buf), pl2303_Callback, (void*)0);
    u8 data[] = {0x00, 0x96, 0x00, 0x00, 0x00, 0x00, 0x08}; // 38400bps,8bit
    USBControlTransfer(device, REQUEST_TYPE_CLASS | RECIPIENT_INTERFACE, 
                               PL2303_SET_LINE_CODING, 0, 0, data, sizeof(data));
    return 0;
}

---