สารบัญ:

74HC164 Shift Register และ Arduino ของคุณ: 9 ขั้นตอน
74HC164 Shift Register และ Arduino ของคุณ: 9 ขั้นตอน

วีดีโอ: 74HC164 Shift Register และ Arduino ของคุณ: 9 ขั้นตอน

วีดีโอ: 74HC164 Shift Register และ Arduino ของคุณ: 9 ขั้นตอน
วีดีโอ: Use Shift Registers to create more Inputs on Arduino Project! Tutorial 2024, พฤศจิกายน
Anonim
74HC164 Shift Register และ Arduino. ของคุณ
74HC164 Shift Register และ Arduino. ของคุณ
74HC164 Shift Register และ Arduino. ของคุณ
74HC164 Shift Register และ Arduino. ของคุณ

Shift register เป็นส่วนสำคัญของตรรกะดิจิทัล โดยทำหน้าที่เป็นกาวระหว่างโลกคู่ขนานและโลกอนุกรม ช่วยลดจำนวนสายไฟ การใช้พิน และยังช่วยลดภาระของซีพียูด้วยความสามารถในการจัดเก็บข้อมูล มาในขนาดต่างๆ กัน รุ่นต่างๆ สำหรับการใช้งานที่แตกต่างกัน และคุณสมบัติที่แตกต่างกัน ตัวที่ฉันจะพูดถึงในวันนี้คือ 74HC164 8 บิต, อนุกรมแบบขนานออก, ไม่ล็อค, รีจิสเตอร์กะทำไม? อย่างแรกก็คือมันเป็นหนึ่งในกะพื้นฐานที่สุดที่มีอยู่ ซึ่งทำให้การเรียนรู้ง่ายขึ้น แต่มันเป็นอันเดียวที่ฉันมี (lol!) คำแนะนำนี้ครอบคลุมถึงวิธีการทำงานของชิปนี้ วิธีการต่อสาย และเชื่อมต่อกับ Arduino รวมถึงภาพสเก็ตช์ตัวอย่างและวงจรนำ หวังว่าทุกท่านจะสนุก!

ขั้นตอนที่ 1: ดังนั้น Shift Registers คืออะไร?

ดังนั้น Shift Registers คืออะไร?
ดังนั้น 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 ฮาร์ดแวร์

โครงการ 1[pt 1]: '2 Wire' Bargraph LED Display Controller ฮาร์ดแวร์
โครงการ 1[pt 1]: '2 Wire' Bargraph LED Display Controller ฮาร์ดแวร์
โครงการ 1[pt 1]: '2 Wire' Bargraph LED Display Controller ฮาร์ดแวร์
โครงการ 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[pt 2]: '2 Wire' Bargraph LED Display Controller Software
โครงการ 1[pt 2]: '2 Wire' Bargraph LED Display Controller Software
โครงการ 1[pt 2]: '2 Wire' Bargraph LED Display Controller Software
โครงการ 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

โครงการ 2: '2 Wire' 7 Segment Display Controller
โครงการ 2: '2 Wire' 7 Segment Display Controller
โครงการ 2: '2 Wire' 7 Segment Display Controller
โครงการ 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

โครงการ 3[pt 1]: '2 Wire' 4x4 Led Matrix Display
โครงการ 3[pt 1]: '2 Wire' 4x4 Led Matrix Display
โครงการ 3[pt 1]: '2 Wire' 4x4 Led Matrix Display
โครงการ 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

โครงการ 3[pt 2]: '2 Wire' 4x4 Led Matrix Display
โครงการ 3[pt 2]: '2 Wire' 4x4 Led Matrix Display
โครงการ 3[pt 2]: '2 Wire' 4x4 Led Matrix Display
โครงการ 3[pt 2]: '2 Wire' 4x4 Led Matrix Display
โครงการ 3[pt 2]: '2 Wire' 4x4 Led Matrix Display
โครงการ 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 บิตทำได้ค่อนข้างง่าย เรายินดีต้อนรับคำถามและความคิดเห็นเช่นเคย และขอขอบคุณสำหรับ การอ่านฉันหวังว่าคุณจะได้เรียนรู้มาก

แนะนำ: