สารบัญ:

การใช้ Dot Matrix LED กับ Arduino และ Shift Register: 5 ขั้นตอน
การใช้ Dot Matrix LED กับ Arduino และ Shift Register: 5 ขั้นตอน

วีดีโอ: การใช้ Dot Matrix LED กับ Arduino และ Shift Register: 5 ขั้นตอน

วีดีโอ: การใช้ Dot Matrix LED กับ Arduino และ Shift Register: 5 ขั้นตอน
วีดีโอ: LED Dot Matrix วิธีการใช้งาน 2024, พฤศจิกายน
Anonim
การใช้ Dot Matrix LED กับ Arduino และ Shift Register
การใช้ Dot Matrix LED กับ Arduino และ Shift Register
การใช้ Dot Matrix LED กับ Arduino และ Shift Register
การใช้ Dot Matrix LED กับ Arduino และ Shift Register
การใช้ Dot Matrix LED กับ Arduino และ Shift Register
การใช้ Dot Matrix LED กับ Arduino และ Shift Register

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
เชื่อมต่อโดยตรงกับจอแสดงผล LED
เชื่อมต่อโดยตรงกับจอแสดงผล LED
เชื่อมต่อโดยตรงกับจอแสดงผล LED
เชื่อมต่อโดยตรงกับจอแสดงผล 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

อนุรักษ์พอร์ต I/O ด้วย Shift Register
อนุรักษ์พอร์ต I/O ด้วย Shift Register
อนุรักษ์พอร์ต I/O ด้วย Shift Register
อนุรักษ์พอร์ต I/O ด้วย Shift Register
อนุรักษ์พอร์ต I/O ด้วย Shift Register
อนุรักษ์พอร์ต 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!

แนะนำ: