2016-04-08 3 views
1

私はGPSモジュールを備えたATMega32を使用して、LCDディスプレイ(緯度と経度)にデータを表示しています。 GPSモジュールは毎秒9600 bpsで一連のデータを送信します。 文字列はNMEA文で、$記号で始まり、その文字を使って受信機(AVR UART)を同期させます。AVR USARTが期待通りに動作しない

これは私が使用するコードである:

// GPS.h 

void GPS_read(char *sentence)   
{ 
    while ((*sentence = USART_receive()) != '$') 
    ; 
    USART_receive_string(++sentence); 
} 



// USART.h 

unsigned char USART_receive(void) 
{ 
    while (!(UCSRA & (1<<RXC))) 
    ; 
    return UDR; 
} 

void USART_receive_string(char *string) 
{ 
    do 
    { 
    *string = USART_receive(); 
    } while (*string++ != '\n');        // NMEA sentences are <CR><LF> terminated 
    *string = '\0'; 
} 

IはGPS_read、その後LCD上に文字列を表示する文字列を渡します。 データを表示するタイミングに応じて、$ Gと\ n文字からなるゴミデータが得られます。

私は(私は:)初心者の組込みプログラマだ)ここにいくつかのミスを作ってるんだが、それは二日をされていると私は私が間違っているのかを把握することはできません

助けてください! ありがとう Luca

答えて

0

TXとRXのボーレートが正しいことを確認しましたか?フレームエラーもチェックしてください。

-1

あなたのコードを持ついくつかのエラーがあり、これを試してみてください。

あなたのchar配列の宣言が含まれていないが、私はあなたが読んでいるどの要素を追跡するためにインデクサーを使用し、および/または助言しますあなたの配列の中に書き込む。

unsigned char Sentence[*Insert array size here*]; 
unsigned char Indexer = 0; 

とあなたの関数のように、私は `...あなたのUSART_receive()関数は罰金ですが、試してください

void GPS_read(char *sentence) 
{ 
    unsigned char Data = USART_receive(); // Read initial value 
    while (Data != '$')      // while Data is not a '$' ... 
     Data = USART_receive();    // ... Read the USART again until it is 

    sentence[Indexer++] = Data; 
    USART_receive_string(sentence);   
} 

void USART_receive_string(char *string) 
{ 
    unsigned char Data = USART_receive(); 

    while (Data != '\n') 
    { 
     *string[Indexer++] = Data; 
     Data = USART_receive(); 
    } 
    *string[Indexer] = '\n'; 
} 
+0

を言うと思います*文[インデクサ++]'? - 私はそうは思わない。 – JimmyB

+0

"コードにいくつかのエラーがあります" - これらのエラーは何ですか? – JimmyB

+0

なぜですか? *文がchar配列のアドレスを指している、Indexがインデクサーとして使用されている場合、Dataの値が配列のその特定の要素に格納されると、Indexerを1インクリメントして配列準備の次の要素USART_receive_string()関数の場合私は何が欠けていますか? –

関連する問題