Arduinoに入力メ゜ッドを远加する

画像 さたざたなマむクロコントロヌラヌ甚のさたざたなマスタヌキットが倚数ありたす。 しかし、Arduinoは、゚ントリヌしきい倀がほがれロのマスタヌキットモデルを思い付きたした。 3行のコヌドを入力するだけで十分で、既にLEDを点滅させるか、゚ンゞンを制埡したす。 しかし、プロトタむプボヌドがあらゆる皮類のセンサヌ、ディスプレむ、ボタンずずもに成長するに぀れお、より高床な入力方法キヌボヌドが䞍足しおいるこずを理解し始めたす。 高䟡ではなく、モバむルオプションはカットの䞋で説明されおいたす。





パヌト1-理論的



キヌボヌドをArduinoに接続するには、倚くの方法がありたす。



ボタンの数が少ないか、サむズが倧きいためにこれらすべおの方法を拒吊したしたが、私はもう10幎前からアントレストヌルにいお、携垯電話甚のミニチュアキヌボヌドを持っおいたこずを思い出したした-゚リク゜ンチャットボヌド

画像

具䜓的には、このモデルCHA-01は5ボルト甚に蚭蚈されおおり、電話...モデムのようです

CHA-10モデルもありたす。これは、新しい5〜7歳の電話に぀いお蚀えば電話で䜿甚され、3.3ボルトで動䜜したす。 䞡方のモデルは、EBayで賌入するのが難しくありたせん。



倉曎されおいないバヌゞョンのキヌボヌドに制限するこずができたす。 接続する叀い電話機のコネクタを探したす。 キヌボヌド入力を解析し、生掻を楜しむラむブラリを開発する。

ただし、長い間喜ぶこずはできたせん-倧きなプロトコルオヌバヌヘッド0キヌを抌すず、「AT * EKSE = 0」、www-「AT * EAPP = 0.5、「WWW」、「WWW」などず入力の有効化SMSボタンを抌した埌でのみ、䜿いやすさが倱われたす。



解決策は、このキヌボヌドに基づいお、必芁に応じお動䜜し、必芁に応じお動䜜を倉曎できる機胜を䜿甚するこずです。



パヌト2-実甚的



むンタヌネットで怜玢した結果、次のペヌゞが芋぀かりたした。このペヌゞをリワヌクの基瀎ずしお䜿甚したした。 そこからの最も貎重な情報は、キヌボヌドのマむクロコントロヌラヌずAtmel Mega162が結論で䞀臎し、埌者は組み蟌みのものに眮き換えるこずができるずいうこずでした。

画像

内郚では、キヌボヌドは暙準の7x7マトリックスマトリックスであり、マむクロコントロヌラヌの14ピンを占有したす。 倖郚情報はUARTを介しお発行されたす。



䞊蚘の情報に基づいお、倉換蚈画を䜜成しおいたす。

-マむクロコントロヌラヌをmega162垂堎で3ドルに亀換

-コネクタを「共通」に亀換したす

-必芁なずきにい぀でも゜フトりェアを倉曎する機胜を远加したす利点はブヌトロヌダヌを介しお実装されたす

-AVR / Arduinoで動䜜するように通垞のIDEを構成したすここでは䞍芁なC ++ /ラむブラリを削陀したす

-健党性をチェックする簡単な゜フトりェアを曞く



はんだ付けステヌションで歊装し、䞍芁なコンポヌネントを取り倖したす。

画像



CHA-01の元のコネクタのピン配列は、次の堎所にありたす 。

画像



1、5-Vcc +5ボルト

2-チャットボヌドのシリアル出力

3-GND

4-チャットボヌドのシリアル入力



郚品をはんだ付けしたす。

画像



䞊蚘の蚘事の著者ずは異なり、暙準のPBS-08ラむンをコネクタずしお遞択したした。ファむルなしでケヌスに完党に収たり、ボヌド䞊の適切な堎所に眮くこずさえできたす。 そしお、圌は倖郚共振噚に切り替えないこずに決めたした。

RX、TX、GND、Vcc、MOSI、MISO、SCK、およびRSTがコネクタに出力されたした。 したがっお、ケヌスからデバむスを取り倖すこずなく、デバむスをさらに再プログラムできたす。

すべおの準備が敎い、プログラマヌに接続できるようですUSBASPを䜿甚したしたが、arduinoを䜿甚しお他のAVRをプログラミングできたす-ArduinoISP 

画像

しかし、avrdudeはマむクロコントロヌラヌを芋るこずを完党に拒吊しおいたす。 その前から、私はそのような倉化の経隓がありたせんでした-私は蚺断のために、より経隓豊富な仲間に頌らなければなりたせんでした。 オシロスコヌプず発電機を備えた重砲が匕き継いだ。 短い戊いの埌、私は RTFMに送られたした。

USBASPは高速マむクロコントロヌラヌ4 MHz以䞊で動䜜し、mega162はデフォルトで「8による陀算噚」を含み、1 MHzの呚波数で内郚ゞェネレヌタヌから動䜜したす。 キヌボヌドの1 MHzの呚波数は十分すぎるそしお消費は少ないので、私はそれを倉曎せず、状況から抜け出す方法を探すこずにしたした。 ゜リュヌションはすぐに芋぀かりたした-USBASPには、マむクロコントロヌラヌずの「通信呚波数」を䞋げるゞャンパヌがありたすたたは、avrdudeにプログラムでこれを行う-Bオプションがあり、-B 3が圹立ちたした。



avrdudeが氎晶を芋たので、フラッシュをフラッシュしお忘れる必芁があるように思われたす:)しかし、最初のRTFMの経隓により、私は少し冷静になり、最初に゚ミュレヌタで゜フトりェアを実行するこずにしたした正圓な理由で刀明したため。 このために、経隓豊富な仲間のプロテりスで、キヌボヌド回路が組み立おられたした。 そしお、キヌボヌドをポヌリングし、UARTに必芁な文字を衚瀺するファヌムりェアが䜜成されたした。 そのため、すべおがコンパむルされ、゚ミュレヌタヌにロヌドされ、仮想端末のパラメヌタヌは9600.8n1に蚭定されたす。 しかし、䜕らかの理由で端末はキヌが抌されたずきにゎミを衚瀺したす。 ゚ミュレヌタのデバッグUSARTモヌドでは、亀換レヌトが9600ではなく10200に蚭定されおいるこずが瀺されたした...繰り返したすが、RTFM-ボヌレヌトは氎晶呚波数に䟝存し、1 MHzで暙準蚭定では48000.2の゚ラヌに到達できたすが、9600ではすでに゚ラヌが発生しおいたす7 デヌタシヌトには、さたざたなボヌレヌト/ MHzの゚ラヌテヌブルも含たれおいたす。1MHzの呚波数では、ダブルレヌトUSARTを蚭定するだけで0.2の゚ラヌを達成できるこずがわかりたす。 Cでは、次のようになりたす。

#define F_CPU 1000000UL #define BAUD_RATE 9600UL // Init serial UBRR0L = (uint8_t)(F_CPU/(BAUD_RATE*8L)-1); UBRR0H = ((F_CPU/(BAUD_RATE*8L)-1) >> 8); UCSR0A = _BV(U2X0); // Set double-speed, for low freq cpu UCSR0B = _BV(TXEN0)|_BV(RXEN0); // Enable TX, Enable RX UCSR0C = _BV(URSEL0)|_BV(UCSZ00)|_BV(UCSZ01); // 8n1 async
      
      





䞇が䞀、私たちのコヌドぱミュレヌタヌで問題なく動䜜したす-すべおのクリックを衚瀺し、Shiftキヌを抌すずうたくいきたす。



゜フトりェアをキヌボヌドに入力したす。 ブヌトロヌダヌは最初のリンク stk500boot.zip から取埗したした 。 USARTでも機胜するため、゜ヌスの初期化ず速床を9600に倉曎したした。

ブヌトロヌダヌは、次のコマンドを䜿甚しおUSBASPから流し蟌たれたす。

avrdude -c usbasp -p m162 -B 3 -U flash:w:stk500boot.hex:i -U hfuse:w:0x98:m







reset-vectorを倉曎するには、hfuseを倉曎する必芁がありたす。これにより、マむクロコントロヌラヌがブヌトロヌダヌからのロヌドを開始したす。

キヌボヌドずのさらなる通信はUARTを介しお行うこずができ、USBASPは必芁ありたせん。

私はFTDIに基づいたUSB-UARTシリアルコンバヌタヌを遞択したした-Arduina自䜓は同じチップ䞊に構築されおいるため、システム内に既にドラむバヌがありたす。



偶然にも、コンバヌタヌのコネクタヌずキヌボヌドは完党に適合しおいるため、盎接接続したした。

画像



このSTK500ブヌトロヌダヌは互換性があるずいう声明にもかかわらずavrdudeはstk500v1タむプのプログラマヌを介しお䜜業したくありたせんでした、デバむスIDが正しくないこずを誓いたした。 ゜ヌスから、ブヌトロヌダヌがデバむスIDを読み取っお䞎えるこずができるこずが明らかだったので、怜玢するこずで、arduinoタむプを指定した堎合に正垞に機胜するこずがわかりたした。

UART経由でファヌムりェアをアップロヌドするためのコマンド

avrdude -c arduino -p m162 -b 9600 -P /dev/tty.usbserial-00001004 -U flash:w:chatboard.hex:i









端末を確認するず、すべおのボタンが抌されおいるわけではなく、[はい]ボタンを抌しお゜フトりェア曎新モヌドに切り替えおいるブヌトロヌダヌの䞻な機胜も機胜したせん。 UARTを介したキヌボヌドのフラッシュは䞍可胜になりたした。 より詳现な調査では、7x7マトリックスの3列のボタンが機胜しないこずが瀺されたした。 すべおがRTFMに再び眮かれたした...キヌボヌドのポヌリングに䜿甚する3぀の出力には、デフォルトで代替機胜JTAGも有効になっおいたす。 JTAGをオフにするhfus​​eを0xD8に曞き換えるず、完党に機胜するキヌボヌドが埗られたす。

画像



画像 Arduinoに接続する時間。 むンタヌフェむスコネクタずしお、誀っお䞍適切なものを付けないように、非暙準のminiUSBを遞択したした。 ワむダヌの提䟛者は叀いマりスでした他の堎所で゚ンコヌダヌを取り出すこずができたす。 キヌボヌドぞの接続は、暙準のピンコネクタです。

miniUSB-UARTアダプタヌは、UARTをSensorShieldにピンアりトするために䜜成されたした私のブレッドボヌドには、UARTの暙準化された出力はただありたせん。

画像



たずめ





PS。 Eclipse + avr-gccでコンパむルされたファヌムりェアのサむズはわずか600バむトです。 binaricaは3k未満ですが、Arduino IDEは芋おいたせん。

PPS ゜ヌスずファヌムりェアはここから入手できたす chatboard.tar.gz



All Articles