สารบัญ:

เมทริกซ์จอแสดงผล LED 5x4 โดยใช้แสตมป์พื้นฐาน 2 (bs2) และ Charlieplexing: 7 ขั้นตอน
เมทริกซ์จอแสดงผล LED 5x4 โดยใช้แสตมป์พื้นฐาน 2 (bs2) และ Charlieplexing: 7 ขั้นตอน

วีดีโอ: เมทริกซ์จอแสดงผล LED 5x4 โดยใช้แสตมป์พื้นฐาน 2 (bs2) และ Charlieplexing: 7 ขั้นตอน

วีดีโอ: เมทริกซ์จอแสดงผล LED 5x4 โดยใช้แสตมป์พื้นฐาน 2 (bs2) และ Charlieplexing: 7 ขั้นตอน
วีดีโอ: Arduino MAX7219 Dot Matrix Module 2x8 Display Module โมดูลจอ LED Matrix 2024, กรกฎาคม
Anonim
เมทริกซ์จอแสดงผล LED 5x4 โดยใช้แสตมป์พื้นฐาน 2 (bs2) และ Charlieplexing
เมทริกซ์จอแสดงผล LED 5x4 โดยใช้แสตมป์พื้นฐาน 2 (bs2) และ Charlieplexing

มี Basic Stamp 2 และไฟ LED พิเศษอยู่รอบ ๆ หรือไม่? ทำไมไม่ลองใช้แนวคิดของ charlieplexing และสร้างเอาต์พุตโดยใช้เพียง 5 พิน

สำหรับคำแนะนำนี้ฉันจะใช้ BS2e แต่สมาชิกในครอบครัว BS2 ควรทำงาน

ขั้นตอนที่ 1: Charlieplexing: อะไร ทำไม และอย่างไร

มาทำความเข้าใจกันก่อนว่าทำไมถึงใช้ charlieplexing กับ Basic Stamp 2? ---การพิสูจน์แนวคิด: เรียนรู้วิธีการทำงานของ charlieplexing และเรียนรู้บางอย่างเกี่ยวกับ BS2 สิ่งนี้อาจเป็นประโยชน์กับฉันในภายหลังโดยใช้ชิป 8 พินที่เร็วกว่า (มีเพียง 5 ตัวเท่านั้นที่จะเป็น i/o) --- เหตุผลที่มีประโยชน์: โดยทั่วไปแล้วไม่มีเลย BS2 นั้นช้าเกินกว่าจะแสดงได้โดยไม่กะพริบอย่างเห็นได้ชัด charlieplexing คืออะไร---Charlieplexing เป็นวิธีการขับ LED จำนวนมากด้วยพิน i/o ของไมโครโปรเซสเซอร์จำนวนน้อย ฉันเรียนรู้เกี่ยวกับ charlieplexing จาก www.instructables.com และคุณก็สามารถทำได้เช่นกัน: Charlieplexing LEDs- ทฤษฎีวิธีการขับ LED จำนวนมากจากหมุดไมโครคอนโทรลเลอร์สองสามตัว นอกจากนี้ ที่วิกิพีเดีย: Charlieplexingฉันจะขับไฟ LED 20 ดวงด้วยพิน i/o 5 อันได้อย่างไร --- โปรดอ่านลิงก์สามลิงก์ภายใต้ "Charlieplexing คืออะไร" ที่อธิบายได้ดีกว่าที่ฉันเคยทำได้ Charlieplexing แตกต่างจากมัลติเพล็กซ์แบบเดิมที่ต้องการ i/o พินหนึ่งพินสำหรับแต่ละแถวและแต่ละคอลัมน์ (ซึ่งจะเป็นพิน i/o ทั้งหมด 9 พินสำหรับจอแสดงผล 5/4)

ขั้นตอนที่ 2: ฮาร์ดแวร์และแผนผัง

ฮาร์ดแวร์และแผนผัง
ฮาร์ดแวร์และแผนผัง

รายการวัสดุ:1x - แสตมป์พื้นฐาน 220x - ไดโอดเปล่งแสง (LED) ประเภทเดียวกัน (สีและแรงดันตกคร่อม)5x - ตัวต้านทาน (ดูด้านล่างเกี่ยวกับค่าตัวต้านทาน) เสริม/ตัวเลือก: วิธีการเขียนโปรแกรม BS2 ปุ่มกดชั่วขณะเป็นสวิตช์รีเซ็ต6v -9vแหล่งจ่ายไฟขึ้นอยู่กับเวอร์ชันของ BS2 ของคุณ (อ่านคู่มือของคุณ) แผนผัง: แผนผังนี้รวมเอารูปแบบทางกลไว้ในใจ คุณจะเห็นตารางของ LED ที่ตั้งค่าไว้ทางด้านซ้าย นี่คือการวางแนวที่มีการเขียนโค้ด BS2 ขอให้สังเกตว่า LED แต่ละคู่มีขั้วบวกที่เชื่อมต่อกับขั้วลบของอีกขั้วหนึ่ง จากนั้นจะเชื่อมต่อกับพิน i/o ตัวใดตัวหนึ่งจากห้าตัว ค่าตัวต้านทาน:คุณควรคำนวณค่าความต้านทานของคุณเอง ตรวจสอบแผ่นข้อมูลสำหรับ LED ของคุณหรือใช้การตั้งค่า LED บนมัลติมิเตอร์แบบดิจิตอลของคุณเพื่อค้นหาแรงดันตกคร่อมของ LED ของคุณ มาคำนวณกัน: แรงดันไฟจ่าย - แรงดันตก / กระแสที่ต้องการ = ค่าตัวต้านทาน BS2 จ่ายไฟ 5v ที่ควบคุม และสามารถจ่ายไฟได้ 20ma ของปัจจุบัน ไฟ LED ของฉันมีแรงดันตก 1.6v และทำงานที่ 20ma.5v - 1.6v /.02amps = 155ohms เพื่อปกป้อง BS2 ของคุณ คุณควรใช้ค่าความต้านทานที่สูงขึ้นถัดไปจากค่าที่คุณได้รับจากการคำนวณ ในกรณีนี้ ฉันเชื่อว่ามันจะเป็น 180 โอห์ม ฉันใช้ 220ohms เพราะบอร์ดพัฒนาของฉันมีค่าตัวต้านทานในตัวนั้นสำหรับพิน i/o แต่ละตัว หมายเหตุ: ฉันเชื่อว่าเนื่องจากมีตัวต้านทานในแต่ละพิน สิ่งนี้จึงเพิ่มความต้านทานของไฟ LED แต่ละตัวได้อย่างมีประสิทธิภาพเนื่องจากพินหนึ่งเป็น V+ และอีกอันคือ Gnd หากเป็นกรณีนี้ คุณควรลดค่าตัวต้านทานลงครึ่งหนึ่ง ผลเสียของค่าความต้านทานที่สูงเกินไปคือ LED ที่หรี่ลง ใครสามารถยืนยันสิ่งนี้และทิ้ง PM หรือแสดงความคิดเห็นเพื่อให้ฉันสามารถอัปเดตข้อมูลนี้ได้หรือไม่ การเขียนโปรแกรม: ฉันใช้บอร์ดพัฒนาที่มีตัวเชื่อมต่อ DB9 เพื่อตั้งโปรแกรมชิปบนบอร์ด ฉันยังใช้ชิปนี้บนเขียงหั่นขนมที่ไม่มีบัดกรีและได้รวมส่วนหัว In Circuit Serial Programming (ICSP) ส่วนหัวเป็น 5 พิน พิน 2 ถึง 5 เชื่อมต่อกับพิน 2-5 บนสายเคเบิลอนุกรม DB9 (ไม่ได้ใช้พิน 1) โปรดทราบว่าการใช้หมุดส่วนหัว ICSP 6 และ 7 บนสายเคเบิล DB9 จะต้องเชื่อมต่อกัน รีเซ็ต: ปุ่มรีเซ็ตแบบกดชั่วขณะเป็นตัวเลือก เพียงแค่ดึงพิน 22 ลงกราวด์เมื่อผลัก

ขั้นตอนที่ 3: เขียงหั่นขนม

เขียงหั่นขนม
เขียงหั่นขนม
เขียงหั่นขนม
เขียงหั่นขนม

ตอนนี้ ถึงเวลาสร้างเมทริกซ์บนเขียงหั่นขนม ฉันใช้แถบเทอร์มินัลเพื่อเชื่อมต่อขาข้างหนึ่งจากคู่ led แต่ละคู่เข้าด้วยกัน และใช้สายจัมเปอร์ขนาดเล็กเพื่อเชื่อมต่อขาอีกข้าง นี่คือรายละเอียดในภาพโคลสอัพและอธิบายในเชิงลึกที่นี่:1. จัดวางเขียงหั่นขนมของคุณให้ตรงกับภาพที่ใหญ่ขึ้น2 วาง LED 1 โดยให้ขั้วแอโนด (+) หันเข้าหาตัวคุณ และแคโทด (-) อยู่ห่างจากตัวคุณ3. วาง LED 2 ในทิศทางเดียวกันกับขั้วบวก (+) ในแถบขั้วต่อของขั้วลบ LED 1 ใช้สายจัมเปอร์ขนาดเล็กเชื่อมต่อแอโนดของ LED 1 กับแคโทดของ LED 2.5 ทำซ้ำจนกว่าจะเพิ่ม LED แต่ละคู่ลงในบอร์ด ฉันใช้แถบพาวเวอร์บัสของบอร์ดขนมปังเป็นแถบบัสสำหรับพิน BS2 I/O เนื่องจากมีแถบบัสเพียง 4 แถบ ฉันจึงใช้แถบเทอร์มินัลสำหรับ P4 (การเชื่อมต่อ I/O ที่ห้า) สามารถเห็นได้ในภาพที่ใหญ่ขึ้นด้านล่าง6. เชื่อมต่อแถบเทอร์มินัลสำหรับแคโทด LED 1 กับแถบบัส P0 ทำซ้ำสำหรับ LED ที่มีเลขคี่แต่ละอันแทนค่า P* ที่เหมาะสมสำหรับแต่ละคู่ (ดูแผนผัง)7. เชื่อมต่อแถบเทอร์มินัลสำหรับแคโทด LED 2 กับแถบบัส P1 ทำซ้ำสำหรับ LED ที่มีเลขคี่แต่ละอันแทนค่า P* ที่เหมาะสมสำหรับแต่ละคู่ (ดูแผนผัง)8 เชื่อมต่อแถบบัสแต่ละแถบกับพิน I/O ที่เหมาะสมบน BS2 (P0-P4).9 ตรวจสอบการเชื่อมต่อทั้งหมดเพื่อให้แน่ใจว่าตรงกับ schematic.10 เฉลิมฉลองหมายเหตุ: ในระยะใกล้ คุณจะเห็นว่าไม่ปรากฏว่าฉันทำตามขั้นตอนที่ 7 เนื่องจากการเชื่อมต่อกับพิน I/O ที่สองอยู่บนแอโนดของ LED ที่มีเลขคี่ โปรดจำไว้ว่า แคโทดของ LED ที่มีเลขคู่เชื่อมต่อกับแอโนดของ LED ที่มีเลขคี่ ดังนั้นการเชื่อมต่อจะเหมือนกันทั้งสองทาง หากข้อความนี้ทำให้คุณสับสน ก็ไม่ต้องสนใจ

ขั้นตอนที่ 4: พื้นฐานการเขียนโปรแกรม

สำหรับ charlieplexing ในการทำงาน คุณต้องเปิดไฟ LED ทีละตัว เพื่อให้ใช้งานได้กับ BS2 ของเรา เราต้องการสองขั้นตอนพื้นฐาน: ตั้งค่าโหมดเอาต์พุตสำหรับพินโดยใช้คำสั่ง OUTS2 บอก BS2 ว่าจะใช้พินตัวไหนเป็นเอาต์พุตโดยใช้คำสั่ง DIRS วิธีนี้ได้ผลเพราะ BS2 สามารถบอกได้ว่าพินตัวไหนจะขับสูงและต่ำ และจะรอจนกว่าคุณจะระบุว่าพินใดเป็นเอาต์พุต เรามาดูกันว่าสิ่งต่าง ๆ ถูกเชื่อมต่ออย่างถูกต้องหรือไม่โดย เพียงแค่พยายามกะพริบ LED 1 หากคุณดูที่แผนผังคุณจะเห็นว่า P0 เชื่อมต่อกับแคโทด (-) ของ LED 1 และ P1 เชื่อมต่อกับแอโนดของ LED เดียวกันนั้น ซึ่งหมายความว่าเราต้องการผลักดัน P0 ต่ำและ P1 สูง สามารถทำได้ดังนี้: "OUTS = %11110" ซึ่งขับเคลื่อน P4-P1 สูงและ P0 ต่ำ (% บ่งชี้ว่าต้องตามด้วยเลขฐานสอง เลขฐานสองต่ำสุดจะอยู่ทางด้านขวาเสมอ 0=LOW, 1=HIGH) BS2 เก็บข้อมูลนั้น แต่จะไม่ดำเนินการจนกว่าเราจะประกาศว่าพินใดเป็นเอาต์พุต ขั้นตอนนี้เป็นขั้นตอนสำคัญ เนื่องจากควรมีเอาต์พุตเพียงสองพินในเวลาเดียวกัน ส่วนที่เหลือควรเป็นอินพุตซึ่งตั้งค่าพินเหล่านั้นเป็นโหมดอิมพีแดนซ์สูงเพื่อไม่ให้กระแสไฟตก เราจำเป็นต้องขับ P0 และ P1 ดังนั้นเราจะตั้งค่าให้เป็นเอาต์พุตและส่วนที่เหลือเป็นอินพุตดังนี้: "DIRS = %00011".(% บ่งชี้ว่าต้องตามด้วยเลขฐานสอง เลขฐานสองต่ำสุดจะอยู่ทางขวาเสมอ 0 =INPUT, 1=OUTPUT)มารวมกันเป็นโค้ดที่มีประโยชน์:' {$STAMP BS2e}' {$PBASIC 2.5}DO OUTS = %11110 'Drive P0 ต่ำและ P1-P4 สูง DIRS = %00011 'ตั้งค่า P0- P1 เป็นเอาต์พุตและ P2-P4 เป็นอินพุต PAUSE 250 'หยุดชั่วคราวเพื่อให้ LED ยังคงอยู่ใน DIRS = 0 'ตั้งค่าพินทั้งหมดเป็นอินพุต การดำเนินการนี้จะปิด LED PAUSE 250 'หยุดชั่วคราวเพื่อให้ LED ยังคงปิดอยู่LOOP

ขั้นตอนที่ 5: วงจรการพัฒนา

ตอนนี้เราได้เห็นเวลาทำงานหนึ่งพินแล้ว เพื่อให้แน่ใจว่าทั้งหมดทำงาน 20led_Zig-Zag.bse โค้ดที่แนบมานี้ควรสว่างขึ้นแต่ละ LEDS 20 ดวงในรูปแบบซิกแซก คุณจะสังเกตเห็นว่าหลังจากแต่ละพินมี bin lit ฉันใช้ "DIRS = 0" เพื่อเปลี่ยนพินทั้งหมดกลับเป็นอินพุต หากคุณเปลี่ยน OUTS โดยไม่ปิดพินเอาต์พุต คุณอาจได้รับ "ghosting" ซึ่งไฟ LED ที่ไม่ควรติดอาจกะพริบระหว่างรอบ หากคุณเปลี่ยนตัวแปร W1 ที่จุดเริ่มต้นของโค้ดนี้เป็น "W1 = 1" ที่นั่น จะหยุดเพียง 1 มิลลิวินาทีระหว่างแต่ละ LED จะกะพริบ สิ่งนี้จะทำให้เอฟเฟกต์การมองเห็นคงอยู่ (POV) ซึ่งทำให้ดูเหมือนว่าไฟ LED ทั้งหมดติดสว่าง สิ่งนี้มีผลในการทำให้ไฟ LED หรี่ลง แต่เป็นสาระสำคัญของวิธีที่เราจะแสดงอักขระบน matrix.20led_Interpreter_Proto.bse นี้ฉันตัดสินใจ ณ จุดนี้ว่าฉันต้องพัฒนาโค้ดล่ามบางประเภทเพื่อเปลี่ยนชุดค่าผสมที่จำเป็นในการจุดไฟ ไฟ LED ในรูปแบบที่ใช้งานได้ ไฟล์นี้เป็นความพยายามครั้งแรกของฉัน คุณจะเห็นว่าที่ด้านล่างของไฟล์ อักขระจะถูกเก็บไว้ในเลขฐานสอง 5 หลักสี่บรรทัด แต่ละบรรทัดจะถูกอ่าน แยกวิเคราะห์ และเรียกใช้รูทีนย่อยทุกครั้งที่ต้องมีไฟ LED รหัสนี้ใช้งานได้ โดยวนผ่านตัวเลข 1-0 หากคุณพยายามเรียกใช้ สังเกตว่ามีอัตราการรีเฟรชที่ช้ามาก ทำให้อักขระกะพริบเกือบช้าเกินไปที่จะจดจำได้ รหัสนี้ไม่ดีด้วยเหตุผลหลายประการ ก่อนอื่น เลขฐานสองห้าหลักใช้พื้นที่มากพอใน EEPROM เท่ากับเลขฐานสอง 8 หลัก เนื่องจากข้อมูลทั้งหมดถูกจัดเก็บไว้ในกลุ่มสี่บิต ประการที่สอง SELECT CASE ที่ใช้ในการตัดสินใจว่าขาใดจะต้องจุดไฟต้องใช้ 20 กรณี BS2 ถูกจำกัดไว้ที่ 16 กรณีต่อการดำเนินการ SELECT ซึ่งหมายความว่าฉันต้องแฮ็คข้อ จำกัด นั้นด้วยคำสั่ง IF-THEN-ELSE จะต้องมีวิธีที่ดีกว่า หลังจากเกาหัวไม่กี่ชั่วโมงฉันก็ค้นพบมัน

ขั้นตอนที่ 6: ล่ามที่ดีกว่า

แต่ละแถวของเมทริกซ์ของเราประกอบด้วย LED 4 ดวง โดยแต่ละแถวสามารถเปิดหรือปิดได้ BS2 เก็บข้อมูลใน EEPROM ในกลุ่มสี่บิต ความสัมพันธ์นั้นน่าจะทำให้เราง่ายขึ้นมาก นอกจากนั้น สี่บิตยังสอดคล้องกับเลขทศนิยม 0-15 รวมเป็น 16 ความเป็นไปได้ ซึ่งจะทำให้หรือ SELECT CASE ง่ายขึ้นมาก นี่คือตัวเลข 7 ที่เก็บไว้ใน EEPROM:'7 %1111, %1001, %0010, %0100, %0100, แต่ละแถวมีค่าเทียบเท่าทศนิยมเป็น 0-15 ดังนั้นเราจึงอ่าน แถวจากหน่วยความจำและป้อนโดยตรงไปยังฟังก์ชัน SELECT CASE ซึ่งหมายความว่าเมทริกซ์ไบนารีที่มนุษย์สามารถอ่านได้ใช้ในการสร้างอักขระแต่ละตัว (1=led on, 0=led off) เป็นกุญแจสำคัญสำหรับล่าม ในการใช้ SELECT CASE เดียวกันสำหรับ 5 แถวแต่ละแถว ฉันใช้ Select case อื่น เพื่อตั้งค่า DIRS และ OUTS เป็นตัวแปร ครั้งแรกที่ฉันอ่านอักขระห้าบรรทัดถึงตัวแปร ROW1-ROW5 ในแต่ละบรรทัด โปรแกรมหลักจะเรียกรูทีนย่อยเพื่อแสดงอักขระ รูทีนย่อยนี้รับแถวแรกและกำหนดชุดค่าผสม OUTS ที่เป็นไปได้สี่ชุดให้กับตัวแปร outp1-outp4 และชุดค่าผสม DIRS ที่เป็นไปได้สองชุดเป็น direc1 & direc2 ไฟ LED จะกะพริบ ตัวนับแถวจะเพิ่มขึ้น และกระบวนการเดียวกันนี้จะถูกเรียกใช้สำหรับแต่ละแถวที่เหลืออีกสี่แถว ซึ่งเร็วกว่าโปรแกรมล่ามตัวแรกมาก ที่ถูกกล่าวว่ายังคงมีการสั่นไหวที่เห็นได้ชัดเจน ลองดูที่วิดีโอ กล้องทำให้การสั่นไหวดูแย่กว่านั้นมาก แต่คุณเข้าใจแล้ว การนำแนวคิดนี้ไปยังชิปที่เร็วกว่ามาก เช่น picMicro หรือชิป AVR จะทำให้สามารถแสดงอักขระเหล่านี้ได้โดยไม่กะพริบจนสังเกตได้

ขั้นตอนที่ 7: จะไปจากที่นี่ที่ไหน

ฉันไม่มีโรงสีซีเอ็นซีหรืออุปกรณ์แกะสลักเพื่อทำแผงวงจร ดังนั้นฉันจะไม่เดินสายโครงการนี้ หากคุณมีโรงสีและสนใจร่วมมือเพื่อก้าวไปข้างหน้าจากที่นี่ ส่งข้อความหาฉัน ฉันยินดีที่จะจ่ายค่าวัสดุและค่าขนส่งที่จะได้แสดงผลิตภัณฑ์สำเร็จรูปสำหรับโครงการนี้

ความเป็นไปได้อื่น ๆ: 1. ย้ายสิ่งนี้ไปยังชิปอื่น การออกแบบเมทริกซ์นี้สามารถใช้ได้กับชิปใดๆ ก็ตามที่มี 5 พิน i/o ที่ใช้งานได้แบบสามสถานะ (พินที่สามารถสูง ต่ำ หรืออินพุต (อิมพีแดนซ์สูง)) 2. การใช้ชิปที่เร็วกว่า (อาจเป็น AVR หรือ picMicro) คุณสามารถเพิ่มขนาดได้ ด้วยชิป 20 พิน คุณสามารถใช้ 14 พินเพื่อ charlieplex กับจอแสดงผลขนาด 8x22 และใช้พินที่เหลือเพื่อรับคำสั่งซีเรียลจากคอมพิวเตอร์หรือคอนโทรลเลอร์อื่น ใช้ชิป 20 พินเพิ่มอีกสามตัวและคุณสามารถมีหน้าจอเลื่อนขนาด 8x88 ได้ทั้งหมด 11 ตัวอักษรในคราวเดียว (ขึ้นอยู่กับความกว้างของอักขระแต่ละตัวแน่นอน) ขอให้โชคดีมีความสนุกสนาน!

แนะนำ: