arduino 触った [PLD]
昨日(土曜日)
会社のマイコン研修があった。
arduinoを使ってLEDちかちかや、圧電スピーカを鳴らすシンプルな実験。
はんだごても使わず、ソケットに抵抗やLEDなどの部品をさして、マイコンにつなげる。
とっても簡単だった。シリアル通信もIDEについている。
そのIDEも無料。ステップ実行のDEBUGはたぶんお金かかる版をかわないといけないけど、
単純なプログラムならこれで十分だ。
値段も安い、アマゾンでも買える。4000円くらいで次の日に届く。
USBとPCつないで、マイコンにプログラムを書き込めば即動作する。
簡単すぎて、拍子抜けだね。
会社のマイコン研修があった。
arduinoを使ってLEDちかちかや、圧電スピーカを鳴らすシンプルな実験。
はんだごても使わず、ソケットに抵抗やLEDなどの部品をさして、マイコンにつなげる。
とっても簡単だった。シリアル通信もIDEについている。
そのIDEも無料。ステップ実行のDEBUGはたぶんお金かかる版をかわないといけないけど、
単純なプログラムならこれで十分だ。
値段も安い、アマゾンでも買える。4000円くらいで次の日に届く。
USBとPCつないで、マイコンにプログラムを書き込めば即動作する。
簡単すぎて、拍子抜けだね。
LatticeMico8 Development Tools User Guide [PLD]
暇だから訳していこうかなと。
mico8でもgccが使えるようになった。良いことだ。
フリーのCPUをフリーのコンパイラで使う。良いことだ。
目次は
1 イントロ
2 ツールセット コンパイラ アセンブラ リンカ など
3 インストール方法
4 簡単なプログラムをコンパイルしてみる
5 オブジェクトコードをリンクさせよう
6 .mem ファイルをつくろう (これをROMにぶち込むのだろう)
7 シミュレーション
8 あなたのソフトをつくる
9 Cライブラリ
10 binutils , mico8専用コマンド、オプション
11 gcc のオプションとか使い方
12 application binary Interface (API的なものか?) データの表現法、関数の呼び出し手順 割り込み
13 更に詳細を
14 便利なリンク集
こんなものか ページ数はPDFで30ページ弱。英語 まあ、経験があるやつは、
ナナメ読みで要点を拾えば、数日でいけるだろう。
オモシロい箇所があれば、訳して、記事にしていきますわ。
mico8でもgccが使えるようになった。良いことだ。
フリーのCPUをフリーのコンパイラで使う。良いことだ。
目次は
1 イントロ
2 ツールセット コンパイラ アセンブラ リンカ など
3 インストール方法
4 簡単なプログラムをコンパイルしてみる
5 オブジェクトコードをリンクさせよう
6 .mem ファイルをつくろう (これをROMにぶち込むのだろう)
7 シミュレーション
8 あなたのソフトをつくる
9 Cライブラリ
10 binutils , mico8専用コマンド、オプション
11 gcc のオプションとか使い方
12 application binary Interface (API的なものか?) データの表現法、関数の呼び出し手順 割り込み
13 更に詳細を
14 便利なリンク集
こんなものか ページ数はPDFで30ページ弱。英語 まあ、経験があるやつは、
ナナメ読みで要点を拾えば、数日でいけるだろう。
オモシロい箇所があれば、訳して、記事にしていきますわ。
仕事を勉強として考えている [PLD]
ここ最近、D級アンプの評価を主に業務としていた。
D級アンプの評価回路とローパスフィルタとスピーカ(コイルだよね)をつなげて、
オシロで波形を見る。
コイルは入力信号の周波数を高くすると、電流を通さなくなる(インピーダンスが
高くなる=抵抗が高くなる)ので、オシロに電流プローブ(こういう便利なものが
世の中にはある)をつなげて、それと電圧と電流を掛け算して(これもオシロが
やってくれる)電力値を見る。
本で書いていることを、実際自分で、準備して、観察(というか目撃だね)
するという科学的手法をDIYでやってみて、初めて、実感として、コイル
やらコンデンサの動作が理解できる。
自分で計算したのと、実測値が、だいたい同じだと、ドーパミンが出るくらい
興奮する(性交に近い)。おおおおお って感じ。
19世紀にテスラやスタインメッツがやっていたであろう実験を、素人
に毛が生えたような、辺境のアジア人であるボクが、DIYでやっている。
文明とは素晴らしい。技術とはアート(芸術ではなく、人の手による何かしら
を生み出すこと)である。
文芸や、絵画や音楽と同じ、電気やコンピュータの技術もアートだ。
それを利用して、マスプロするのもありだけど、こういう「アート」は
ワインや味噌醤油を作る技術と同じで、知っていたら嬉しいし、役立つ。
役にたたなくても、教養として意義深い。
それだけ
D級アンプの評価回路とローパスフィルタとスピーカ(コイルだよね)をつなげて、
オシロで波形を見る。
コイルは入力信号の周波数を高くすると、電流を通さなくなる(インピーダンスが
高くなる=抵抗が高くなる)ので、オシロに電流プローブ(こういう便利なものが
世の中にはある)をつなげて、それと電圧と電流を掛け算して(これもオシロが
やってくれる)電力値を見る。
本で書いていることを、実際自分で、準備して、観察(というか目撃だね)
するという科学的手法をDIYでやってみて、初めて、実感として、コイル
やらコンデンサの動作が理解できる。
自分で計算したのと、実測値が、だいたい同じだと、ドーパミンが出るくらい
興奮する(性交に近い)。おおおおお って感じ。
19世紀にテスラやスタインメッツがやっていたであろう実験を、素人
に毛が生えたような、辺境のアジア人であるボクが、DIYでやっている。
文明とは素晴らしい。技術とはアート(芸術ではなく、人の手による何かしら
を生み出すこと)である。
文芸や、絵画や音楽と同じ、電気やコンピュータの技術もアートだ。
それを利用して、マスプロするのもありだけど、こういう「アート」は
ワインや味噌醤油を作る技術と同じで、知っていたら嬉しいし、役立つ。
役にたたなくても、教養として意義深い。
それだけ
mico8再訪 [PLD]
ユーザーガイドを翻訳してみた(もちろん無許可やっちゅーの)
- 18bit幅命令
- コンフィグレーション可能な16 or 32bit汎用レジスタ
- スクラッチ・パッドメモリ
- I/O page化された256個ものポート
- 2 or 3 サイクル / 命令
- UARTなどが周辺機器として提供されている。
[機能解説]
- 例外処理
mico8は2つのみ提供
ad func
0 外部割込み
1 リセット
- GP-reg 汎用レジスタ
- ページ・ポインタ
追加のアドレスピンで、外部のメモリの量を増やしたい時に使う。
mico8のオペコードは256番地までしか直接アクセスはできない。
そのためR15/R14をシャドウ・レジスタとしてアドレスへのアクセスにしようする。
シャドウ・レジスタのアドレスは、高位バイトのアドレスビットに割り当てられる。
mico8のアドレスバスの幅は8から24までコンフィグが可能である。
そのアドレスバスはR15/R14のつなぎ合わせと、もう8ビットで実現される
(i.e. ext_addr = R15 & R14 & 8bits-opcode)
- スクラッチ・パッド
mico8は独立したメモリ空間を提供する、それはスクラッチパッドと呼ぶ。
(よくわからんけど、アセンブラを書くとき、これを意識して書くと
良い事がおこるらしい。何のメリットがあるかは調べてみます。後ほど)
- HW コール・スタック
"call"命令が実行された場合、次命令のアドレスはコールスタックにプッシュされる。
"ret"命令があれば、スタックはポップされる。そして、スタックの一番上から実行される。
スタックは16個実装されている。サークルバッファになっている。
論理合成時にサイズをコンフィグできる
- 割り込みハンドリング
mcuは1つの割り込みソース、それはレベルセンシティブ。その割り込みは
イネーブル/ディセーブルはSWでやる(cli= clear interrupt/ sti set interrupt)
割り込みack信号線は「H」にセットされる1度割り込みはACKされたら割り込み線は0にされ
ないといけない。
"iret"命令はコールスタックをPopする。そしてスタックの頂上アドレスにする。
「フラグ(carry and zero)」はシャドウ場所にもどされる。
- I/O
mico8は外部とスクラッチパッドメモリのデータやり取りはclockに動機して行われる。
v24実装は8bit address とデータバスを提供する。8bitアドレスバスはmico8に256メモリ空間を
提供する。
外部とスクラッチパッドメモリはひとつのアドレスバスを共有している。各メモリの入力データは
独立したデータバスにより供給される。
最初の32メモリアドレスは直接・間接アドレシングモードを使用する。
残りの224アドレスは間接アドレシングのみである。
v3 エンハンス
mico8はv3でいくつかのエンハンスが行われた。
- READY信号を追加。メモリ入出力で使用。
- 3クロックサイクルメモリ入出力はEBRとREADYをサポートするためのもの
- program rom (prom)は512 - 4096もちろんユーザが設定可能
- 無条件分岐 / call 命令 +/- 2K命令レンジ
[アセンブラと命令セットシミュレータ]
SWツールはアセンブラとISSで、両方Cで記述されてる。
- 18bit幅命令
- コンフィグレーション可能な16 or 32bit汎用レジスタ
- スクラッチ・パッドメモリ
- I/O page化された256個ものポート
- 2 or 3 サイクル / 命令
- UARTなどが周辺機器として提供されている。
[機能解説]
- 例外処理
mico8は2つのみ提供
ad func
0 外部割込み
1 リセット
- GP-reg 汎用レジスタ
- ページ・ポインタ
追加のアドレスピンで、外部のメモリの量を増やしたい時に使う。
mico8のオペコードは256番地までしか直接アクセスはできない。
そのためR15/R14をシャドウ・レジスタとしてアドレスへのアクセスにしようする。
シャドウ・レジスタのアドレスは、高位バイトのアドレスビットに割り当てられる。
mico8のアドレスバスの幅は8から24までコンフィグが可能である。
そのアドレスバスはR15/R14のつなぎ合わせと、もう8ビットで実現される
(i.e. ext_addr = R15 & R14 & 8bits-opcode)
- スクラッチ・パッド
mico8は独立したメモリ空間を提供する、それはスクラッチパッドと呼ぶ。
(よくわからんけど、アセンブラを書くとき、これを意識して書くと
良い事がおこるらしい。何のメリットがあるかは調べてみます。後ほど)
- HW コール・スタック
"call"命令が実行された場合、次命令のアドレスはコールスタックにプッシュされる。
"ret"命令があれば、スタックはポップされる。そして、スタックの一番上から実行される。
スタックは16個実装されている。サークルバッファになっている。
論理合成時にサイズをコンフィグできる
- 割り込みハンドリング
mcuは1つの割り込みソース、それはレベルセンシティブ。その割り込みは
イネーブル/ディセーブルはSWでやる(cli= clear interrupt/ sti set interrupt)
割り込みack信号線は「H」にセットされる1度割り込みはACKされたら割り込み線は0にされ
ないといけない。
"iret"命令はコールスタックをPopする。そしてスタックの頂上アドレスにする。
「フラグ(carry and zero)」はシャドウ場所にもどされる。
- I/O
mico8は外部とスクラッチパッドメモリのデータやり取りはclockに動機して行われる。
v24実装は8bit address とデータバスを提供する。8bitアドレスバスはmico8に256メモリ空間を
提供する。
外部とスクラッチパッドメモリはひとつのアドレスバスを共有している。各メモリの入力データは
独立したデータバスにより供給される。
最初の32メモリアドレスは直接・間接アドレシングモードを使用する。
残りの224アドレスは間接アドレシングのみである。
v3 エンハンス
mico8はv3でいくつかのエンハンスが行われた。
- READY信号を追加。メモリ入出力で使用。
- 3クロックサイクルメモリ入出力はEBRとREADYをサポートするためのもの
- program rom (prom)は512 - 4096もちろんユーザが設定可能
- 無条件分岐 / call 命令 +/- 2K命令レンジ
[アセンブラと命令セットシミュレータ]
SWツールはアセンブラとISSで、両方Cで記述されてる。
msp again [PLD]
ディスプレイのメニュー作りが一段落したので、暇になったので、
密造酒プロジェクトを再開
やり散らかし、あきるまで散漫に、すき放題がコンセプトではある。
買いっぱなしでもある。。。
今、やるのは、NECの赤外線リモコンのレシーバ(受け手)の部分だ。
しょぼいにも程があるが、一応無線だ。赤外線からゲットした信号を
マイコンからシリアル(COMポートだ)経由でPCに送り、データ値を確認する
という実験だ。(しょぼいが面白いぞ)
マイコン <=> PC間のシリアル通信は、簡単だがそうすんなりはいかない。
やたらと面倒なのだ。半田接続はただしいか? 設定はOKか? PC側、
マイコン側、など結構めんどくさいのだ。オシロを当てるのもめんどくさい。
でもマイコンでシリアル通信は基本だし、畢竟
「シリアル通信を制するものはマイコンを制する」と行っても良い。
僕が考えるマイコン技術とは
- 割り込み
- シリアル通信 (SPI, I2C, IrDAなど)
- タイマ (PWM, 要は任意で所望のパルスを作る)
ということだ。 それらを行うのは、マイコンのレジスタへの書き込み、読み出し
だ。簡単に行ってしまえばそれで終わりだ。凝ったアルゴリズムもいらん。
データ構造もいらん。オブジェクト指向も、動的メモリ割り当ても(出来なくはないし
できたら結構すごいとは思うが)、必要ない。 OSが乗ってなかったら、乗ってたとしても
ファイル構造も無い場合が多い。生データを読んだり、書いたり、シリアルデータを垂れ流し
たり、垂れ流しのデータを受け取ったりするだけだ。
本当に、それだけだと思う。
関数つっても、
void function(void)
だ。つまり、プロシージャ(プログラムの手順べた書きで、変数の受け渡しもなく)だ。
情け容赦なく、グローバル変数は多用されている。学校で、ガチガチに計算機科学を
学んできた人にとっては、この現場の体たらくに失望するかもしれない。そこには、
可読性などというエレガントな概念はない。動けばよいのだ。
それだけだ。
密造酒プロジェクトを再開
やり散らかし、あきるまで散漫に、すき放題がコンセプトではある。
買いっぱなしでもある。。。
今、やるのは、NECの赤外線リモコンのレシーバ(受け手)の部分だ。
しょぼいにも程があるが、一応無線だ。赤外線からゲットした信号を
マイコンからシリアル(COMポートだ)経由でPCに送り、データ値を確認する
という実験だ。(しょぼいが面白いぞ)
マイコン <=> PC間のシリアル通信は、簡単だがそうすんなりはいかない。
やたらと面倒なのだ。半田接続はただしいか? 設定はOKか? PC側、
マイコン側、など結構めんどくさいのだ。オシロを当てるのもめんどくさい。
でもマイコンでシリアル通信は基本だし、畢竟
「シリアル通信を制するものはマイコンを制する」と行っても良い。
僕が考えるマイコン技術とは
- 割り込み
- シリアル通信 (SPI, I2C, IrDAなど)
- タイマ (PWM, 要は任意で所望のパルスを作る)
ということだ。 それらを行うのは、マイコンのレジスタへの書き込み、読み出し
だ。簡単に行ってしまえばそれで終わりだ。凝ったアルゴリズムもいらん。
データ構造もいらん。オブジェクト指向も、動的メモリ割り当ても(出来なくはないし
できたら結構すごいとは思うが)、必要ない。 OSが乗ってなかったら、乗ってたとしても
ファイル構造も無い場合が多い。生データを読んだり、書いたり、シリアルデータを垂れ流し
たり、垂れ流しのデータを受け取ったりするだけだ。
本当に、それだけだと思う。
関数つっても、
void function(void)
だ。つまり、プロシージャ(プログラムの手順べた書きで、変数の受け渡しもなく)だ。
情け容赦なく、グローバル変数は多用されている。学校で、ガチガチに計算機科学を
学んできた人にとっては、この現場の体たらくに失望するかもしれない。そこには、
可読性などというエレガントな概念はない。動けばよいのだ。
それだけだ。
A/D コンバータ こんにちは [PLD]
仕事で ADCの検証を行う事になった。
ビデオ信号(アナログRGB)のやつだ。
概要を散文的に列挙、まだ系統だってない
- アナログRGB3線で(+xV ~-xV)の間でこの3つのブレンド具合で色を表現。
- FVHの同期信号、縦とか横とかフレームとか、プログレッシブとかインターレース
とか、いろいろ難い語句と原理があるが、まあ慣れだろうか。
- VGAとかSVGAとかの画面情報
- 差動信号なので、2つの信号をプローブして、マイナス演算する(のかな正しいかな)
- ADCのピンについてる受動部品(LCR)で、信号を調整する。(僕はここらへんのスキルが
貧弱である、まあ、別にいいけどね。めんどくさいからね)
- ADCにはたくさんのレジスタがある。それを外注の作ったアプリで読み書きする。
- 書き込みデータは設定ファイル化してある。
ToDo項目
レジスタを調べる(かなりたくさんあるから萎える)
信号の期待値と観測方法
実測した値と期待値の差の原因を調べる
原因が対処できるようなら、やってみる
それの繰り返しだよね
一番のネックは、膨大な数のレジスタによる設定だ。設定I2C(シリアル通信だよ)でR/Wする。
そのモニタ・R/Wツールとキモの設定は外注のエキスパート(こいつも中国系エンジニア)が
やってくれている。僕は、いろいろ試して、自分の所望の環境をそのできるエンジニアに委託
するという、若干しょぼい役回りではある。
あと開発したボードはテストピンが無いのでつらいね。プローブするのが。それが一番めんどくさい
のよ、別に開発用だから、売りもんじゃ無いじゃない。それなのにこの体たらく。
嫌になるけど、まあしょうが無いよね。
ビデオ信号(アナログRGB)のやつだ。
概要を散文的に列挙、まだ系統だってない
- アナログRGB3線で(+xV ~-xV)の間でこの3つのブレンド具合で色を表現。
- FVHの同期信号、縦とか横とかフレームとか、プログレッシブとかインターレース
とか、いろいろ難い語句と原理があるが、まあ慣れだろうか。
- VGAとかSVGAとかの画面情報
- 差動信号なので、2つの信号をプローブして、マイナス演算する(のかな正しいかな)
- ADCのピンについてる受動部品(LCR)で、信号を調整する。(僕はここらへんのスキルが
貧弱である、まあ、別にいいけどね。めんどくさいからね)
- ADCにはたくさんのレジスタがある。それを外注の作ったアプリで読み書きする。
- 書き込みデータは設定ファイル化してある。
ToDo項目
レジスタを調べる(かなりたくさんあるから萎える)
信号の期待値と観測方法
実測した値と期待値の差の原因を調べる
原因が対処できるようなら、やってみる
それの繰り返しだよね
一番のネックは、膨大な数のレジスタによる設定だ。設定I2C(シリアル通信だよ)でR/Wする。
そのモニタ・R/Wツールとキモの設定は外注のエキスパート(こいつも中国系エンジニア)が
やってくれている。僕は、いろいろ試して、自分の所望の環境をそのできるエンジニアに委託
するという、若干しょぼい役回りではある。
あと開発したボードはテストピンが無いのでつらいね。プローブするのが。それが一番めんどくさい
のよ、別に開発用だから、売りもんじゃ無いじゃない。それなのにこの体たらく。
嫌になるけど、まあしょうが無いよね。
シリアルの割り込み [PLD]
mspのシリアル割り込み備忘録
結論 : 上手くいかない
症状 : 割り込みがかからない
原因はよくわからない。 割り込みはStartかStopでかかる筈と過程しているので、
Rx側の立ち下がり または 立ち上がりが割り込みになっていると思ったのでスイッチを
半田でつけてそれを押したり、離したりして、波形を観測したのだが、、
うんともすんとも言わない。
資料がネット上で検索してもヒットせず。こまっている。
使っているチップはF2272。だれかヘルプ
結論 : 上手くいかない
症状 : 割り込みがかからない
原因はよくわからない。 割り込みはStartかStopでかかる筈と過程しているので、
Rx側の立ち下がり または 立ち上がりが割り込みになっていると思ったのでスイッチを
半田でつけてそれを押したり、離したりして、波形を観測したのだが、、
うんともすんとも言わない。
資料がネット上で検索してもヒットせず。こまっている。
使っているチップはF2272。だれかヘルプ
回路の検証作業 [PLD]
土曜日も仕事をした。金曜に飲んで、会社で寝たからだ。
そのため、会社のセキュリティ操作を間違え、セコムが来てしまった。。。(申し訳ない)
さてさて、
今日は基板の検証だ。マイコンのプログラム書き込みコネクタにはんだを当てすぎて、
壊してしまったので、その修理。
ピンのピッチは1.27mmととても狭い。コネクタを買ってきて、はんだを付けて、
プログラムを書き込む。書くと小一時間でできそうだが、USBの電圧を測ったり、
回路図とにらめっこしながら、悪いところをチェックしたりと、5時間くらいかかった。
最近は仕事をサボリがちだったので、
これからは、FPGAに書き込み、マイコンの割り込み処理、などを来週行う。
FPGAはシリアル転送を仕上げる。
そのため、会社のセキュリティ操作を間違え、セコムが来てしまった。。。(申し訳ない)
さてさて、
今日は基板の検証だ。マイコンのプログラム書き込みコネクタにはんだを当てすぎて、
壊してしまったので、その修理。
ピンのピッチは1.27mmととても狭い。コネクタを買ってきて、はんだを付けて、
プログラムを書き込む。書くと小一時間でできそうだが、USBの電圧を測ったり、
回路図とにらめっこしながら、悪いところをチェックしたりと、5時間くらいかかった。
最近は仕事をサボリがちだったので、
これからは、FPGAに書き込み、マイコンの割り込み処理、などを来週行う。
FPGAはシリアル転送を仕上げる。
仕事 [PLD]
今日は実りが多い。
気づいたこと
1。GNDの半田は難しい。GNDは銅の平面なので、電気と同様熱も拡散するので、熱されにくい
からだ。
2。配線はできるだけ短く。配線がねじれる=L成分=そしてそれはノイズ源
3。スペックの一番知りたい情報は何なのか?それに辿り着くのはASAPでないと
いけない。仕事では。
4。今はアルテラのFPGAを使っている。アルテラのFPGAのコンフィグ方法は
少なくともJTAG,PS,ASと3種類はある(本当はもっとある)。
MSELでそれを選択する。
気づいたこと
1。GNDの半田は難しい。GNDは銅の平面なので、電気と同様熱も拡散するので、熱されにくい
からだ。
2。配線はできるだけ短く。配線がねじれる=L成分=そしてそれはノイズ源
3。スペックの一番知りたい情報は何なのか?それに辿り着くのはASAPでないと
いけない。仕事では。
4。今はアルテラのFPGAを使っている。アルテラのFPGAのコンフィグ方法は
少なくともJTAG,PS,ASと3種類はある(本当はもっとある)。
MSELでそれを選択する。
jtag 失敗 恥かしや [PLD]
はんだ付けをすべて終わり、スイッチとLEDの簡単なRTLを作って、導通チェックの段階。
いろいろ苦労した(古いCPLDなので、MAX+2で論理合成とフィッティング)が一応 pofファイル
を作って、いざ、コンフィグ。
しかし、ツールは「Jtagを認識しません。」「デバイスはbusy」との無慈悲なエラー。
jtagって、たったの4ピンだぜ。ほとほと、自信なくしたわ。
原因は、銅線が長すぎ(20cmくらい、コネクタとCPLDの距離がある)が一番ありえそう。
それを3cmくらいに短くしたので、明日再コンフィグ挑戦。
同僚からは、「おまえの作った回路はゴミだ」「意味があるのか」など罵倒の嵐(笑い
まあ、リハビリみたいなもんだから、許して下さいな。
いろいろ苦労した(古いCPLDなので、MAX+2で論理合成とフィッティング)が一応 pofファイル
を作って、いざ、コンフィグ。
しかし、ツールは「Jtagを認識しません。」「デバイスはbusy」との無慈悲なエラー。
jtagって、たったの4ピンだぜ。ほとほと、自信なくしたわ。
原因は、銅線が長すぎ(20cmくらい、コネクタとCPLDの距離がある)が一番ありえそう。
それを3cmくらいに短くしたので、明日再コンフィグ挑戦。
同僚からは、「おまえの作った回路はゴミだ」「意味があるのか」など罵倒の嵐(笑い
まあ、リハビリみたいなもんだから、許して下さいな。