鳥なき里のマイコン屋(86) Longan Nano、GD32VF103-SDK

JosephHalfmoon
JosephHalfmoon

前回、何かと話題のRISC-VをCPUコアに頂くお手頃価格な割には超多機能なマイコン開発ボード、Sipeed社Longan Nanoをお手軽な筈のArduino環境で使ってみました。確かに「Lチカ」は即できるのです。しかし、使いたいアナログインタフェースやディスプレイが簡単に使えなくて、ブーブー言っておしまいになりました。今回は、周辺回路をフルに使える筈のSDKの方にスイッチしてみたいと思います。SDK使うのであれば、ちゃんとデータシートなど読まなきゃ、と「いつもの」反省をしましたが、結局、例によってちゃんと読んでません。

まあね、本当は、ちゃんとデータシート読もうとしたのです、しかし、

GD32VF103 Firmware Library

というものがダウンロードできることが分かり、またまた、手抜きな方向に逃げてしまいました。これをダウンロードすると、その中にExamplesなるディレクトリがあるのです。そこには、私が使いたかったADCやDACなどを含む、各種ペリフェラル毎にそれぞれ複数のサンプルプログラムが用意されているのです。これをマネすれば(コピペ!)で、きっとサクッと動くに違いない(データシートも読まず。)ただし、このExamplesは、

GD32VF103V-EVAL-1.0なる評価ボード用

であり、Longan Nano用ではないのです。違いがある筈。でも、適当にポート名とか直せば動くっしょ、論より証拠、見る前に飛べ、さっさと動かしてみてから考えようという乗りです。こんなことで良いのか?良くはないです。

なお、Longan Nanoの特徴である背中にしょったDisplayについては、ちゃんとLongan Nano用のExampleがダウンロード可能です。前回、Unknown Device #1の件で、お世話になったKyoro’s Room Blog様でも、そのExample使ってディスプレイを動かすことをやってらしたので、Displayについてはそちらをご覧ください。

作ってみたのは、LCDに文字を表示しつつ、LED3色を交互に光らせつつ、DACを使って電圧出力する、というデモ・プログラムであります。プログラムの作成そのものは簡単。Examplesのお陰です。メインはこんな感じ。

int main( void ) {
    initializePeriph();
//    dac_config();
//    LCD_ShowString( 0, 0, "LED & DAC demo", WHITE);
    LCD_ShowString( 0, 0, "LED demo", WHITE);

    while(1) {
        // RED
        LCD_ShowString( 0, 15, "RED  ", WHITE);
        contLED(LED_RED, (LED_GREEN | LED_BLUE));
        delay_1ms(500);
        // GREEN
        LCD_ShowString( 0, 15, "GREEN", WHITE);
        contLED(LED_GREEN, (LED_RED | LED_BLUE));
        delay_1ms(500);
        // BLUE
        LCD_ShowString( 0, 15, "BLUE ", WHITE);
        contLED(LED_BLUE, (LED_RED | LED_GREEN));
        delay_1ms(500);
    }
}

お気づきと思いますが、DAC関係の部分、コメントアウトしてあります。DAC動かなかったわけじゃありません。

  • DACは半分動いた。DAC0のみ。DAC1は動作しない。
  • しかし、DAC動かすとLCDの表示が消えてしまう。

というわけで、上のバージョンは、LCD表示を「活かして」DACを止める版です。アイキャッチ画像のときに使ったもの。なお、この理由の一つは、後でLongan Nanoボードの回路図を入手して分かりました。

Longan NanoのLCDインタフェースがDAC1の端子を使っている

動く筈がありませんな。DAC0については、例によってAnalog Discovery2を持ち出して、電圧を測定してみました。測定しているところはこちら。

測定結果は、

  • DACに0x7FF0を書き込んだとき、1.6V
  • DACに0x3FF0を書き込むと、0.8V

でした。ちゃんとアナログ出力されているみたいだけれど、大体何ビットのDACなんだ?そんな事も確かめてない。データシートを読まねばね。なお、DACの設定に使っている dac_config()関数はExamplesの中にあるDACC_output_voltageプロジェクトの中のもの。

しかし、DAC0だけなら動作するとはいうものの、やはりディスプレイがオカシイ。なぜ。DAC関係を一度「外して」動作させてみたのだけれど、やはり変。

Analog Discovery2で端子を当たっているから?

DAC0のPA4端子が黄色、DAC1のPA5端子が青。PA4端子は回路図見る限りディスプレイには使っていない筈だけれど動いているし。逆に使っている筈のPA5のこの動き方は何?

そこで、Analog Discovery2のオシロ端子を取り外した後、Longan Nanoの電源をOFFして、再起動してみたら、正常動作いたしました。

どうも、PA5端子に変に容量つけたりすると、うまく動かないこと判明。シリアルクロックが正常に動作しないから初期化からコケてしまうのかも。ま、それにしてもちゃんとDAC0とディスプレイが共存できるようにしないと、目的のアナログコンピュータ用の表示つきアナログ掛け算器が作れませぬ。やっぱりデータシート読まねば。

鳥なき里のマイコン屋(85) Longan Nano, Arduino環境?? に戻る

鳥なき里のマイコン屋(87) Longan Nano、DACに進む