スキップしてメイン コンテンツに移動

投稿

ラベル(AVR)が付いた投稿を表示しています

新AVRの内蔵温度センサを試す

 AVRにはADCの内部入力として温度センサが搭載されているものがある。シリコンダイオード方式ゆえに製造工程で特性がばらつくため、個体毎に面倒な校正作業が必要となっていた。 http://ww1.microchip.com/downloads/en/AppNotes/Atmel-8108-Calibration-of-the-AVRs-Internal-Temperature-Reference_ApplicationNote_AVR122.pdf  新しいmegaAVR-0やTinyAVR-1、AVR-DAはXMEGAの系譜なので、内蔵温度センサの校正係数があらかじめSignature ROW領域に記述されている。これを読みだしてキャリブレーションを行う手順がデータシートに記述されていたので試してみた。  Arduino Nano Everyで試せるサンプルスケッチ。    https://github.com/kentN/samplecodes/tree/main/Arduino/NANOEVERY-TEMPSENSE IDE付属のシリアルプロッタでモニタしてみると温度グラフが現れる。ホットエアでダイ温度が100℃になるほど炙ってしまったが、そのまま動作しつづけていた。 手元にあった二つのArduino Nano Everyはそれぞれ校正値を読み出すと次のようになっていた。 DEBUG: 305k, offset :-31 gain :142 DEBUG: 305k, offset :-6 gain :144  実機で比較テスト tinyPDUテスト基板  実際に温度を調節して試験してみよう。比較対象として、tinyPDUに接続してあるパルス温度センサLMT01の一つ(CH2)をQFNパッケージに張り付けた。  LMT01は高精度ADC内蔵、2端子カレントループ、温度データを約100ms毎にパルス数で出力するという面白いセンサ。-20度~90℃範囲で±0.5℃の測定精度とあるので、用途的には十分すぎる。(ただし割り込み管理が甘いとパルスカウントの取りこぼしで正確な温度を示さないことがある) テストプログラム。CH1、CH2はLMT01。CH2はMCUに張り付けている。  緑色...

新しいAVRのメモ(2020~)

新AVRのラインナップが増えたので整理した。(2021年更新)  現時点でラインナップに上がっている新しいAVRのシリーズの周辺機能を、旧来のものと比較してみると次のようになる。(TinyAVR-2はこれを書いていた2月時点ではまだ評価ボードの出荷のみだった)  AVR-DA/DB TinyAVR-2 共通項 ・12ビットADCを内蔵した ・Vref電圧が使いやすくなった(ADCのビット数に合わせた値に) ・バス数の増加 TinyAVR2 ・USARTが2chとなった ・ADCはプログラマブルゲインアンプ(PGA)を内蔵。 ・DACは外部出力が削られた(内部ではアナログコンパレータやADCの入力へ繋げられる) AVR-DA ・全電圧範囲で24MHz駆動できる ・10bitDAC搭載 AVR-DB ・DAの特徴に加えアナログ機能へ特化。OPAを3つ内蔵 ただしタッチ検出機能は削除 ・主クロックに外付け水晶が使える(XOSCHF) ・ポートCのI/O電源電圧は独立して設定できる(双方向レベルシフトできる)  新シリーズはどれも、アナログ機能の高精度化が施された。もともとXMEGAは12bit SAR ADCだったけども、レジスタ構成は結構違うし、Vrefなどの構成を見るとPICへ寄ってきているように見える。パッケージはDIPまであるので入門もしやすい。  TinyAVR-2は3㎜角のパッケージでもUARTが2ch使えて、12bitADCが載っている。Tinyと名がつくがCPU仕様は乗算器含めて共通なので、メモリとROM容量以外の処理能力はmegaAVRと一緒だ。  AVR-DA/DBはmegaAVR-0の上位互換となる。ピン互換もあり、ペリフェラル/ROM/RAMは増加し、64ピンパッケージが用意されている。 一番は内蔵オシレータへ手が加わり、電圧を気にせず最大周波数で動かせるようになったこと。(XMEGAでも最大クロック時には2.7Vが下限だった) ※ただし、DAはDBと違ってXOSCHFは無い。  トラ技2021年4月号によると、コア部はレギュレータで別電圧とのこと。今までのシリーズとはコア設計が変わっているようだ。  5V単電源でも動作し、集積度が低く頑丈なMCUが必要な領域というのは存在する。 ...

電源管理モジュールの製作

2021年が始まった。去年も仕事はあったけれど、納品先に実際に出向いたのは一度だけだった。 日常がじわじわ侵食されていく中、今年はどうなることだろう。   そういう状況下では、実験装置の構成を、どこでも誰でもできるようにしておくという作業がたくさん出てくる。 最小限の装置でPC単体での遠隔開発が行えるような手段。似たようなものはお仕事でもワンオフで何度か作ってきて、今までも役立ってくれている。ということで昨年は仕事の合間に組み込み部品としての試作をいろいろ行っていた。  実際のところ、単体ではマイコン付きFETとシャントモニタでしかない。最近遊んでいるTinyAVR-0をMCUとして載せている。 機能としては以下のとおり。 ・電源ONOFF制御 ・INA226による0.5mA単位 ~4A程度までの電流測定、アラート通知 ・電圧(スイッチ前後)の測定  セルフチェック機能 ・コマンドサーボのようなデイジーチェーン接続 ・拡張性 端面スルーホール加工にしてみた。他の基板への実装も簡単。 USB端子がついた基板は、TinyAVR-0つきFT234Xが載ったUSBシリアル変換器。UPDIプログラマ化できる 試作例1  試験コントローラ 試験用冷蔵庫に入れて、庫内で電源制御や温度監視をさせてみた。 温度センサにはLMT01を複数繋ぎ、庫内や測定対象に取り付ける。 制御例。MegunoLink上でプロットと電源制御を行った例。 試作例2 試作OBC基板の電源制御、モード管理、状態監視 開発中にOBCの電流値を参照したり、電源制御段階ごとの異常検知や、ブートモード切替などをソフトウェア上から行える。実装と冗長性の検討が長引いて回路図段階で何回もやり直したおかげか、試作一号機はとりあえず元気に稼働し始めた。   たいていのシステムには複数の機能別ボードや異機種コントローラが内包されているものだけど、それらの動作を最適化しながら、HILS的なシステムを作りあげるのは結構大変。  個人的に、まずはベースバンド部、アプリケーションプロセッサ、ストレージみたいなまとまりを作りこむために、共通化配線とI/F基板1つでPCにつないで開発できることを目標としている。(電力規模100mW~1W以下)

Arduino CLIの導入

Arduinoのコマンドライン環境 arduino-cli を触ってみる。 屋外設置のRaspberry pi3A+ に導入し、接続した独自ボードに書き込みができる環境を構築してみた。 結論から言うと、一度コンフィグが済んでしまえば、コンパイル、アップロードはとても快適。  手順を調べた時の環境 (2020年4月) 実行環境 :  Raspberrypi 3A+ , Raspberry pi 3B, RaspberryPi4B(4GB) OSはRaspbian Burster(v7)で共通 バイナリ: arduino-cli_0.10.0_Linux-ARMv7.tar.gz SSHターミナル:MovaXterm (Windows10) ボード: Arduino Uno,  Arduino互換機 (Sanguinoベース) 最初の工程は大まかに4つ (2020年5月現在) 1 最新バイナリを任意のディレクトリに設置。バイナリはPathを通しておく         入手先  https://arduino.github.io/arduino-cli/installation/         RaspianだとLinux ARM 32bitでよいはず(そのうち64bitバージョンになりそう) 2 初期設定        作業フォルダの設置         Configファイルの初期化(ホームディレクトリに.arduino15が生成される)                  $arduino-cli config init     3 ボード関連のインストール         ボードインデックスの初期化   ...

Arduino Nano Everyを試す

 秋月で売っていたAtmega8と、感光基板でエッチングしたArduino互換ボードを製作してみて、次に本家ボードも買って…  と気が付いたら10年が経過していた。  ハードウェア的な観点では、今は32bitMCUの低価格化、高性能化、低消費電力化が著しい。動作周波数も100MHz超えが当たり前で、30mA程度しか消費しない。  動作電圧範囲が広く、単純な8ビットMCUが不要になることはまだないだろうけど、クラシックなAVRマイコンは値上がりしており、価格競争力は無くなりつつある。 そしてコモディティ化により、公式ボードでは不可能な値付けの安価な互換ボードがたいていの需要を満たすようになってしまった。     Arduino Nano Every https://store.arduino.cc/usa/nano-every https://www.arduino.cc/en/Guide/NANOEvery  そんな中、Arduino本家がリリースした新しいNanoボードの一つ。  他のボード2種はATSAMD21(Cortex-M0+)と無線モジュールを搭載したArduino zero(生産終了済み)ベースのIoT向けボードだが、 Nano EveryはWifi Rev2と同じくAtmega4809を採用していて、安価で5V単電源な8ビットAVRボードだ。  Atmega4809はATmegaと名がついているが、アーキテクチャはXMEGAベースとなり、クラシックAVRとの間にレジスタレベルの互換性は無い。   https://blog.kemushicomputer.com/2018/08/megaavr0.html  もちろん、ArduinoとしてはArduinoAPIのみで記述されたスケッチやライブラリは普通に動作するし、Nano Every用のボードオプションとして、I/Oレジスタ操作についてはAPIでエミュレーションするコンパイルオプション(328Pモード)がある。 公式のMegaAVR0ボードはどれもブートローダーを使わず、オンボードデバッガで直接書き込みを行っている。  ボードを観察...

CAL.4809の開発(2) ケース試作

CAL.4809のためのケースを設計してみた記録。  21世紀のかまど。 マインクラフト感がある。 思考する速度で試作したい  3Dプリンタを導入した。 個人的に初めて3Dプリンタ造形物のデータを作って、出力してもらったのが2012年頃だったので、すでに6年もの歳月が経っている・・・。 自己所有する機運が高まるのにだいぶかかった。 どうもハイプ・サイクル的な波が落ち着いた頃に導入する傾向がある。  いろいろ検討してみた結果、今年出た新型、Flashforge Adventurer3に決めた。 完成品で箱なので、机の下に設置しても大丈夫なのが決め手。  動作音は静かなインクジェットプリンタと炊飯中の炊飯器のファン音を足して二で割った感じ。 静音を謳うだけあってほとんど気にならない。  Z軸キャリブレーションだけで快調に動いている。  高速試作環境のために導入したわけなので、Fusion360に慣れる目的でCAL.4809の外装を試作してみた。 3Dモデリングも久しぶりだが、割と覚えていた。  基板部分のデータはKiCadからエクスポートしたSTEPファイルを取り込んだ。 その外側にケースを作成する。 外装は基板外形を1mm拡張して、壁の厚みを0.8mmとした。  前後はNATOベルトを通すための隙間を設けている。  側面はボタン、IrDAポートのための加工を行った。 ボタン部は素材の弾性を使う。 ケース自体は装着を考え、下部の時計用ベース基板に固定するための爪を側面に設ける。  上のCAD図は既に5回くらいのバージョンアップの後のもので、最初はボタン部などの造形をせず、外形だけでプリントして検証し、徐々に細部の造形に移っていった。 単純な造形なら30分ほどで出力できる。 彫り込みというか刈り込みというか、とにかく手元にプリンタが無いと試行錯誤ができない。 途中から出力方向をひっくり返した。 ほぼサポート材 モデリングの過程で出力して確認するサイクルを経て、最終的に一番精密なモードで1時間半かけて出力した。 ラフトを剥がすのに便利な 時計のコジアケ。 買ったけど時計を全然こじ開けてない...

CAL.4809の開発(1)

 2018年の新作。ATmega4809を使った試作ということで、CAL.430FR(2015年)の後継機を製造した。   CAL.430FR https://blog.kemushicomputer.com/2015/03/cal430fr1.html  今回はケースの作成にも挑戦してみたので、3Dプリンタでの製造は別の記事にまとめる。  430FRはKiCadの練習で作ったけれど、それ以来3年間で設計、製造、実装した基板は結構な数になった。  今年は大きなプロジェクトも一段落したので、自分の趣味プロジェクトも原点回帰してみることにした。 3年半前の基板(左)と今回の基板(右) シルクに印字したQRコード。思ったよりコントラスト不足で認識率が良くない 黒基板とかだとアリかも  36mm角の基板サイズ、コネクタ位置等はCAL.430FRと同じだが、マイコンはATmega4809にして、新たに赤外線トランシーバーを載せた。IrDAにした理由はUSARTにモデム機能があったからというだけだけれど、一応通信機能を持った基板となった。これで規格の波に数周遅れのスマートウォッチが作れる。  サイドボタンは1つ削減して3つになっている。 https://github.com/kentN/CAL4809 12月に入り、夏以降 ほとんど音沙汰のなかったArduino Uno Wifi rev2がとつぜん販売開始となっていた。 日本では無線LANモジュールの認証作業の完了待ちらしいけど、そのうち入手できるだろう。 ボード外観を見た感じではレベルシフタが一つ増えていて、WifiモジュールとのIFまわりに仕様変更が見て取れる。   リリースされたばかりのArduino Uno Wifi rev2向けのボード定義も配信が始まり、ボードマネージャ経由でインストールすることができた。  ボード定義で面白いのは、ATmega4809としての定義と別に、端子レベルでATmega328Pをエミュレートするコンパイルオプションがあること。Wifiモジュールなどとの通信制御を遮蔽しつつ、UNOと同じピン定義でプログラミング可能なようだ。 ...

ATmega4809(megaAVR0)を試す

megaAVR 0という新しいAVRシリーズを試してみた。  小さいパッケージなのに、UARTが4本もあるのが気になったのがきっかけ。 登場すると噂の Arduino Uno Wifi rev2  にも採用されるらしい。  簡単にデータシートを眺めてみると、アーキテクチャはXmegaシリーズを簡素化し、動作電圧範囲を広げたもののようだ。  CPUの命令セットはAVRxtと新しくなっているが、Xmegaで拡張された一部の命令(DESやUSBで使われる命令)が削除されていて、基本的に今までのATmegaとほぼ同じだ。  コンパイラからは、先に登場した新しいtinyAVR0, tinyAVR1シリーズと共にAVR8Xと呼ばれて区別されている。  CPU周りを見てみると、割り込みレベルなど、今までのクラシックなATmegaで足りないなと思っていたものがかなり強化されていた。 ArduinoAPIを再実装するとしたら便利そうなペリフェラルもだいたい揃っている。 データシート P6  DMAは無いけれど、周辺機能にイベント駆動用の割り込みネットワークが張り巡らされているのがわかる。  できるだけCPUを介在させない使い方がいろいろ提案されているので、アプリケーションノートやマニュアルを読み込むことになる。 ピックアップした特徴 ・データメモリ空間(64kB)に統合されたFlashROMとEEPROM ・RAM 6kB ROM 最大48kB (メモリ空間制限のため) ・デバッグ専用の端子 UPDIを搭載 ・優先度付きの割り込み(NMIと2レベル) ・ピン単位の割り込み(かなり複雑になった) ・リセットコントローラ(ソフトウェアリセット用レジスタが実装され、リセット原因が何だったかもリセット後に読み出せるようになった) ・豊富な16ビットタイマ(4809では5基) ・16ビット リアルタイムカウンタ(RTC) ・豊富な非同期シリアル/同期シリアル(USART 4ch、SPI 1ch,TWI 1ch) ・内蔵クロックは最高20MHz(PLL)と32kHzの2種類。外部クロックは発振器と時計用水晶のみ ・ADCは10bit 16ch...