เจ้า HPDL-1414 เนี่ย เป็นจอ LED 16 Segment แบบมี 4 ช่องให้แสดงผล อายุอานามก็ร่วม 20 ปีเข้าไปแล้ว ตัวจอเป็นสีแดง GaAsP ที่เราจะเรียกมันว่า "สมาร์ท" ก็ยังได้ เพราะมันสามารถพิมพ์ตัวอักษรและตัวเลขลงบนช่องแสดงผลได้เลย

การควบคุมจอตัวนี้ทำผ่านวงจรรวม CMOS ที่ฝังอยู่ในตัวเรือนพลาสติกเลย วงจรข้างในมันมีทั้ง RAM, ตัวถอดรหัส ASCI II, ตัวมัลติเพล็กเซอร์ และไดรเวอร์สำหรับ LED อยู่ครบ เพราะฉะนั้นเราไม่ต้องต่ออุปกรณ์เสริมอะไรให้วุ่นวายเพื่อเชื่อมจอนี้เข้ากับไมโครคอนโทรลเลอร์เลย แถมยังสามารถต่อจอเพิ่มเป็นแบบอนุกรมได้ด้วย โดยจอตัวถัดไปแต่ละตัว เราก็แค่ต้องกำหนดขา GPIO อีกหนึ่งขาให้กับพิน WR ซึ่งคล้ายๆ กับการทำงานของอินเทอร์เฟซ SPI นั่นแหละ
โครงสร้างบัสข้อมูลแบบขนาน (Parallel Data Bus Architecture)
ชิปตัวนี้ไม่ได้ใช้ I2C แบบมาตรฐาน (2 สาย) นะน้อง มันใช้โปรโตคอลโบราณแบบขนาน (parallel) ต่างหาก เลยต้องต่อสายจัมเปอร์กันให้วุ่นวายเป็นใยแมงมุมไปหมด
- HPDL1414 ต้องการ พินข้อมูล 7 ขา (
D0 - D6) เพื่อรับข้อมูลตัวอักษร ASCII หนึ่งตัว (เช่น01000001สำหรับตัว 'A') - ต้องการ พินแอดเดรส 2 ขา (
A0, A1) เพื่อบอกชิปว่าให้พิมพ์ตัวอักษรลงบนจอเล็กๆ 4 จอนี้จอไหน - ต้องการ พิน Write Enable (
WR) - การทำงานใน C++: ถ้าจะเขียนตัวอักษร "T" ลงบนบล็อคจอแรก
- Arduino จะสั่งให้พินข้อมูลทั้ง 7 ขาเป็น HIGH/LOW ให้ตรงกับรหัสไบนารีของตัว 'T'
- เซ็ตค่า A0 และ A1 เป็น LOW (หมายถึงเป้าหมายคือตำแหน่งจอที่ 0)
- สั่งพิน
WRให้พัลส์จาก LOW ไป HIGH อย่างรวดเร็ว - เจ้า HPDL1414 ก็จะรับรหัสไบนารีเข้าไป ยัดลงในเมทริกซ์ความจำยุค 80s ข้างใน แล้วจุดไฟ LED แบบ Segment สีแดงสวยงามให้เราเห็น!
ในวิดีโอเก่าของพี่ เคยได้เอานาฬิกาจิ๋วที่ใช้จอพวกนี้มาให้ดู รวมถึงวิธีเขียนข้อความแบบนิ่งและแบบวิ่งลงไปด้วย แต่น่าเสียดายที่ตอนนั้นยังทำโค้ดเวอร์ชันที่สามารถปรับเวลาด้วยปุ่มกดเองไม่ได้ ซึ่งมันก็ทำให้นาฬิกาย้อนยุคสวยๆ เรือนนี้ยังไม่สมบูรณ์สักที ทั้งๆ ที่ตอนทำเคสก็ได้ใส่ปุ่มกดสามปุ่มไว้รอแล้ว
คราวนี้พี่จะนำเสนอโปรเจคเวอร์ชันใหม่ให้ดู โดยนอกจากฟังก์ชันตั้งเวลาด้วยมือแล้ว ยังเพิ่มฟังก์ชันปลุก (Alarm) พร้อมเสียงบี๊บแบบพัลส์จากบัซเซอร์ตัวจิ๋วเข้าไปอีกด้วย งานนี้จัดไปวัยรุ่น!
การเซ็ตอัพชิ้นส่วนยุคคลาสสิก
อุปกรณ์นี้ทำง่ายมาก ประกอบด้วยชิ้นส่วนหลักๆ ดังนี้:
- Arduino Nano (ตัวเล็กแฝงตัวอยู่หลังจอย้อนยุคตัวใหญ่ได้อย่างสวยงาม)
- จอ HPDL-1414 สองตัว (หามาจากของเก่าเก็บ NOS ทางการทหารหรือเครื่องคิดเลขใน eBay)
- โมดูลนาฬิกา DS3231 RTC
- สายจัมเปอร์กว่า 20 เส้น ที่ต่อวุ่นวายเพื่อสร้างบัสข้อมูลแบบขนาน!
- ปุ่มกดสามปุ่ม
- และบัซเซอร์แบบแอคทีฟตัวเล็ก

การเชื่อมต่อกับนาฬิกาควอตซ์ (DS3231)
เพราะจอ HPDL ตัวใหญ่กินขาพินของ Uno ไปเกือบหมด เราต้องสร้างระบบจับเวลาอย่างมีประสิทธิภาพหน่อย
- ต่อ DS3231 I2C RTC เข้ากับขา
A4/A5 - Arduino จะดึงค่าเวลาออกมา แยกสตริง
10:45ออกเป็นอาร์เรย์ของcharแต่ละตัว! - จากนั้นมันจะวนลูปผ่านตัวอักษรแต่ละตัว แปลงเป็นรหัสไบนารี 7 บิตแบบขนาน แล้วส่งข้อมูลเข้าไปในจอย้อนยุคทีละตัวตามลำดับ งานนี้ห้ามช็อตนะตัวนี้!
alarmHr และ alarmMin ได้ด้วยตัวเอง พอเวลาตรงกับนาฬิกาจาก RTC เจ้าตัวทรานซิสเตอร์ NPN ก็จะสั่งงานให้ออดตัวใหญ่ (mechanical buzzer) ตะโกนลั่น! งานนี้ห้ามช็อตนะตัวนี้มาดูการทำงานของเจ้าเครื่องนี้กันดีกว่า หลังจากเปิดเครื่อง จะมีข้อความ demo เดินเล่นบนจอก่อน จากนั้นก็จะแสดงเวลาปัจจุบันเป็น ชั่วโมง นาที และวินาที ถ้าอยากเข้าเมนูตั้งเวลา ก็กดปุ่ม "S" เข้าไปเลย

พอเข้าเมนูแล้ว ใช้ปุ่ม "H" ตั้งชั่วโมง ปุ่ม "M" ตั้งนาที ตั้งเสร็จกดปุ่ม "S" อีกที ก็จะกระโดดเข้าเมนูตั้งนาฬิกาปลุกทันที

หลักการตั้งค่าเหมือนเดิมเลย แต่คราวนี้จะมีตัวอักษร "A" ขึ้นนำหน้าให้รู้ว่านี่คือเมนูปลุกนะจ๊ะ

พอถึงเวลาปลุกที่ตั้งไว้ มันจะส่งเสียงบี๊บๆ ความยาว 500mS ถ้าอยากให้มันเงียบก็แค่กดปุ่มตั้งค่า (set button) เท่านั้นเอง ง่ายมั้ยล่า
สรุปสั้นๆ นี่คือนาฬิกาเล็กๆ เรียบง่าย แต่เจ๋งไม่เบา เพราะมันแสดงผลบนจอ retro สุดคลาสสิกจาก Hewlett-Packard สมัยร้อยปีก่อน (เคยใช้ในเครื่องคิดเลขและเครื่องมือวัดกันเลยทีเดียว) งานนี้บอกเลยว่า... สู้งานนะน้อง!