AVRetc

AVRにまつわるエトセトラ



AVRって何だ?

AVRというマイクロコントローラに関する説明。
/ATMEL_AVR/upload/attiny2313.jpg

当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とかアスロンくらいしか知らんのだが・・・

つまり、こういうことだ。

  • 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の遊び方指南

/ATMEL_AVR/upload/attiny2313.jpg

/ATMEL_AVR/jpg/wsn216.jpg *1

  • (2)v-usbのsample applicationやcommunity projectを参考に何かUSBデバイスを作ってみることが出来ます。

http://www.obdev.at/Images/vusb/vusb-teaser.png

http://www.obdev.at/products/vusb/projects.html

/ATMEL_AVR/jpg/rc-meter.jpg

わずか1024ステップ、RAM128バイトしかないATtiny2313だけでこれだけのものを作ることができます。






その他制作物一覧

AVRマイコンを使用した制作物一覧です。

制作テーマ内容
AVR_MonitUSBに繋がっているATtiny2313を制御するファームです。 AVR側の任意のメモリーやI/Oポートを読み書きできます。
AVR_termATtiny2313で作るUSBtoシリアル変換器です
W32_termWindowsで動作する簡易シリアルターミナルソフトです。(Cソース付き)
HIDmon88HIDasp側のメモリーを読み書きするツールです。 汎用IOのようにポートをホストPC側から触って遊んだり、レジスタの名称や機能を学習するのにも便利です。
HIDtesterHIDmonを改造してA/D変換を行ってみました。
bootmonbootloadHIDとhidmonの機能の詰め合わせセットです。ATmega88でのプロトタイピングにとても便利。製作中ターゲットに対して、USB経由でのファームの書き換えや、ポートの設定、読み取りまでインタラクティブに行えます。HIDmon88と同じリンク先にあります。
ATmega88生活ws☆Nak#172基板で始めるATmega88生活
usbRS232これは、ATtiny2313を使った、USBシリアル変換器です。(CDCクラス)
KeyBoardマニアATmega88あるいはATtiny2313にPS/2タイプのキーボードを繋いで、押されたキーに反応するプログラムを作ることが出来ます。
KeyBoardマニアIIAppleDesktopBusタイプあるいはPC8801のジャンクキーボードをAT互換機に接続するアダプターをAttiny2313で製作しました。
デジタルテスターATmega88を使い、分圧された電圧をA/Dで計ることで簡易的に抵抗値を計る装置です。
Arduino400400円で作るArduino互換機
PICspxHIDaspx AVRライターのハードウェアを使用してPIC 18Fシリーズマイコンのライターにするソフトです
hid_blasterHIDaspx AVRライターのハードウェアを使用してARM用ライター(OpenOCDデバイス)にするソフトです
MINTIAspxHIDaspx AVRライターをMINTIAケースに入れてみました



ARM関連記事

制作テーマ内容
STM32ブートローダーSTM32マイコン{STM8S-Discovery,STBEE,CQ-STARM}用のHIDクラスブートローダー兼簡易モニターです
STM8S-Discovery改造STM8S-DiscoveryのST-Link側のSTM32CPUを汎用のUSBマイコンとして活用する記事です
LPCXpressoNXPのマイコンLPC1343評価ボードを活用する記事です
LPC用ブートローダーLPC1343マイコン{LPCXpresso,TRZ-1010N}用のHIDクラスブートローダー兼簡易モニターです
NXP用LPCUSBinterface 2009-05付録のARM(LPC2388)基板を使って各種USBデバイス(LPC-USB)を作ってみました
NXP用ブートローダーinterface 2009-05付録のARM(LPC2388)基板用のHIDクラスブートローダー兼簡易モニターです
OpenOCD_JTAGアダプターSTBEE MINIで制作したOpenOCD用JTAGアダプター(ARM書き込み器)です。





PIC関係もはじめました。但しPIC32MX/PIC18F限定です。

制作テーマ内容
PIC32MXMIPS互換アーキテクチャーの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を使います

制作テーマ内容
pic18bootPIC18F2550/4550/14K50用のHIDboot/HIDmon (簡易モニタ)です。
pic18spxHIDaspxのPIC版:PIC18Fを使用してAVR/PIC両用のライターを作ります。
pic18blasterPIC18Fを使用してARM用ライター(OpenOCDデバイス)にするソフトです
pic18monitPIC18F用のUSB Genericクラスデバイスなモニターです
sdccPIC用のオープンソースCコンパイラsdcc入門です
mcc18MicroChip社提供のC18コンパイラ入門です
UBWを試すGainerに少し似ているUSB経由の汎用I/Oを試しました
PIC18F2550USBプロトコルエンジン内蔵のPIC18F2550を使ったPIC入門です。
PIC18F4550PIC18F2550互換で40pinDIPのPIC18F4550を使ったPIC入門です。
HIDbootPIC18F2550用の(diolan)旧HIDbootloaderです。
HIDmon-2550PIC18F2550用の旧HIDboot/HIDmon (簡易モニタ)です。
HIDmon-14K50PIC18F14K50用の旧HIDboot/HIDmon (簡易モニタ)です。
PICmonitorPIC18F2550/4550/14K50用のHIDmon (簡易モニタ)をC言語(mcc18)でリライトするプロジェクトです。
制作テーマ内容
ARMCQ出版雑誌付録の各種ARM基板で遊んでみました。
NEC78KNEC78K用 逆アセンブラ。入力ファイルは、トラ技BIOSのダンプ出力もしくはインテルHEX形式のテキストとなります。 ソース付き。 MinGW-gccまたはLinux標準のgccでビルドします。
H8るねさすのマイコンH8で遊んでみました。





dream.cgi?id=FrontPage&name=a.gif

*1 画像は wsnak 様が販売している WSN216基板