Hatena::ブログ(Diary)

へにゃぺんて@日々勉強のまとめ

2016-02-28

AVRマイコンで電卓もどきを作ってます(SC1602 LCDとキーマトリクスモジュール)

f:id:cupnes:20160228170809j:image:w360


まだ掛け算しかできないので、「作りました」ではなく、「作ってます」です。。


ATmega168のAVRマイコンと、電子部品屋でよく見かける、

  • SC1602互換のキャラクタLCD
  • '0'〜'9'と'*'、'#'のキーマトリクスモジュール

を使用した電卓もどきです。



そもそも、数字キーの他に'*'と'#'しか無いこともあり、掛け算しかまだできません。

('#'は「Enter」キーにしています。)


とりあえず、まずは、現状の回路図とソースコードの紹介まで。


なお、回路図に電源について書いていないですが、ブレッドボードで作っている現時点では、

以下のブレッドボード用電源ボードで生成した5Vを使用しています。


# GitHubのプロジェクト名からも、ゆくゆくはポケコンみたいなものを作りたいなと思ってます。

# 思ってるだけで、電卓もどきに終わるかもしれませんが。。。

2016-02-14

Debian Jessie上にAVRマイコン開発環境構築〜LEDチカチカまで

何年かぶりに、AVRマイコンをいじってみようかと思い、

以前はWindows上で開発していたのですが、Debianでもできる様子なので、試してみました。


f:id:cupnes:20160215013419j:image

※ パスコンは手元になかったので繋いでいないです(買っておいたはずなのに。。。)

  そもそも、Vcc 3.0Vの低電圧なモードで動かしているので、無くても壊れることは無い、はず


結論としては、

こちらのページのATtiny44用の記述をATmega168用に変更するだけで、Lチカまで動作確認できました。


変更点だけメモしておきます。

変更点ATiny44ATmega168
avrdudeの-pオプションt44m168
サンプルプログラムの定数PA6PB6
PORTAPORTB
DDRADDRB

※ ATmega168にはポートAは無いので、今回はポートBの6番を使用しました



備考1: avrdudeの-pオプションの表記について

使用したいMCUに対する-pの表記については、

"-p"オプションに'?'を指定して実行すると一覧表示を得られます。


$ avrdude -p '?'

Valid parts are:
  uc3a0512 = AT32UC3A0512
  c128     = AT90CAN128
  c32      = AT90CAN32
  c64      = AT90CAN64
...

※ '?'は上記のようにクオートで囲まないとシェルに食われます


標準エラー出力に出力するので、grepする際は

  以下のように標準エラー出力を標準出力へつなぐと良いです

$ avrdude -p '?' 2>&1 | grep ATmega168
  m168     = ATmega168
  m168p    = ATmega168P

備考2: AVRに関するパッケージ

まだ試していませんが、GDBとかシミュレータとかもあるみたいです。

$ apt-cache search --names-only avr
avra - assembler for Atmel AVR microcontrollers
avrdude - software for programming Atmel AVR microcontrollers
avrdude-doc - documentation for avrdude
avrp - Programmer for Atmel AVR microcontrollers
avrprog - Programmer for Atmel AVR microcontrollers
binutils-avr - Binary utilities supporting Atmel's AVR targets
gcc-avr - GNU C compiler (cross compiler for avr)
gdb-avr - GNU Debugger for avr
libavresample-dev - Development files for libavresample
libavresample2 - Libav audio resampling library
avr-evtd - Linkstation・玄箱用 AVR 監視デーモン
avr-libc - Atmel AVR における開発用の標準 C ライブラリ
simulavr - Atmel AVR シミュレータ

まとめ

インストールしたパッケージ


avrdudeコマンド

  • 認識チェック
    • avrdude -p m168 -c avrisp2
  • flash読み出し(Intel Hexフォーマット)
    • sudo avrdude -p m168 -c avrisp2 -U flash:r:backup_201602141857.hex:i
  • flash書き込み(フォーマット自動認識)
    • sudo avrdude -p m168 -c avrisp2 -U led.c.hex

ビルド

avr-gcc -mmcu=atmega168 -Wall -Os -DF_CPU=10000000 -I./ -o led.out led.c
avr-objcopy -O ihex led.out led.c.hex

※ Vcc 3.0Vの10MHzモードで動かしているため、-DF_CPUでは10MHzを指定しています