โปรเจกต์ Arduino Shield NCS314 NIXIE Tubes Clock IN-14
สร้าง NIXIE Tubes display ของคุณได้อย่างง่ายดาย
สร้าง NIXIE Tubes display ของคุณได้อย่างง่ายดาย
▶ กดเพื่อดูวิดีโอสาธิตโปรเจกต์

เริ่มแรก หลังจากที่เราได้รับหลอด Nixie คุณภาพเยี่ยมจากโซเวียตอย่างรุ่น IN-12, IN-14 และ IN-18 มาจำนวนมาก เราตั้งใจจะสร้างตัวแสดงผลแบบง่ายๆ จากหลอด Nixie ในรูปแบบของ Shield สำหรับ Arduino ในตอนนั้นเรามี Arduino อยู่แล้ว ดังนั้นส่วนที่เหลือก็ดูเหมือนจะเป็นเรื่องเล็กน้อย (เราคิดอย่างนั้นในตอนนั้น) ในเวลานั้นเรายังไม่รู้อะไรเลยเกี่ยวกับวิธีการจัดการกับหลอดไฟเหล่านี้
ไม่นานหลังจากนั้น เราก็ได้พบวงจรการจ่ายไฟสำหรับหลอดเหล่านี้จากอินเทอร์เน็ต:

ใช่เลย! มันสว่างขึ้นมา! สิ่งที่เห็นทำให้เราตะลึงราวกับเป็นปาฏิหาริย์เล็กๆ และเราก็ตระหนักได้ว่าเรามาถูกทางแล้ว จากนั้นเราจึงเริ่มเก็บภาพทันที:

วันต่อมา เราเริ่มหารือเกี่ยวกับแนวคิดของโปรเจกต์ในอนาคต: เพื่อให้เรียบง่ายและลดต้นทุน ในตอนแรกเราตัดสินใจใช้โครงสร้างแบบ dynamic display แต่ภายหลังได้เปลี่ยนใจมาใช้แบบ static display แทน แม้ว่าสำหรับหลอด Nixie รุ่น IN-14 จะมองไม่ค่อยเห็นความแตกต่าง แต่สำหรับหลอด IN-18 นั้นแตกต่างกันอย่างชัดเจน ในโหมด dynamic ความสว่างจะลดลงและมักจะเกิดปรากฏการณ์ที่เรียกว่า blue spots effect:

โหมด dynamic display คือโหมดที่หลอดไม่ได้สว่างพร้อมกันทั้งหมดในคราวเดียว แต่จะสว่างทีละหลอด (ในหนึ่งช่วงเวลา) หรืออาจจะเป็นแบบอื่นๆ ที่สว่างพร้อมกัน เช่น ทีละสองหลอด
ในการหารือเกี่ยวกับตัวอุปกรณ์ในอนาคต เราตัดสินใจที่จะเพิ่มความสามารถในการแสดงข้อมูลจากคอมพิวเตอร์ผ่านหลอดเหล่านี้ ซึ่งจะช่วยให้ผู้ที่สนใจสามารถสร้างอุปกรณ์ของตนเองเพื่อแสดงข้อมูลต่างๆ บนหลอดไฟได้ เช่น จำนวนข้อความที่ยังไม่ได้อ่าน หรือจำนวนรอบในเกมอย่าง Fallout
จากนั้นเราเริ่มเลือกฮาร์ดแวร์ที่สามารถสลับค่า cathodes (ตัวเลข) ในหลอดได้ ตัวเลือกที่ชัดเจนคือ shift registers ที่ใช้การสื่อสารแบบ SPI เพื่อประหยัด Pins ของ MCU แต่เนื่องจากแรงดันไฟเลี้ยงของหลอดนั้นสูงมาก (สูงถึง 200 โวลต์) ตัวเลือกจึงมีไม่มากนัก เช่น HV513, HV5812, HV5122 และหลังจากที่เราได้ทดลองสร้างอุปกรณ์ด้วยชิปแต่ละตัว เราตัดสินใจเลือก HV5812 (ใน Shield เวอร์ชันใหม่ NCS314 V2.X และ NCS312 V1.X จะใช้ IC HV5122) ชิปนี้สะดวกมากเพราะช่วยให้ควบคุมหลอดไฟสองหลอดพร้อมกันได้ในฐานะ 20 bit register
ในการควบคุมหลอด 6 หลอด เราจำเป็นต้องใช้วงจรแบบนี้ 3 ชุดเชื่อมต่อกันแบบอนุกรม วิธีนี้ช่วยให้เราสามารถส่งแพ็คเก็ตข้อมูลผ่าน SPI เพียงครั้งเดียวและไม่ต้องกังวลเรื่องการอัปเดตข้อมูลบนหลอดตลอดเวลาเหมือนในกรณีของ dynamic display algorithm กล่าวคือ ตราบใดที่เราไม่จำเป็นต้องเปลี่ยนข้อมูลบนหลอด MCU ก็สามารถไปทำงานอื่นๆ หรือแม้แต่เข้าสู่โหมด sleep ได้เลย!
เราอยากพูดถึงเรื่องการส่งข้อมูลผ่าน SPI สักหน่อย Arduino สามารถส่งข้อมูลได้ทีละ 8 bits เท่านั้น แต่เราต้องการ 60 bits ซึ่งจำนวนเต็มที่สูงกว่าและหารด้วย 8 ลงตัวที่ใกล้ที่สุดคือ 64 ดังนั้นเราจึงต้องใช้เทคนิคจัดการ bit - โดยสร้าง Variable ขนาดใหญ่หนึ่งตัวประเภท unsigned long long ขนาด 64 bits สำหรับแต่ละ register แล้วส่งออกไป 8 ครั้ง ครั้งละ 8 bits โดยการ shifting บิตทั้งหมดภายใน Variable ไปทางขวา:
SPI.transfer(var64);
SPI.transfer(var64>>48);
SPI.transfer(var64>>40);
SPI.transfer(var64>>32);
SPI.transfer(var64>>24);
SPI.transfer(var64>>16);
SPI.transfer(var64>>8);
SPI.transfer(iTmp);







สนับสนุนเพื่อรับ Source Code หรือแอปพลิเคชันสำหรับโปรเจกต์นี้