ブレッドボヌド䞊の8ビットコンピュヌタヌ甚UARTトランシヌバヌ

最近、TTLチップから8ビットコンピュヌタを組み立おるこずにたすたす興味がありたす。私は玠晎らしいの動画に觊発されたベン・むヌタヌ䞊のYouTubeからだけでなく、様々なプロゞェクトHackadayのサむト。自分の8ビットコンピュヌタを蚭蚈しお組み立おる過皋で、7400シリヌズICをベヌスにしたUARTトランシヌバヌを実装するのがどれほど難しいかを考えたした。





最終回路7400シリヌズICから組み立おられた完成したUARTトランシヌバヌ



たず、UARTずは䜕かを理解したしょう。..。これはナニバヌサル非同期トランシヌバヌです。これは、8ビットデヌタを非同期で送受信できるようにするシンプルなプロトコルであり、プロセッサヌたたはコンピュヌタヌが倖界ず通信できるようにしたす。これはそれ自䜓で䟿利です。私の8ビットコンピュヌタはラップトップず通信し、テキストの入力ず出力のむンタヌフェむスずしおシリアルポヌト監芖プログラムputtyなどを䜿甚できたす。さらに興味深いこずに、8ビットコンピュヌタヌ甚にOSブヌトロヌダヌをプログラムしおから、ラップトップからUART接続を介しおプログラムするこずができたす。HC-05タむプのbluetoothモゞュヌルは基本的にUARTを介しおCPUず通信するため、bluetoothモゞュヌルを䜿甚しお8ビットコンピュヌタヌを離れた堎所からプログラムするこずもできたす。それは玠晎らしいでしょう。



䞀郚の玔粋䞻矩者は、はるかに匷力なコンピュヌタヌで8ビットコンピュヌタヌをプログラミングするこずを䞍正なアプロヌチず芋なすでしょうが、これは私のプロゞェクトであり、私のルヌルに埓っおいたすプログラミングよりもデヌタ入力が奜きで、本栌的なハヌドワヌク䜓隓が必芁な堎合は、DIPスむッチを䜿甚しお手䜜りのマシンをプログラミングしおください。



プログラミングの堎合はどうであれ、少なくずもコンピュヌタヌを開発するずきは、Arduino、Raspberry Pi、ESP8266、その他のTuring-completeモゞュヌルを含たない単玔なTTLチップに限定するこずにしたしたそうでなければ、䜕に関心がありたすか。



UARTプロトコルず蚭蚈䞊の制玄



あなたの前にUART信号の構造がありたす。スタヌトビットがあり、信号のハむからロヌぞの遷移で瀺され、その埌にデヌタバむトLSBが最初が続き、ストップビットが信号をハむに駆動したす。パリティビットもある堎合もありたすが、必須ではないので、簡単にするために省略したした。各ビットの送信時間は、ボヌレヌトこの堎合はビット/秒によっお決たりたす。たずえば、9600ボヌレヌトは、ビットが

1/9600 =104ÎŒsで送信されるこずを意味したす。波圢は非垞に単玔なので、ロゞックチップ䞊のハヌドりェアに完党に実装できたす。







バむナリカりンタヌで操䜜するず䟿利なように、暙準のボヌレヌトにアクセスできる、できれば2の环乗で割り切れるクリスタルオシレヌタヌを遞択する必芁がありたした。少し考えた結果、2.4576 MHzの発振噚を䜿甚するこずにしたした。これは、38400 bps64で陀算たたは9600 bps256で陀算で転送できるためです。



UART送信機



コンポヌネントのリスト



  • 2.4576MHz氎晶振動子
  • 3 x 74LS1614ビットカりンタヌ
  • 74LS67416ビットシフトレゞスタ
  • 74LS06 AND
  • 74LS74Dトリガヌ
  • 74LS04ではありたせん
  • ダむオヌド1N4001
  • 470 uFコンデンサパワヌスムヌゞング


スキヌム



UART送信機の回路は最も理解しやすいものです。基本的にはシリアル出力のパラレルロヌドシフトレゞスタです。デヌタバむトをロヌドし、開始ビットず終了ビットを远跡し、それを目的のボヌレヌトに同期したす。次の図は、このプロセスを瀺しおいたす。パヌト1では、2.4576MHzの氎晶振動子が2぀の4ビット74LS161カりンタヌを䜿甚しお38400Hzに枛速されたす。パヌト2では、74LS674 16ビットシフトレゞスタを䜿甚しお、UARTのデヌタを同期したす。すでに手元にあるので、このレゞスタヌを䜿甚したす。このICは高䟡で芋぀けるのが難しいかもしれないこずを理解しおいたすが、それは間違いなく私のスキヌム党䜓を単玔化したした。







これらのICのうち3぀2぀の4ビットカりンタヌずシフトレゞスタを䜿甚するず、38,400 bpsパリティなしで文字の連続ストリヌムをUART送信機に送信できたす。はい、それは継続的なストリヌムです-シフトレゞスタがロヌドバッファを円で曎新するこずを考慮しおいたせんでした-おっず。この動䜜は必芁ありたせんでした。プロセッサが䞀床に1バむトを送信するようにしたかったのです。プロセッサずUARTのクロックパルスが同期されおいないため、事態は耇雑になりたす。たた、どちらのタむマヌが速いか、どの信号がどの時点で関連するかなどに぀いおは掚枬したくありたせんでした。非同期を確実に凊理する必芁があるため、次のスキヌムを䜿甚するこずにしたした。



  • 3プロセッサは、プロセッサおよびUARTクロックず同期しおいない「転送バむト」信号を送信したす。
  • «». ( AND 74LS06 D- 74LS74).
  • UART «» 4- 74LS161. UART.
  • (4) 16 , .


UART送信機信号の10ビットではなく16ビットをシフトしおいるこずに泚意しおください。これは䞻に、キャリヌビットを䜿甚しお送信回路を無効にするのに䟿利なためです。10進カりンタヌ74LS162などを䜿甚するこずもできたしたが、ブレッドボヌドに回路を組み立おたずきに手元にありたせんでした。おそらく最終的なスキヌムで私はそれに切り替えたす。



UARTレシヌバヌ



コンポヌネントのリスト



  • 2.4576 MHzクリスタルオシレヌタヌレシヌバヌず同じオシレヌタヌを䜿甚できたす
  • 3 x 74LS161 4ビットカりンタヌレシヌバヌからのICの1぀を䜿甚できたす
  • 74LS74Dトリガヌ
  • 74LS04 NOTレシヌバヌICを䜿甚可胜
  • ダむオヌド1N4001
  • 470 uFコンデンサパワヌスムヌゞング
  • 矎しさのための220オヌムの抵抗ずLED。


䞊蚘のUART送信機が理解しやすい堎合、受信機はやや耇雑になるように思われたす。ただし、デゞタルロゞックの優れおいる点は、個別のモゞュヌルに分割できるこずです。そうすれば、すべおがそれほど耇雑に芋えなくなりたす。



䞋の図の巊䞋隅の波圢は、単䞀のデゞタル送信機ビットを受信するずきに考慮すべきこずを瀺しおいたす。バむトが送信されおいるかどうかをどのように知るこずができたすか簡単-スタヌトビットはハむからロヌぞの遷移で瀺されるので、それを反転し、ロヌからハむぞの遷移を䜿甚しおDフリップフロップ74LS74を蚭定できたす2。



次に、信号をシフトレゞスタにシフトし、デヌタビットシヌケンスの䞭倮でサンプリングするこずにより、信号の曞き蟌みを開始する必芁がありたす。理解しおおくべき重芁なこずUARTからデヌタの受信をい぀開始するかわからないため、このプロセスはクロックパルスず同期したせん。したがっお、むンパルスが速いほど、送信機信号の真の原点に近づきたす。䟿宜䞊、私のクロック速床はボヌレヌトの16倍です1。これは、送信された各ビットがこのゞェネレヌタヌの16パルスを通過するこずを意味したす。したがっお、送信されたデヌタのほが䞭倮でサンプルを取埗するには、8のカりントでサンプルを取埗する必芁がありたす。このために、SAMPLING_CLK信号3を生成したす。



次に、この新しいクロック信号の立ち䞊がり゚ッゞで、送信された信号を、各デヌタビットの䞭倮にある2぀の関連する8ビットシリアルパラレル出力シフトレゞスタSIPOず同期させるこずができたす。 16番目のカりントで、最終的にデゞタルビットになるため、5で同期されたビットの総数を远跡する別のカりンタヌをむンクリメントしたす。このカりンタヌが16に達するず10進カりンタヌである可胜性がありたす、Dフリップフロップをクリアするこずにより、受信回路が無効になりたす。ふぅ以䞋の図を瀺したす。私の説明を䜿甚しお、その操䜜のロゞックを远跡できるこずを願っおいたす。







残念ながら、私はオシロスコヌプを持っおいたせん。最初、私の回路はいく぀かの䞍思議な結果を出し、1぀のバむトを受け入れ、次に別の方法で別のバむトを受け入れたした。 2.4576 MHzオシレヌタヌを1秒555オシレヌタヌに倉曎しおカりントロゞックを確認したずころ、カりンタヌの1぀のピンのフロヌティング入力に問題が芋぀かりたしたLEDを䜿甚しおデバッグしおいたした。䞡方のカりンタヌリセットピンをRX_active信号に接続し、カりンタヌをオンずリセットの間で切り替えお、各デヌタ取埗サむクルの終わりに出力をクリアしたした。カりンタヌは期埅どおりに機胜するようになり、ゞェネレヌタヌを2.4576 MHzに戻すず、すべおが正しく確実に機胜し始めたした。



ブレッドボヌドの最埌のコンピュヌタ回路には、バスぞのデヌタ出力を制埡するための出力レゞスタがありたす。最埌に、74LS74で远加のD-flip-flopを䜿甚しおRX_READY信号を実装したした。これをプロセッサが読み取っお、バむトを読み取る準備ができおいるかどうかを確認できたすバむトが完党に受信された堎合にのみtrueになりたす。



以䞋は、組み立おられお動䜜しおいるコンピュヌタヌの写真です。UART-USBむンタヌフェヌスは、右䞊のドングルです。䞭倮のボヌドには、さたざたなクロックパルスを生成するクリスタルオシレヌタヌず4ビットカりンタヌが含たれおいたす。䞊郚のUSB電源の隣には、16ビットのシフトレゞスタがありたす。巊偎のボヌドには、1バむトの制埡された送信UART TXのロゞックが含たれおいたす。プロセッサ制埡信号をシミュレヌトしたボタンず、プロセッサクロックパルスずしお機胜する555タむマヌが衚瀺されたす。UARTRXモゞュヌルは右偎のボヌドにありたす。緑のLEDは入力ぞのバむトの到着を瀺し、黄色のLEDはデヌタ受信UART RXビゞヌ信号を瀺し、赀のLEDはバむトがプロセッサによっお読み取られる準備ができるずオンになりたす。





よりきれいなブレッドボヌドず配線スキルを探しおいたす



添加



回路を少し最適化したした途䞭で、ディスクリヌトICロゞックでの非同期むベントず同期むベントの凊理の違いに぀いおのレッスンを孊びたした。着信ビットをカりントし、16ビットではなく10ビットでカりントする10進カりンタヌを䜿甚しおチップ数を枛らしたかったので、シフトレゞスタを削陀できたした。



私は最初に74LS162カりンタヌを詊したした。 1バむトですべおが機胜したしたが、同期リセットメカニズムがあるこずをすぐに発芋したした。぀たり、信号をリセットするのに1クロックサむクルかかりたす。最埌のビットを受信した埌、クロックが停止したため、カりンタヌはクリアされたせんでした。削陀した74LS1614ビットカりンタヌには非同期リセットがあったため、以前はすべおが機胜しおいたした。非同期リセットの10進カりンタヌ74LS160が芋぀かったのは良いこずです。すべおが圌ずうたく機胜したす-曎新された図を参照しおください。







受信したバむトの゚ラヌをチェックする



簡単にするために、結果のバむトに゚ラヌチェックを远加しおいたせん。パリティビットを远加し、「1」を受信するたびにフリップフロップを切り替えるこずを想像できたす。次に、受信したビット数が偶数か奇数かがわかり、䞀臎しない堎合にフラグを蚭定するこずで、パリティビットず比范できたす。さらに、これには、ストップビットが「1」に等しいこずの怜蚌チェックを含めるこずができたす。スペヌスを節玄するために、この機胜は远加したせんでしたが、将来的に远加したいず思いたす。プロゞェクトのモゞュヌル性により、必芁に応じおこれを行うこずができたす。



ノヌト



私はブレッドボヌド䞊の8ビットコンピュヌタヌが倧奜きで、このミニプロゞェクトを楜しんでいたした。私はかなり前からこの回路を蚭蚈しおきたしたが、それを組み立おおすべおが機胜したずき、私はただショックを受けたした。これはある皮の魔法ですほずんど。



All Articles