マイコン

Visual Studio Codeで がじぇるね の開発 (C++)

Visual Studio CodeでGADGET RENESAS(がじぇるね)の開発をする裏技です。 GR-SAKURAとGR-CITRUSで確認ずみ。 Windowsで確認ずみ。Macでもたぶんできるはず。Linuxは未対応。 Arduinoベース(C++言語)での開発です。Rubic / mrubyではありません。 Visual Stud…

LPC111xマイコンのピン機能設定の注意点

LPC111xマイコンのピン機能は基本的にはGPIOがデフォであり、IOCONFIGレジスタのFUNC=0がGPIOとなっているが、一部そうでないピンがある。特に下記(2)の場合が要注意である。 (1) RESET, SWCLK, SWDIO RESET, SWCLK, SWDIOのピン(PIO0_0, PIO0_10, PIO1_3)は…

EclipseでMbedでnRF52なローカル開発環境

(1) やりたいこと nRF52832のソフトウェアをMbedで開発したい オンラインコンパイラは嫌(※1)なのでローカルで開発したい EclipseベースでもいいのでGUIなIDEで開発したい Windows上で開発したい Mbed Studioなにそれ? (※2) デバッガはnRF52-DKボードのJ-Lin…

LPC1114のA/Dコンバータ

LPC1114のA/Dコンバータでちょっとつまづいたのでメモ。 LPC1114のA/Dコンバータには以下の2つのモードがある。 (1) ソフトウェア制御モード A/D制御レジスタ(AD0CR)のBURST=0とするとこのモードとなる。 AD0CRのSELでチャンネルを選択し、AD0CRのSTART=001…

Visual Studio CodeでArduino

Arduino IDEはなにかと不便なのでVisual Studio Code (VSCode) を使ってArduinoの開発をするメモ。 VSCodeとArduino IDEをインストール 当然ながら、まずVSCodeをインストールしておくこと。また、VSCodeでArduinoの開発をするといっても、内部ではArduino I…

SW4STM32のデバッガ設定の注意点 (リセットモード)

System Workbench for STM32 (SW4STM32) でハマったのでメモ。ST-Linkをマイコンボードに接続してデバッグしようと思ったら、下記のようなエラーが発生した。 Error: timed out while waiting for target halted どうも SWCLK と SWDIO だけを接続して RESET…

MbedからLPCXpressoへのエクスポート

やりたいこと Mbedのオンラインコンパイラで作成したLPCマイコンのプロジェクトをエクスポートしてLPCXpressoにインポートしたい。以前はエクスポート時の選択肢にLPCXpressoがあったのだけど、今はなくなっている。代替手段を見つけるのに手間取ったのでメ…

PSoC注意点メモ

PSoC 5LP Prototyping Kitの注意点 PSoC 5LP Prototyping KitのP0_2, P0_3, P0_4, P3_2にはでかいコンデンサ(1uF)がついてるので要注意。とくにOPアンプで使うときに不都合。(不都合なときはC12, C13, C9, C7をはずす。) P1_0, P1_1もデバッガ用ピンなので使…

今さらLPCXpressoメモ (2)

割り込み待ち 割り込み待ち命令の組込み関数は、__WFI() クロック出力 LPC812 Xpressoの場合、P0_1ピンにクロック出力が設定されている。 設定箇所は、lpc_board_nxp_lpcxpresso_812(ボードライブラリのプロジェクト) の board_sysinit.c の Board_SetupMuxi…

固定小数点計算ふたたび

前回の 固定小数点の再発明 - 滴了庵日録 ではROMサイズがかえって増えるという残念な結果になったので、C++でクラス化することはあきらめてC言語で書きなおした。 fixed24.h #ifndef _FIXED24_H #define _FIXED24_H #include<stdint.h> typedef int32_t fixed24; #def</stdint.h>…

今さらLPCXpressoメモ

ひさしぶりにLPCXpresso使ったら、使い方忘れてたのでメモ。 IDEのインストール 最新版のLPCXpresso IDE (今日現在でv8.2.2_650) をダウンロードしてインストールする。 Windowsでは、通常は C:\nxp\LPCXpresso_8.2.2_650 にインストールされる。 IDEの起動 …

固定小数点の再発明

Adafruit TrinketのようなROMが数キロバイトしかないマイコンでは、float型を用いると浮動小数点のライブラリがROM容量を圧迫してしまう。そこで固定小数点クラスを作ってみた。【2019/05/24 追記】 Arduino IDEでビルドしてみたところ、AVRマイコンではfloa…

Arduinoのしょうもない落とし穴

踏んでしまったのでメモ。操作ミスまたは一時的なバックアップのつもりでうっかり下図のようなファイルコピーをおこなったとする。このとき、test.ino を開いてもArduino IDE上に test - コピー.ino は表示されない。空白や日本語を含むファイル名のソースは…

Arduino系マイコンで超いいかげんなprintf

Arduino系のマイコンでprintfをシリアルに出力するためのいいかげんなマクロ static char print_buff[256]; // ←メモリが許すなら十分大きくとる #define printf(...) sprintf(print_buff, __VA_ARGS__), Serial.print(print_buff) sprintf()とSerial.print(…

マイコンでTensorFlow!? (4)

今回はいよいよTensorFlow Liteのサンプルコードをビルドしてボードに書き込んでみます。 サンプルコードの内容 SparkFun Edgeボードの2つのマイクに入力される音声から「Yes」と「No」という単語を検出します。これには畳み込みニューラルネットワークによ…

マイコンでTensorFlow!? (3)

今回はサンプルコードのビルドとボードへの書き込みをやってみます。以下の2つを試します。 Edge Test:GPIO、UART、ADC、I2Cなどのハードウェア機能のデモ。 Makefile Project Template : 自分でプロジェクトを作るためのテンプレート。 (1) Edge Test 4つ…

マイコンでTensorFlow!? (2)

今回は開発環境をセットアップしていきます。前回説明した通り、SparkFun EdgeボードはまだGUIなIDEが用意されていないので、コマンドラインベースの開発環境を構築する必要があります。 (1) Bash コマンドラインツール、いわゆるシェルです。MacやLinuxを使…

マイコンでTensorFlow!? (1)

ワンチップマイコンでTensorFlowが動くという驚きのTensorFlow Lite対応ボードを入手しました。人柱レポートしていきます。 TensorFlow Liteとは ごぞんじGoogleが世に出した機械学習フレームワークTensorFlowの軽量版です。強力なクラウドサーバやPCではな…

Arduinoのハードウェアシリアルのボーレート誤差

AVR 5V(16MHz)系 (Uno, Mega, Leonardo, Micro, Pro Mini 5V など) ボーレート設定 実際のボーレート 誤差[%] 9600 9615.4 0.16 19200 19230.8 0.16 38400 38461.5 0.16 57600 58823.5 2.12 115200 117647.1 2.12 230400 222222.2 3.55 基本的には倍速動作で…

STM32のRTCの落とし穴

STM32のRTCを使ってみてハマった落とし穴などについて書く。 環境は、STM32F767ZI (Nucleo-F767ZI) + HALドライバ + CubeMX + IAR EWARM 以下では単にSTM32と書くが、STM32F767ZIでしか試していない。 やや不可解な内容も含むので誤りがあればご指摘ください…

独断と偏見で選ぶ五大Arduino系ボード

いろいろ種類が増えすぎたArduino系マイコンボード。僕がよく使うものを中心にチョイス。(かなり偏ったチョイスです。) Arduino UNO : 最初の1台に。リファレンス用に。 GR-SAKURA : 実戦むき。UNOサイズの高性能ボード。 Arduino Pro Mini : ちっちゃいも…

mbedのプロジェクトにmbed-srcをインポートする

mbedのwebコンパイラでプロジェクトを作成すると、mbedライブラリ(歯車のアイコン)はドキュメントのみでソースが含まれない。 ソースをインポートするには以下のようにする。 mbed-srcから import into Compiler をクリックし、Target Pathでインポート先の…

GR-CITRUS + WA-MIKANをC++で使う

Rubyなにそれおいしいのシリーズ(笑) GR-CITRUS+WA-MIKANは、Rubyの環境(Rubic)ではGR-CITRUSからWA-MIKANのWiFi機能を使うクラスが用意されていますが、ArduinoライクなC++環境であるIDE for GRではクラスが用意されていません。かたくなにC++でGR-CITRUS+W…

STM32のリセットフラグ

ウォッチドッグによってリセットしたことは下記のコードでチェックできる。 // ウォッチドッグによってリセットしたか? if(READ_BIT(RCC->CSR, RCC_CSR_IWDGRSTF)) { // フラグのクリア CLEAR_BIT(RCC->CSR, RCC_CSR_IWDGRSTF); } 同様に下記のようなフラグ…

Arduino UNO のタイマ資源

毎度気になるArduino系やmbed系マイコンボードでのタイマ資源の問題。 Arduino UNOでは、下記のようになっているらしい。競合に要注意。 Timer0 8bit delay(), millis(), micros()などの時間管理5,6番ピンのPWM Timer1 16bit ServoライブラリTimer1ライブラ…

STM32のバックアップレジスタ

バックアップレジスタとは? STM32マイコンには主電源(Vdd)を落としてもバックアップ電源(Vbat)で値が保持されるバックアップレジスタがある。 一種の不揮発性メモリとして利用できる。 ただし容量は、マイコンの型番によるが20〜128バイト程度しかない。(ST…

IAR EWARMのMAPファイルの見方

項目 内容 先頭 実行したコマンドライン等の情報 RUNTIME MODEL ATTRIBUTES よくわからん HEAP SELECTION よくわからん PLACEMENT SUMMARY ・各セクションの先頭アドレス・各オブジェクトの配置(よくわからん) INIT TABLE 変数の初期化テーブル MODULE SUMMA…

マイコンでtan(355/226)の計算

tan(355/226)の計算は関数電卓の正確さを試すベンチマークによく使われるらしいです。というのも、355/226はπ/2に極めて近い有理数であり、π/2近傍でtanは無限大に発散するからです。 下表のように両者は10進数で7桁まで一致しています。 π/2 1.570796326794…

STM32のブラウンアウトリセット

STM32マイコンにはブラウンアウトリセット(BOR)の機能がある。ブラウンアウトリセットとは、ざっくり言うと電源電圧が(パワーダウンするほどでもないが)ちょっと下がったときにリセットをかけることである。この機能はデフォルトではOFFになっており、オプ…

CubeMXでIWDGを有効にしたときの小技

CubeMXでIWDG(ウォッチドッグタイマ)を有効にした場合、自動生成される初期化コードでIWDGがスタートしてしまうため、デバッガで実行を止めるとIWDGによってリセットがかかってしまう。これを回避するためには、デバッグ時には下記のようなマクロをmain.cの …