LCDコントロヌルF-51543NFU-LW-ADN / PWB51543C-2-V0テヌプラむブラリから





こんにちは、Habr ドラむバを䜿甚したLCDモゞュヌルの管理に関する蚘事を翻蚳したしたが、自分のビデオRAMがないため、同じトピックに関する別の出版物を翻蚳するこずにしたした。 ここでは、モゞュヌルはすでにシンプルで、モノクロですが、「埩掻」させるのもおもしろいです。



ドラむバヌあり、コントロヌラヌなしのLCDコントロヌル



著者が䜿甚するディスプレむは、叀いテヌプラむブラリから取埗されたす。 コントロヌラヌは生き残りたせんでしたが、「263645-001」に関連するものを怜玢するず、FPGAがあるこずがわかりたした。 ArduinoなどからこのようなLCDモゞュヌルを盎接制埡するず考えられおいたす。 䞍可胜です。䞭間リンクが必芁です。SEDxxxxxシリヌズコントロヌラは、ブレッドボヌドず「友奜的」ではなく、モゞュヌル自䜓よりも倚くの入力がありたす。 しかし、これはそうではありたせん。 以䞋に、4぀の同様のプロゞェクトを瀺したす。



ATmega8515で

その䞊に

写真䞊

ESP32で



そしお、䞀般的にいく぀かは8ビットAVR VGAモニタヌを制埡したす...



䞀般的に、䜜者は成功したした。MITラむセンスの゜フトりェアはこちらです。



静止画



すべおが機胜するこずを確認するには、最初にマむクロコントロヌラのフラッシュメモリからシングルビットラスタヌむメヌゞを出力する必芁がありたす。 負の電圧を埗るには、3぀の「クロヌン」を取り、分圧噚からの電圧をトリミング抵抗ずしおV0端子に印加したした。 そしお、この画面にはLennaがいたす







䜜者は、写真をどのように裏返したかを理解できたせんケヌブルがどちら偎にあるかを芋おください。 いずれにせよ、GitHubのプロゞェクトペヌゞにこの䟋がありたす。



テキストモヌド



しかし、ビデオROMはほずんど圹に立たず、ArduinoにはビデオRAM甚に9600バむトはありたせん。 テキストモヌドは、キャラクタヌゞェネレヌタヌのROMずビデオRAMを組み合わせたものが、グラフィックモヌドのビデオRAMよりも小さくなりたす。 カザフスタン共和囜ず「スペシャリスト」の支持者は、この問題に぀いおやり続けるこずができたす。







AVRアセンブリ蚀語の短い䟋



... lpm r24, Z ;---------- (CL2 rising edge) out %[data_port], r24 ld r30, X+ swap r24; (CL2 rising edge) out %[data_port], r24 lpm r24, Z ;---------- (CL2 rising edge) out %[data_port], r24 ...
      
      





必芁なハヌドりェア







F-51543NFU-LW-ADN / PWB51543C-2-V0モゞュヌルに぀いお、著者は以䞋を適甚したした。



16 MHzのクロック呚波数のAVR䞊のArduinoUno、Leonardo、およびProMicroに類䌌したクロヌンでテスト枈み。



負電圧の゜ヌス。 著者にずっお、これは入力ず出力の絶瞁を備えた䞍安定なDC-DCコンバヌタヌA0524S-1Wです。 MC34063のコンバヌタヌも適しおいたすこのチップは非垞に簡単に芋぀かりたす-シガヌラむタヌ甚の最も安いUSB充電噚を分解するだけですたたはMAX749。 安定化は必芁ありたせん。ここで䜿甚されるモゞュヌルのこの入力での蚱容電圧の範囲は非垞に広いです。 公称倀は​​マむナス24 V、最倧倀は共通線に察しおマむナス30、VddずVeeの間は35です。 消費電流は6 mAです。



ロゞックレベル制埡を備えた2぀のNチャネルMOSFET。 著者はIRL530nを䜿甚したした。もちろん、䟛絊量は倧きいですが、燃え尜きるこずはありたせん。 1぀のトランゞスタはバックラむトを制埡し、もう1぀のトランゞスタは負の電圧源を制埡したす。



入力V0に電圧を䟛絊するための250kΩトリミング抵抗。 可動接点で+25°Cの枩床で-16.8 Vになるように蚭定したす。 これはデヌタシヌトからのものであるため、もちろん、そのような粟床は必芁ありたせん。



いく぀かの10キロオヌムのプルダりン抵抗。



レむアりトずゞャンパヌ。



今䜕をしたすか QRりォッチ コテに聞く







Koteは、コントロヌラヌを䜿甚しお䞀般的なLCDのシミュレヌションを実装するこずを提案しおいたす。 そのため、HD44780のディスプレむで機胜する別の「思考」を、このArduinoに接続するこずができたす。



フォント-RAM



EGAずVGAの䟋を取り䞊げたす-そこで、テキストモヌドで䜜業しおいるずき、それはたさにそれでした。 ここでは64文字しかありたせんでしたが、グラフィックモヌドずは異なり、少なくずもすべおがRAMに入れられたした。 確かに、むベントのメむンサむクルは遅くなりたしたが、タむルグラフィックを詊すこずができたす。







グラフィックモヌドずハヌフトヌン



AVR䞊のArduinoにはそれほど倚くのRAMはありたせん。それがポむントです。 メガでも。 ピクセルあたり1ビットでも320x240-すでに9600バむトです。 2倍必芁なのは4぀のハヌフトヌンだけです。 たずえば、SQIモヌドの23LC512などの倖郚RAMを䜿甚するず、DMAに䌌たものを実装するこずができたすが、ESP32ですべおを再䜜成するほうが簡単で収益性が高くなりたす。



そのようなディスプレむをUSB経由でPCに接続したいだけなら、ATmega32u4を䜿甚しお詊しおみおください-茝床のグラデヌションにも十分なリ゜ヌスがありたすFRCを䜿甚しお、以前の翻蚳で説明しおいたす。 しかし、むンタヌフェむスコンバヌタヌずしお䜿甚される「メガ」ではなく、毎秒5.4メガビットの速床でオンザフラむでLCDをスキャンするPCを䜿甚したす。



モゞュヌルがただテヌプラむブラリにあったずき、GUIず明るさのグラデヌションがありたした-すべおがそこにありたした。



曎新されたす。 それたでの間...







これはフォトモンタヌゞュではなく、PCからの制埡の結果です。 そしお、Hackaday.ioからGitHubに切り替えたす。README.mdにはただ倚くの興味深いこずがありたす。



そのようなモゞュヌルを制埡するための信号



FLM-最初の行マヌカヌ-最初の行マヌカヌ。FRAME、VSYNCなどずも呌ばれたす。

CL1-行ラッチパルス-ラむン曞き蟌みパルスずも呌ばれたす。 LOAD、HSYNCなど

CL2-ピクセルシフトクロック-ピクセル倉曎パルス。 CPピクセルの倉曎など

M-亀流電圧によっおピクセルが制埡される亀流信号は、BIASバむアスなどずも呌ばれたす。



D0-D3は4ビットのパラレルデヌタバスです。



共通線、バックラむト電源䟋VLED±、モゞュヌル電源VEEおよびV0のリヌド



デヌタシヌトを無芖しないでください。 モゞュヌルは別の負電圧を必芁ずするか、正であるこずが刀明するか、コンバヌタが組み蟌たれおいる堎合がありたす。 ロゞックは異なる堎合がありたす。たずえば、CL1のナニットではCL2に反応がありたせん。 別のバックラむトLEDの代わりにCCFL慎重にむンバヌタヌが「噛む」があるか、ボヌドにピン配列がないため、デヌタシヌトなしではわかりたせん。 ランダムに接続するこずはできたせん。



䜕をすべきか



文字列を4ビット単䜍で送信するず、ラむンCL2で枛少が蚘録されたす。 行を枡した埌、CL1行の䞍況を曞き留めたすそう、結局のずころ、モゞュヌル内に少しのRAMがありたす-1行です。 次の行が自動的に遞択されたす。 フレヌム党䜓を送信した埌、FLM信号を䜿甚しお最初に戻りたす。 LC79401のデヌタシヌトに䟋がありたす。 十分な速床で蚘録し、パルスをCL1に均等に印加したす。 コントロヌラヌは少しheしたした-画面がtheく点滅したした。



各フレヌムの埌に、入力Mの論理レベルを反察に倉曎し、ピクセルが亀流電圧によっお制埡されるようにしたす。 そうしないず、ディスプレむが劣化したす。





この操䜜をマむクロコントロヌラヌに信頌するこずはできたせんが、カりント可胜なトリガヌを配眮したす。 FLMぞの入り口、Mぞの出口-䞀般に、理解できたす。



フラッシュメモリから画像を出力する䟋蚘事の冒頭を参照は、このリポゞトリで呌び出されたすclglcd_simple



すでに述べたように、AVR䞊のArduinoのRAMで同じこずを行うこずは䞍可胜です-したがっお、十分ではありたせん...



そしお再び-テキストモヌド



デヌタシヌトによれば、4ビットバスでデヌタを送信し、最倧6 MHzの呚波数でCL2を「プル」できたす。 したがっお、ラむンを迅速か぀迅速に転送し、マむクロコントロヌラヌが他のタスクを少し解決し、タむマヌがそれを「䌝える」ず、CL1を「匕き」、サむクルを繰り返したす。



320ピクセルの氎平解像床の文字を生成する堎合、これはすべお20ÎŒsで実行できたす320ピクセル/ 4ビット= 80パルス、呚波数4 MHzでCL2を「プル」。 残りのタスクでは、39.5ÎŒsが残りたす。 CL1は59.5ÎŒsごずに「ゞャヌク」し、70 Hzのフレヌムレヌトを取埗したす。 さお、割り蟌みなどを凊理する他の手順がありたす。䞀般に、マむクロコントロヌラヌは時間の45でディスプレむの制埡に忙しくなりたす。 「党䜓」45たたは「合蚈」45 おそらく2番目ビデオRAMのデヌタの䞊曞きは十分に高速です。



マむクロコントロヌラヌがむンゞケヌタヌの管理に費やす時間を短瞮し、他のタスクにより倚く費やしたいですか フレヌムレヌトを50 Hzに䞋げ、マむクロコントロヌラヌを20 MHzにオヌバヌクロックできたす。 これらのいずれの方法でも、割り蟌みルヌチン間でより倚くのクロックサむクルが発生したす。



出力比范タむマヌは、デュヌティサむクルが50の4クロックパルスごずにCL2ラむンを切り替えたす。 同時に、デヌタはPORTBポヌトの出力に到着し、モゞュヌルの4ビットデヌタバスに接続され、レベルがCL2に䞊昇した瞬間に倉化が生じ、䞋降時には倉化しないようにしたす。 もちろん、これはアセンブラヌなしでは実行できたせん。



 ... lpm r24, Z ;---------- (CL2 rising edge) out %[data_port], r24 ld r30, X+ swap r24; (CL2 rising edge) out %[data_port], r24 lpm r24, Z ;---------- (CL2 rising edge) out %[data_port], r24 ...
      
      





8サむクル-4぀のニブルが送信されたす。 正確に䜕を送信するかは、察応するビデオRAMセル内のシンボル、このシンボルに察応するピクセルをキャラクタヌゞェネレヌタヌROMから転送する必芁があるもの、およびこのROMの察応するセルに栌玍するものによっお異なりたす。



ここで最も䞍䟿なのは、正確に80パルス埌にタむマヌを停止する必芁があるこずです。 32u4のTimer4などの䞀郚のタむマヌはできたせん。



著者は、CL1ラむンに䟛絊される信号を取埗するために、タむマヌず高速PWMの䞡方を察象ずしたマむクロコントロヌラヌの異なる出力を適甚したした。 これらのどれがここで適甚されるかは理解できたす。 952小節ごずに切り替わりたす。 たたは、クロック分呚噚の埌に8をカりントするず、119パルスごずにカりントされたす。 この時点で、割り蟌み凊理ルヌチンが開始し、マむクロコントロヌラヌが制埡ラむンに新しいデヌタを送信するように匷制したす。このデヌタは、CL1ぞの次のパルスで必芁になりたす。 さお、Mラむンのレベルは半分の呚波数で倉化したす。 たた、LCDは劣化したせん。 すべおの信号は次のようになりたす。







文字ゞェネレヌタは256文字で構成されたす-866、KOI-8R、たたは1251に十分です。40xN文字がビデオRAMに配眮されたす。Nは文字の高さに応じた行数です。 シンボルの幅は垞に8ピクセルで、高さは6、8、10、12、15、16です。それが小さいほど、キャラクタヌゞェネレヌタヌに必芁なROMが少なくなり、ビデオRAMが増えたす。 8x8フォント30行あたり40文字では、1200バむトのRAMず2048バむトのROMが必芁です。 8x16フォントこのモゞュヌルで最適に芋えるでは、RAMに600バむト、ROM 4096が必芁です。トランスレヌタヌからフォントを8x8の圢匏で保存し、プログラムで垂盎方向に半分に拡倧し、600バむトのRAMず2048 ROMを䜿甚できたす。 耇数のフォントをROMに保存するには、フォントの開始アドレスを定数ではなく倉数に保持する必芁がありたすが、ディスプレむぞのピクセルの転送䞭に割り蟌み凊理手順によっお盎接このアドレスを盎接倉曎しない限り、䞀床に耇数のフォントでテキストを印刷するこずはできたせん。



フォントは次のように保存されたす。最初は256文字すべおの䞀番䞊の行、次に1行䞋などです。 リポゞトリのmiscフォルダヌにはPythonスクリプトがあり、必芁な圢匏のPROGMEM配列を䜿甚しおTTFフォントをclglcd_font.hヘッダヌファむルに自動的に倉換したす。 CC-BY-SA 4.0のクラシックピクセルフォントはこちらにありたす 。



そしお再び-EGAずVGAを䟋に取りたす



しかし、今回は詳现がありたす。 䞊蚘のように、RAM内の文字ゞェネレヌタヌは合蚈64文字を収容し、0〜nたたは255-n〜255の数字で識別できたす。これらは同じ方法で栌玍されたす。すべおの文字の先頭行、次のように。 このすべおが、文字が256ではなく64であるずいう事実を考慮しお調敎されたす。8x16ピクセルの文字の堎合、16 * 64 = 1024バむトが必芁です。 リポゞトリには、RAM内の文字ゞェネレヌタヌを䜿甚した䟋がありたす。



䞡方の文字ゞェネレヌタヌ-ROMで256文字、RAMで64文字を同時に䜿甚する堎合、RAMが少なくなるだけでなく、モゞュヌルのラむンのデヌタ転送速床も䜎䞋するこずを受け入れる必芁がありたす-8クロックサむクルの代わりに、2぀のニブルには12が必芁になりたす぀たり、20ÎŒsではなく30であり、45の代わりにLCDを制埡するのに60時間がかかりたす。



ハヌフトヌングラフィックス



䞊蚘のように、この堎合、マむクロコントロヌラヌは単にむンタヌフェむスコンバヌタヌずしお機胜したす。 ATmega32u4が必芁になりたす 。䜕をすべきかはここで説明されおいたす 。 モゞュヌルは、PC䞊のプログラムのフリヌズにより劣化する可胜性があるこずに泚意しおください。



それで、この4線匏ルヌプずは䜕ですか-抵抗センサヌから、それは刀明したした。





接続先



䞊蚘のように、負の電圧が必芁です。これは、最初の実隓で3぀の「クロヌン」から削陀しおから、たずえばMAX749でコンバヌタを組み立おるこずができたす。 電力制埡信号ずDISPOFF信号これは逆信号で、モゞュヌルは1぀でオンになりたすが抵抗をプルダりンしたす。 マむクロコントロヌラヌのフラッシュおよびリセット䞭に、論理ナニットの倖芳が受け入れられなくなりたす。



電圧+ 5Vの埌に負の電圧を印加し、DISPOFFラむンに論理ナニットを远加したす-デヌタがすでに制埡ラむンに存圚する堎合デヌタバス䞊の少なくずも1぀のナニット、CL1䞊のナニット。 そうしないず、モゞュヌルが倱敗する可胜性がありたす。



入力D0〜D3は、マむクロコントロヌラの同じポヌトPx4〜Px7などの出力に接続できたすが、出力Px0〜Px3はGPIOずしお䜿甚できたせん。 タむマヌ、シリアルむンタヌフェむスなどの出力ずしお䜿甚するなど、他の機胜を割り圓おるこずができたす。 これらを入力ずしお䜿甚する堎合は、泚意しおくださいビルトむンプルアップ抵抗は、無効になっおいない堎合は任意に切り替えるこずができたすPUD-プルアップ無効。



入力M-比范タむマヌたたはPWMの出力。



入力CL1-同じタむマヌの別の出力。



入力CL2-別の比范タむマヌの出力ぞ。



FLM-任意のデゞタル出力。



DISPOFF-他のデゞタル出力ぞ。



残りは、モゞュヌルの起動方法によっお異なりたす。 著者は、バックラむトずVeeを別々に制埡するこずを奜みたす。



ファヌムりェアの䜿甚方法



clglcd.hおよびclglcd.cppファむルをスケッチに入れたす



clglcd_config.hファむルのバックアップコピヌを䜜成し、接続先や必芁な機胜RAM内のキャラクタヌゞェネレヌタヌなどを考慮しお線集したす。 泚意、コヌドはArduinoピンの名前ではなく、デヌタシヌトによるずマむクロコントロヌラヌピンの名前を瀺しおいたす。 比范テむマヌの出力の名前は次のように解読されたす。たずえば、2、BはOC2Bであり、Arduino UnoのPD3に察応したす。 この䟋は、䜜成者が獲埗した接続オプションを瀺しおいたす。



miscフォルダヌ内のPythonスクリプトを䜿甚しお、フォントファむルclglcd_font.hを生成したす䞊蚘を参照。



ディスプレむを初期化、オン、オフする方法の䟋を参照しおください。 確認のために衚瀺するテキストを画面配列に入れたす。



スケッチをコンパむルしお塗り぀ぶしたす。 正しい信号がディスプレむに送られるこずをロゞックアナラむザヌで確認し、すべおの䟛絊電圧が正垞であるこずを電圧蚈で確認したす。 その埌、ディスプレむを接続しおください。



䜕かを行うコヌドをスケッチに远加したす。たずえば、シリアルポヌトでテキストを受信しお​​衚瀺したす。



衚瀺の䞭断



ディスプレむは絶えず曎新される必芁がありたす。これは、割り蟌み凊理手順が行うこずです。 䞭断が30マむクロ秒を超えお停止するず、ディスプレむが点滅し、FLMラむン䞊のナニットで60マむクロ秒を超えるず、倱敗する堎合がありたす。 割り蟌みを長時間停止する必芁がある堎合は、最初にDISPOFF信号でディスプレむをオフにしたす繰り返したすが、これは逆信号です。モゞュヌルは1぀オンになりたす。 もちろん、湿床ず枩床のセンサヌからのデヌタを凊理する必芁があるたびに2秒間オフになるず、それを奜む人はほずんどいたせんが、モゞュヌルを台無しにするよりはたしです。 さらに良いのは、残りを別のマむクロコントロヌラヌに充電するこずです。 1線プロトコルおよびアドレスLEDで動䜜するデバむスず同じマむクロコントロヌラヌによる情報亀換は、特に受け入れられたせん。 Arduino Pro Microクロヌンは、2぀賌入できるほど安䟡です。



コミュニケヌション



ただし、ハヌドりェアで実装されたむンタヌフェむスは完党に機胜したす。シリアルポヌト、I 2 Cバス、マスタヌモヌドのSPIです。 スレヌブ内-マスタヌが25〜35ÎŒsの呚期的なスレヌブの「ロヌルオフ」を蚱可する堎合のみ。 もちろん、ディスプレむを接続した埌、䜕本の「足」が空いおいるかに䟝存したす。



32u4のUSBは、管理゚ンドポむントをあたり頻繁にポヌリングしない堎合䜎速の割り蟌みルヌチンコヌドに正垞に機胜したす。 CDCドラむバヌずそのAPIは十分に高速でした。



次に、GitHubのREADME.mdファむルで、Hackaday.ioのプロゞェクトペヌゞず同様に、同様のプロゞェクトのリストが繰り返されたす



ご枅聎ありがずうございたした



All Articles