เราครอบคลุมตัวควบคุมปุ่ม RGB ใหม่ของ SparkFun เมื่อไม่กี่สัปดาห์ที่ผ่านมา นี่เป็นโคลนสีเต็มรูปแบบของอินเตอร์เฟสโมเมน; ปุ่ม 4 × 4 ของปุ่มที่มีไฟ LED สี Tri-color อยู่ด้านล่าง แต่ละ LED มี 24 บิตของการควบคุมสีสำหรับการผสมสีมากกว่า 16million สามารถเชื่อมต่อกันได้สูงสุด 10 แผงเพื่อสร้างกริดปุ่มจำนวนมากเช่น Tetris Table ของ SparkFun ก่อนหน้านี้เราเคยใช้รุ่นที่เล็กกว่าในการล็อคการรวม RGB ของเรา
เราถาม SparkFun เพื่อส่งปุ่มควบคุมปุ่ม SPI ให้เราเพื่อทดสอบ นี่คือผลิตภัณฑ์ใหม่ที่พัฒนาขึ้นในบ้านที่ SparkFun พร้อมฮาร์ดแวร์โอเพ่นซอร์สและซอฟต์แวร์ อ่านเกี่ยวกับประสบการณ์การเชื่อมต่อของคณะกรรมการนี้ด้านล่าง
ปุ่มกดปุ่ม 4 × 4 RGB SPI (SparkFun # WIG-09022, $ 39.95)
ปุ่มควบคุมปุ่มเป็น PCB เปลือยเรายังได้รับฝาครอบปุ่ม (SparkFun # COM-07835, $ 9.95) และสองของแต่ละฝาปิด (SparkFun # COM-08747, # COM-08746, $ 3.95) รุ่น SPI ที่เราทำงานกับสามารถขับเคลื่อนโดยตรงโดยไมโครคอนโทรลเลอร์หรือโดย USB ‘Master’ เวอร์ชันคอนโทรลเลอร์ USB มีไมโครคอนโทรลเลอร์เพิ่มเติมและ FTDI USB-> ตัวแปลงซีเรียลสำหรับการเชื่อมต่อพีซี
เมื่อแผ่นปุ่มมาถึงเราทันที Sat Down ด้วยแผ่นข้อมูลและพยายามเชื่อมต่อบอร์ดกับอินเตอร์เฟส Serial Bus Pirate Universal ของเรา โปรโตคอลที่อธิบายในเวอร์ชัน 1 ของแผ่นข้อมูลไม่ทำงานเลย
SparkFun เปิดแหล่งข้อมูลนี้ดังนั้นเราจึงกำหนดโปรโตคอลอินเทอร์เฟซที่ถูกต้องจากซอร์สโค้ดสำหรับปุ่ม PAD SPI (ZIP) และปุ่มควบคุมปุ่ม USB (ZIP) เราคิดโปรโตคอลส่วนใหญ่จากแหล่งที่มา แต่ยังคงช่วยได้จากวิศวกรของ SparkFun เพื่อเปิดเผยจุดที่ไม่มีเอกสารการเชื่อมต่อที่ปล้นสะดม เวอร์ชัน 2 ของแผ่นข้อมูล (PDF) แสดงให้เห็นถึงโปรโตคอลอินเทอร์เฟซอย่างถูกต้อง
การเชื่อมต่อ
โจรสลัดรถบัส
แผ่นปุ่ม
มิโซะ
มิโซะ
mosi
mosi
นาฬิกา
SCK
cs
cs
+ 5volts
VCC
gnd
gnd
สัญญาณ SPI ของ Pad ของปุ่มจะอธิบายไว้เนื่องจากเกี่ยวข้องกับไมโครคอนโทรลเลอร์บนกระดานซึ่งอยู่ตรงข้ามกับสัญกรณ์ปกติ สัญญาณ MOSI (Master Out, Slave In) เป็นจริงเอาต์พุตข้อมูลของคณะกรรมการและมิโซะ (Master in, Slave Out) เป็นข้อมูลอินพุต
เราทดสอบแผ่นปุ่มกับโจรสลัดรถบัส แต่หลักการพื้นฐานเดียวกันใช้กับรหัสไมโครคอนโทรลเลอร์ที่กำหนดเอง คณะกรรมการทำงานที่ 5VOLTS ดังนั้นเราจึงขับเคลื่อนจากแหล่งจ่ายไฟ 5volt ของรถบัสโจรสลัด อินเทอร์เฟซ SPI ทำงานที่ระดับตรรกะ 5Volt ดังนั้นเราจึงเชื่อมต่อตัวต้านทานการดึง Pull-Up ของ Bus Pirate ไปยังแหล่งจ่ายไฟ 5Volt และเปิดใช้งานบนสายสัญญาณทั้งหมด
เราแทรกแซงบอร์ดปุ่มโดยใช้ห้องสมุด Raw3wire ของ Bus Pirate RAW3Wire เป็นไลบรารี SPI ซอฟต์แวร์ที่มีการดำเนินงาน Bit-Wise ห้องสมุดฮาร์ดแวร์ SPI อนุญาตให้ใช้งานไบต์เต็มรูปแบบซึ่งไม่เพียงพอที่จะเชื่อมต่อบอร์ด เราวางโจรสลัดรถบัสในโหมด Raw3wire (เมนูตัวเลือก M) และเลือกตัวเลือก HIZ PIN เนื่องจากตัวต้านทานแบบดึงขึ้นจะถือรถบัสที่ 5volts
raw3wire> l <-configure บิตสั่งซื้อ 1. MSB ก่อน 2. LSB ก่อน โหมด> 2 <- เป็นครั้งแรก ชุด LSB: น้อยที่สุด sig bit ก่อน Raw3wire> W
ปุ่มปุ่มสื่อสารกันอย่างมีนัยสำคัญอย่างน้อยก่อนดังนั้นเราจึงกำหนดค่าไลบรารีเพื่อสื่อสาร LSB ก่อน สุดท้ายเราตีเงินทุน ‘W’ เพื่อเปิดใช้งานอุปกรณ์ไฟฟ้าของโจรสลัดบัส ปุ่มปุ่มจะกะพริบแต่ละสีเป็นส่วนหนึ่งของการทดสอบการถ่ายภาพด้วยตนเอง
การตั้งค่าบอร์ดปุ่มเดียว / หลายปุ่ม
แต่ละบอร์ดจะต้องได้รับการกำหนดค่าสำหรับการใช้งานแบบเดี่ยวหรือหลายบอร์ด บอร์ดมาก่อนกำหนดโปรแกรมสำหรับการดำเนินการบอร์ดเดี่ยว แต่อาจเป็นความคิดที่ดีที่จะตั้งค่าการกำหนดค่าต่อไป การกำหนดค่าบอร์ดจะถูกเก็บไว้อย่างถาวรใน EEPROM ดังนั้นจึงต้องทำเพียงครั้งเดียวเท่านั้น
Raw3wire> [\ _ <- ส่งสัญญาณทั้งหมดต่ำ เปิดใช้งาน CS <-cs เปิดใช้งานคือ 0volts นาฬิกา 0 เอาท์พุทข้อมูล 0 raw3wire>
ลำดับพิเศษวางกระดานในโหมดการกำหนดค่า เริ่มต้นด้วยสายสัญญาณทั้งหมดต่ำ (] \ _)
raw3wire> – ^ 1 1 <- การดำเนินการบอร์ดเดียว เอาต์พุตข้อมูล, 1 <-Data สูง 0x01 นาฬิกาเห็บ <-one Clock Tick เขียน: 0x01 <-config ตัวเลือก 1, จำนวนบอร์ด เขียน: 0x01 <- ตั้งค่าจำนวนบอร์ด raw3wire> w <-small 'w', ปิดเครื่อง แรงดันไฟฟ้าซัพพลายปิด raw3wire> w <-capital 'w', เปิดเครื่อง อุปกรณ์แรงดันไฟฟ้าบน raw3wire>
ในการเข้าสู่โหมดการกำหนดค่าให้ใช้สายข้อมูลสูง (-) และส่งหนึ่งพัลส์นาฬิกา (^) แต่ปล่อยให้ชิปเลือกต่ำ บอร์ดพร้อมรับการตั้งค่าการกำหนดค่าแล้ว
ไบต์แรกที่ส่งหลังจากป้อนโหมดการกำหนดค่าจะบอกบอร์ดที่การตั้งค่าเพื่อแก้ไข ปัจจุบันมีเพียงจำนวนบอร์ดเท่านั้นที่สามารถกำหนดค่าได้ (0x01) ถัดไปส่งจำนวนบอร์ดที่เชื่อมต่อระหว่าง 1 ถึง 10 เราส่ง 1 เพราะเรากำลังเชื่อมต่อบอร์ดเดียว รีเซ็ตบอร์ดและจะจุดไฟ LED ที่สอดคล้องกับจำนวนของบอร์ดที่ตั้งโปรแกรมไว้
ตั้งค่าสีและอ่านสถานะปุ่ม
ตอนนี้เราพร้อมที่จะส่งข้อมูลสีเข้ากับบอร์ดแล้วอ่านสถานะปุ่ม ก่อนอื่นให้ทราบว่าสัญญาณ CS (เลือกชิป) ตรงข้ามกับอนุสัญญาปกติ โดยปกติแล้ว CS จะเปิดใช้งานชิปเมื่อสัญญาณอยู่w (0volts) และใช้งานเมื่อสัญญาณสูง (5volts); นี่มักจะแสดงโดย / cs, #cs หรือ! cs แต่ตัวควบคุมปุ่มจะทำงานเมื่อ CS สูง
ธุรกรรม 64Byte ตั้งค่าสี LED และดึงสถานะของปุ่ม โปรแกรม 16Bytes แรกระดับสีแดงสำหรับแต่ละ LED ตามด้วยสีเขียว 16Bytes และ 16Bytes Blue เสร็จสิ้นโดยการอ่าน 16bytes จากบอร์ดเพื่อรับสถานะของแต่ละปุ่ม ข้อมูลปุ่มถูกส่งเป็น 0x00 หากกดและ 0xFF หากไม่ได้กด แผ่นข้อมูลแนะนำให้มีความล่าช้า 400us ระหว่างการเขียนเฟรมสีและอ่านข้อมูลปุ่ม แต่โจรสลัดรถบัสช้าพอที่เราจะไม่ต้องกังวลเกี่ยวกับเรื่องนั้น
โปรโตคอลนั้นง่ายพอ แต่ก็มีการจับที่สำคัญอย่างหนึ่ง สายนาฬิกาต้องสูงก่อนที่จะเพิ่ม CS หรือ ByTestream จะถูกปิด 1 บิต ด้วยเหตุนี้โมดูล SPI ฮาร์ดแวร์จำนวนมากจะไม่ทำงานกับบอร์ด นี่ไม่ใช่ปัญหาหากไมโครคอนโทรลเลอร์ของคุณช่วยให้คุณสามารถควบคุมหมุดได้ที่ควบคุมด้วยโมดูลฮาร์ดแวร์ แต่ไมโครโฟนที่เราได้ทำงานด้วยไม่อนุญาต
Raw3wire> /] 255: 16 255 255: 16 255: 16 R: 16 [
นาฬิกา 1 <-Clock ต้องสูงก่อนที่จะเพิ่ม CS
CS ปิดการใช้งาน <-cs ถึง 5volts ตรงข้ามการใช้งานปกติ
จำนวนมากเขียน 0xFF, 0x10 ครั้ง <ไฟ LED
Bulk write 0xff, 0x10 ครั้ง <-Green LEDs
จำนวนมากเขียน 0xFF, 0x10 ครั้ง <-Blue LEDs
จำนวนมากอ่าน 0x10 ไบต์: <-read สถานะปุ่ม
0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff
เปิดใช้งาน CS <-cs to 0volts ตรงข้ามการใช้งานปกติ
raw3wire>
คำสั่งนี้ตั้งค่าทุกสีของแต่ละ LED ให้เต็มและอ่าน Back 16 Button Status Bytes
เราตั้งค่านาฬิกาที่สูง (/) ครั้งแรกแล้วเราสามารถเพิ่ม CS เป็น 5Volts (]) และเริ่มทำธุรกรรมข้อมูล 255: 16 เป็นคำสั่งซ้ำ ๆ ที่ส่งค่า 2555 สิบหกครั้ง เนื่องจากแต่ละช่องสีมี 8bits ของการควบคุมความเข้ม, 255 คือ 100% เราส่ง 255 ครั้งทั้งหมด 48 ครั้งหนึ่งครั้งสำหรับแต่ละสีของ LED แต่ละสี ในที่สุดเราจะดึงข้อมูลกรอบ 16Byte หนึ่งเฟรม (R: 16) และ CS ที่ต่ำกว่าเพื่อสิ้นสุดการทำธุรกรรม ([) ค่าปุ่มทั้งหมด 0xFF ระบุว่าไม่มีการกดปุ่ม
raw3wire> /] 0:16 0:16 128: 16 R: 16 [
นาฬิกา 1
cs ปิดการใช้งาน
จำนวนมากเขียน 0x00, 0x10 ครั้ง
จำนวนมากเขียน 0x00, 0x10 ครั้ง
เขียนเป็นกลุ่ม 0x80, 0x10 ครั้ง <-all สีน้ำเงินถึง 50%
จำนวนมากอ่าน 0x10 ไบต์:
0x00 0xFF 0xFF 0XFF 0XFF 0XFF 0XFF 0XFF 0XFF 0XFF 0XFF 0XFF 0XFF 0XFF 0XFF 0XFF
เปิดใช้งาน CS
raw3wire>
ที่นี่เราตั้งค่าระดับสีน้ำเงินของทุก LED เป็น 50% (128) และปิดสีอื่น ๆ ทั้งหมด ปุ่มเอาท์พุทตอนนี้แสดงว่ากดปุ่ม 0
Raw3wire> /] 0 0 0 0 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0:16 0:16 R: 16 [
นาฬิกา 1
cs ปิดการใช้งาน
เขียน: 0x00 <- LED สีแดง 0, ปิด
... <- เพิ่มเติมของเดียวกัน
เขียน: 0x00 <- LED สีแดง 3, ปิด
เขียน: 0xFF <- LED สีแดง 4, 100% บน
เขียน: 0xFF <- LED สีแดง 5, 100% บน
เขียน: 0xFF <- LED สีแดง 6, 100% สำหรับ
เขียน: 0xFF <- LED สีแดง 7, 100% สำหรับ
เขียน: 0x00 <- LED สีแดง 8, ปิด
... <- เพิ่มเติมของเดียวกัน
เขียน: 0x00 <- LED สีแดง 15 ปิด
จำนวนมากเขียน 0x00, 0x10 ครั้ง <- ไฟ LED สีเขียวทั้งหมด
จำนวนมากเขียน 0x00, 0x10 ครั้ง <-all LED สีฟ้าปิด
จำนวนมากอ่าน 0x10 ไบต์: <- อ่านสถานะปุ่ม
0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff
เปิดใช้งาน CS
raw3wire>
ตัวอย่างนี้แสดงวิธีการจัดการกับไฟ LED เดียว คราวนี้เราเขียนกรอบสีแดงทั้ง 16 ไบต์ทั้งหมด ปุ่ม 0-3 และ 8-15 มีค่าสีแดงของ 0 (ปิดสีแดง) ปุ่ม 4-7 ถูกตั้งค่าเป็นสีแดง 100% (255) ไฟ LED สีเขียวและสีน้ำเงินทั้งหมดปิด (0, 0%)
บทสรุป
มันน่าผิดหวังจริงๆที่จะได้รับบอร์ดนี้ทำงานเพราะแผ่นข้อมูลรุ่นแรกมีข้อผิดพลาดมากมาย วิศวกรและการสนับสนุนของ SparkFun มีประโยชน์มากและโพสต์แผ่นข้อมูลที่ถูกต้องภายในไม่กี่วัน ตราบใดที่คุณมีแผ่นข้อมูลที่อัปเดตนี่เป็นบอร์ดง่ายที่จะทำงานกับ
เราต้องการดูการอัพเดตเฟิร์มแวร์ที่ช่วยลดความจำเป็นในการรักษาสัญญาณนาฬิกาให้สูงก่อนที่จะเพิ่ม CS QuiC นี้ทำให้กระดานเข้ากันไม่ได้กับโมดูลฮาร์ดแวร์ฮาร์ดแวร์จำนวนมากทำให้รูทีนบิตแบตช้าเป็นตัวเลือกอินเทอร์เฟซเดียวเท่านั้น โชคดีที่ซอร์สโค้ดเปิดให้บริการและมีให้บริการแก่ทุกคนที่ต้องการเปลี่ยนแปลงนี้
ปุ่มควบคุมปุ่มเป็นบอร์ดที่เรียบร้อยและเราหวังว่าจะใช้ในโครงการในอนาคต
แฮ็คการเปิดเผยความคิดเห็นต่อวัน: เราขอกระดานฟรีและ SparkFun ส่งให้เรา เรามีเวลาที่น่ากลัวในการทำงานกับคำแนะนำในเอกสารข้อมูลรุ่นแรกเราได้บันทึกประสบการณ์ที่นี่