สารบัญ:
- ขั้นตอนที่ 1: ดังนั้น Shift Registers คืออะไร?
- ขั้นตอนที่ 2: การเดินสายไฟและการใช้งานพื้นฐาน
- ขั้นตอนที่ 3: โครงการ
- ขั้นตอนที่ 4: โครงการ 1[pt 1]: '2 Wire' Bargraph LED Display Controller ฮาร์ดแวร์
- ขั้นตอนที่ 5: โครงการ 1[pt 2]: '2 Wire' Bargraph LED Display Controller Software
- ขั้นตอนที่ 6: โครงการ 2: '2 Wire' 7 Segment Display Controller
- ขั้นตอนที่ 7: โครงการ 3[pt 1]: '2 Wire' 4x4 Led Matrix Display
- ขั้นตอนที่ 8: โครงการ 3[pt 2]: '2 Wire' 4x4 Led Matrix Display
- ขั้นตอนที่ 9: สรุป
วีดีโอ: 74HC164 Shift Register และ Arduino ของคุณ: 9 ขั้นตอน
2024 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2024-01-30 13:09
Shift register เป็นส่วนสำคัญของตรรกะดิจิทัล โดยทำหน้าที่เป็นกาวระหว่างโลกคู่ขนานและโลกอนุกรม ช่วยลดจำนวนสายไฟ การใช้พิน และยังช่วยลดภาระของซีพียูด้วยความสามารถในการจัดเก็บข้อมูล มาในขนาดต่างๆ กัน รุ่นต่างๆ สำหรับการใช้งานที่แตกต่างกัน และคุณสมบัติที่แตกต่างกัน ตัวที่ฉันจะพูดถึงในวันนี้คือ 74HC164 8 บิต, อนุกรมแบบขนานออก, ไม่ล็อค, รีจิสเตอร์กะทำไม? อย่างแรกก็คือมันเป็นหนึ่งในกะพื้นฐานที่สุดที่มีอยู่ ซึ่งทำให้การเรียนรู้ง่ายขึ้น แต่มันเป็นอันเดียวที่ฉันมี (lol!) คำแนะนำนี้ครอบคลุมถึงวิธีการทำงานของชิปนี้ วิธีการต่อสาย และเชื่อมต่อกับ Arduino รวมถึงภาพสเก็ตช์ตัวอย่างและวงจรนำ หวังว่าทุกท่านจะสนุก!
ขั้นตอนที่ 1: ดังนั้น Shift Registers คืออะไร?
ดังที่ได้กล่าวไว้ก่อนหน้านี้ พวกเขามาในรสชาติที่แตกต่างกันทั้งหมด และฉันยังบอกด้วยว่าฉันใช้ 74HC164 8 บิต อนุกรมแบบขนานออก ไม่สลัก รีจิสเตอร์การเปลี่ยนแปลงหมายความว่าอย่างไร!? อย่างแรก ชื่อ 74 - หมายถึงส่วนหนึ่งของตระกูลลอจิก 74xx และเนื่องจากตรรกะของมันจึงไม่สามารถควบคุมกระแสได้โดยตรงมากนัก (16-20ma สำหรับชิปทั้งหมดเป็นเรื่องปกติ) มันส่งสัญญาณไปรอบ ๆ เท่านั้น แต่ไม่ได้หมายความว่า สัญญาณนั้นจะไม่ไปที่ทรานซิสเตอร์ซึ่งสามารถสลับโหลดกระแสไฟที่สูงขึ้นได้ HC หมายถึงอุปกรณ์ cmos ความเร็วสูง คุณสามารถอ่านเกี่ยวกับสิ่งนั้นได้ในลิงค์ด้านล่าง แต่สิ่งที่คุณต้องรู้เบื้องต้นเกี่ยวกับสิ่งนั้นคือมันต่ำ อุปกรณ์จ่ายไฟและจะทำงานตั้งแต่ 2 ถึง 5 โวลต์ (ดังนั้นหากคุณใช้ Arduino 3.3 โวลต์ก็โอเค) นอกจากนี้ยังสามารถทำงานอย่างถูกต้องที่ความเร็วสูง ชิปตัวนี้มีความเร็วปกติที่ 78 เมกะเฮิรตซ์ แต่คุณสามารถไปช้าหรือเร็ว (จนกว่าจะเริ่มโก่ง) ตามที่คุณต้องการwww.kpsec.freeuk.com/components/74series.htm164 เป็นหมายเลขรุ่นสำหรับชิปนี้ มีแผนภูมิขนาดใหญ่บน wikipediaen.wikipedia.org/wiki/List_of_7400_series_integrated_circuits ถัดไป 8 บิต shift register ประกอบด้วยวงจร flip flop, flip flop เป็นหน่วยความจำ 1 บิตอันนี้ ha s 8 (หรือหน่วยความจำ 1 ไบต์) เนื่องจากเป็นหน่วยความจำ หากคุณไม่จำเป็นต้องอัปเดตเครื่องบันทึกเงินสด คุณก็สามารถหยุด "พูดคุย" กับเครื่องบันทึกเงินสดนั้นได้ และรายการจะยังคงอยู่ในสถานะใดก็ตามที่คุณปล่อยไว้ จนกว่าคุณจะ "พูด" กับเครื่องบันทึกเงินสดอีกครั้งหรือรีเซ็ตพลังงาน รีจิสเตอร์การเปลี่ยนแปลงซีรีย์ลอจิก 7400 อื่น ๆ สามารถสูงถึง 16 บิตแบบอนุกรมแบบขนานซึ่งหมายความว่า Arduino ของคุณส่งข้อมูลแบบอนุกรม (เมื่อปิดพัลส์ทีละตัว) และรีจิสเตอร์กะจะวางแต่ละบิตบนพินเอาต์พุตที่ถูกต้อง โมเดลนี้ต้องใช้เพียง 2 สายในการควบคุม ดังนั้นคุณสามารถใช้หมุดดิจิทัล 2 ตัวบน Arduino และแยกเอาต์พุตดิจิทัล 2 ตัวออกเป็น 8 ตัว รุ่นอื่นบางรุ่นขนานกันแบบอนุกรม พวกเขาทำในสิ่งเดียวกัน แต่เป็นอินพุตของ Arduino (เช่น แป้นเกม NES) ไม่มีสลัก นี่อาจเป็นจุดหายของชิปนี้หากคุณต้องการ เมื่อข้อมูลเข้าสู่ shift register ผ่านซีเรียล ข้อมูลจะปรากฏบนพินเอาต์พุตแรก เมื่อพัลส์นาฬิกาเข้ามา บิตแรกจะเลื่อนมากกว่า 1 ตำแหน่ง สร้างเอฟเฟกต์การเลื่อนบนเอาต์พุต เช่น 00000001 จะปรากฏขึ้นบนเอาต์พุต เช่น 101001000100001000001000000100000001 หากคุณพูดคุยกับอุปกรณ์ลอจิกอื่นที่ใช้นาฬิกาเดียวกันและไม่ได้คาดหวังสิ่งนี้ อาจทำให้เกิดปัญหาได้ Latched shift register มีชุดหน่วยความจำเพิ่มเติม ดังนั้นเมื่อข้อมูลเข้าสู่รีจิสเตอร์เสร็จแล้ว คุณสามารถพลิกสวิตช์และแสดงเอาต์พุตได้ แต่จะเพิ่มสาย ซอฟต์แวร์ และสิ่งต่างๆ ให้ติดตามเพิ่มเติม ในกรณีของคำสั่งนี้ เรากำลังควบคุมจอแสดงผล LED เอฟเฟกต์การเลื่อนเกิดขึ้นอย่างรวดเร็วจนคุณมองไม่เห็น (ยกเว้นเมื่อคุณเปิดชิปครั้งแรก) และเมื่อไบต์อยู่ในรีจิสเตอร์กะจะไม่มีการเลื่อนอีกต่อไปเราจะควบคุมประเภทกราฟแท่ง 7 ส่วน และเมทริกซ์ดอทเมทริกซ์ 16LED 4x4 พร้อมชิปและซอฟต์แวร์นี้บน Arduino โดยใช้พินดิจิทัลเพียง 2 อัน (+ พลังงานและกราวด์)
ขั้นตอนที่ 2: การเดินสายไฟและการใช้งานพื้นฐาน
การเดินสายไฟ 74HC164 เป็นชิป 14 พิน มีพินอินพุท 4 พิน พินเอาท์พุต 8 พิน กำลังไฟและกราวด์ ดังนั้นให้เริ่มจากด้านบน พิน 1 และ 2 เป็นอินพุตอนุกรมทั้งคู่ พวกมันถูกตั้งค่าเป็นลอจิคัลและเกท หมายความว่า พวกเขาทั้งคู่จะต้องใช้ตรรกะสูง (เช่น 5 โวลต์) เพื่อให้บิตถูกมองว่าเป็น 1 สถานะต่ำ (0 โวลต์) บนตัวใดตัวหนึ่งจะอ่านเป็นศูนย์ เราไม่ต้องการสิ่งนี้จริงๆ และมันง่ายกว่าที่จะจัดการกับในซอฟต์แวร์ ดังนั้นให้เลือกหนึ่งอันและผูกมันกับ V+ เพื่อให้อ่านได้สูงเสมอ ฉันเลือกใช้จัมเปอร์จากพิน 1 ถึงพิน 14 (V+) เนื่องจากคุณสามารถเปิดจัมเปอร์เขียงหั่นขนมบนชิปได้ อินพุตอนุกรมที่เหลืออยู่ (พิน 2 ในแผนผังของฉัน) จะไปที่พินดิจิทัล 2 ของ Arduino พิน 3, 4, 5 และ 6 ของ 74HC164 เป็นเอาต์พุต 4 ไบต์แรกพิน 7 เชื่อมต่อกับกราวด์กระโดดไปทางขวา พิน 8 คือขานาฬิกา นี่คือวิธีที่ shift register รู้ว่า Serial bit ถัดไปพร้อมที่จะอ่าน ซึ่งควรเชื่อมต่อกับขาดิจิตอล 3 บน Arduino ขา 9 คือการล้างการลงทะเบียนทั้งหมดในครั้งเดียว ถ้ามันเหลือน้อย คุณมีตัวเลือกในการใช้งาน แต่ไม่มีสิ่งใดในสิ่งนี้ที่ไม่น่าเชื่อถือดังนั้นผูกมันกับ V+pins 10, 11 12 และ 13 เป็นเอาต์พุต 4 ไบต์สุดท้ายพิน 14 คือพลังของชิป การทำงาน ก่อนอื่นคุณต้องตั้งค่าอินพุตแบบอนุกรม ของรีจิสเตอร์ (พินดิจิตอล 2 บน Arduino) สูงหรือต่ำถัดไปคุณต้องพลิกพินนาฬิกา (พินดิจิตอล 3) จากต่ำไปสูง shift register จะอ่านข้อมูลบนอินพุตแบบอนุกรมและเปลี่ยนพินเอาต์พุตโดย 1 ทำซ้ำ 8 ครั้งและคุณได้ตั้งค่าเอาต์พุตทั้งหมด 8 รายการซึ่งสามารถทำได้ด้วยมือด้วย for loops และการเขียนแบบดิจิทัลใน arduino IDE แต่เนื่องจาก t เขาคือการสื่อสารระดับฮาร์ดแวร์ทั่วไป (SPI) พวกเขามีฟังก์ชันเดียวที่ทำเพื่อคุณ shiftOut(dataPin, clockPin, bitOrder, value) เพียงแค่บอกว่าข้อมูลและหมุดนาฬิกาเชื่อมต่อกับ Arduino วิธีใดในการส่งข้อมูลและสิ่งที่จะส่ง และการดูแลสำหรับคุณ (สะดวก)
ขั้นตอนที่ 3: โครงการ
เอาล่ะ การบรรยายและทฤษฎีที่เพียงพอ มาทำอะไรสนุกๆ ด้วยชิปตัวนี้กันเถอะ! มี 3 โปรเจ็กต์ให้ลองในคำแนะนำนี้ 2 อันแรกนั้นง่าย และสามารถทดลองใช้งานได้ทันที ชิ้นที่สามคือเมทริกซ์นำ 4x4 ต้องใช้เวลาและความคิดในการสร้างมากขึ้นเนื่องจากการเดินสายไฟแบบ LED รายการชิ้นส่วนโครงการ 1: '2 Wire' bargraph LED display controller 1 * 74HC164 Shift register1 * บอร์ดไม่มีบัดกรี1 * arduino หรือ arduino เข้ากันได้ (5v) 1 * 330 โอห์ม 1/4 วัตต์ตัวต้านทาน 8 * เอาต์พุตปกติ LED สีแดง 12 * สายจัมเปอร์โปรเจ็กต์ 2: '2 Wire' 7 ส่วนควบคุมการแสดงผล 1 * 74HC164 Shift register1 * เขียงหั่นขนมแบบไม่มีบัดกรี1 * Arduino หรือ Arduino (5v) 1 * 330 โอห์ม 1/4 วัตต์ตัวต้านทาน 1 * แคโทดทั่วไปเจ็ดส่วน display9 * สายจัมเปอร์โครงการ 3: '2 Wire' 4x4 led matrix display 1 * 74HC164 Shift register1 * Arduino หรือ Arduino (5v) 4 * 150 โอห์ม 1 ตัวต้านทาน 1/4 วัตต์8 * 1Kohm ตัวต้านทาน 1/8 วัตต์ (หรือใหญ่กว่า)8 * ทรานซิสเตอร์ NpN (2n3904 หรือดีกว่า)16 * ไฟ LED สีแดงเอาต์พุตปกติเป็นวิธีสร้างและควบคุมกำลังไฟ 5 โวลต์ที่สามารถรองรับ 160+ma (คุณทำได้) เปิดไฟ LED ทั้งหมดพร้อมกันเหมือนไฟเบรก)
ขั้นตอนที่ 4: โครงการ 1[pt 1]: '2 Wire' Bargraph LED Display Controller ฮาร์ดแวร์
เชื่อมต่อ Arduino และ shift register ตามแผนผังฉันมีจอแสดงผลแท่ง 10 ส่วนพร้อมสำหรับการใช้งานเขียงหั่นขนมและนั่นคือสิ่งที่คุณจะเห็นในภาพ แต่คุณสามารถทำสิ่งเดียวกันกับ led แต่ละรายการในหน้าสอง ฉันระบุว่าสิ่งเหล่านี้ไม่ใช่อุปกรณ์ไดรเวอร์ แต่เป็นอุปกรณ์ลอจิกที่มีกระแสไฟฟ้าไหลผ่านได้เล็กน้อย ในการรันไฟ LED 8 ดวง ในขณะที่รักษาวงจรให้เรียบง่าย และไม่ทำอาหารการลงทะเบียนกะ เราต้องจำกัดกระแสไฟไว้เล็กน้อย ไฟ LED นั้นต่อสายแบบขนานและใช้กราวด์ร่วมกัน (แคโทดทั่วไป) ก่อนเข้าสู่กระแสไฟ แหล่งจ่ายดินที่พวกเขาต้องผ่านตัวต้านทาน 330 โอห์ม จำกัดจำนวนกระแสทั้งหมดที่ LED ทั้งหมดอาจใช้ได้ถึง 10ma (ที่ 5 โวลต์) ซึ่งจะทำให้ LED อยู่ในสภาพที่ดูไม่ดี แต่จะสว่างขึ้นและให้บริการสำหรับ ตัวอย่างนี้ เพื่อที่จะขับ LED ที่กระแสที่เหมาะสม คุณจะต้องใส่ทรานซิสเตอร์ที่ shift register สามารถเปิด/ปิดแหล่งกระแสไฟที่สูงกว่าได้ (ดูโครงการ 3) Data pin ของ shift register (pin 2) ต้องการ เพื่อเชื่อมต่อกับพินดิจิตอล Arduino # 2หมุดนาฬิกาของรีจิสเตอร์กะ (พิน 8) จำเป็นต้องเชื่อมต่อกับพินดิจิตอล Arduino # 3
ขั้นตอนที่ 5: โครงการ 1[pt 2]: '2 Wire' Bargraph LED Display Controller Software
ตัวอย่างที่ 1: เปิดไฟล์ " _164_bas_ex.pde" ภายใน Arduino IDE เป็นภาพร่างง่ายๆ ที่ให้คุณกำหนดเปิดหรือปิด LED ในการแสดงกราฟแท่ง 2 บรรทัดแรกกำหนดหมายเลขพินที่เราจะใช้สำหรับข้อมูลและนาฬิกา ผม ใช้ #define ทับ const integer ฉันพบว่าจำง่ายกว่า และเมื่อคอมไพล์แล้ว #define data 2#define clock 3 ก็ไม่มีประโยชน์อะไร ถัดไปคือฟังก์ชันการตั้งค่าเป็นโมฆะ มันทำงานเพียงครั้งเดียว ดังนั้น Arduino จึงเปลี่ยน เปิด, ตั้งค่า shift register และไม่ต้องทำอะไรอีก ภายในฟังก์ชันการตั้งค่าโมฆะ เราตั้งค่านาฬิกาและพินข้อมูลเป็นพิน OUTPUT จากนั้นใช้ฟังก์ชัน shiftOut เราจะส่งข้อมูลไปยัง shift register void setup(){ pinMode(clock, OUTPUT); // ทำให้พินนาฬิกาเป็นเอาต์พุต pinMode (data, OUTPUT); // ทำให้ data pin เป็น output shiftOut(data, clock, LSBFIRST, B10101010); // ส่งค่าไบนารีนี้ไปที่ shift register} ในฟังก์ชัน shiftOut คุณสามารถเห็นอาร์กิวเมนต์ของ data คือ data pin, clock คือ clock pin LSBFIRST หมายถึงสิ่งที่เรียงลำดับใน, เมื่อเขียนออกมาในรูปแบบไบนารี (Bxxxxxxxx) 7 องค์ประกอบที่อยู่เหนือ B คือบิตที่มีนัยสำคัญน้อยที่สุด อันดับแรก สิ่งนี้จะถูกป้อนก่อน ดังนั้นมันจึงจบลงที่เอาต์พุตสุดท้ายเมื่อป้อน 8 บิตทั้งหมดใน B10101010 เป็นค่าไบนารีที่ถูกส่งไปยัง shift register และจะเปิดทุกแสงแปลก ๆ ให้ลองเล่นโดยใช้ค่าต่างๆ กันเพื่อเปิดหรือปิดรูปแบบต่างๆ และสุดท้ายเป็น void loop ที่ว่างเปล่า (เพราะคุณต้องการมันแม้ว่าคุณจะไม่ได้ใช้งานก็ตาม) void loop(){} // วงว่างสำหรับตอนนี้ ตัวอย่างที่ 2: 8 บรรทัดแรกคือ เหมือนกับ 8 บรรทัดแรกของตัวอย่างแรก ที่จริงแล้วจะไม่เปลี่ยนแปลงสำหรับโปรเจ็กต์อื่นๆ ดังนั้น #define data 2#define clock 3void setup(){ pinMode(clock, OUTPUT); // ทำให้พินนาฬิกาเป็นเอาต์พุต pinMode (data, OUTPUT); // ทำให้ data pin เป็นเอาต์พุต แต่ตอนนี้ในการตั้งค่า void มีการนับ 8 สำหรับลูป มันใช้ไบต์ว่างและขยับทีละ 1 บิตในแต่ละครั้งโดยเริ่มจากบิตซ้ายสุดแล้วเคลื่อนที่ไปทางขวา นี่เป็นการย้อนกลับจากตัวอย่างแรกที่เราเริ่มจากบิตขวาสุดและทำงานทางซ้าย แต่การใช้ MSBFIRST ฟังก์ชัน shift out จะส่งข้อมูลในวิธีที่ถูกต้อง นอกจากนี้ เรายังเพิ่มการหน่วงเวลาใน for loop เพื่อให้ช้าลงพอที่จะมองเห็นได้ for(int i = 0; i <8; ++i) //for 0 - 7 do { shiftOut(data, clock, MSBFIRST, 1 << i); // บิตเลื่อนค่าตรรกะสูง (1) โดยฉันล่าช้า (100); // หน่วงเวลา 100ms มิฉะนั้นคุณจะไม่สามารถเห็นได้ } }void loop(){} // วนรอบว่างสำหรับตอนนี้อัปโหลดสคริปต์ และตอนนี้คุณควรเห็น bargraph สว่างขึ้นทีละแสงทีละครั้ง
ขั้นตอนที่ 6: โครงการ 2: '2 Wire' 7 Segment Display Controller
ดูพินของจอแสดงผล 7 เซ็กเมนต์ของคุณ (ฉันมีเพียงอันคู่ แต่ใช้เพียงครึ่งเดียว) และใช้ภาพวาดด้านล่างเพื่อเชื่อมต่อแต่ละส่วนกับบิตที่ถูกต้องบน shift registerbit 1 = พิน 3 บิต 2 = พิน 4 บิต 3 = พิน 5 บิต 4 = พิน 6 บิต 5 = พิน 10 บิต 6 = พิน 11 บิต 7 = พิน 12 บิต 8 = พิน 13 (หากคุณต้องการใช้จุดทศนิยม) และแคโทดของจอแสดงผลผ่านตัวต้านทาน 330 โอห์มและต่อแหล่งจ่ายไฟฟ้า เปิด seven_seg_demo.pde ใน Arduino IDE อันดับแรก คุณจะเห็นตำแหน่งที่เรากำหนดข้อมูลและหมุดนาฬิกา #define data 2#define clock 3 ต่อไปเราจะตั้งค่ารูปแบบตัวอักษรทั้งหมดเป็นเลขฐานสอง ซึ่งง่ายมาก ดูที่รูปวาดด้านล่าง ถ้าคุณต้องการส่วนตรงกลาง พิมพ์หนึ่ง ถัดไปคุณต้องการส่วนบนสุด ถ้าพิมพ์ในส่วนอื่น ทำต่อไปจนครอบคลุมทั้ง 8 ส่วน สังเกตว่าบิตขวาสุดของฉัน (บิต 8) เป็น 0 เสมอ นั่นเป็นเพราะฉันไม่เคยเปิดทศนิยม จุด. ไบต์ศูนย์ = B01111110 ไบต์ที่หนึ่ง = B00000110 ไบต์ที่สอง = B11011010 ไบต์ที่สาม = B11010110 ไบต์ที่สี่ = B10100110 ไบต์ที่ห้า = B11110100 ไบต์ที่หก = B11111100 ไบต์เจ็ด = B01000110 ไบต์ที่แปด = B11111110 ไบต์ที่เก้า = B11110110; ถัดไปในการตั้งค่าเป็นโมฆะ เราตั้งค่าข้อมูลและหมุดนาฬิกาเป็นเอาต์พุต การตั้งค่าเป็นโมฆะ (){ pinMode(นาฬิกา, เอาต์พุต); // ทำให้พินนาฬิกาเป็นเอาต์พุต pinMode (data, OUTPUT); // ทำให้ data pin เป็น output3} จากนั้นใน void loop เราใช้ shiftOut เพื่อแสดงแต่ละรูปแบบ (ตัวเลข) รอ 1/2 วินาทีและแสดงถัดไป 0 ถึง 9 เนื่องจากจะทำในฟังก์ชัน void loop มันจะนับ 0-9 และทำซ้ำตลอดไป วงเป็นโมฆะ () { shiftOut (ข้อมูล, นาฬิกา, LSBFIRST, ศูนย์); ล่าช้า (500); shiftOut(ข้อมูล, นาฬิกา, LSBFIRST, หนึ่ง); ล่าช้า (500); shiftOut(ข้อมูล, นาฬิกา, LSBFIRST, สอง); ล่าช้า (500); shiftOut(ข้อมูล, นาฬิกา, LSBFIRST, สาม); ล่าช้า (500); shiftOut(ข้อมูล, นาฬิกา, LSBFIRST, สี่); ล่าช้า (500); shiftOut(ข้อมูล, นาฬิกา, LSBFIRST, ห้า); ล่าช้า (500); shiftOut(ข้อมูล, นาฬิกา, LSBFIRST, หก); ล่าช้า (500); shiftOut(ข้อมูล, นาฬิกา, LSBFIRST, เจ็ด); ล่าช้า (500); shiftOut(ข้อมูล, นาฬิกา, LSBFIRST, แปด); ล่าช้า (500); shiftOut(ข้อมูล, นาฬิกา, LSBFIRST, เก้า); ล่าช้า (500);}
ขั้นตอนที่ 7: โครงการ 3[pt 1]: '2 Wire' 4x4 Led Matrix Display
โปรเจ็กต์เมทริกซ์ LED 4x4 ค่อนข้างซับซ้อนกว่าเล็กน้อย แต่เกือบทั้งหมดอยู่ในการก่อสร้าง ฉันเลือกที่จะทำให้ของฉันบัดกรีบน perfboard แต่ควรจะเป็นไปได้ที่จะทำซ้ำบนเขียงหั่นขนม เพียงเว้นระยะห่างมากขึ้น วงจรยัง ต่างกันตรงที่ shift register ไม่ได้ขับตรง LED แต่ shift register output จะถูกส่งผ่านตัวต้านทาน 1Kohm ไปยังฐานของทรานซิสเตอร์ NpN เมื่อเอาต์พุตของบิตสูง กระแสไฟและแรงดันไฟจะผ่านเข้าสู่ ทรานซิสเตอร์เพื่อสลับการเชื่อมต่อระหว่างตัวสะสมและตัวส่ง ตัวสะสมจะผูกติดอยู่กับ 5 โวลต์ที่ควบคุม "แข็งแรง" ตัวปล่อยของทรานซิสเตอร์เชื่อมต่อกับตัวต้านทาน 150 โอห์ม และตัวต้านทานจะผูกกับขั้วบวกของ 4 LEDs ในแถวและ จำกัดแถวไว้ที่ 20ma แม้ว่าเมื่อวาดภาพบนจอแสดงผลจะมีไฟ LED เพียง 1 ดวงเปิดในแต่ละครั้งและใกล้จะสว่างเต็มที่ (ใกล้จะเพราะเปิดและปิดเร็วมากเพื่อสร้างภาพทั้งหมด) มี 4 แถวและ 4 แถว คอลัมน์แต่ละ แถวได้รับตัวต้านทานและทรานซิสเตอร์ ในแต่ละคอลัมน์แคโทดของ LED ถูกผูกเข้าด้วยกัน วิ่งเข้าไปในตัวสะสมของทรานซิสเตอร์ ซึ่งฐานยังถูกควบคุมโดย shift register และในที่สุดก็ออกไปที่พื้น แผนผังเวอร์ชันขนาดใหญ่ www.instructables.com/files/orig/F7J/52X0/G1ZGOSRQ/F7J52X0G1ZGOSRQ.jpg
ขั้นตอนที่ 8: โครงการ 3[pt 2]: '2 Wire' 4x4 Led Matrix Display
shift register ควบคุมทั้งขั้วบวกและขั้วลบของ LED ในรูปแบบ YX ดูที่สิ่งต่อไปนี้ บิต 1 = คอลัมน์ 1 (ขวาสุด) บิต 2 = คอลัมน์ 2 บิต 3 = คอลัมน์ 3 บิต 4 = คอลัมน์ 4 บิต 5 = แถว 1 (บนสุด) บิต 6 = แถว 2 บิต 7 = แถว 3 บิต 8 = แถวที่ 4 หากต้องการให้รูปภาพวาดสี่เหลี่ยมขนาด 4x4 บนกระดาษกราฟและเติมข้อมูลที่คุณต้องการให้แสดง ต่อไปให้สร้างตาราง YX ด้านล่างนี้ คุณจะเห็นการแมปสำหรับการเปรียบเทียบ และสิ่งที่ดีที่สุดที่ทำได้บน "พิกเซล" 4x4 สำหรับแต่ละส่วนที่กรอก ฉันจะเขียนว่าคอลัมน์ใด (Y) อยู่ในนั้น แล้วแถวที่อยู่ใน (X) ให้เปิดขึ้น ไฟล์ _4x4.pde ใน Arduino IDE คุณจะเห็นเพื่อนเก่า 2 คนของเรา #define data 2#define clock 3 จากนั้นอาร์เรย์ของจำนวนเต็ม int img = {1, 1, 4, 1, 1, 3, 4, 3, 2, 4, 3, 4}; หากคุณดูว่ามันเป็นเพียงรายการพิกัด YX ของฉันที่เขียนไว้ มันจะเป็นความเจ็บปวดอย่างมากในการแปลงค่าเหล่านั้นด้วยมือ และเรามีคอมพิวเตอร์ … ปล่อยให้มันเป็นไป! หมุดนาฬิกาและข้อมูลของเรา OUTPUTS ตั้งค่าเป็นโมฆะ () { pinMode (นาฬิกา, เอาต์พุต); // ทำให้พินนาฬิกาเป็นเอาต์พุต pinMode (data, OUTPUT); // ทำให้ data pin เป็น output3} และ void loop ที่ดูสับสน เพื่อเริ่มต้นสิ่งต่าง ๆ เราจำเป็นต้องประกาศตัวแปรโลคัลบางตัว void loop(){ int Y; อินท์ X; ไบต์ออก; จากนั้น for loop การวนซ้ำนี้ต้องยาวเท่ากับจำนวนรายการในอาร์เรย์ img สำหรับภาพนี้ ฉันใช้เพียง 6 พิกเซล ดังนั้นจึงสร้างพิกัด YX 12 ตัว ฉันทำให้มันข้ามตัวเลขอื่น ๆ โดยใช้ i +=2 เพราะเราอ่าน 2 พิกัดต่อการวนซ้ำสำหรับ (int i = 0; i < 12; i += 2) // จำนวนจุดในอาร์เรย์ img กรณีนี้ 12 { ตอนนี้เราอ่าน Y entery ที่ ในอาร์เรย์แล้วลบหนึ่งค่าออกจากค่าของมัน เนื่องจากไบต์ไม่ได้เริ่มต้นที่หนึ่ง พวกมันเริ่มต้นที่ศูนย์ แต่เรานับจาก 1 // รับสาย YX คู่แรก Y = (img - 1); // ลบหนึ่งเนื่องจากการนับบิตเริ่มต้นที่ 0 ถัดไปเราอ่าน X entery ที่ [i + 1] ในอาร์เรย์และลบหนึ่งรายการออกจากค่าของมันด้วยเหตุผลเดียวกัน X = (img[i+1] - 1); หลังจากที่เรามีค่า YX ของพิกเซลแล้ว เราทำบิตไวด์หรือคณิตศาสตร์แล้วเลื่อนไปทางซ้ายก่อน เราต้องอ่านค่า X ก่อน และค่าใดก็ตามของมันจะเลื่อนไปจนเหลือหลายตำแหน่ง + 4 ดังนั้นถ้า X เป็น 4 และเพิ่ม 4 เป็นบิต 8 (MSB) ดูแผนภูมิอีกครั้ง …บิต 1 = คอลัมน์ 1 (ขวาสุด) บิต 2 = คอลัมน์ 2 บิต 3 = คอลัมน์ 3 บิต 4 = คอลัมน์ 4 บิต 5 = แถว 1 (บนสุด) บิต 6 = แถว 2 บิต 7 = แถว 3 บิต 8 = แถว 4 บิต 8 เป็นแถวสุดท้าย ถัดไปค่า Y จะถูกเลื่อนไปทางซ้ายด้วย คราวนี้เพียงตัวมันเอง ไม่มีอะไรเพิ่มเข้าไป สุดท้ายทั้งสองจะรวมกันเป็น 1 ไบต์แทนที่จะเป็น 2 ไบต์ครึ่ง (แทะ) โดยใช้ระดับบิตหรือ (สัญลักษณ์ |) ใช้เวลาสองไบต์และเพิ่มเข้าด้วยกันโดยพื้นฐานแล้วให้ถือว่า X = 10000000Y = 00000001--------------------OR = 10000001แถว 4 คอลัมน์ 1 ออก = 1 << (X + 4) | 1 << ย; และสุดท้าย shiftOut เพื่อแสดงภาพปัจจุบันและทำต่อไปจนกว่าเราจะไม่มีข้อมูลในอาร์เรย์อีกต่อไป … หน่วงเวลาสักครู่และวนซ้ำตลอดไปเนื่องจากเราย้ายข้อมูลไปทางซ้ายและเราต้องการให้ MSB อยู่ที่พินเอาต์พุตสุดท้าย ของ shift register ส่งออกก่อน shiftOut(ข้อมูล, นาฬิกา, MSBFIRST, ออก); // ย้ายไบต์ออกไปที่การหน่วงเวลาการลงทะเบียนของเรา (1); // หน่วงเวลาเล็กน้อยจึงมีโอกาสทิ้งจุดสว่างในดวงตาของคุณ สร้างภาพและเอฟเฟกต์ของคุณเองได้ตามสบาย มีไฟล์ตัวอย่าง 3 ไฟล์ หน้ายิ้มและกระดานหมากรุก (ซึ่งดูเหมือนลายทางมากกว่า) และในที่สุดก็เป็นเครื่องสร้างประกายไฟแบบสุ่ม
ขั้นตอนที่ 9: สรุป
ทั้งหมดนี้เป็นชิปเล็กๆ ที่ค่อนข้างสะดวก และฉันดีใจที่ฉันได้ทิ้งมันออกจากชิ้นส่วนอิเล็กทรอนิกส์เก่าที่มุ่งหน้าไปยังถังขยะ มันสามารถใช้สำหรับสิ่งอื่นนอกเหนือจากระบบแสดงผล แต่ทุกคนชอบแสงและการตอบกลับทันทีเมื่อเห็น สิ่งที่เกิดขึ้นมีประโยชน์อย่างมากสำหรับนักคิดเชิงภาพเช่น I โปรดยกโทษให้รหัสของฉันด้วย ฉันเพิ่งใช้ Arduino ตั้งแต่สัปดาห์ที่สามของเดือนตุลาคม และเป็นหลักสูตรที่ผิดพลาดค่อนข้างมากแต่นั่นก็เป็นสิ่งที่ยอดเยี่ยมเกี่ยวกับระบบ ถ้าคุณนั่งลงและใช้งานมัน มันเต็มไปด้วยฟีเจอร์ที่เรียบร้อยที่ทำให้การควบคุมโลกด้วยไมโครคอนโทรลเลอร์ 8 บิตทำได้ค่อนข้างง่าย เรายินดีต้อนรับคำถามและความคิดเห็นเช่นเคย และขอขอบคุณสำหรับ การอ่านฉันหวังว่าคุณจะได้เรียนรู้มาก
แนะนำ:
การควบคุมการแสดงผล Seven Segment โดยใช้ Arduino และ 74HC595 Shift Register: 6 ขั้นตอน
การควบคุมการแสดงผลเจ็ดส่วนโดยใช้ Arduino และ 74HC595 Shift Register: เฮ้ ว่าไงพวก! Akarsh ที่นี่จาก CETech จอแสดงผล Seven Segment นั้นดูดีและเป็นเครื่องมือที่มีประโยชน์ในการแสดงข้อมูลในรูปของตัวเลข แต่มีข้อเสียคือเมื่อเราควบคุม Seven Segment Display ในความเป็นจริง
7 Segment Display Counter พร้อม Shift Register: 3 ขั้นตอน
7 Segment Display Counter พร้อม Shift Register: นี่เป็นโปรเจ็กต์สำหรับผู้เริ่มต้นที่สมบูรณ์แบบ หากคุณเพิ่งเรียนรู้วิธีใช้ shift register และวิธีทำงานกับโค้ด นอกจากนี้ โปรเจ็กต์นี้เป็นการเริ่มต้นที่ดีหากคุณยังใหม่ต่อการแสดงผล 7 เซ็กเมนต์ ก่อนที่คุณจะเริ่มโครงการนี้ ตรวจสอบให้แน่ใจว่า
Arduino พร้อม CD4015B Shift Register: 3 ขั้นตอน
Arduino พร้อม CD4015B Shift Register: CD4015B เป็น Dual 4 Stage Static Shift Register พร้อมอินพุตแบบอนุกรมและเอาต์พุตแบบขนาน เป็น IC แบบ 16 พินและมีรีจิสเตอร์ 4 สเตจเหมือนกันสองตัวพร้อมอินพุตข้อมูล นาฬิกา และรีเซ็ตอิสระ ระดับลอจิกอยู่ที่อินพุตของแต่ละสเต
การเชื่อมต่อจอแสดงผล 7 ส่วนกับ Shift Register โดยใช้ไมโครคอนโทรลเลอร์ CloudX: 5 ขั้นตอน
การเชื่อมต่อจอแสดงผล 7 ส่วนกับ Shift Register โดยใช้ไมโครคอนโทรลเลอร์ CloudX: ในโครงการนี้ เรากำลังเผยแพร่บทช่วยสอนเกี่ยวกับวิธีการเชื่อมต่อจอแสดงผล LED เจ็ดเซ็กเมนต์กับไมโครคอนโทรลเลอร์ CloudX จอแสดงผลเจ็ดส่วนถูกนำมาใช้ในระบบฝังตัวและการใช้งานในอุตสาหกรรมจำนวนมาก โดยที่ช่วงของเอาต์พุตที่จะแสดงนั้นไม่ทราบ
การใช้ Dot Matrix LED กับ Arduino และ Shift Register: 5 ขั้นตอน
การใช้ Dot Matrix LED กับ Arduino และ Shift Register: Siemens DLO7135 Dot matrix LED เป็นออปโตอิเล็กทรอนิกส์ชิ้นหนึ่งที่น่าทึ่ง มันถูกเรียกเก็บเงินเป็น 5x7 Dot Matrix Intelligent Display (r) พร้อมหน่วยความจำ/ตัวถอดรหัส/ไดรเวอร์ นอกจากหน่วยความจำนั้นแล้ว ยังมีจอแสดงผล ASCII 96 อักขระที่ตั้งค่าบนและล่าง