前回の L チカに続き、
今回は「ARDUINO CW KEYER」のスケッチを ATmega1284P に転送してみます。
まあ、Lチカが転送できたので、「ARDUINO CW KEYER」のような大きなサイズのデータでも簡単に転送できるだろうと高をくくっていたら、シリアル転送でエラーが連続し、すっかりハマってしまいました。
ということで、
ウェブサイトで解決策を 探し回ったり、オシロで波形を見たりと・・・
色んなことをしましたが、結論としては、
ATmega1484P のピン配置の関係により、ノイズが影響してシリアル通信を邪魔していたようです。
1484P ではクロック(Pin 12、13)の隣のピン(Pin 14)が RX になっている関係上、どうもクロック側のノイズが RX 側に乗ってしまうようで、このノイズが影響してデータ転送の途中でプロトコルエラーとなってしまうようです。
そこで、
RX 側にローパスフィルタ(10KΩと100pF)を追加したところ、これまでの書き込みエラーは嘘のように無くなり、一発でデータが転送できるようになりました。
さて、
ここからは、「ARDUINO CW KEYER」シールドと ATmega1284P の接続についての話しです。
左側の「ARDUINO CW KEYER」シールドと、右側の 1284P が乗ったブレッドボードをジャンパワイヤで接続します。
シールドと 1284P の実際の接続は以下のとおりです。
■ 「ARDUINO CW KEYER」シールド、ATmega1284P ピン番号対応表
Keyer シールド | ATmega1284P | |
RESET | 9 | |
5V | 10 | |
GND | 11 | |
Vin | 30 (AVCC) | |
A0 | 40 | Speed VR |
A1 | 39 | Button |
A3 | 37 | PS2 DATA |
A4 | 23 (SDA) | I2C SDA |
A5 | 22 (SCL) | I2C SCL |
- | 14 (RX0) | FT232RL TX |
- | 15 (TX0) | FT232RL RX |
D2 | 3 | Left Paddle |
D3(D10)* | 16 (INT0) | PS2 Clock |
D4 | 5 | Speaker |
D5 | 6 | Right Paddle |
D11 | 17 | TX Key 1 |
D12 | 18 | TX Key 2 |
※ keyer シールドのピン配置は Arduino Uno に合わせています。
(Arduino Uno の D3 には、Atmega1284p の D10 を接続しています。 )
※ Arduino Uno で PS2 Keyboard を使うときには、"keyer_pin_settings.h" の設定を pin = 3 に、1284p では pin = 10 に設定する必要があります。
※ 328P と 1284P ではピン配置に違いがあるため、実際に接続する時には注意が必要です。
取り急ぎ、「ARDUINO CW KEYER」 のスケッチが正しく書き込めたか確認したかったので、上の対応表の一部だけを接続して試験を行いました。
パドルを接続した試験も良好です。
メモリ機能も動作してます。
これで、「ARDUINO CW KEYER」のような大きなデータサイズのスケッチでも 1284P に書き込めることが確認できました。
やれやれ。