2021年5月1日土曜日

CO2 測定機にOLEDな0.96インチ ディスプレイを付けてみた!


 LED表示だけだといまいちちゃんと動いてるのかよくわからないので、うちにいくつか転がっていたOLEDの0.96インチ ディスプレイを接続して具体的な数字を表示しました。
SPI接続なのでSDKのSPI関数を使用して制御してます。

void OLED_Init(void)
{
    // SPI initialisation. This example will use SPI at 1MHz.
    spi_init(SPI_PORT1000*1000);
    gpio_set_function(PIN_MISO, GPIO_FUNC_SPI);
    gpio_set_function(PIN_SCK,  GPIO_FUNC_SPI);
    gpio_set_function(PIN_MOSI, GPIO_FUNC_SPI);
    gpio_init(PIN_DC);
    gpio_init(PIN_CS);

    // Chip select is active-low, so we'll initialise it to a driven-high state
    gpio_set_dir(PIN_DC, GPIO_OUT);
    gpio_set_dir(PIN_CS, GPIO_OUT);

    OLED_CS_Set();
    OLED_DC_Set();

    sleep_ms(500);
    
    OLED_WrCmd(0xae);
    ...

たぶんディスプレイのベンダーによるものと思われるサンプルコードを元に書きましたが、CSをSPIの機能ではなく単純なGPIOとして動作させている以外は特に何も設定せずに素直に動いてくれました。

だがしかし!0.96インチだと文字が小さい・・・
もう一回り大きくしたいところだけどフォントを自作するのはめんどくさいなぁと思う今日この頃。



2021年4月18日日曜日

Visual Studio Codeの設定

 最近、Visual Studio Codeを積極的に使おうと努力しているのですがなかなか手に馴染みません。なんかヒントはないかなとGoogleで検索してみようかと「vs code 」と入力したところで検索候補に「日本語化」と出てきたので、そのまま検索してみたところトップに設定方法がそのまま表示されました。

Visual Studio Codeの日本語化設定

1. Visual Studio Codeを開く

2. メニューから[View]-[Command Palette]を選択

3. [Configure Display Language]を選択

4. [Install Additional Laugage]を選択サイドバーに拡張言語パックが表示されます。


簡単だけど、自分では絶対探し出せない自信がある。とりあえず日本語で表示できるようになりました。




日本語といえばソースコードのコメントが化ける場合があって文字コードの設定を合わせないとと思っていたのですが、実は自動認識の機能がありました、そしてなぜかデフォルトはオフ。どうかしています。

ファイル>基本設定>設定からfiles.autoGuessEncodingと入力しcheckをつけます。


2021年4月11日日曜日

Raspberry Pi Picoのメモリーマップ

 Picoはこのクラスのマイコンにしては潤沢なメモリーを搭載しているのであまりメモリーマップを気にせずにここまで来ましたが、MSCでフラッシュアクセスなんかの活用を考えるとメモリーの使用状況の把握は必須なのでこの機会にメモリマップの表を作成しました。

Picoメモリーマップ
アドレスサイズ用途備考
0x000000000x4000ROMブートコードなど
0x100000000x1000000FlashXIPによりメモリーイメージに展開されている
0x14000000XIP Registers
0x150000000x4000XIP CacheXIP Cacheを無効にしたらSRAMとして使用可能
0x200000000x40000SRAM4個のSRAM Bankをストライピングしている
0x200400000x1000SRAM
0x200410000x1000SRAM
0x210000000x10000SRAM Bank 0
0x210100000x10000SRAM Bank 1
0x210200000x10000SRAM Bank 2
0x210300000x10000SRAM Bank 3


PicoでCO2センサーを作ってみた!

 コロナ騒ぎのニュースの中で換気の目安としてCO2センサーを使うという話しを聞きます。調べてみると部品としてもCO2センサーは数種類出回っているようなのでアマゾンで一番安いのを試しに買ってみました。


失敗だったのはこの基板の仕様をよく読むと入力電圧が5Vとなっていることです。PicoのI/Oは3.3Vなので直接つなげないと思っていたらチップのCSS811のデータシートを見ると入力電圧は1.8~3.6Vとなっていましたので、5V系の基板に接続するために内部でLDOかなんかで3V系に落としていると見ました、それならば大丈夫だろうと3.3Vを接続したところ特に問題なく動きました。


まずはブレッドボードと接続

Pico SDKのI2Cライブラリを使用して送受信します。Arduino用には色々とサンプルコードがありますし実装例もいっぱいあるのですがPicoはもちろんその他の流用できそうなサンプルは無かったので普通にデータ仕様書見ながら初期化ルーチンを書きます。
1. HW_IDやSTATUSを確認する(なくても大丈夫)
2. APP_START(0xf4)に書き込みをして動作開始
3. MEAS_MODE(0x01)にDRIVE_MODEとINTERRUPTを設定する(モード2の場合は0x28)
4. STATUS(0x00)のDATA_READYビットをポーリングする
5. DATA_READYビットが立ったらALG_RESULT_DATAから2バイト読み込む
6. 1バイト目が上位バイトなのでビットシフトして16biti値にする。

最初のうちは0x190(400)ばかりでしたがだんだんそれっぽい数字になってきます。どうやら少しエージングする必要があるそうです。嫁が換気扇を回さずにコンロを使ったりするとかなり数値が上がったのでまぁまぁ目安にはなりそうな感じです。


Picoさえあれば開発用基板はいっぱいあるのでCO2センサー専用に1枚作りました。Picoは漢らしく直接表面実装です!
400-1000ppm    緑LED
1000-1500ppm   :黄1LED
1500-2000ppm   :黄2LED
2000以上            :赤LED

しばらくリビングで我が家の換気状況を見守らせましょう。



2021年4月7日水曜日

追加のPicoが来た!

 Seeedで基板を作る時にPicoをうけ Seeedで基板を作る時にPicoを売っているのを見つけて注文していたのですがようやく送られてきました。

オリジナルの箱に入ってた。

ケーブルとピンヘッダー付きです。

これでようやくPicoprobeを試すことが出来ます。