AVRetc
AVRにまつわるエトセトラ
AVRって何だ?
当Wikiでは主にATtiny2313という品種をネタとして扱います。
- 8ビットCPU
- RISCアーキテクチャー
- 多くの命令を1クロックで実行する。
- 固定語長(16ビット/命令)(一部の命令に例外有り)
- 32本の8ビットレジスタを持つ。
- MIPSのような遅延分岐や遅延ロードは無いので、アセンブラでも組みやすい。
- 一次情報源
http://www.atmel.com/
http://www.atmel.com/jp/products/avr/ - ELM ChaNさんの解説
http://elm-chan.org/docs/avr.html
Z80は知っている。AVRはどこがどう違う?
どこが良い?
- 圧倒的に速い
- Z80は可変語長(1〜4バイト/命令)
- Z80は1命令を4〜20クロック掛けて実行する。
- Z80Aは当時4MHz動作。
- AVRは最高20MHz動作(5V)
- Z80Aの平均CPI(1命令実行に必要クロック数)=6と仮定すると
AVRの20MHzはZ80Aの120MHzに相当する。
どこが劣る?
- 汎用マイコンではない。
- 拡張性がない。
- アドレスバス、データバスが出ていない
- AVRはマイクロコントローラなので、チップ内でほぼすべてが完結している。
- 外部バスはない(一部品種除く)
- ATtiny2313に限って言えば、
- 命令用フラッシュROM2Kバイト(1Kステップまで)
- データSRAM128バイト
- EEPROM128バイト
- 最大18本のI/Oポート
- 命令書き換えとかいわゆる実行ファイルの読み込みという概念がない。
- 代わりに、フラッシュROMに書き込んでおけば消えない。
MicroChipのPIC 16F84Aは知っている。ではAVRの良いところは?
- 32本の汎用レジスタを持つ。
- 命令がRISC風で、命令直交性がありプログラムしやすい。
- なんと言ってもGCCが使える。
全部アセンブラで書かなくていいんだ - PICは1命令あたり4クロックで実行するので、普通に考えて4倍速い。
- しかしレジスタ数が多いのでその分も考慮するともっと速いコードが書ける。
- とっても安い
- 秋月の通販でたったの120円だ!
いや、CPUってPentiumとかアスロンくらいしか知らんのだが・・・
- Pentiumを半田付け手配線してシステム作れますか?
- 出来合いのマザーボードにPentiumなんとかを挿したとしましょう。
- BIOS書けますか?
ブートローダー書けますか?
OS書きますか?
いやそんなもん普通書かんよ。
ゲイツOS買ってくるだろ普通。
つまり、こういうことだ。
- CPUを理解して、プログラムしたいなら、
- いきなりPentiumのブートコードなんか書かずに
- もっとシンプルなPICとかAVRがいいんじゃねー?
Z80でもいいけどね。もう終わっとるんよ。20世紀にね。
- Windows上だけのプログラムなんかではCPUの理解には到達できんと思う。
- 便利ではあるが、APIの内側は全部ブラックボックスだ。CでゴリゴリやってもExcelのVBA書いているのと本質的に変わらん。
いったい、そんな高速でちっぽけなCPUを何に使うのだ?
- 使い道はあなた次第だが
- とりあえず、
AVR-USB(VUSBに改名されました)で遊ぶなんていうのはどうだろう。 - そのまえに、書き込み器(AVRライタ)を作る必要がある。
- AVRライタ
http://elm-chan.org/works/avrx/report.html
HIDaspを作ってみる
ATtiny2313の遊び方指南
- (1)とりあえずHIDaspxライターを作ります。
- (2)v-usbのsample applicationやcommunity projectを参考に何かUSBデバイスを作ってみることが出来ます。
http://www.obdev.at/products/vusb/projects.html
- (3)KeyBoardマニアを参考に、電子楽器を作ってみましょう。
わずか1024ステップ、RAM128バイトしかないATtiny2313だけでこれだけのものを作ることができます。
その他制作物一覧
AVRマイコンを使用した制作物一覧です。
制作テーマ | 内容 |
AVR_Monit | USBに繋がっているATtiny2313を制御するファームです。 AVR側の任意のメモリーやI/Oポートを読み書きできます。 |
AVR_term | ATtiny2313で作るUSBtoシリアル変換器です |
W32_term | Windowsで動作する簡易シリアルターミナルソフトです。(Cソース付き) |
HIDmon88 | HIDasp側のメモリーを読み書きするツールです。 汎用IOのようにポートをホストPC側から触って遊んだり、レジスタの名称や機能を学習するのにも便利です。 |
HIDtester | HIDmonを改造してA/D変換を行ってみました。 |
bootmon | bootloadHIDとhidmonの機能の詰め合わせセットです。ATmega88でのプロトタイピングにとても便利。製作中ターゲットに対して、USB経由でのファームの書き換えや、ポートの設定、読み取りまでインタラクティブに行えます。HIDmon88と同じリンク先にあります。 |
ATmega88生活 | ws☆Nak#172基板で始めるATmega88生活 |
usbRS232 | これは、ATtiny2313を使った、USBシリアル変換器です。(CDCクラス) |
KeyBoardマニア | ATmega88あるいはATtiny2313にPS/2タイプのキーボードを繋いで、押されたキーに反応するプログラムを作ることが出来ます。 |
KeyBoardマニアII | AppleDesktopBusタイプあるいはPC8801のジャンクキーボードをAT互換機に接続するアダプターをAttiny2313で製作しました。 |
デジタルテスター | ATmega88を使い、分圧された電圧をA/Dで計ることで簡易的に抵抗値を計る装置です。 |
Arduino400 | 400円で作るArduino互換機 |
PICspx | HIDaspx AVRライターのハードウェアを使用してPIC 18Fシリーズマイコンのライターにするソフトです |
hid_blaster | HIDaspx AVRライターのハードウェアを使用してARM用ライター(OpenOCDデバイス)にするソフトです |
MINTIAspx | HIDaspx AVRライターをMINTIAケースに入れてみました |
ARM関連記事
制作テーマ | 内容 |
STM32ブートローダー | STM32マイコン{STM8S-Discovery,STBEE,CQ-STARM}用のHIDクラスブートローダー兼簡易モニターです |
STM8S-Discovery改造 | STM8S-DiscoveryのST-Link側のSTM32CPUを汎用のUSBマイコンとして活用する記事です |
LPCXpresso | NXPのマイコンLPC1343評価ボードを活用する記事です |
LPC用ブートローダー | LPC1343マイコン{LPCXpresso,TRZ-1010N}用のHIDクラスブートローダー兼簡易モニターです |
NXP用LPCUSB | interface 2009-05付録のARM(LPC2388)基板を使って各種USBデバイス(LPC-USB)を作ってみました |
NXP用ブートローダー | interface 2009-05付録のARM(LPC2388)基板用のHIDクラスブートローダー兼簡易モニターです |
OpenOCD_JTAGアダプター | STBEE MINIで制作したOpenOCD用JTAGアダプター(ARM書き込み器)です。 |
PIC関係もはじめました。但しPIC32MX/PIC18F限定です。
制作テーマ | 内容 |
PIC32MX | MIPS互換アーキテクチャーの28PIN DIPパッケージ、PIC32MXチップを使ってみます。 |
Pinguinoで遊ぼう | Arduinoに良く似たPIC32MXのお手軽スケッチ開発環境を試してみます |
ブートローダーを作る | PIC32MX220F032B用のHIDブートローダーを作ってみます。 |
USB仮想シリアル | PIC32MXをUSB-シリアル変換器にしてみます |
USBカスタムデバイス | USBカスタムデバイスで転送ベンチマークを行います。 |
USB簡易モニター | USBカスタムデバイスとWinUSB.dllを使用して簡易モニターを作成します。 |
USBオシロスコープ | PIC32MXの内蔵A/D変換を利用してUSBオシロスコープを作成してみます |
USBホスト | PIC32MXをUSBホストにして、USBマウスやキーボードを繋いでみます |
WinUSB | WinUSBでUSBプログラミング。無料のgccコンパイラMinGWを使います |
制作テーマ | 内容 |
pic18boot | PIC18F2550/4550/14K50用のHIDboot/HIDmon (簡易モニタ)です。 |
pic18spx | HIDaspxのPIC版:PIC18Fを使用してAVR/PIC両用のライターを作ります。 |
pic18blaster | PIC18Fを使用してARM用ライター(OpenOCDデバイス)にするソフトです |
pic18monit | PIC18F用のUSB Genericクラスデバイスなモニターです |
sdcc | PIC用のオープンソースCコンパイラsdcc入門です |
mcc18 | MicroChip社提供のC18コンパイラ入門です |
UBWを試す | Gainerに少し似ているUSB経由の汎用I/Oを試しました |
PIC18F2550 | USBプロトコルエンジン内蔵のPIC18F2550を使ったPIC入門です。 |
PIC18F4550 | PIC18F2550互換で40pinDIPのPIC18F4550を使ったPIC入門です。 |
HIDboot | PIC18F2550用の(diolan)旧HIDbootloaderです。 |
HIDmon-2550 | PIC18F2550用の旧HIDboot/HIDmon (簡易モニタ)です。 |
HIDmon-14K50 | PIC18F14K50用の旧HIDboot/HIDmon (簡易モニタ)です。 |
PICmonitor | PIC18F2550/4550/14K50用のHIDmon (簡易モニタ)をC言語(mcc18)でリライトするプロジェクトです。 |
制作テーマ | 内容 |
ARM | CQ出版雑誌付録の各種ARM基板で遊んでみました。 |
NEC78K | NEC78K用 逆アセンブラ。入力ファイルは、トラ技BIOSのダンプ出力もしくはインテルHEX形式のテキストとなります。 ソース付き。 MinGW-gccまたはLinux標準のgccでビルドします。 |
H8 | るねさすのマイコンH8で遊んでみました。 |
*1 画像は wsnak 様が販売している WSN216基板