สารบัญ:
- ขั้นตอนที่ 1: รับสินค้า…
- ขั้นตอนที่ 2: เชื่อมต่อโดยตรงกับจอแสดงผล LED
- ขั้นตอนที่ 3: ระบุตัวละครที่จะแสดง
- ขั้นตอนที่ 4: อนุรักษ์พอร์ต I/O ด้วย Shift Register
- ขั้นตอนที่ 5: สรุป
วีดีโอ: การใช้ Dot Matrix LED กับ Arduino และ Shift Register: 5 ขั้นตอน
2024 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2024-01-30 13:09
Siemens DLO7135 Dot matrix LED เป็นออปโตอิเล็กทรอนิกส์ชิ้นหนึ่งที่น่าทึ่ง มันถูกเรียกเก็บเงินเป็น 5x7 Dot Matrix Intelligent Display (r) พร้อมหน่วยความจำ/ตัวถอดรหัส/ไดรเวอร์ นอกจากหน่วยความจำนั้นแล้ว ยังมีจอแสดงผล ASCII 96 อักขระที่มีอักขระตัวพิมพ์ใหญ่และตัวพิมพ์เล็ก ตัวสร้างอักขระและมัลติเพล็กเซอร์ในตัว ความเข้มแสงสี่ระดับ และทั้งหมดทำงานด้วยไฟ 5V นั่นเป็นจำนวนมากที่จะมีชีวิตอยู่ได้ และที่ 16 ดอลลาร์ต่อป๊อปก็ควร ในขณะที่ใช้เวลาครึ่งวันที่ร้านขายอุปกรณ์อิเล็กทรอนิกส์ในท้องถิ่นที่ฉันโปรดปราน ฉันพบว่ามีถังขยะเต็มถังในราคา 1.50 เหรียญต่อชิ้น ฉันออกจากร้านไปหลายคน คำแนะนำนี้จะแสดงวิธีเชื่อมต่อกับดอทเมทริกซ์ LED และอักขระที่แสดงโดยใช้ Arduino ที่ใช้ AVR หากคุณเคยอ่านคำแนะนำก่อนหน้านี้ คุณอาจเข้าใจว่าฉันมักจะชอบวิธีแก้ปัญหาแบบประชดประชันมากที่สุด และคุณก็ไม่ผิด แม้ว่าฉันจะพลาดเป้าหมายไปบ้างเป็นบางครั้ง. ดังนั้น ฉันจะไปอีกขั้นในคำแนะนำนี้และแสดงให้คุณเห็นว่าคุณจะลดจำนวนพอร์ต I/O ที่จำเป็นในการขับเคลื่อนดอทเมทริกซ์ LED ขนาดใหญ่เหล่านี้ได้อย่างไร
ขั้นตอนที่ 1: รับสินค้า…
สำหรับโครงการเล็กๆ สั้นๆ นี้ คุณจะต้อง:
- ไมโครคอนโทรลเลอร์ที่ใช้ AVR เช่น Arduino หรืออื่นๆ คำแนะนำเหล่านี้อาจปรับให้เข้ากับ MCU ที่คุณเลือกได้
- DLO7135 ดอทเมทริกซ์ LED หรืออื่น ๆ ในตระกูลเดียวกัน
- 8-bit shift register เช่น 74LS164, 74C299 หรือ 74HC594
- เขียงหั่นขนม
- ลวดเชื่อม เครื่องตัดลวด ฯลฯ
ไม่จำเป็นต้องใช้หัวแร้งแม้ว่าฉันจะใช้ในภายหลัง คุณสามารถผ่านไปได้โดยปราศจากมัน
ขั้นตอนที่ 2: เชื่อมต่อโดยตรงกับจอแสดงผล LED
จัดวางรายการชิ้นส่วนเล็ก ๆ ของคุณและคว้า LED วางบนเขียงหั่นขนมที่อยู่ตรงกลางเล็กน้อยคร่อมร่องกึ่งกลาง ส่วนแรกของการเชื่อมต่อจะเกิดขึ้นทางด้านซ้ายของ LED Pin #1 อยู่ที่ด้านบนซ้ายตามที่ระบุโดยรูปสามเหลี่ยม/ลูกศร ฉันใส่ฟังก์ชันพินบนรูปภาพเพื่อใช้อ้างอิงในขณะที่คุณกำลังอ่านหรือเชื่อมต่อ LED ของคุณ
ด้านซ้าย
บวกและลบเริ่มต้นที่ด้านบนซ้ายเชื่อมต่อ Vcc กับ 5V อาจเป็นความคิดที่ดีที่จะไม่ใช้บอร์ดของคุณจนกว่าคุณจะทำด้านซ้ายทั้งหมดให้เสร็จ ไฟ LED อาจสว่างหากคุณพยายามเห็นรูเล็กๆ เพื่อเสียบสายไฟ เชื่อมต่อ GND ซ้ายล่างกับกราวด์ การทดสอบหลอด เปิดใช้งานชิป และเขียน ลำดับที่ 2 และ 3 จากด้านบนซ้ายคือการทดสอบหลอดไฟและการเปิดใช้งานชิป นี่เป็นตรรกะเชิงลบทั้งคู่ ซึ่งหมายความว่าจะเปิดใช้งานเมื่ออยู่ที่ตรรกะ 0 แทนที่จะเป็น 1 รูปภาพของฉันด้านล่างควรมีแถบเหนือพวกเขา แต่ฉันไม่ได้ใส่คำอธิบายประกอบไว้สำหรับสิ่งเหล่านี้ หมุด LT เมื่อเปิดใช้งานจะสว่างขึ้นทุกจุดในดอทเมทริกซ์ที่ความสว่าง 1/7th เป็นการทดสอบพิกเซลมากกว่า แต่สิ่งที่น่าสนใจเกี่ยวกับพิน LT ก็คือ มันไม่ได้เขียนทับอักขระใด ๆ ที่อยู่ในหน่วยความจำ ดังนั้นถ้าคุณมีหลายตัวที่ร้อยเข้าด้วยกัน (พวกมันมีระยะการมองเห็น 20 ฟุต) strobing LT สามารถทำให้ดูเหมือนเคอร์เซอร์ได้ เพื่อให้แน่ใจว่าถูกปิดใช้งาน ให้เชื่อมต่อกับ 5V พิน CE และ WR ยังเป็นตรรกะเชิงลบและจำเป็นต้องเปิดใช้งานสำหรับอุปกรณ์อัจฉริยะนี้จึงจะเขียนได้ คุณสามารถจัดการพินเหล่านี้ให้ละเอียดด้วยพอร์ต I/O สำรองบนไมโครคอนโทรลเลอร์ของคุณ แต่เราจะไม่รบกวนที่นี่ เพียงเชื่อมต่อเข้ากับกราวด์เพื่อเปิดใช้งาน ระดับความสว่าง LED ตระกูล DLO ตั้งโปรแกรมได้สี่ระดับ:
- ว่างเปล่า
- 1/7 ความสว่าง
- 1/2 ความสว่าง
- ความสว่างเต็มที่
BL1 HIGH และ BL0 LOW คือ 1/2 ความสว่าง ทั้ง HIGH คือความสว่างเต็มที่ ตั้งเป็นอะไรก็ได้ตามใจชอบ อีกครั้ง หากคุณมีพอร์ต I/O สำรองและมีความสำคัญเพียงพอสำหรับคุณ Arduino ก็สามารถควบคุมสิ่งนี้ได้เช่นกัน ซึ่งจะล้อมรอบด้านซ้าย หากคุณนำพลังงานมาสู่บอร์ดของคุณ คุณจะเห็นไฟ LED สว่างขึ้น ลองใช้การควบคุมความสว่างและการทดสอบหลอดไฟเพื่อทำความคุ้นเคย หากคุณสงสัย
ด้านขวา
ด้านขวาประกอบด้วยพอร์ตข้อมูลทั้งหมด ด้านล่างขวา ปักหมุด 8 หรือ D0 ให้แม่นยำ แทนบิตที่มีนัยสำคัญน้อยที่สุดในอักขระ 7 บิต ด้านบนขวา พิน 14 หรือ D6 หมายถึงบิตที่สำคัญที่สุด สิ่งนี้ช่วยให้คุณทราบลำดับการสับเปลี่ยนบิตของคุณเมื่อเขียนไปยัง LED เมื่อคุณเชื่อมต่อพอร์ตอินพุตข้อมูลแล้ว ให้ค้นหาพอร์ตดิจิตอล I/O ว่างเจ็ดพอร์ตบน Arduino หรือ AVR ของคุณและเชื่อมต่อ คุณอาจต้องการจำว่าพอร์ตข้อมูลขาออกบน AVR ของคุณจะไปที่พอร์ตข้อมูลเข้าบน LED ใด ตอนนี้คุณพร้อมที่จะส่งข้อมูลบางส่วนไปยัง LED อัจฉริยะแล้ว คุณตัวสั่นด้วยความตื่นเต้นหรือยัง? ฉันรู้ฉันเป็น…
ขั้นตอนที่ 3: ระบุตัวละครที่จะแสดง
ชุดอักขระที่ใช้กับ LED CMOS นี้คือ ASCII ขั้นสูงสุดของคุณ โดยเริ่มต้นที่ 0x20 (ทศนิยม 32; ช่องว่าง) และสิ้นสุดที่ 0x7F (ทศนิยม 127; การลบ แม้ว่าจะแสดงบน LED เป็นกราฟิกเคอร์เซอร์). ดังนั้น การแสดงตัวอักษร LED จึงไม่มีความหมายอะไรมากไปกว่าการกดลอจิก 1 หรือ 0 บนพินเอาต์พุตข้อมูลของคุณ ปกติแล้วตามด้วยพัลส์ WR แต่ฉันขอบอกไว้ก่อนว่าสำหรับแบบฝึกหัดนี้ คุณเขียนหรือ จำได้ว่าพินไหนไปพอร์ตอะไรใช่ไหม? ฉันเลือก PD[2..7] และ PB0 (พินดิจิทัล 2 ถึง 8 ใน Arduino-speak) ปกติฉันไม่แนะนำให้ใช้ PD[0..1] เพราะฉันทุ่มเทให้กับการสื่อสารซีเรียลกลับไปที่กล่อง FreeBSD และ Arduino et al แมปหมุดเหล่านั้นกับช่องทางการสื่อสาร FTDI USB และแม้ว่า "หมุด" SAY 0 และ 1 จะใช้งานได้หากคุณไม่เริ่มต้นการสื่อสารแบบอนุกรม แต่ฉันไม่เคยใช้พินเหล่านั้นเป็น I/O ดิจิทัลปกติ อันที่จริง ฉันใช้เวลาสองวันในการพยายามแก้ปัญหาเมื่อฉันพยายามใช้ PD0 และ PD1 และพบว่าปัญหาเหล่านั้นอยู่ในระดับสูงเสมอ *ยักไหล่* คงจะดีถ้ามีอินพุตภายนอกบางประเภท เช่น ปุ่มกด สวิตช์ล้อเลื่อนหรือปุ่มหมุน หรือแม้แต่อินพุตจากเทอร์มินัล (ArduinoTerm ของฉันยังไม่พร้อมสำหรับช่วงเวลาไพร์มไทม์…) ทางเลือกเป็นของคุณ สำหรับตอนนี้ ฉันแค่จะอธิบายวิธีรับโค้ดเพื่อให้ได้อักขระที่คุณต้องการบน LED มีไฟล์ zipfile สำหรับดาวน์โหลดรวมถึงซอร์สโค้ดและ Makefile และยังมีภาพยนตร์สั้นที่แสดง LED พิมพ์ชุดอักขระ ขออภัยสำหรับคุณภาพของวิดีโอเส็งเคร็ง รหัสด้านล่างพิมพ์สตริง "ยินดีต้อนรับสู่คำแนะนำของฉัน!" จากนั้นวนรอบชุดอักขระทั้งหมดที่ LED รองรับ
DDRD = 0xFF; // เอาต์พุตDDRB = (1<<DDB0); char msg = "ยินดีต้อนรับสู่ Instructable ของฉัน!";uint8_t i;for (;;){ for(i=0;i<27; i++) { Print2LED(msg); _delay_ms(150); } สำหรับ (i=0x20; i<0x80; i++) { Print2LED(i); _delay_ms(150); } Print2LED(&apos*&apos);}เอาต์พุตพอร์ตได้รับการดูแลในฟังก์ชัน Print2Led()
voidPrint2LED(uint8_t i){ PORTD = (i << 2); ถ้า (i & 0b01000000) PORTB = (1<
รหัสและ Makefile รวมอยู่ในไฟล์ zip ด้านล่าง
ขั้นตอนที่ 4: อนุรักษ์พอร์ต I/O ด้วย Shift Register
ดังนั้นตอนนี้ไมโครคอนโทรลเลอร์ของเราสามารถส่งข้อมูลไปยังดอทเมทริกซ์ LED ได้ แต่ใช้พอร์ต I/O แปดพอร์ต ซึ่งไม่รวมการใช้ ATtiny ในแพ็คเกจ DIP 8 พิน และแม้แต่กับ Arduino รุ่นใหม่ที่มี ATmega328p ซึ่งเป็นพอร์ต I/O จำนวนมากสำหรับ LED หนึ่งดวง อย่างไรก็ตาม เราสามารถแก้ไขได้โดยใช้ IC ที่เรียกว่า shift register สักครู่เพื่อ "เปลี่ยน" เกียร์… ทะเบียนกะสามารถเข้าใจได้ดีที่สุดโดยคิดถึงคำสองคำที่ประกอบกันเป็นชื่อ: "กะ" และ "การลงทะเบียน" คำว่า shift หมายถึงวิธีที่ข้อมูลเคลื่อนที่ผ่านรีจิสเตอร์ ที่นี่ (โดยทั่วไปใน Arduino และไมโครคอนโทรลเลอร์ของเรา) รีจิสเตอร์คือตำแหน่งที่เก็บข้อมูล ทำได้โดยใช้วงจรเชิงเส้นของวงจรลอจิกดิจิทัลที่เรียกว่า "ฟลิปฟล็อป" ซึ่งมีสถานะเสถียรสองสถานะที่สามารถแทนด้วย 1 หรือ 0 ได้ ดังนั้น เมื่อรวมฟลิปฟลอปแปดตัวเข้าด้วยกัน คุณจะมีอุปกรณ์ที่สามารถจับได้ และเป็นตัวแทนของไบต์ 8 บิต เช่นเดียวกับที่มีหลายประเภทของ flip flop และรูปแบบต่างๆ ในรูปแบบของ shift register (ตัวนับขึ้น/ลงและตัวนับ Johnson) นอกจากนี้ยังมี shift register หลายประเภทตามวิธีข้อมูล ถูกล็อคเข้าไปในรีจิสเตอร์และข้อมูลนั้นจะถูกส่งออกอย่างไร จากสิ่งนี้ ให้พิจารณาประเภทการลงทะเบียนกะต่อไปนี้:
- อนุกรมเข้า / ขนานออก (SIPO)
- อนุกรมเข้า / อนุกรมออก (SISO)
- ขนานเข้า/ออกอนุกรม (PISO)
- ขนานเข้า / ขนานออก (PIPO)
ข้อสังเกตสองประการคือ SIPO และ PISO การลงทะเบียน SIPO รับข้อมูลตามลำดับ นั่นคือ ทีละบิต ย้ายบิตอินพุตก่อนหน้าไปยังฟลิปฟล็อปถัดไป และส่งข้อมูลออกบนอินพุตทั้งหมดพร้อมกัน สิ่งนี้ทำให้ตัวแปลงอนุกรมเป็นขนานที่ดี ในทางกลับกัน PISO shift register มีอินพุตแบบขนาน ดังนั้นบิตทั้งหมดจึงถูกป้อนในครั้งเดียว แต่จะส่งออกทีละรายการ และคุณเดาได้ว่านี่ทำให้ตัวแปลงขนานกับอนุกรมที่ดี shift register ที่เราต้องการใช้เพื่อลดจำนวน I/O pins จะทำให้เราสามารถเอา 8 IO pin ที่เราเคยใช้ก่อนหน้านี้มาลดเหลือเพียง 1 พิน หรืออาจจะแค่สองสามพิน โดยพิจารณาว่าเราอาจต้องควบคุมวิธีที่เราป้อนข้อมูล บิต ดังนั้น shift register ที่เราจะใช้เป็น Serial In / Parallel Out เชื่อมต่อ shift register ระหว่าง LED และ Arduino การใช้ shift register เป็นเรื่องง่าย ส่วนที่ยากที่สุดคือการแสดงภาพพินเอาท์พุตข้อมูลและวิธีที่เลขฐานสองจะลงเอยใน IC และวิธีที่พวกมันจะแสดงบน LED ในที่สุด ใช้เวลาสักครู่เพื่อวางแผนสิ่งนี้ 1. ต่อ 5V เข้ากับพิน 14 (บนขวา) แล้วดึงพิน 7 (ซ้ายล่าง) ลงไปที่พื้น2. shift register มีอินพุตแบบอนุกรมสองช่อง แต่เราจะใช้เพียงตัวเดียว ดังนั้นให้เชื่อมต่อพินสองกับ 5V3 เราจะไม่ใช้พินที่ชัดเจน (ใช้เพื่อทำให้เอาต์พุตทั้งหมดเป็นศูนย์) ดังนั้นปล่อยให้มันลอยหรือโจมตีไปที่ 5V4 เชื่อมต่อพอร์ต IO ดิจิทัลหนึ่งพอร์ตเพื่อปักหมุดตัวลงทะเบียนกะตัวใดตัวหนึ่ง นี่คือพินอินพุตแบบอนุกรม5 เชื่อมต่อพอร์ต IO ดิจิทัลหนึ่งพอร์ตกับพิน 8 (ล่างขวา) นี่คือเข็มนาฬิกา.6 เชื่อมต่อสายข้อมูลของคุณจาก Q0 ถึง Q6 เราใช้เพียง 7 บิตเท่านั้นเนื่องจากชุดอักขระ ASCII ใช้เพียง 7 บิตเท่านั้น ฉันใช้ PD2 เพื่อส่งออกข้อมูลซีเรียลและ PD3 สำหรับสัญญาณนาฬิกา สำหรับหมุดข้อมูล ฉันเชื่อมต่อ Q0 กับ D6 บน LED และดำเนินการต่อในลักษณะนั้น (Q1 ถึง D5, Q2 ถึง D4 เป็นต้น) เนื่องจากเราส่งข้อมูลตามลำดับ เราจะต้องตรวจสอบการแทนค่าไบนารีของอักขระแต่ละตัวที่เราต้องการส่ง ดูค่าที่ 1 และ 0 และส่งออกแต่ละบิตบนบรรทัดอนุกรม ฉันได้รวมซอร์ส dotmatrixled.c รุ่นที่สองพร้อมกับ Makefile ด้านล่าง โดยจะหมุนเวียนไปตามชุดอักขระและแสดงอักขระคู่ทั้งหมด (หากการคิดว่าตัวอักษรอาจเป็นเลขคี่หรือเลขคู่เป็นเรื่องแปลก พยายามหาวิธีทำให้มันวนผ่านการแสดงอักขระคี่ทั้งหมด คุณสามารถทดลองเพิ่มเติมด้วยการเชื่อมต่อระหว่าง shift register, dot matrix LED และ Arduino ของคุณ มีคุณสมบัติการควบคุมหลายอย่างระหว่าง LED และรีจิสเตอร์ที่ช่วยให้คุณสามารถปรับแต่งการควบคุมของคุณเกี่ยวกับเวลาที่ข้อมูลแสดง ดังนั้น….เราเปลี่ยนจากการใช้พอร์ต I/O แปดพอร์ตเหลือเพียงสองพอร์ต!
ขั้นตอนที่ 5: สรุป
ในคำแนะนำนี้ ฉันได้นำเสนอ DLO7135 dot matrix LED และวิธีทำให้มันทำงาน ฉันได้อธิบายเพิ่มเติมเกี่ยวกับวิธีลดจำนวนพอร์ต I/O ที่ต้องการจากแปดพอร์ตเหลือเพียงสองพอร์ตโดยใช้ shift register LED ดอทเมทริกซ์ DLO7135 สามารถร้อยเข้าด้วยกันเพื่อให้สะดุดตาและน่าสนใจ ฉันหวังว่าคุณจะสนุกกับการอ่านคำแนะนำนี้! หากมีการปรับปรุงใด ๆ ที่คุณคิดว่าฉันสามารถทำได้หรือข้อเสนอแนะที่คุณต้องการมอบให้กับสิ่งนี้หรือ 'ibles ของฉัน ฉันยินดีที่จะรับฟังพวกเขา! Happy AVR'ing!
แนะนำ:
การใช้ Mifare Ultralight C กับ RC522 บน Arduino: 3 ขั้นตอน
การใช้ Mifare Ultralight C กับ RC522 บน Arduino: การใช้เทคโนโลยี RFID เพื่อระบุผู้ถือบัตรหรืออนุญาตให้ทำอะไรบางอย่าง (เปิดประตู ฯลฯ) เป็นแนวทางทั่วไป ในกรณีของแอปพลิเคชัน DIY โมดูล RC522 นั้นใช้กันอย่างแพร่หลาย เนื่องจากมีราคาถูกและมีโค้ดจำนวนมากสำหรับโมดูลนี้ ฉัน
การควบคุมการแสดงผล Seven Segment โดยใช้ Arduino และ 74HC595 Shift Register: 6 ขั้นตอน
การควบคุมการแสดงผลเจ็ดส่วนโดยใช้ Arduino และ 74HC595 Shift Register: เฮ้ ว่าไงพวก! Akarsh ที่นี่จาก CETech จอแสดงผล Seven Segment นั้นดูดีและเป็นเครื่องมือที่มีประโยชน์ในการแสดงข้อมูลในรูปของตัวเลข แต่มีข้อเสียคือเมื่อเราควบคุม Seven Segment Display ในความเป็นจริง
การใช้ ESP8266 กับ Arduino และ Blynk: 4 ขั้นตอน
การใช้ ESP8266 กับ Arduino และ Blynk: เชื่อมต่อ Arduino Mega ของคุณกับแอป blynk โดยใช้ espp8266 shield
การใช้ Motion Sensor กับ RaspberryPi และ Telegram Bot: 4 ขั้นตอน
การใช้ Motion Sensor กับ RaspberryPi และ Telegram Bot: สวัสดีทุกคน ในโพสต์นี้ เราจะใช้ Raspberry Pi Telegram Bot พร้อมเซ็นเซอร์ PIR (การเคลื่อนไหว)
74HC164 Shift Register และ Arduino ของคุณ: 9 ขั้นตอน
74HC164 Shift Register และ Arduino ของคุณ: Shift register เป็นส่วนสำคัญของตรรกะดิจิทัล โดยทำหน้าที่เป็นกาวระหว่างโลกคู่ขนานและโลกอนุกรม ช่วยลดจำนวนสายไฟ การใช้พิน และยังช่วยลดภาระของ cpu โดยสามารถจัดเก็บข้อมูลได้ สิ่งเหล่านี้มาในรูปแบบต่างๆ