GLOBALBYTE / ELECTRONICS / REVERSE ENGINEERING / RASPBERRY PI PICO
คืนชีพจอ STN LCD เก่า: แกะสัญญาณเป็น VGA ด้วย Raspberry Pi Pico
เครื่องคิดเงิน Samsung SPS-1000 ยังทำงาน แต่จอ STN LCD เดิมเสีย จะกู้ภาพกลับมาได้อย่างไร? Voltage Ventures ทดลองอ่านสัญญาณภาพจาก Display Controller เดิม แล้วใช้ STM32F407 และ Raspberry Pi Pico (RP2040) นำข้อมูลมาสร้างภาพสำหรับจอ VGA โดยไม่ต้องเขียนโปรแกรมจำลองหน้าจอเครื่องคิดเงินขึ้นใหม่
- จอ STN LCD เดิมมีความละเอียด 320×240 พิกเซล
- ข้อมูลภาพออกมาเป็นบัส 4 บิต พร้อมสัญญาณ XSCL, LP และ YD
- ไมโครคอนโทรลเลอร์ Capture ข้อมูลแล้วสร้าง Monochrome Framebuffer
- ภาพถูกขยายเป็น VGA 640×480 โดยเพิ่มขนาดพิกเซลแบบ 2×2
- โปรเจกต์ทดลองกับ STM32F407 และ Raspberry Pi Pico (RP2040)
จอเครื่องคิดเงินเสีย แต่ข้อมูลภาพยังอยู่
เครื่อง Samsung SPS-1000 ใช้จอ Monochrome STN LCD ที่มีชุด Display Controller ของตนเอง เมื่อชุดจอเดิมเสีย ผู้สร้างจึงตรวจสอบสัญญาณจาก Controller ว่ายังมีข้อมูล Digital Pixel อยู่หรือไม่ และพบว่าสามารถนำข้อมูลเหล่านั้นไปสร้างภาพใหม่ได้
แนวทางนี้ไม่ใช่การเปลี่ยน Display Controller แต่เป็นการดักอ่านสัญญาณของระบบเดิม โดยไม่จำเป็นต้องจำลองโปรแกรมเครื่องคิดเงินใหม่ทั้งหมด
Hardware และเครื่องมือที่ต้องใช้
| อุปกรณ์ | หน้าที่ |
|---|---|
| Samsung SPS-1000 | อุปกรณ์ต้นทางที่มีสัญญาณจอเดิม |
| STM32F407 Discovery | การทดลอง Capture และ VGA Output |
| Raspberry Pi Pico (RP2040) | การ Capture สัญญาณด้วย PIO/DMA |
| Level Shifter | ปรับระดับแรงดันให้เข้ากับ GPIO ของบอร์ด |
| VGA Connector / Resistors | วงจรสัญญาณ Video และ Synchronization |
| Logic Analyzer / Oscilloscope | ตรวจแรงดันและ Timing ก่อนต่อวงจร |
Step 1: เข้าใจสัญญาณของจอ STN LCD เดิม
Samsung SPS-1000 ใช้ Display Controller รุ่น SED1351FOA โดยผู้สร้างตรวจพบข้อมูลพิกเซล Monochrome แบบ 4 บิต และสัญญาณ Synchronization ที่ใช้จัดข้อมูลเป็นภาพ 320×240 พิกเซล
| Signal | หน้าที่ |
|---|---|
| U0–U3 | Pixel Data Bus ขนาด 4 บิต |
| XSCL | Pixel Clock |
| LP | จังหวะ Line / Horizontal Synchronization |
| YD | จังหวะ Frame / Vertical Synchronization |
Step 2: Microcontroller อ่านสัญญาณภาพอย่างไร?
ไมโครคอนโทรลเลอร์ทำหน้าที่รับข้อมูลจาก Pixel Bus โดยไม่ควบคุม Display Controller ต้นทาง ใช้ XSCL ช่วยกำหนดจังหวะ Capture และใช้ LP กับ YD ระบุตำแหน่งของบรรทัดและเฟรม
Step 3: วัด Display Timing ให้ตรง
ผู้สร้างพบว่าข้อมูลจอมีทั้ง Active Pixels และช่วงว่างของสัญญาณ ดังนั้นจึงต้องวัด Timing จริงก่อนกำหนดตำแหน่งการอ่านภาพ
| ค่าที่ผู้สร้างวัด | ผล |
|---|---|
| Original Resolution | 320 × 240 |
| Pixel Bus | 4 บิต |
| Active Clock / Line | 80 รอบ |
| Total Clock / Line | 218 รอบ |
| Total Lines / Frame | 242 บรรทัด |
ค่าดังกล่าวเป็น Timing ที่ผู้สร้างตรวจพบกับ Samsung SPS-1000 ไม่ใช่ค่าที่สามารถใช้กับจอ STN LCD ทุกรุ่น
Step 4: Reconstruct ภาพต้นฉบับ
ข้อมูลจากบัส 4 บิตถูกนำมาแปลงกลับเป็นพิกเซล Monochrome ผู้สร้างใช้ Lookup Table เพื่อลดงานคำนวณ และขยายแต่ละพิกเซลต้นฉบับเป็น 2×2 เพื่อสร้างภาพ VGA 640×480
640 × 480 พิกเซล × 1 บิตต่อพิกเซล = 307,200 บิต หรือ 38,400 Bytes (37.5 KiB) เพราะเป็นภาพ Monochrome ไม่ใช่ RGB 24 บิต
Step 5: Generating VGA Output
ผู้สร้างพัฒนาการสร้างสัญญาณ VGA โดยต้องจัดจังหวะ Pixel Data พร้อม HSYNC และ VSYNC ให้ถูกต้อง รวมถึงการสร้างระดับแรงดัน Video ให้เหมาะกับอินพุต VGA
Step 6: ต่อยอดด้วย Raspberry Pi Pico RP2040
เมื่อได้ผลด้วย STM32F407 ผู้สร้างทดลองนำเทคนิคเดิมมาใช้กับ Raspberry Pi Pico โดยใช้ PIO สำหรับ Sample Pixel Data และ DMA เพื่อโอนข้อมูลลง Buffer พร้อมใช้ LP/YD ติดตามบรรทัดและเฟรม
Instructables กล่าวถึง VGA Implementation ด้วย Pico แต่ README ใน Repository ของ Pico ระบุว่าการ Capture ทำงานแล้ว และยังวางทางเลือก Output เช่น VGA เป็น Future Improvement จึงควรตรวจ Source Revision ก่อนสรุปว่า Pico Repository เป็นโค้ดพร้อมแฟลชแล้วแสดง VGA ได้ครบทุกขั้นตอน
Step 7: ผลการทดลองบนจอ VGA
ผู้สร้างรายงานว่า STM32F407 สามารถ Capture ข้อมูลจริงจาก Samsung SPS-1000 แล้วแสดง Interface ของเครื่องบนจอ VGA ได้ รวมถึงการเปลี่ยนหน้าจอตามเมนู และการทำงานหลัง Restart และ Factory Reset

Step 8: สิ่งที่เรียนรู้จากการคืนชีพจอเก่า
การทดลองนี้แสดงให้เห็นว่าเมื่อระบบต้นทางยังส่งสัญญาณภาพดิจิทัลได้ เราอาจนำข้อมูลกลับมาสร้าง Interface ที่แสดงบนจอรูปแบบใหม่ได้โดยไม่ต้องเปลี่ยน Controller หรือจำลอง UI เดิม แต่ต้องเข้าใจ Timing และข้อกำหนดทางไฟฟ้าของอุปกรณ์แต่ละรุ่นก่อน
Code Snippet จาก GitHub
Repository STM32F407 VGA SPI มีตัวอย่าง Initialize VGA Driver และรอ Vertical Blank ดังนี้ เป็นเพียงตัวอย่างการใช้ VGA Library ไม่ใช่โค้ด Capture สัญญาณ Samsung SPS-1000 ทั้งระบบ
#include "VGA.h"
void setup()
{
VGA.begin();
VGA.cls();
}
void loop()
{
VGA.waitVBlank();
// Draw into VGA.VRAM()
}
Source Code และไฟล์ดาวน์โหลดที่เกี่ยวข้อง
Capture ข้อมูลจอด้วย RP2040, PIO และ DMA
เปิด GitHub Source Code ดาวน์โหลด ZIPการ Capture และ VGA Reconstruction ด้วย STM32F407
เปิด GitHub Source Code ดาวน์โหลด ZIPเอกสาร LCD Driver ที่ผู้สร้างแนบไว้
เปิด / ดาวน์โหลด PDFคู่มือที่แนบใน Step 1
เปิด / ดาวน์โหลด PDFเอกสารซ่อมบำรุงเครื่องต้นแบบ
เปิด / ดาวน์โหลด PDFเอกสาร Display Controller ที่เกี่ยวข้อง
เปิด / ดาวน์โหลด PDFตรวจไม่พบวิดีโอที่แนบไว้ในข่าว Hackaday หรือโครงการ Instructables จึงไม่เพิ่มวิดีโอที่ไม่ได้เป็นส่วนหนึ่งของการทดลองนี้
FAQ: คำถามที่พบบ่อย
1. STN LCD คืออะไร?
เป็นเทคโนโลยีจอ LCD รุ่นเก่า โปรเจกต์นี้ใช้จอ Monochrome ใน Samsung SPS-1000 เป็นกรณีศึกษา
2. ทำไมต้องใช้ Raspberry Pi Pico?
RP2040 มี PIO และ DMA ที่ใช้ Capture สัญญาณตาม Pixel Clock ได้โดยลดภาระ CPU
3. STM32F407 ใช้ทำอะไร?
ผู้สร้างใช้ทดลอง Capture ภาพและสร้างสัญญาณ VGA ก่อนต่อยอดไปยัง RP2040
4. สัญญาณ U0–U3 คืออะไร?
เป็นบัสข้อมูลพิกเซล 4 บิตจาก Display Controller ของเครื่องต้นแบบ
5. ทำไมต้องมี XSCL, LP และ YD?
เพื่อกำหนดจังหวะอ่าน Pixel Data และระบุขอบเขตบรรทัดกับเฟรม
6. ทำไมต้องวัด Timing เอง?
เพราะสัญญาณจอมีช่วง Active Pixels และช่วงว่าง ซึ่งอาจแตกต่างกันในแต่ละ Controller
7. แปลงภาพ 320×240 เป็น 640×480 อย่างไร?
ขยายพิกเซลแต่ละจุดเป็นบล็อก 2×2 และสร้างภาพ Monochrome VGA
8. Framebuffer ต้องใช้หน่วยความจำเท่าไร?
สำหรับ 640×480 แบบ 1 บิตต่อพิกเซลใช้ 38,400 Bytes หรือ 37.5 KiB
9. ต่อ 5V เข้า Pico โดยตรงได้ไหม?
ไม่ควรทำ ต้องตรวจแรงดันและใช้วงจรปรับระดับสัญญาณให้เหมาะกับ GPIO 3.3V
10. ใช้ Resistor ค่าใดกับ VGA?
Source มีค่าต่างกัน ต้องตรวจวงจรและ Implementation ที่เลือกก่อนต่อจริง
11. GitHub Pico แสดง VGA ได้ทันทีหรือไม่?
README ระบุว่า Capture ใช้งานได้ แต่ยังมีงานด้าน Output เพิ่มเติมเป็น Future Improvement
12. มี PDF คู่มือให้ดาวน์โหลดไหม?
มีเอกสาร 4 ไฟล์จาก Instructables รวมคู่มือ Samsung SPS-1000 และ Display Controller
13. มีวิดีโอสาธิตไหม?
ไม่พบวิดีโอที่แนบในสองบทความต้นฉบับที่ตรวจสอบ
14. เทคนิคนี้ใช้กับ LCD เก่าทุกรุ่นได้ไหม?
Source ไม่ได้ยืนยัน ต้องตรวจ Signal, Pinout, Voltage และ Timing ของแต่ละจอใหม่
References / แหล่งข้อมูลต้นฉบับ
ต่อยอดโปรเจกต์ Electronics กับ GlobalByte
สนใจทดลอง Raspberry Pi Pico, STM32, Reverse Engineering หรือ Embedded System สามารถสอบถามทีม GlobalByte เกี่ยวกับ Development Board, Level Shifter, Connector และอุปกรณ์ Maker ที่เหมาะกับโปรเจกต์ได้ โดยควรตรวจสเปกและความเข้ากันได้ก่อนเลือกใช้งาน