ในบทความก่อนหน้านี้ เราได้กล่าวถึงการใช้ shift register โดยเฉพาะอย่างยิ่ง 74HC595 แล้ว มาดูความสามารถและขั้นตอนการทำงานกับไมโครเซอร์กิตนี้กันดีกว่า
จำเป็น
- - Arduino;
- - กะทะเบียน 74HC595;
- - สายเชื่อมต่อ
คำแนะนำ
ขั้นตอนที่ 1
Shift register 74HC595 และอื่นๆ ใช้เป็นอุปกรณ์สำหรับแปลงข้อมูลซีเรียลเป็นแบบขนาน และยังสามารถใช้เป็น "สลัก" สำหรับข้อมูล โดยคงสถานะการถ่ายโอนไว้
pinout (pinout) จะแสดงในรูปทางด้านซ้าย จุดประสงค์ของพวกเขามีดังนี้
Q0… Q7 - เอาต์พุตข้อมูลแบบขนาน
GND - กราวด์ (0 V);
Q7 '- เอาท์พุทข้อมูลแบบอนุกรม;
^ MR - รีเซ็ตต้นแบบ (ใช้งานต่ำ);
SHcp - อินพุตนาฬิกาลงทะเบียนกะ;
STcp - อินพุตพัลส์นาฬิกา "สลัก";
^ OE - เปิดใช้งานเอาต์พุต (ใช้งานต่ำ);
Ds - การป้อนข้อมูลแบบอนุกรม
Vcc - แหล่งจ่ายไฟ +5 V.
โครงสร้างไมโครเซอร์กิตทำขึ้นในหลายกรณี ฉันจะใช้อันที่แสดงในรูปด้านขวา - ผลลัพธ์ - เพราะ มันง่ายกว่าที่จะใช้กับเขียงหั่นขนม
ขั้นตอนที่ 2
ให้ฉันจำอินเทอร์เฟซอนุกรม SPI สั้น ๆ ซึ่งเราจะใช้ในการถ่ายโอนข้อมูลไปยัง shift register
SPI เป็นอินเทอร์เฟซแบบอนุกรมแบบสองทิศทางแบบสี่สายซึ่งมีมาสเตอร์และทาสเข้าร่วม ต้นแบบในกรณีของเราคือ Arduino ทาสจะลงทะเบียน 74HC595
สภาพแวดล้อมการพัฒนาสำหรับ Arduino มีไลบรารีในตัวสำหรับการทำงานกับอินเทอร์เฟซ SPI เมื่อใช้จะใช้ข้อสรุปที่ระบุไว้ในรูป:
SCLK - เอาต์พุตนาฬิกา SPI;
MOSI - ข้อมูลจากมาสเตอร์ถึงทาส
MISO - ข้อมูลจากทาสถึงมาสเตอร์
SS - การเลือกทาส
ขั้นตอนที่ 3
มาประกอบวงจรตามรูปเลยครับ
ฉันจะเชื่อมต่อตัววิเคราะห์ลอจิกกับหมุดทั้งหมดของไมโครวงจรลงทะเบียนกะ ด้วยความช่วยเหลือ เราจะเห็นว่ากำลังเกิดอะไรขึ้นในระดับกายภาพ สัญญาณอะไรกำลังเกิดขึ้น และเราจะหาคำตอบว่ามันหมายถึงอะไร ควรมีลักษณะบางอย่างเช่นรูปถ่าย
ขั้นตอนที่ 4
มาเขียนสเก็ตช์แบบนี้แล้วโหลดลงในหน่วยความจำ Arduino
ตัวแปร PIN_SPI_SS เป็นค่าคงที่มาตรฐานภายในที่สอดคล้องกับพิน "10" ของ Arduino เมื่อใช้เป็นต้นแบบของอินเทอร์เฟซ SPI ที่เราใช้ที่นี่ โดยหลักการแล้ว เราสามารถใช้พินดิจิทัลอื่นๆ บน Arduino ได้เช่นกัน จากนั้นเราจะต้องประกาศและตั้งค่าโหมดการทำงาน
โดยการป้อนพินนี้ LOW เราเปิดใช้งาน shift register เพื่อส่ง / รับ หลังจากการส่งสัญญาณ เราเพิ่มแรงดันไฟฟ้าเป็น HIGH อีกครั้ง และการแลกเปลี่ยนจะสิ้นสุดลง
ขั้นตอนที่ 5
มาเปลี่ยนวงจรของเราให้กลายเป็นงานและดูว่าตัววิเคราะห์ลอจิกแสดงอะไรให้เราเห็น มุมมองทั่วไปของไดอะแกรมเวลาแสดงในรูป
เส้นประสีน้ำเงินแสดง 4 เส้น SPI เส้นประสีแดงแสดง 8 ช่องข้อมูลคู่ขนานของการลงทะเบียนกะ
จุด A บนมาตราส่วนเวลาคือช่วงเวลาที่โอนหมายเลข "210" ไปยัง shift register, B คือช่วงเวลาที่เขียนหมายเลข "0", C คือวัฏจักรที่เกิดซ้ำตั้งแต่ต้น
อย่างที่คุณเห็น จาก A ถึง B - 10.03 มิลลิวินาที และจาก B ถึง C - 90.12 มิลลิวินาที เกือบจะเหมือนกับที่เราถามในภาพร่าง การเพิ่มเล็กน้อยใน 0, 03 และ 0, 12 ms คือเวลาสำหรับการถ่ายโอนข้อมูลอนุกรมจาก Arduino ดังนั้นเราจึงไม่มี 10 และ 90 ms ที่นี่
ขั้นตอนที่ 6
มาดูส่วน A กันดีกว่า
ที่ด้านบนสุดคือพัลส์ยาวที่ Arduino เริ่มต้นการส่งสัญญาณบนสาย SPI-ENABLE - การเลือกทาส ในขณะนี้ เริ่มสร้างพัลส์นาฬิกา SPI-CLOCK (บรรทัดที่สองจากด้านบน) 8 ชิ้น (สำหรับการถ่ายโอน 1 ไบต์)
บรรทัดถัดไปจากด้านบนคือ SPI-MOSI - ข้อมูลที่เราถ่ายโอนจาก Arduino ไปยัง shift register นี่คือหมายเลข "210" ของเราในรูปแบบไบนารี - "11010010"
หลังจากการถ่ายโอนเสร็จสิ้น ในตอนท้ายของพัลส์ SPI-ENABLE เราจะเห็นว่าการลงทะเบียนกะได้ตั้งค่าเดียวกันบน 8 ขา ฉันได้เน้นสิ่งนี้ด้วยเส้นประสีน้ำเงินและระบุค่าเพื่อความชัดเจน
ขั้นตอนที่ 7
ตอนนี้เรามาสนใจส่วน B กัน
อีกครั้ง ทุกอย่างเริ่มต้นด้วยการเลือกทาสและสร้างพัลส์นาฬิกา 8 ครั้ง
ข้อมูลในบรรทัด SPI-MOSI ตอนนี้เป็น "0"นั่นคือในขณะนี้เราเขียนหมายเลข "0" ลงในการลงทะเบียน
แต่จนกว่าการโอนจะเสร็จสมบูรณ์ การลงทะเบียนจะเก็บค่า "11010010" มันถูกส่งออกไปยังพินขนาน Q0.. Q7 และส่งออกเมื่อมีพัลส์นาฬิกาในบรรทัดจากเอาต์พุตขนาน Q7 'ไปยังบรรทัด SPI-MISO ซึ่งเราเห็นที่นี่
ขั้นตอนที่ 8
ดังนั้นเราจึงได้ศึกษารายละเอียดปัญหาการแลกเปลี่ยนข้อมูลระหว่างอุปกรณ์หลัก ซึ่งก็คือ Arduino และรีจิสเตอร์ 74HC595 shift เราเรียนรู้วิธีเชื่อมต่อ shift register เขียนข้อมูลลงในนั้นและอ่านข้อมูลจากมัน