2017-01-04 32 views
0

私のFlir Lepton Cameraをボードに接続し、ThermalViewプログラム(https://github.com/groupgets/LeptonModule/tree/master/software/ThermalView)のおかげで画像の連続ストリームを作成しようとしています。 ) 私がコンパイルされ、私のボードに次のコードをダウンロード:Lepton FLIR Cameraからの連続ストリームの取得Nucleo-f401re

int main(void) 
{ 

    //HAL_Init(); 

    /* Configure the system clock */ 
    SystemClock_Config(); 

    /* Initialize all configured peripherals */ 
    MX_GPIO_Init(); 
    MX_DMA_Init(); 
    MX_I2C1_Init(); 
    MX_SPI1_Init(); 
    MX_USART1_UART_Init(); 
    MX_USART2_UART_Init(); 
    SystemClock_Config(); 

    leptonEnd(); 
    // LEPTON VDD OFF 
    HAL_Delay(1000); 
    // LEPTON VDD ON 
    HAL_Delay(185); 

    LeptonConfigure_I2C(); 

    while(1) 
    { 
    LeptonReadFrame(); 
    frameToPc(); 
    } 
} 

// Output image buffer to USART2 
void frameToPc() 
{ 
    static uint8_t frameSkipper = 0; 

    uint8_t timeStamp = (HAL_GetTick() - last_frame_millis); // calculate time passed since last been here 

    last_frame_millis = HAL_GetTick(); 



    if(frameSkipper==4) 
    { 
    //PSEDO// 
    //IMGtoRGB(); 

    //////// 
    uint8_t thermalView_header[] = {0xDE,0xAD,0xBE,0xEF}; // 4-byte header for ThermalView application 
    HAL_Delay(1000); 
    HAL_UART_Transmit_DMA(&huart2, &thermalView_header[0], 4); // print header 

    while(huart2.gState != HAL_UART_STATE_READY); // wait for transmission to complete 

    HAL_UART_Transmit_DMA(&huart2, &IMG[0], LEPTON_IMG_SIZE_BYTES); 

    frameSkipper = 0; 
    } 

    frameSkipper++; 
}uint8_t LeptonReadFrame() 
{ 
    uint8_t i, frame_number, frame_complete=0; 
    uint16_t bad_frame_counter=0; 

    while(!frame_complete) 
    { 
    leptonBegin(); 

    HAL_SPI_Receive(&hspi1, &FramePacket[0], LEPTON_PACKET_LENGTH, 1000); // READ LINE  

    leptonEnd(); 

    //HAL_UART_Transmit(&huart2, &FramePacket[0], LEPTON_PACKET_LENGTH, 1000); // PRINT LINE 

    if((FramePacket[0] & 0x0f) != 0x0f) // not discard frame 
    { 
     frame_number = FramePacket[1]; 

     if(frame_number < 60) // valid frame 
     { 
     bad_frame_counter = 0; 

     for(i= 0; i<LEPTON_PACKET_CONTENT_LENGTH; i++) 
     { 
      IMG[frame_number*LEPTON_PACKET_CONTENT_LENGTH+i] = FramePacket[i+4]; // copy line into IMG buffer, ignoring ID and CRC 
     } 
     } 
     else 
     { 
     bad_frame_counter++; 
     } 

     if(frame_number == 59) 
     { 
      frame_complete = 1; 
     } 

     if(bad_frame_counter>1000) // 800 lines = 5 bad frames = resync needed 
     { 
      bad_frame_counter = 0; 
      HAL_Delay(185); // CS is already disabled so the delay is enougth 
     } 
    } 
    } 
    return 1; 
} 

は、私が正常にストリームを取得していますが、私は、各フレーム間で1秒の遅延を入れ、2つのフレーム間のフレームをスキップするように持っている必要があります私はコンピュータに送信します。フレームレートを上げないコードで何か問題がある場合は、教えてください。

+1

だから、あなたは 'if(frameSkipper == 4){... frameSkipper = 0; } '遅延コード?なぜ、各フレームの間に1秒の遅延を入れなければならないのですか?あなたがしなければ何が起こるでしょう、あなたは写真がありません? – yano

+0

あなたの質問は何ですか? –

+0

そうでない場合、プログラムThermalViewはパケットを期待どおりに取得せず、フレームの読み込みに成功しません。マガレット、私はフレームレートをincreseしたいと思います –

答えて

1

レプトン2またはレプトン3を使用していますか?レプトン3は、「フレーム」だけでなく4つのセグメントも取得する必要があります。また、レプトンモジュールが出力する2つのブランク画面もあります。この文書の詳細:レプトン2Xシリーズ(80×60)の解像度とレプトン3(160×120)解像度を比較

http://www.flir.com/uploadedFiles/OEM/Products/LWIR-Cameras/Lepton/Lepton-vs-Lepton-3-App-Note.pdf

Lepton 3 VoSPIインターフェイス間の4つの最も重要な違いは、次のとおりです。 1)Leptonでは、個々のパケットからビデオフレームを再構築するには、ホストが各パケットヘッダーからパケット番号をデコードする必要があります。レプトン3では、ホストはパケット番号とセグメント番号の両方をデコードする必要があります。 2)1フレームあたりの総ビット数は、レプトン3の方がレプトンよりも4倍大きい。したがって、最小SPIクロック速度は4倍高速です。両方のモジュールの最大SPIクロックレートは20 MHzです。 3)LeptonとLepton 3の両方でGPIO3に同期パルスを出力するオプションがあります。パルスの周波数は、レプトン3の方がレプトンより4倍高い。レプトン3については、同期パルスは、次の利用可能なセグメントが利用可能であるときを表し、一方、レプトンについては、次の利用可能なフレームがいつ利用可能であるかを示す。 4)レプトンでテレメトリが有効になっていると、ビデオ回線が3本追加されます(1フレームあたり合計63パケット)。レプトン3で遠隔測定が可能になると、1セグメントあたり1パケットが追加され、合計2本のビデオラインが追加されます。

私がstm32f746g-discoveryボードで動作するようにレプトン3を取得しようとしています。

関連する問題