レトロでハードな物語

レトロなゲーム機・マイコン・中古デバイスなどをArduinoやAVRで再活用する方法を模索しています。

PICをAVRの周辺デバイスにしてみる

2020年01月24日 | 電子工作

前回PICの開発環境が整ったので、LCD表示専用のデバイスに仕立ててAVRから利用してみようと思います。
PICは前回と同様PIC16F819を使います。LCDは以前にも紹介した200円のLCDです。



8文字×2行を16文字×1行に見せかけているものですが、HD44780互換品なのでPICから扱うのは難しくはないでしょう。

さっそくコーティングに入ったのですが、いきなりPICの初期設定で足止めをくらいました。
PICは動作クロックや利用するタイマーなど使用する機能全般の設定と、I/Oピンの入出力設定やADコンバータ使用の有無などをレジスタに書き込むための定義をプログラムに記述しなければなりません。しかし、設定内容はPICの型番によって少しずつ異なるのでデータシートをながめながら設定していかなければならず、この作業に結構時間が取られてしまいました。
これと比べるとArduino IDEはこの辺を隠蔽してくれていて、どの型番でも同じような設定で済んでしまいます。やはりArduinoは洗練された感があっていいですね。

初期設定が済んだら次はLCDに関するコーティングです。でもPICのコーティングには不慣れなので、参考になりそうなプログラムをネットで探したところ事例が山ほどありました。その中でこちらのサイトからダウンロードできる16F1827.lzhの中のskSD1602LCD.hとskSD1602LCD.cを使わせていただきました。ありがとうございます。
PICとLCDの配線もこのサイトの通りにしました。

上記ソースを利用して、AVRから送られてきた文字をLCDに表示するためのプログラムはこちらです。

newmain.c

これらをMPLAB X IDEのXC8でコンパイルして、PIC16F819に書き込んでおきます。

次はこのPIC+LCDを利用するAVRですが、これにしました。



ATtiny85です。値段は130円でした。同じ8PのATyiny13Aの50円と比べるとちょっと高いですが、メモリが増えてI2Cも使えるのがいいですね。昔Amazonで購入したDigispark Kickstarter (互換機)に搭載されていたAVRです。

今回ATtiny85をArduinoIDEで開発するために、ATTinycoreパッケージを使用しました。サイトの手順に従ってArduinoIDEのボードマネージャに登録します。
ATTinycoreには沢山のAVRが登録されていて、秋月電子のお楽しみ袋に入っていたATtiny861Aもサポートされていたのはラッキーでした。



さて、ATtiny85のスケッチは以下のようになります。PICが制御するLCDに文字列を表示するだけの簡単なものです。

ATtiny85toPIC.ino

配線は次の通りです。

ATtiny85 ←→ PIC16F819
3ピン ←→ RB0
4ピン ←→ RB1



このATtiny85で使ってみたかったのがリアルタイムクロック(秋月電子AE-RX-8025NB)です。



試しに上記の環境でRCTの時間設定・表示を行ってみたところ、設定した直後の時間の読み出しは正常でしたが2回目以降に読み出すデータがおかしくなっていました。プルアップ抵抗を内部や外部どちらもためしたり、I2CライブラリにWireやTinyWireMどちらも使ってみましたが結果は同じでした。

そこでATmega328で試してみると、こちらは問題なく利用できました。



なぜATtiny85で上手く行かないのかはよく分かりませんが、RX-8025NBのアラーム機能や割り込みを活用するにはATtiny85で使える5ピンだけではなかなか大変なので、このRTCはお楽しみ袋に入っていたATtiny861Aとかで活用した方がいいのかもしれません。




最新の画像もっと見る

コメントを投稿