まごころせいじつ堂

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

マイコン

201402メモ

Arduino
Crowduino v1.1


Arduino用 音声合成LSIライブラリ

BS21 Lab の製品

Arduinoがあなたのトレーナーに――「運動しなさい! 電光掲示板」を作る (1/3)

パラレル→シリアル変換ボード付き 16×2OLED カラーディスプレイ(PDF)

XBeeをはじめてみよう(シリーズ1編)

mbed/ARM
トラ技ARMライタを mbed interface にする

トラ技ARMライタ仕上げ部品セット

[lang:ja] mbed LPC1114での遊び方

LPC1114でビデオ出力

2014.02.06 LPC810のI/Oマップを作ってみました

Flash Magic


2014.02.02 LPC810(通称どんぐり)をmbedのクラウドで開発

lpc21isp


MMC/SDCの使いかた

漢字フォントROM(GT20L16J1Y)

GR-SAKURA用ソフトウェアとシールド

ALTERA Recommended HDL coding styles(PDF)


マイコン覚書き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あたりも。

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

STM32F4 DISCOVERY

単精度の浮動小数点演算回路を持つARMマイコンSTM32F4の評価キット、STM32F4 DISCOVERY。
秋月電子などで扱っている。Cortex-M4、FLASH 1MB、RAM192KBも搭載して1650円という驚きの安さ。
STM32F4-DISCOVERY


STM32F4DISCOVERYDiscovery kit for STM32 F4 series - with STM32F407 MCU

キットには基板のみ。開発用に使うPCと接続するUSBケーブル(mini-B)が必要。
以下、説明書より:
Getting started
1.Check jumper position on the board,JP1 on,CN3 on(Discovery selected).
2.Connect the STM32F4-Discovery board to a PC with a USB cable 'tye A to mini-B' through USB connector CN1 to power the board. Red LED LD2(PWR) then lights up.
3.Four LEDs between B1 and B2 buttons are blinking.
4.Press user button B1,then MEMS sensor is enabled.Move the board and observe the four LEDs blinking according to the motion direction and speed.
5.To study or modify the Discover project related to this demo,visit www.st.com/stm32f4-discovery and follow the tutorial.
6.Discover the STM32F4 features,download and execute programs proposed the list of projects.
7.Develop your own applications using available examples.

 USBケーブルを接続すると基板上のLED3,4,5,6(橙、緑、赤、青)が回転するように点滅する。
青色のボタンを押すと基板の傾きによりLEDが点滅する。もう一度青色のボタンを押すと最初に戻る。
黒いボタンはリセット。

 USBケーブルを挿すとデバイスドライバが見つからない旨のエラーがでるが、このマイコンはST-LINK/V2相当のデバッガで接続されているので対応するデバイスドライバをインストールする。
以下からダウンロード。
ST-LINK/V2 in-circuit debugger/programmer for STM8 and STM32

 開発用のIDEは他社提供のものを使うらしい。説明書にあったのは
Altium,TASKING VX-Toolset
Atollic,TrueSTUDIO
IAR,EWARM
Keil,MDK-ARM

 今回はAtillic TrueSTUDIOをインストールしてみた。
無償のLiteバージョンを使用する。
Atollic TrueSTUDIO® for ARM® Lite v3.0.0

インストーラを起動すると、ブラウザが開いてRegister Lite Version ID登録の画面がでる。ここのcomputer ID欄にインストーラ画面に表示されている文字列をコピペする。
登録情報を送信すると、記入したメールアドレスに登録用のキーが送られてくるので、それをインストーラ画面にコピペして続行するとインストール完了。

とりあえずここまで。

ATmega32U2/16U2/8U2にPS/2機能はあるのか?

ATmega32U2(ATmega16U2,ATmega8U2)のドキュメントを眺めていたらブロックダイアグラムにPS/2の箱が描いてある。USBの端子と兼用みたいだが、本文には何も書かれていない。しかしAT90USB82(AT90USB162)の同じI/Oレジスタ設定には記載されている。ちょっと抜き出してみる。

UPOE - USB/PS2 Software Output Enable Register

R/W Bit 7:6 – UPOE[1:0]: USB/PS2 Output enable
R/W Bit 5:4 – UPDRV[1:0] : USB/PS2 direct drive values
R Bit 3 – SCKI : SCK Input value
R Bit 2 – DATAI : DATA Input value
R Bit 1 – DPI : D+ Input value
R Bit 0 – DMI : D- Input value

このうち、ATmega32U2ではBit3 SCKIとBit2 DATAIの記載がない。

 ひょっとして同一マクロを使っているとしたら、ATmega32U2でもPS/2入力が使えるかも知れない。もちろん保証外だが。

なおAT90USB82ではD- がSDATA、D+がSCLK兼用となっている。
 
AT90USB82 AT90USB162 datasheet
ATmega8U2/16U2/32U2 datasheet

PS/2キーボード変換器の製作(8)

Arduino Unoで試作し、Davinciに実装する方針にした。
(1) PS2Keyboardライブラリでキーボードが扱えることを確認
(2)USB HID Keyboardデバイスにできることを確認
(3)US→JPのマッピングを行う(PS2Keyboard.cppの修正)
でやってみる。

資料メモ:
PIC AVR 工作室 ブログ
ARDUINO PLAYGROUND PS2Keyboard
Interfacing the PS/2 Keyboard
PS/2 Keyboard Library
Virtual USB Keyboard

(1)の注意点:プルアップ抵抗が必要
(2)の注意点:DavinciのUSBインターフェースがよくわからないのでソフトウェアによるV-USBを使う
(3)の注意点:US配列とGerman配列があるので、ここを修正

USBマイコンのメモ

USBターゲット機能を持ったマイコンのメモ。
 USBにはホストとターゲットがあるが、ターゲット(キーボードなど周辺機器)側の回路が簡単になるよう非対称になっている。ホスト機能を持ったマイコンは高価。USBターゲット機能を持ったマイコンボードを使うとデバッグなども簡単になる。

・78K0 - トラ技の付録だったボード。マルツで扱っている。
 ほぼ目的にピッタリの記事。PS/2→USB変換を行っている。
Oyayusby(FMV-KB211/611 → USB HID 変換器)
  その元、PC9801のキーボードをUSBにする記事。
PC-9801キーボード→USB 変換器 

・MSP430ランチパッド 格安の開発キット
MSP430ランチパッド
【第25回 技術 TIPS】MSP430 USB 開発パッケージ v3.0 リリース
TI LaunchPad wiki
NJC's MSP430 LaunchPad Blog

・AVR USB
LUFA Library
ダ・ヴィンチ32U with Arduino Bootloader ATMEGA32U4

PS/2キーボードのスキャンコードについて
Scan Codes Demystified
Scan Codes -- Set 2

V-USB:AVR用USBファームウェア メモ

AVRマイコン用にソフトウェアのみでUSBターゲットを実現できるV-USBというものがあるらしい。(実際は多少の周辺が必要)

V-USB A Firmware-Only USB Driver for the AVR 

Virtual USB Port for AVR

ライセンス形態としてGPL V2と商用のものがある。
AVRは外付け発振器でも内蔵でもよく、2Kのフラッシュメモリと128バイトのRAMがあればよい。

V-USB Human Interface Devices

HIDのキーボードなどは特にデバイスドライバが不要。IBMのPS/2キーボードを改造してキーマトリックスからUSBに繋げたり、1キーのみのUSBキーがあったりと作例豊富。
 
ちょっと読んでみる。 

マイコンHC08のメモ

freescaleの8bitマイコンHC08について資料のまとめ。

簡単な特徴:
 8bitでHC6805命令セット互換なので68系経験者には入りやすそう。
 I/Oにキー割込みという設定があり、エッジ/レベルの変化で割込みが掛けられる。
 CodeWarriorによる開発。

 なおHCS08はちょっと違うので注意。

・メーカーによる説明
freescale HC08
・HC08スターターボードキットver.2の開発元
マイコン工作の実験室 
・HC08スターターボードキットver.2取り扱い
 千石電商 マイコンも千石から入手可能
 ・HC08マイコンの解説書
試しながら学ぶHC08マイコン入門―ミニマイコン扇風機を題材にした電子工作とマイコン・プログラミング  
・エレキジャックの連載
エレキジャック アーカイブ

・freescaleのcodewarrior開発ツール
freescale - IDE - Debug, Compile and Build Tools 
・HC08データシート
freescale - datasheet HC08 
・MC68HC908QY{1|2|4}ACPEドキュメント[pdf]
datasheet


千石から通販で購入できるのは
MC908QY1ACPE
MC908QY2ACPE
MC908QY8CPE
の三種類。主な違いはROM/RAM容量。いずれも16pinのDIP。


PS/2キーボード変換器の製作(7)

前回の続き。

ホスト側からの送出は以下のようになる。

 ・DEVICE(キーボード、マウス)はCLKを発生させる。
・バスの制御権はHOSTにある。CLK="L"にすることにより初期化される。
・CLK、DATA線はDEVICE-HOST間でオープンコレクタで結ばれている。
 どちらかが"L"にすればすべて"L"になる。通常は"H(OPEN)"。

(1) HOST CLK="L"
(2) HOST DATA="L"
(3) HOST CLK="H(OPEN)"
(4) HOST はDEVICEがCLK="L”にするまで待つ
(5) HOST 1bit目DATA設定 CLK="H(OPEN)"にするまで保持
(6) HOST はDEVICEがCLK="L”にするまで待つ
(7) HOST 2bit目DATA設定 CLK="H(OPEN)"にするまで保持
(8) HOST はDEVICEがCLK="L”にするまで待つ
(9) HOST 3bit目DATA設定 CLK="H(OPEN)"にするまで保持
(10) HOST はDEVICEがCLK="L”にするまで待つ
(11) HOST 4bit目DATA設定 CLK="H(OPEN)"にするまで保持
(12) HOST はDEVICEがCLK="L”にするまで待つ
(13) HOST 5bit目DATA設定 CLK="H(OPEN)"にするまで保持
(14) HOST はDEVICEがCLK="L”にするまで待つ
(15) HOST 6bit目DATA設定 CLK="H(OPEN)"にするまで保持
(16) HOST はDEVICEがCLK="L”にするまで待つ
(17) HOST 7bit目DATA設定 CLK="H(OPEN)"にするまで保持
(18) HOST はDEVICEがCLK="L”にするまで待つ
(19) HOST 8bit目DATA設定 CLK="H(OPEN)"にするまで保持
(20) HOST はDEVICEがCLK="L”にするまで待つ
(21) HOST 9bit目(parity)DATA設定 CLK="H(OPEN)"にするまで保持
(22) HOST はDEVICEがCLK="L”にするまで待つ
(23) HOST DATA="H(OPEN)" ※これでHOSTからのデータ送出終わり
(24) DEVICE DATA="L",CLK "H"→"L"→"H"
(25) DEVICE CLK="H(OPEN)" 終了

DEVICE側はCLKの立ち上がりでデータを受け取ることになる。
 
 
波形を見ると4つのかたまりで観測できている。

10110111 1 0
0xED キーボードLED制御コマンド

01011111 1 0
ACK

00100000 0 1
0x04 Caps Lock ON

01011111 1 0
ACK

CAPSON_100KHz


PS/2キーボード変換器の製作(6)

ロジアナをつないでPS/2の信号を観測してみた。

詳しい仕様はPS/2 マウス/キーボード プロトコルとインターフェース で解説されている。

CLKとDATAを観測すればよい。CLKが’L'のときのDATAを読む。

SPC_100KHz

ロジアナのサンプリング周期は100KHz( 10μs)。CLKが10回変化する間に800μsかかっているので、1CLKあたり80μs。仕様によるとCLKのHまたはLの期間は30μs~50μsなので妥当。
DATAを読むと 0_10010100_0_1 となっている。最初の0はスタートビット。LSB側から8bitのデータが送出され、10bit目は奇パリティ(データとパリティビットを含む1が奇数個)。最後の11bit目はストップビットで1。
よって0x29 でこれはスペースキーのスキャンコード。

PS/2キーボード変換器の製作(5)

キーボード⇔変換器⇔PC本体とのやり取りについて検討する。

 キーボードとPC本体、それぞれはPS/2インターフェースでシリアル通信を行う。このデータを加工するためには送受信するデータをいったんマイコン内部に蓄積しなければならない。2つのポートに関してポーリングを行うことになるので、以下の様な手順を考えた。

(1)キーボード⇔変換器について
 キーボードからの送信か、キーボードへの送信かを判定
 (1-a)キーボード→変換器
 0bit目を受信
 1bit目を受信
 2bit目を受信
 3bit目を受信
 4bit目を受信
 5bit目を受信
 6bit目を受信
 7bit目を受信
 8bit目(ODDパリティ)を受信
 キーボードからの受信バッファに蓄積
 キーボードからの受信モード解除
 (1-b)キーボード←変換器
 0bit目を送信
 1bit目を送信
 2bit目を送信
 3bit目を送信
 4bit目を送信
 5bit目を送信
 6bit目を送信
 7bit目を送信
 8bit目(ODDパリティ)を送信
 キーボードへの送信バッファから削除
 キーボードへの送信モード解除
(2)PC本体⇔変換器について
 本体からの送信か、本体への送信かを判定
 (2-a)PC本体→変換器
 0bit目を受信
 1bit目を受信
 2bit目を受信
 3bit目を受信
 4bit目を受信
 5bit目を受信
 6bit目を受信
 7bit目を受信
 8bit目(ODDパリティ)を受信
 PC本体からの受信バッファに蓄積
 PC本体からの受信モード解除
 (2-b)PC本体←変換器
 0bit目を送信
 1bit目を送信
 2bit目を送信
 3bit目を送信
 4bit目を送信
 5bit目を送信
 6bit目を送信
 7bit目を送信
 8bit目(ODDパリティ)を送信
 PC本体への送信バッファから削除
 PC本体への送信モード解除
 (3)キーボードからの受信バッファに蓄積がある場合
 データ変換
 PC本体への送信バッファに転送
 キーボードからの受信バッファから削除
 PC本体への送信モード設定
(4)PC本体からの受信バッファに蓄積がある場合
 キーボードへの送信モード設定
※(1)〜(4)繰り返し、これらのループを数十μS以内で回す(PS/2インターフェース観測後決定)

 ODDパリティのエラーがあった場合は?変換器で加工せずそのまま渡すことにより、PC本体とキーボード間で訂正してくれるので問題ない。

 各バッファの容量とマイコンの処理速度がどれくらいあれば収まるか?

PS/2キーボード変換器の製作(3)

使用するマイコンだが開発キットを持っててひと通り使ったことのあるR8Cで検討。

サンハヤト SR8C15CP 
R8C/TinyマイコンSR8C15CP用書込み・I/Oボード MB-RS8 

SR8C15CPはDIP20ピンに封止したR8C/15マイコン。生産完了品だが手持ちがあるので使ってみる。
開発キットは9V300mAのアダプタが必要。液晶は持っている。

ルネサス開発環境 

PS/2キーボード変換器の製作(2)

 US配列と日本語配列の対応について作ってみた。今回はそのままタイプした場合とシフトキーを押した場合で対応づけている。
SHIFTキーを押している状態をマイコン側で保持して、ダマすことになる。ALTキーやCNTLキーを併用した場合も考慮する必要があるかも。

キートップとスキャンコード

和 英 code 英→和 変換後
漢 ~` 0x0E SHIFT+0x55/SHIFT+0x54
1! 1! 0x16 -
2" 2@ 0x1E 0x1E/0x54
3# 3# 0x26 -
4$ 4$ 0x25 -
5% 5% 0x2E -
6& 6^ 0x36 0x36/0x55
7' 7& 0x3D 0x3D/SHIFT+0x36
8( 8* 0x3E 0x3E/SHIFT+0x52
9) 9( 0x46 0x46/SHIFT+0x3E
00 0) 0x45 0x45/SHIFT+0x46
-= -_ 0x4E 0x4E/0x51
^~ =+ 0x55 SHIFT+0x4E/SHIFT+0x4C
\| 無 0x6A -
@` [{ 0x54 0x5B/SHIFT+0x5B
[{ ]} 0x5B 0x5D/SHIFT+0x5D
;+ ;: 0x4C 0x4C/0x52
:* '" 0x52 SHIFT+0x3D/SHIFT+0x1E
]} |\ 0x5D SHIFT+0x6A/0x6A
__ 無 0x51 -

以下は対応なし
無変換 - 0x67
前候補 - 0x64
カタカナ - 0x13

参考文献:PC周辺機器オリジナル設計ガイド2 Interface2005年12月号別冊付録

PS/2キーボード変換器の製作(1)

IBM-PC互換機のキーボードはUS配列と日本語配列の切り替えがOSを再起動しないとできない。(Macintoshは混在していてもそれぞれ認識して使うことができた) 
US配列を好む人は多いが、日本語配列の方が変換キーなどの機能が多いこと、一般的なご家庭用パソコンでは日本語配列しかないこと、WindowsをUS配列に設定するには若干の手間がかかることが問題となる。
 で、US配列のキーコードを日本語配列に見せかけるインターフェースを検討する。もし挫折しても資料は残るのでなんなりと役に立つでしょう。

PS/2 connector Wikipedia

 これによると5Vで275mAが取れる。信号線はDataとCLKで入出力を考えると4ポートあれば充分。  最近のマイコンで作るとしたら8PのAVRでもできそうだが、手持ちで以下のマイコンを検討する。

AVRマイコン ATTINY2313 

R8C/M12Aマイコン 

※いづれも秋月電子

 キーボードと本体は双方向の通信なので、コードを書き換える部分以外はスルーパスする方針。ハンドシェイクはこのアダプタ側では行わないことにする。
  SHIFTキーを押した状態での記号、例えば数字の2についてはUS配列で@、日本語配列で”となるが、これを差し替えるには現在SHIFTキーを押している状態かどうかを保持しないといけない。US配列での日本語入力切り替えで使うALT+`も同様で、ALTの状態を保持しないといけない。使わないかも知れないがCTRLもあるし、それぞれ左右に存在する。

 PS/2キーボードの資料については以下が見つかったが、詳細なタイミングなどは本+実機確認。

Sazanami Online:PS/2 インターフェイスの研究 
KeyCordLsit.pdf
記事検索
プロフィール

hardyboy

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