Saya selalu mencari tambahan kualitas lab saya yang akan menghormati anggaran ketat saya. Baru-baru ini, saya menemukan diri saya mendorong penghalang Hertz dengan setiap proyek lain yang saya lakukan dan dengan demikian sangat ingin lingkup bandwidth tinggi. Sayangnya, baru-baru ini baru-baru ini memiliki 70 MHz hingga 100 MHz menjadi sangat terjangkau, sementara osiloskop saluran quad baru dalam 500 MHz hingga 1 GHz dikurangi biaya untuk diperoleh. Satu-satunya pilihan saya adalah menemukan keajaiban mutlak dalam bentuk lingkup bandwidth tinggi.
Tampaknya para dewa-dewa menyerahkan elektronik saya tersenyum pada saya ketika saya menemukan tempat sampah ini ditakdirkan HP 54542C. Tampaknya dalam bentuk peri yang bagus dan merupakan taring teratas pada zamannya. Tapi sesuatu harus rusak kan? Benar saja, layarnya jelas salah dan tidak terbaca. Ingin tahu bagaimana saya memperbaikinya? Empat Surat: FPGA.
Masalah
Beberapa penelitian dangkal pada ruang lingkup ini mengungkapkan beberapa sejarah yang menarik. Ini seharusnya ruang lingkup kelas atas pertama HP dengan LCD dan juga merupakan prekursor untuk serangkaian lingkup Infinium yang akan melanjutkan ke pedoman pasar. LCD memang merasa seperti renungan. Ruang lingkup memiliki varian yang serupa dengan tampilan CRT, dan versi yang saya peroleh hanya memiliki saluran pencernaan CRT dihilangkan dan LCD warna yang diinstal oleh HP. Saya berharap LCD itu salah dan bukan pengemudi ASIC, ini tampak seperti taruhan yang baik karena keran lembut akan dalam beberapa kasus membawa layar kembali ke kehidupan!
Saya mulai menyelidiki akar penyebabnya, dan mulai dengan mengambil LCD. Saya menemukan beberapa cairan telah tumpah di atasnya; Tidak ada yang terkorosi, tetapi membersihkan dan menginstal ulang tidak membuat perbedaan. Menyatukan kembali ruang lingkup dengan tempat sampah bukanlah pilihan, karena selain dari LCD, ruang lingkup terasa seperti harta karun mutlak. Meskipun dewan sopir LCD benar-benar tidak berguna sekarang, itu datang dari suatu waktu ketika industri belum pindah ke pit subatomik pada konektor kawat-ke-papan. Ini tersirat saya dapat dengan mudah menyolder pada televisi kabel pita 26 pin konvensional untuk memanfaatkan semua sinyal yang diperlukan dan memulai proses rekayasa balik protokol yang digunakan.
Reverse Engineering Protokol LCD
Televisi kabel pita disolder di atas konektor yang ada
Langkah pertama dari proses ini adalah untuk mengidentifikasi sinyal pada konektor. Saya sedang mencari-cari rangkaian sinyal paling umum yang diperlukan untuk menggerakkan LCD apa pun. Ini harus mencakup beberapa sinyal yang benar-benar berkala, beberapa sinyal acak dan tentu saja kekuatan dan tanah yang khas. Sinyal berkala kemungkinan besar akan menjadi jam piksel dan sinyal sinkronisasi yang akan menandai awal dari baris dan bingkai baru; Di sisi lain, sinyal yang tampak acak akan menjadi data piksel yang sebenarnya akan ditampilkan. Dilihat berdasarkan usianya, protokol yang cukup mudah diharapkan. Dipandu oleh intuisi ini, saya mulai menyelidiki konektor dan segera saya memiliki semua 25 sinyal yang diketahui.
Saya hanya menemukan dua sinyal berkala sempurna: satu, sinyal 31.25 kHz yang relatif rendah terjaga keamanannya pada 60 Hz yang mencurigakan, dan gelombang persegi 25 MHz lainnya. Yang pertama harus menjadi sinyal sinkronisasi terintegrasi. 60 Hz adalah giveaway mati karena berhubungan dengan bingkai nominal. Sinyal yang mendasari 31,25 kHz kemudian harus sesuai dengan laju garis horizontal dalam bingkai. Akhirnya, sinyal 25 MHz harus menjadi jam untuk seluruh sistem, bahkan itu jam piksel.
Selanjutnya, saya harus memahami sinyal yang tampak acak yang jelas merupakan data piksel. Pertama, kebutuhan akan konektor 25 pin jelas menyinggung beberapa jenis konfigurasi RGB paralel. Secara total saya menemukan sembilan sinyal seperti itu yang dengan sempurna membagi dengan tiga dan membungkus bahwa LCD menggunakan sembilan bit per piksel dan tiga bit per warna saluran R, G dan B masing-masing.
Contoh: Skema Patio VGA
Mencari tahu skema dan pin-out adalah bagian dari tantangan. Mungkin yang jauh lebih penting adalah mencari tahu timing sinyal yang digunakan. Hampir selalu, sinyal tampilan mentah memiliki apa yang disebut “beranda”. Ini dapat dianggap sebagai daerah dalam setiap bingkai di mana data tidak dapat ditulis. Ini berasal dari zaman CRT di mana sinar fisik elektron membutuhkan waktu untuk menyapu dari ujung garis kembali ke awal yang lain, atau bahkan dari bagian bawah layar ke atas. Meskipun kurang jelas di layar elektronik modern, daerah-daerah ini masih ada karena pengontrol LCD membutuhkan waktu pemrosesan dan mengocok data yang masuk.
Menentukan timing.
Untuk mengekstrak timing yang saya coba korelasi data piksel dengan sinyal sinkronisasi. Saya sedang mencari daerah di mana piksel secara konsisten tidak dapat dikalahkan.
Timing Horizontal.
Setelah menatap data untuk sementara waktu, jelas LCD menggunakan skema teras tunggal sederhana pada bagian horizontal dan vertikal dari sinyal sinkronisasi terintegrasi. Ini mudah diidentifikasi karena piksel diatur kesemua tinggi atau semua rendah selama periode ini. Setelah saya menunjuk daerah ini, saya menggunakan kursor untuk mengukur durasi mereka dan menerjemahkan waktu itu ke jumlah piksel yang setara.
Ini adalah informasi penting yang akan menjamin reproduksi yang stabil dan tepat pada monitor VGA. Rencananya adalah untuk memberi makan nilai-nilai ini sebagai konstanta ke Verilog, dan menggunakan penghitung untuk “Perjalanan” logika yang sesuai untuk mencapai bentuk gelombang yang diperlukan.
Waktu vertikal
Terakhir, resolusi LCD harus diidentifikasi karena saya harus menjalankan monitor pengganti pada pengaturan yang sama. Ini dilakukan dengan hanya mengukur berbagai periode aktif dan membandingkannya dengan sinyal lain seperti jam piksel yang memiliki periode 40 ns. Waktu aktif horizontal ditentukan untuk menjadi sekitar 25,7 AS, sehingga merupakan total 642,5 piksel dan juga periode aktif vertikal adalah 15,42 ms dan dengan periode horizontal 30 AS, yang sesuai dengan 481 baris. Jelas ini adalah tampilan 640 x 480 konvensional dengan tingkat revitalisasi 60 Hz.
Menemukan pengganti yang cakap
Juruselamat 8 inci
Jadi tampilan yang ada [ternyata] cukup umum pada akhirnya, dan penggantian tampak sepenuhnya masuk akal. Sayangnya, ukurannya agak aneh; Sangat mudah untuk menemukan layar tujuh inci tetapi delapan? Meskipun saya tidak dapat menemukan penurunan penggantian yang cukup murah di web, ukurannya kebetulan sama seperti yang digunakan oleh banyak instalasi LCD Pasar modern di mobil. Ini adalah layar berkualitas tinggi “eyoyo” dengan biaya rendah (£ 50) dan menerima semua input video secara harfiah dari semua analog ke VGA dan bahkan HDMI. Mereka juga mendukung resolusi 1024 * 768 yang jauh lebih tinggi. Saya kagum dengan layar ini tidak populer secara besar-besaran dalam komunitas Raspberry PI.
Akhirnya, semuanya tampak mengklik bersama. Saya tidak hanya dapat mengganti LCD dengan monitor VGA ini, itu akan cocok dengan sempurna karena ruang lingkup bahkan memiliki cukup ruang untuk CRT!
Jadi persis, bagaimana cara melaksanakan konversi LCD ke VGA? Dengan FPGA tentu saja!
Konversi sinyal
Pada titik ini satu-satunya hal yang berdiri di antara saya dan ruang lingkup 500 MHz yang berfungsi berhasil mengkonversi sinyal LCD yang disebutkan sebelumnya ke VGA. Jelas dengan pemrosesan yang relatif cepat hanya bisa dilakukan pada FPGA, tetapi yang mana? Tujuan saya adalah, pada titik tertentu, meninggalkan FPGA di dalam ruang lingkup dengan layar, jadi saya membutuhkan sesuatu yang kecil dan murah. Untungnya, ebay tampaknya memiliki satu ton papan pengembangan berbasis altera siklon II tua ini untuk pikiran yang membingungkan £ 10! Ini agak mampu FPGA, memegang sekitar 4K elemen logika dan optimal untuk proyek skala kecil seperti ini.
Cara umum, konversi tampilan ini dilakukan menggunakan buffer bingkai. Idenya adalah untuk buffer seluruh bingkai, melaksanakan konversi dan memuntahkannya di ujung yang lain. Sayangnya ini membutuhkan RAM eksternal berukuran terhormat pada FPGA. Papan FPGA ini terkenal karena tidak memiliki RAM eksternal, sehingga skema ini keluar dari pertanyaan. Setelah sedikit berpikir, saya berkaitan dengan kesadaran bahwa sinyal LCD dan VGA tidak berbeda. Bagaimana jika saya bisa mengkonversi dari satu ke yang lain berdasarkan line-by-line, dan menghindari kebutuhan bingkai buffer sama sekali?
Perbandingan: VGA vs LCD. Diagram ini berlaku untuk segmen horizontal dan vertikal
Singkatnya:
LCD memiliki:
Jam piksel.
Sinyal sinkronisasi gabungan
Hanya teras depan
Sedangkan VGA memiliki:
Tidak ada jam piksel.
Sinkronisasi sinkronisasi terpisah
Teras depan dan belakang dengan periode sinkronisasi
Sinyal sinkronisasi terintegrasi
Pergi ke detail tentang bagaimana VGA bekerja di luar ruang lingkup artikel ini, tetapi saya akan memperbaikinya nanti. Untuk saat ini, jika kita cukup memeriksa sketsa waktu, kita melihat bahwa satu-satunya perbedaan antara kedua sinyal adalah jumlah kejadian dan lokasi teras dan penempatan data yang valid.
Sketsa membuat konversi terlihat mudah tetapi hanya valid jika dua frame berada dalam sinkronisasi lengkap. Untuk memberi tahu FPGA untuk mulai menghasilkan bingkai LCD yang sesuai di atas VGA, pertama-tama kita harus mengidentifikasi awal dari bingkai baru yang berasal dari konektor LCD sehingga kita dapat menyinkronkannya. Ini mungkin bagian paling sulit dari proses, karena hanya memeriksa tepi sinyal sinkronisasi terintegrasi dari LCD tidak cukup.
Kita sebaliknya harus mengukur waktu antara dua tepi dan menandai terjadinya bingkai baru. Sisanya adalah seperangkat gerbang logika yang relatif mudah yang menghasilkan diagram waktu di atas. Terakhir, karena LCD tidak memiliki teras belakang atau sinkronisasi pulsa, data RGB yang masuk harus seimbang dalam waktu menggunakan FIFO kecil sehingga sejajar dengan sempurna di mana monitor VGA mengharapkannya. Setelah menyamakan di atas ke Verilog selesai, saya melanjutkan untuk menangani perangkat keras.
Pengaturan Perangkat Keras
Pengaturan perangkat keras
Konfigurasi perangkat keras untungnya sangat minimalis. HP tidak cukup memanfaatkan LCD untuk potensi sepenuhnya. Memeriksa bit individu eSaluran ACH mengungkapkan banyak redundansi: berbagai bit praktis selalu identik, menunjukkan pemanfaatan yang sangat dangkal dari palet warna sembilan-bit penuh. Ini tidak mengejutkan karena HP sebagian besar menggunakan kembali firmware dari versi CRT dari ruang lingkup. Semua ini menyiratkan bahwa saya lolos hanya dengan menghubungkan MSB setiap saluran warna dengan praktis tidak ada kerugian dalam gambar akhir. Ini menyelamatkan saya memori yang jauh lebih berharga pada FPGA.
Masalah paling signifikan adalah bahwa LCD menggunakan sinyal 5 v TTL. FPGA dapat menerima pada sinyal 3,3 V terbaik sehingga konversi level harus dilakukan. Saya memilih untuk memanfaatkan dioda clamping input di beberapa buffer logika seri 74HC untuk melaksanakan konversi ini. Ini cenderung menghancurkan rise / fall kali. Misalnya 74HC4050 bahkan memiliki resistor polisilikon secara seri dengan dioda dalam mati, menggusur kebutuhan untuk resistor seri eksternal. Saya memainkannya dengan aman dan menambahkan resistor seri 1 KΩ ke input buffer ini dan output yang dimasukkan ke dalam FPGA. Output dari output Hsync dan vsync FPGA dihubungkan langsung ke monitor sementara garis RGB dihubungkan melalui resistor 330 Ω.
Kesuksesan
Kesuksesan!
Setelah menjinakkan jam 25 MHz piksel untuk berperilaku papan tempat memotong roti dan menghubungkan FPGA ke eksternal baru
Port VGA monitor, ruang lingkup dibawa kembali ke kemuliaan formalnya! Meskipun semuanya bekerja dengan sempurna, pengaturan ini cukup rentan noise. Yang perlu saya lakukan sekarang adalah membuat PCB dan memberikan monitor VGA tempat tinggal permanen di dalam ruang lingkup.
Jadi apa yang Anda tanyakan? Nah, saat ini satu-satunya cara untuk menghemat screenshot adalah melalui floppy drive tanggal. Tetapi karena kita sekarang memiliki data LCD melalui FPGA, mengapa tidak menulis itu ke kartu SD?