まごころせいじつ堂

浜町庄金 研究開発  マイコンで遊んでばっかりで

2012年06月

[MIPS]秋月PIC32MXをブレッドボードでLチカ

 従来のPICは食わず嫌いだったのだけど、MIPSと聞いてつい。

 秋月電子で普通のDIPパッケージで32bitMIPSアーキのマイコンが出た。190円〜220円。このうちフラッシュ32KB/RAM8KBでUSB付きのPIC32MX220F032Bを使ってみた。
PIC32MX220データシート
開発環境はPICkit3+MPLABXを使用した。PICkit2はPIC32に対応していないらしい。MPLABXはWindows/Linux/MacOSXに対応している。必要なのはXCコンパイラとMPLABX IDEのふたつ。これらをインストールする。

MPLABX

 PIC32を使用するには、[File][New Project...]からSamples/Embeded/PIC32 templateを選択する。
 次に作成したプロジェクトを選択した状態で[Files][Project Propaties]を開く。Configuration画面を以下の様に設定する。
Device:PIC32MX220F032Bを選択
HardwareTool:PICkit3以下に出ているシリアルナンバー(SN:BURxxxxxxxxx)を選択
Compiler Toolchain: PIC32用のCコンパイラが表示されていることを確認。

※MacOSX用でPICkit3が認識されていなかったのではまった。再インストールしたら認識した。Windows用は問題なし。

 では準備ができたので実験してみる。たけおかさんのを参考に(というよりまんまブレッドボードにのっけただけ)組み立てた。

PIC32MX220 (200円のMIPS CPU)を使う:たけおか ぼちぼち日記

配線はこんな感じ。
PIC32_01

電源供給はUSBシリアル変換モジュールAE-UM232Rからもらうことにした。PICkit3からの給電はしない(MPLABXのデフォルトでは給電なし)。
サンプルプログラムもたけおかさんのをそのままmain.cにコピペして使用。スミマセン。

pic32_02

シリアル通信を確認するにはFT232のドライバをインストールする必要がある。
Virtual COM Port Driver

MacOSX上では適当な端末ソフトが見つからなかったので、Arduino IDEのシリアルモニタを使用した。

 で、チカチカ成功。色々いじって点滅速度を変えたりシリアルに出力する文字変えたりして遊んでみた。


初期化の所で気になったのは以下。
SYSTEMConfigPerformance( SYSCLK );

これは動作周波数を引数として与えると、キャッシュ(実際はフラッシュROMのリード専用バッファに近い)の有効化やディレイの調整をまとめてやってくれるらしいのだが、PIC32MX220シリーズでは上限40MHzなのに80000000が指定されていた。80MHz動作はPIC32MX440シリーズのはす?この箇所を40000000に変更して確認したが、Lチカの周期は変わらなかった。どうやらPIC32MX220シリーズで40MHz以上の指定をしても上限40MHzになるみたいだ。なおシリアルの速度は変化しなかった。

 作例あり&ブレッドボードなので一晩でできました。みんなもやってみよう!

※LEDを2個同時に点灯させると若干暗くなる。I/Oはピンあたり15mA(シンク/ソース共)。


☆部品表

・PIC32マイコン
□PIC32MX220F032B

・秋月電子 USBシリアル変換モジュール
□AE-UM232R

・抵抗 1/8W
□10ohm
□330ohm x2
□10Kohm

・セラミック・コンデンサ
□0.1uF x2

・電解コンデンサ
□10uF 10V

・LED
□赤/緑/黄など適当に x2
(白/青はVFが3.3Vより上かもしれないので避ける)

□ブレッドボード
□ブレッドボード用配線材

□miniB USBケーブル

 

マイコン覚書き2012

色々調べて思った最近のマイコンに関するメモ。

・特徴
 安価:PIC、AVR 省電力:MSP430 高性能:ARM、PIC32(MIPS)

・フィジカルコンピューティング
 Arduino:プログラムを転送して実行、Gainer,Gainer-mini:パソコンの手足として動作

・Arduinoについて
 ArduinoのコアはATmega328。これにUSB-シリアル変換が付く。
 3.3Vと5V動作の品がある。
 Arduino UNOはUSB-シリアル変換をAVRのUSB付きモデルであるATmega16U4や8U4が使われている。 
 Arduino LeonardoはATmega32U4 ワンチップで実現。
 開発環境がフリーで使いやすく、作例が多い。
 動作確認後、ATinyなどに実装することも可能。

・ARM系について
 STマイクロなど評価ボードが安い。他社も続々参入。
 開発環境は複数ある。ちょっととっつきにくい。

・PIC
 USBの使えるPICはGainer-miniやPinguinoで使える。

・PIC32
 MIPSアーキで高性能かつ安価。Arduinoのシールドが使えるボードがある。

 いずれも、I/O周り、メモリ容量、動作速度に気をつけながらC/C++言語で開発できる。命令セットアーキテクチャはギチギチにプログラムを押し込めようとしないかぎり知らなくてもいいのでは?

 H8,SHなどが流行ってた頃はマイコンいじってなかったので分からないけど、新規に使わなくてもよいかな。R8C、78K0、V850あたりも。

 やはりユーザが多いマイコンは作例も豊富、何か行き詰まった時に調べやすい。

メモ PS/2キーボードのUSB変換に関して

これまで調べたPS/2のスキャンコード、キー番号などに関する資料。

マイクロソフトの資料:
Enhanced Keyboards and Windows
Archive: Key Support, Keyboard Scan Codes, and Windows

キー番号、スキャンコードの組み合わせに関する説明:
Sazanami Online PS/2 インターフェイスの研究

Arduinoでキーボードをエミュレートする方法:
Arduino PS/2 Keyboard Emulator Issues
Arduino Forum › Hardware › Interfacing › Arduino as Keyboard

ArduinoをUSBキーボードにする方法:(Leonardo,Atmega32U4以外を使った方法)
Project Log : Arduino USB
Virtual USB Keyboard
practicalarduino / VirtualUsbKeyboard
Arduino Uno DFU プログラミング

 Arduino Leonardoは keyboard.press()とkeyboard.release()を使えば簡単にUSBキーボードをエミュレートできる。ただしUSキー配列なので変換テーブルなどが必要。
 PS/2のスキャンコードは可変長なのでやや扱いにくい。OADGでPS/2キーボードのキートップに対してキー番号が割り当てられているので、これを使えばすっきりする。
 だが、組み込み用途ではスキャンコード→キー番号→USBと変換すると冗長になる。今まで調べた例だとPS/2のスキャンコードからUSBのコードやASCIIコードに変換テーブルなりswich~case文で変換しているが、特殊キーや日本語配列の対応が考慮されていないため難しそう。そこでPS/2のスキャンコードを2バイトで表現し固定長にして、ASCIIコードやUSBのコードに変換しようと考えている。
例:1バイト目のbit7…make/break、bit0…拡張コードかどうか、2バイト目…スキャンコード
これだとスキャンコードの変換はほぼ流用できる。バッファは倍になるが、PS/2キーのバッファは16バイトなのでこれが32バイトになるだけ。

できるだけ再利用しやすい方向で考えたい。 

メモ Lattice Diamond1.4.2

Latticeの開発ツールDiamond 1.4.2が出たのでメモ。
Lattice Diamond 1.4.2 Design Software Available Now 


MachXO2対応がメインみたい。
MachXO2: The Do-it-All PLD for Low Density Applications

記事検索
プロフィール

hardyboy

カテゴリ別アーカイブ
月別アーカイブ
QRコード
QRコード
  • ライブドアブログ