Arduinoでラリコン作る話(4)~ ATmega328Pに出戻った
<<前回のあらすじ>>
ATtiny44でラリコン作り出した気球人
そこにメモリ不足という魔の手が襲いかかる
最終兵器ATtiny85を取りだして見たものの、今度は速度不足という新たな敵が!
どうする、気球人!?
次回も(秋月に)サービスサービス!
詳しくは ↓ kikyujin.hatenablog.com
なんて引っ張ってみましたが
結局のところはTOKYO GAME SHOW 2022の帰りに秋葉原行ってATmega328Pを買ってきました^^;
それにしても28ピンも必要ないんだけど。
まあUARTもI2Cも使えるし、値段も比較的安いですが・・・
↓
akizukidenshi.com
しかしコスパで言うとPICのほうが良くないか?
↓
akizukidenshi.com
こんなんでいいじゃんよ
などと疑念もいだきつつ、とりあえずPICはまたいつか勉強することにしておいて、作業進行させようと思います(いつかって)
Arduino UNOを使ったATmega328Pへの書き込み
とりあえずはArduino UNOからスケッチを書き込まねばならぬ。
Arduino UNOもCPUはATmega328Pだから、スケッチ書いたそばからCPU外せばいいんじゃね?とも思うんですが、それではソケットがクタクタになりそうだし、そもそも俺のArduino UNOは互換品だからCPUがDIPじゃないんですよ。
ついでに言うと私はケチなので外部クロックは使わず内部クロックで動作させたい。
いろいろ調べてみたら本家ページのこのあたりにつなぎ方は載っていたので、そちらを参考にしつつ、ボードマネージャーのほうは同ページにあるリンクからbreadboard-1-6-x.zipをダウンロードして展開した得たフォルダを、hardwareフォルダに突っ込んでおけば、ATmega328Pの内部クロックを使ったボードを選択できるようになります。
なんかコンパイルする時にwarning出ますが、気にしなーい
そもそもIDEバージョン1.8だしな。
つなぎ方はこちら↓
普通にスケッチ例にある「blink」が動きます。 youtube.com Lチカ、ヨシ!
さくさく移行
ATtiny44で動かしたI2CのLCDですが、とりあえずArduino UNOで動かした実績あるパラレル方式に変更します。 合わせてSoftwareSerialのテストまで進めます。
はいはい表示できたできた。
書き込み部分を除いた回路はこちら↓ ※書き込み部分があっても動作します。
スケッチはこちら↓
#include <LiquidCrystal.h> #include <SoftwareSerial.h> // LCD ←→ Arduinoのピンの割り当て // rs → D7 // rw → GND // enable → D8 // d4 → D9 // d5 → D10 // d6 → D11 // d7 → D12 // [構文]LiquidCrystal(rs, rw, enable, d0, d1, d2, d3, d4, d5, d6, d7) LiquidCrystal lcd(7, 8, 9, 10, 11, 12); // RX - D5 // TX - D6 SoftwareSerial ss(5, 6); void setup() { // debug serial ss.begin(9600); ss.print(F("Good morning!\r\n")); // LCD init lcd.begin(16, 2); // LCDの桁数と行数を指定する(16桁2行) lcd.clear(); // LCD画面をクリア lcd.setCursor(0, 0); lcd.print("Hello world"); lcd.setCursor(0, 1); // キョウハイイテンキ lcd.print(F("\xb7\xae\xb3\xca\xb2\xb2\xc3\xdd\xb7")); } void loop() { while (ss.available() > 0) { // echo back char c = ss.read(); ss.write(c); } }
D9-D12は実装の具合によっては逆順にしたほうが良いかもしれないなあ・・・
試作1号機はArduino UNOに対してLCDの実装が90度ひねられていたのでこれで良かったのですが🤔
さて次は
HW的にはArduino UNOとほぼ等価になるので、一旦はラリコン試作1号をそっくり移植してしまおうと思っています。 いくつか課題がありまして
- 今回はケースに入れたいので、基板の大きさとかスイッチをどうすれば良いのか調査
- 距離誤差の原因を確定するため、TinyGPSとfloat演算を自分ライブラリに代替
このあたり解決したいと思っとります。