สารบัญ:

ATtiny85 IR USB Receiver: 11 ขั้นตอน (พร้อมรูปภาพ)
ATtiny85 IR USB Receiver: 11 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: ATtiny85 IR USB Receiver: 11 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: ATtiny85 IR USB Receiver: 11 ขั้นตอน (พร้อมรูปภาพ)
วีดีโอ: Start using Digispark USB ATtiny85 Arduino board with blink and relay example | Robojax 2024, กรกฎาคม
Anonim
ATtiny85 IR USB Receiver
ATtiny85 IR USB Receiver

คำเตือน คำแนะนำนี้ล้าสมัยแล้ว

ไลบรารี v-usb ได้รับการออกแบบให้ทำงานกับโปรโตคอล USB 1.1 ที่แทบไม่มีอยู่ในปัจจุบัน ด้วยการมาถึงของ USB3 คุณจะปวดหัวกับการพยายามทำให้อุปกรณ์ v-usb ทำงาน หลังจากเปลี่ยนศูนย์มัลติมีเดียของฉัน ฉันมีปัญหาด้านความเสถียรหลายอย่าง และแม้ว่าเครื่องรับจะทำงาน แต่หลังจากนั้นสักพักก็หยุดทำงาน ฉันพยายามแก้ไขไม่สำเร็จ ฉันสร้างเวอร์ชัน atmega328p ด้วย แต่อันนี้มีปัญหาเดียวกัน การใช้ตัวจับเวลาจ้องจับผิดเพื่อรีเซ็ตบอร์ดเป็นระยะไม่ได้ช่วยอะไรฉันจึงเลิกใช้ v-usb

ทำให้ตัวเองเป็นที่โปรดปรานและอย่าไปข้างหน้าด้วยคำแนะนำนี้เว้นแต่จะมีวัตถุประสงค์เพื่อการศึกษา ฉันแนะนำให้ซื้อโมดูลชิป ATmega 32U4 ซึ่งได้รวมอินเทอร์เฟซ usb แล้วและทำตามคำแนะนำนี้:

www.sparkfun.com/tutorials/337

จากนั้นใส่เซ็นเซอร์ IR TSOP31238 และคุณก็พร้อมแล้ว

สวัสดีผู้ผลิต! นี่เป็นคำแนะนำในการสร้างตัวรับสัญญาณ IR USB ที่ใช้งานได้โดยใช้ไมโครคอนโทรลเลอร์ Attiny85 ฉันเริ่มโครงการนี้เพื่อเอาชนะการขาดการสนับสนุน (อย่างน้อยก็รองรับอย่างสมบูรณ์) สำหรับรีโมท IR บางตัวใน GNU/Linux OS ทำตามคำแนะนำนี้ คุณสามารถสร้างตัวรับสัญญาณ USB IR ที่ตั้งโปรแกรมได้ซึ่งทำงานร่วมกับรีโมท IR ใดก็ได้ในราคาไม่กี่เหรียญ

ประการแรก คำแนะนำนี้จะไม่มีอยู่จริงหากปราศจากการทำงานหนักของผู้คนที่สร้างห้องสมุดที่ฉันใช้ที่นี่:

  • David A. Mellis สำหรับแกนหลักของเขา
  • ซอฟต์แวร์ Rowdy Dog สำหรับห้องสมุด TinyTuner
  • ซอฟต์แวร์ Rowdy Dog สำหรับโปรแกรมโหลดบูตขนาดเล็ก
  • Rancidbacon (https://rancidbacon.com/) สำหรับพอร์ต arduino ของไลบรารี v-usb (https://code.google.com/archive/p/vusb-for-arduino/downloads)
  • seejaydee สำหรับห้องสมุด IR ของเขาสำหรับแกนเล็ก ๆ ที่พบในความคิดเห็นของคำสั่ง https://www.instructables.com/id/Attiny-IR-librar… รหัสบน https://www.instructables.com/id/Attiny-IR - ห้องสมุด…

บางครั้งการค้นหาเจ้าของห้องสมุดที่เหมาะสมไม่ใช่เรื่องง่าย ดังนั้นในกรณีที่ฉันทำผิดพลาด โปรดแสดงความคิดเห็นและฉันจะแก้ไขปัญหาโดยเร็วที่สุด

คู่มือนี้มีอยู่เพราะฉันไม่พบคู่มือการสอน/คู่มือฉบับสมบูรณ์ที่ใช้งานได้ (อาจมีอยู่จริง แต่ฉันหาไม่พบ) ดังนั้นฉันจึงรวบรวมข้อมูลทั้งหมดที่มีบนเว็บและหลังจากการทดลองจำนวนมากและ ฉันพบคำแนะนำฉบับสมบูรณ์เพื่อสร้างตัวรับสัญญาณ IR แบบ USB ที่ใช้งานได้จริงซึ่งใช้งานได้ค่อนข้างดี

แหล่งข้อมูลหลักที่ฉันติดตาม:

  • https://nathan.chantrell.net/20121014/tinypcremot…
  • https://forum.arduino.cc/index.php?PHPSESSID=ap4jg…
  • https://blog.petrockblock.com/2012/05/19/usb-keybo…
  • https://learn.adafruit.com/using-an-infrared-libr…
  • https://codeandlife.com/2012/03/03/diy-usb-passwor…
  • https://codeandlife.com/2012/02/22/v-usb-with-atti…
  • https://www.instructables.com/id/Attiny-IR-librar…

ขั้นตอนที่ 1: ข้อควรพิจารณาบางประการ

  • ฉันไม่ได้เป็นเจ้าของโปรแกรมเมอร์ AVR ISP และฉันไม่อยากซื้อเลย ดังนั้นฉันจึงใช้ Arduino เพื่อตั้งโปรแกรม attiny85
  • ฉันไม่สนใจ OS อื่นใดนอกจาก GNU/Linux ดังนั้นฉันจึงไม่รู้ว่าสิ่งนี้จะได้ผลหรือไม่
  • มีห้องสมุด IR อื่น ๆ แต่ฉันไม่สามารถทำให้มันทำงานได้แม้กระทั่งกับ Arduino พิจารณาว่าฉันเริ่มต้นด้วยความรู้ที่จำกัดเกี่ยวกับห้องสมุด IR บางทีฉันอาจทำให้พวกเขาทำงานได้หลังจากที่ได้รับประสบการณ์ในการจัดการกับปัญหาจำนวนพอสมควร อย่างไรก็ตาม ฉันหลงทางและสิ้นหวังก่อนที่จะพบห้องสมุดที่สีเจย์ดีจัดหาให้ และฉันก็ใช้ห้องสมุดนั้นตั้งแต่นั้นเป็นต้นมา (ขอบคุณมาก!)
  • มีการกำหนดค่าฮาร์ดแวร์อื่น ๆ แต่ฉันใช้เฉพาะตัวที่ใช้ 5V เพื่อจ่ายไฟให้กับ attiny85 และซีเนอร์ไดโอด 3.6V 0.5W สองตัวเพื่อยึดแรงดันไฟฟ้าของสายดาต้า มันใช้งานได้ทันที ดังนั้นฉันจึงไม่ยุ่ง การกำหนดค่าอื่นๆ
  • คุณสามารถใช้คริสตัล 16 เมกะเฮิร์ตซ์หรือคุณสามารถใช้ไลบรารี่ Tinytuner เพื่อปรับเทียบนาฬิกาภายในของ attiny85 ของคุณได้ ฉันขอแนะนำอย่างยิ่งให้ใช้คริสตัล มันมีความเสถียรมากกว่าและอาจช่วยให้คุณปวดหัวได้มาก
  • ฉันใช้ bootloaders สองแบบที่แตกต่างกันสำหรับ attiny85:

ก) เวอร์ชันซอฟต์แวร์ Rowdy Dog ได้รวมอินเทอร์เฟซแบบอนุกรมที่เจ๋งมากและมีขนาดเล็กมาก ดังนั้นคุณจึงมีพื้นที่มากขึ้นสำหรับโปรแกรมและไลบรารีอื่นๆ ของคุณ ปัญหาคือด้วยเหตุผลบางประการถึงแม้ว่ามันจะใช้งานได้ค่อนข้างดี แต่หลังจากผ่านไประยะหนึ่ง อุปกรณ์ usb ก็ถูกตัดการเชื่อมต่อ (คุณสามารถค้นหาปัญหาได้ด้วยคำสั่ง dmesg) ฉันไม่รู้ว่านี่เป็นปัญหาของคอร์หรือการผสมผสานของคอร์รวมกับไลบรารีที่เลือก ดังนั้นหลังจากนั้นไม่นานฉันก็ตัดสินใจใช้คอร์นี้เพื่อถอดรหัสรีโมตคีย์และปรับเทียบนาฬิกา (เมื่อไม่ได้ใช้ 16Mhz คริสตัล) หลังจากนั้น ฉันเพิ่งเบิร์น Mellis bootloader และอัปโหลดภาพสเก็ตช์ขั้นสุดท้ายที่ไม่ได้ใช้อินเทอร์เฟซแบบอนุกรม

b) เวอร์ชัน Mellis ซึ่งเป็น bootloader ที่เสถียร ฉันได้ใช้สิ่งนี้ในหลายโครงการ ฉันจะใช้ bootloader นี้เสมอหากมีอินเทอร์เฟซแบบอนุกรม ฉันใช้แกนนี้ในสเก็ตช์สุดท้ายหลังจากถอดรหัสคีย์ทั้งหมดบนรีโมทของฉัน

ขั้นตอนที่ 2: เริ่มต้นด้วยฮาร์ดแวร์

มาเริ่มกันที่ฮาร์ดแวร์กัน
มาเริ่มกันที่ฮาร์ดแวร์กัน
มาเริ่มกันที่ฮาร์ดแวร์กัน
มาเริ่มกันที่ฮาร์ดแวร์กัน
มาเริ่มกันที่ฮาร์ดแวร์กัน
มาเริ่มกันที่ฮาร์ดแวร์กัน

เครื่องมือที่คุณต้องการ:

  • บอร์ดที่เข้ากันได้กับ Arduino
  • อะแดปเตอร์ซีเรียลเป็น USB เพื่อถอดรหัสคีย์ระยะไกลของคุณ (เพียงใช้ FT232RL)
  • พีซีที่ติดตั้ง GNU/Linux และกำหนดค่า arduino IDE อย่างถูกต้อง ฉันใช้ arduino IDE 1.8.0
  • รีโมต IR เพื่อทดสอบอุปกรณ์ของคุณ (แม้แต่อันเส็งเคร็งเช่นเดียวกับที่พบในชุดสตาร์ท Arduino ก็ใช้งานได้)
  • มัลติมิเตอร์เพื่อดีบักบอร์ดของคุณ (หวังว่าคุณจะไม่ต้องการมัน โชคดี!)

รายการวัสดุ:

  • 1 attiny85
  • ตัวต้านทาน 68R 2 ตัว
  • ตัวต้านทาน 1.5K 1 ตัว
  • ตัวต้านทาน 1 4.7K
  • 1 16Mhz คริสตัล
  • ตัวเก็บประจุ 1 22pF
  • ตัวเก็บประจุ 1 0.1uF
  • ตัวเก็บประจุ 1 10uF
  • ซีเนอร์ไดโอด 2 3.6V 0.5W
  • 1 ขั้วต่อ USB ชนิด A ตัวผู้
  • 1 สตริปพิน 6 พินสำหรับตั้งโปรแกรมและดีบักบอร์ด
  • 1 เซ็นเซอร์อินฟราเรด TSOP31238
  • กาแฟมาก ๆ ที่จะทำให้คุณตื่นตัว

ก่อนที่จะบัดกรีบอร์ดขั้นสุดท้าย คุณอาจต้องการสร้างต้นแบบเขียงหั่นขนมเพื่อการทดสอบ ตามสคีมาที่แนบมากับคำแนะนำนี้น่าจะเพียงพอที่จะสร้างขึ้น

ในการเชื่อมต่อ attiny85 กับพีซี การออกแบบขั้นสุดท้ายจะใช้ตัวเชื่อมต่อ USB ชนิด A ที่บัดกรีเข้ากับบอร์ด แต่สำหรับต้นแบบ คุณจะต้องสร้างสาย USB ที่คุณสามารถเชื่อมต่อกับเขียงหั่นขนมได้:

บัดกรี 4 พิน perfboard ให้เป็นชิ้นเล็ก ๆ จากนั้นตัดสาย USB เก่าแล้วบัดกรีพินเป็น 4 ของสายภายในสาย usb:

  • สีแดงคือ VCC (5V)
  • สีดำคือGND
  • สีขาวคือ D-
  • สีเขียวคือ D+

เก็บทุกอย่างไว้ด้วยกันด้วยกาวร้อน

ตอนนี้ เราต้องเชื่อมต่อโปรแกรมเมอร์ ISP (Arduino), อะแดปเตอร์ USB เข้ากับซีเรียล (FT232RL) และเซ็นเซอร์ IR กับ attiny85

คุณสามารถปล่อยให้เชื่อมต่อทั้งหมดเข้าด้วยกันเพื่อให้คุณสามารถเบิร์นบูตโหลดเดอร์ต่าง ๆ โหลดสเก็ตช์และตรวจสอบพอร์ตอนุกรมโดยไม่ต้องเปลี่ยนสาย

โดยเชื่อมต่อทุกอย่างตามคำแนะนำเหล่านี้:

โปรแกรมเมอร์ ISP (Arduino):ทำให้เราสามารถเบิร์น bootloaders และโหลดสเก็ตช์ได้

  • attiny85 PB0 (pin5) ถึง pin11 (MOSI) ใน arduino
  • attiny85 PB1 (pin6) ถึง pin12 (MISO) ใน arduino
  • attiny85 PB2 (pin7) ถึง pin13 (SCK) ใน arduino
  • attiny85 RESET (pin1) พร้อม pullup (4.6k ถึง VCC) ถึง pin10 ใน arduino
  • attiny85 VCC ถึง 5V ใน Arduino
  • attiny85 GND เป็น GND ใน arduino

อะแดปเตอร์ usb เป็นซีเรียล (FT232RL): ซึ่งช่วยให้เราตรวจสอบพอร์ตอนุกรมได้

  • attiny85 PB0 (pin5 RX) เป็น TX ใน FT232RL
  • attiny85 PB2 (pin7 TX) ถึง RX ใน FT232RL
  • attiny85 GND (pin4) ถึง GND บน FT232RL
  • เนื่องจาก attiny85 นั้นขับเคลื่อนโดย Arduino อยู่แล้วคุณไม่จำเป็นต้องเชื่อมต่อ 5v บน FT232RL มิฉะนั้นให้เชื่อมต่อ: attiny85 VCC (pin8) ถึง 5V บน FT232RL

อะแดปเตอร์ usb เป็นซีเรียล (FT232RL) สำหรับการปรับเทียบนาฬิกาเท่านั้น (สำหรับ bootloader "ATtiny85 @ 8MHz (ออสซิลเลเตอร์ภายใน; BOD ถูกปิดใช้งาน)")

  • PB4 (pin3 RX) เป็น TX ใน FT232RL attiny85
  • PB3 (pin2 TX) ถึง RX ใน FT232RL attiny85
  • GND (pin4) ถึง GND บน FT232RL
  • เนื่องจาก attiny85 นั้นขับเคลื่อนโดย Arduino อยู่แล้วคุณไม่จำเป็นต้องเชื่อมต่อ 5v บน FT232RL มิฉะนั้นให้เชื่อมต่อ: attiny85 VCC (pin8) ถึง 5V บน FT232RL

หากคุณใช้คริสตัล 16 เมกะเฮิร์ตซ์ ให้เชื่อมต่อกับหมุด Attiny85 PB3 (pin2) และ PB4 (pin3) และเชื่อมต่อแต่ละพินกับ GND ผ่านฝาปิด 22pF แต่ละตัว

กรอง Attiny85 VCC ด้วยตัวเก็บประจุ 0.1uF และ 10uF ที่เชื่อมต่อแบบขนานกับ GND

เชื่อมต่อพินเอาต์พุตเซ็นเซอร์ IR กับ attiny85 PB1 (pin6) แล้วเปิดเครื่อง

สร้างและเชื่อมต่ออินเทอร์เฟซ usb:

  • GND (สายสีดำ): เชื่อมต่อกับ GND ทั่วไป (กราวด์ทั้งหมดเชื่อมต่อเข้าด้วยกัน)
  • D- (สายสีขาว) เชื่อมต่อกับ attiny85 PB0 (pin5) ผ่านตัวต้านทาน 68R เชื่อมต่อกับกราวด์ผ่านซีเนอร์ 3.6V 0.5W แล้วดึงขึ้นเป็น VCC ด้วยตัวต้านทาน 1.5K
  • D+ (สายสีเขียว) เชื่อมต่อกับ PB2 ผ่านตัวต้านทาน 68R เชื่อมต่อกับกราวด์ผ่านซีเนอร์ 3.6V 0.5W
  • 5V คุณสามารถปล่อยทิ้งไว้โดยไม่ต้องเชื่อมต่อเนื่องจากทุกอย่างขับเคลื่อนโดย Arduino ในขั้นตอนนี้ มิฉะนั้นให้เชื่อมต่อกับ attiny85 VCC

ซีเนอร์ไดโอดเชื่อมต่อเพื่อให้แอโนดเชื่อมโยงกับ GND และแคโทดเชื่อมต่อกับสายข้อมูล D+ และ D-

ขั้นตอนที่ 3: การออกแบบขั้นสุดท้าย

การออกแบบขั้นสุดท้าย
การออกแบบขั้นสุดท้าย
การออกแบบขั้นสุดท้าย
การออกแบบขั้นสุดท้าย
การออกแบบขั้นสุดท้าย
การออกแบบขั้นสุดท้าย

สำหรับการออกแบบขั้นสุดท้าย คุณสามารถใช้ perfboard กับส่วนประกอบรูทะลุ หรือสลักบอร์ดของคุณเอง และใช้ส่วนประกอบ smd หากต้องการเรียนรู้วิธีแกะสลักกระดาน เพียงแค่ google ก็จะมีบทช่วยสอนดีๆ ให้อ่านทางออนไลน์

ฉันได้สลักกระดานของตัวเองแล้วและพอใจกับผลลัพธ์สุดท้าย (กระดานขนาดเล็ก มั่นคง และทนทาน) ใช่ ฉันรู้ว่าการตัดนั้นห่วย แต่ฉันไม่สามารถใช้เครื่องมือไฟฟ้าใดๆ เลยในตอนดึกและฉันก็ แค่ตัดกระดานด้วยกรรไกรตัดดีบุกของฉัน

อย่างไรก็ตาม ร่องรอยบนภาพไม่ใช่ทองแดงเปลือย พวกมันได้รับการบำบัดด้วยสารเคมีที่น่ารังเกียจที่ทำให้ทองแดงเป็นกระป๋องเล็กน้อย (สงสัยว่าจะทำให้เกิดมะเร็ง ดังนั้นควรใช้ด้วยความระมัดระวังอย่างยิ่ง ลูกโลกลาเท็กซ์และหน้ากากกันฝุ่น):

ใช้แผนผังด้านบนเพื่อออกแบบเลย์เอาต์ของคุณหรือคุณสามารถใช้ pcb footprint ของฉันเพื่อแกะสลักบอร์ดของคุณ

ขั้นตอนที่ 4: การจัดการกับซอฟต์แวร์

วงจรในโครงการนี้ง่ายมาก ซอฟต์แวร์ต้องใช้ความพยายามมากขึ้นแทน

เราต้องการไลบรารี่อย่างน้อย 2 ไลบรารี (อีกหนึ่งไลบรารีหากคุณไม่ได้ใช้คริสตัล) บวกกับ bootloaders 2 ตัวเพื่อให้ใช้งานได้ เมื่อฉันเริ่มโปรเจ็กต์นี้ ฉันได้ทดสอบไลบรารี่บางตัว บางครั้งมันก็ใช้งานไม่ได้ และหลายๆ ครั้งก็ไม่ได้ถูกกำหนดค่าให้ทำงานกับ Attiny85 ทันที (ฉันยังไม่รู้เลย) จากนั้นฉันก็พบปัญหาเกี่ยวกับการขัดจังหวะของไลบรารี / bootloaders ที่ทับซ้อนกัน ในที่สุดฉันต้องจัดการกับข้อผิดพลาดจำนวนพอสมควรเมื่อฉันเชื่อมต่อวงจรสุดท้ายกับพีซีของฉัน ฉันไม่มีคู่มือนี้ ดังนั้นฉันคิดว่าคุณไม่เป็นไร เพียงทำตามขั้นตอนในคำแนะนำนี้ หากคุณทำอย่างนั้นโดยไม่ทำผิดพลาด คุณก็ไม่เป็นไร:)

ตอนนี้เราจำเป็นต้องติดตั้งและกำหนดค่าไลบรารีบางตัว:

  • v-usb สำหรับไลบรารี arduino: ไลบรารีนี้อนุญาตให้พีซีรู้จักไมโครคอนโทรลเลอร์ว่าเป็นคีย์บอร์ด HID USB และเราจะใช้เพื่อส่งการกดแป้นไปยังพีซี ไลบรารีนี้ต้องการการเปลี่ยนแปลงบางอย่างเพื่อให้เข้ากันได้กับ attiny85
  • ไลบรารี่ tinytuner เฉพาะเมื่อคุณจะไม่ใช้คริสตัล 16 เมกะเฮิร์ตซ์ คุณจะต้องทำการปรับเทียบนาฬิกาภายในของไมโครคอนโทรลเลอร์ ห้องสมุดนี้ทำงานนอกกรอบ
  • Attiny-IR-library เพื่อโต้ตอบกับเซ็นเซอร์ IR ห้องสมุดนี้ทำงานนอกกรอบ

เราต้องการ bootloaders 2 ตัว:

  • เวอร์ชันซอฟต์แวร์ Dog พร้อมอินเทอร์เฟซแบบอนุกรม bootloader นี้ต้องการการปรับแต่งเล็กน้อยเพื่อทำงานกับ attiny85 เนื่องจากมันใช้ timer1 สำหรับฟังก์ชัน millis() และจะไม่ทำงานกับไลบรารี IR เราจำเป็นต้องเปลี่ยนตัวจับเวลาเป็น timer0
  • เวอร์ชัน Mellis ซึ่งเป็น bootloader ที่เสถียรที่เราจะใช้ในด่านสุดท้าย นี้ทำงานออกจากกล่อง

ขั้นตอนที่ 5: การติดตั้งและกำหนดค่า V-usb Library

ดาวน์โหลดไลบรารีจาก https://code.google.com/archive/p/vusb-for-arduin…แตกไฟล์และคัดลอกโฟลเดอร์ libraries/UsbKeyboard ลงในโฟลเดอร์ไลบรารี Sketchbook

ตอนนี้คุณต้องแก้ไขไฟล์สองสามไฟล์เพื่อให้เข้ากันได้กับ ATtiny85 (ได้รับการกำหนดค่าให้ทำงานกับ Arduino):

ก) แก้ไข usbconfig.h:

ภายใต้การเปลี่ยนแปลง "การกำหนดค่าฮาร์ดแวร์":

#define USB_CFG_IOPORTNAME Dto##define USB_CFG_IOPORTNAME B

และ

#define USB_CFG_DMINUS_BIT 4to#define USB_CFG_DMINUS_BIT 0

ภายใต้การเปลี่ยนแปลง "การกำหนดค่าฮาร์ดแวร์เสริม":

#define USB_CFG_PULLUP_IOPORTNAME Dto##define USB_CFG_PULLUP_IOPORTNAME B

ในการสร้างข้อกำหนด "ที่เข้ากันได้กับ HID" แบบเต็ม (มิฉะนั้นจะไม่มีปุ่มมัลติมีเดียทำงาน) ให้เปลี่ยนด้วย:

#define USB_CFG_INTERFACE_SUBCLASS 0 // Bootto#define USB_CFG_INTERFACE_SUBCLASS 0x01 // บูต

และ

#define USB_CFG_INTERFACE_PROTOCOL 0 // Keyboardto#define USB_CFG_INTERFACE_PROTOCOL 0x01 // แป้นพิมพ์

นอกจากนี้ คุณยังสามารถเปลี่ยนชื่อผู้ผลิตและชื่ออุปกรณ์ตามข้อกำหนดต่อไปนี้:

#define USB_CFG_VENDOR_NAME

#define USB_CFG_DEVICE_NAME

B) แก้ไข UsbKeyboard.h:

เปลี่ยน:

PORTD = 0; // สิ่งที่ต้องทำ: สำหรับพิน USB เท่านั้น?DDRD |= ~USBMASK;

ถึง

PORTB = 0; // สิ่งที่ต้องทำ: สำหรับพิน USB เท่านั้น?DDRB |= ~USBMASK;

หากต้องการอนุญาตรหัสมากกว่า 101 ให้เปลี่ยนด้วย:

0x25, 0x65, // LOGICAL_MAXIMUM (101) ถึง: 0x25, 0xE7, // LOGICAL_MAXIMUM (231)

และ

0x29, 0x65, // USAGE_MAXIMUM (แอปพลิเคชันแป้นพิมพ์) ถึง:0x29, 0xE7, // USAGE_MAXIMUM (แอปพลิเคชันแป้นพิมพ์)

คุณอาจต้องแก้ไข 3 ไฟล์เหล่านี้ด้วย:

usbdrv.husbdrv.cUsbKeyboard.h

และทุกครั้งที่คุณเห็น PROGMEM เพิ่ม "const" ก่อนชื่อประเภทตัวแปร (เช่น: PROGMEN char usbHidReportDescriptor[35] ==> PROGMEM const char usbHidReportDescriptor[35])

หากไม่ชัดเจน เข้าไปที่

คุณสามารถหลีกเลี่ยงการเปลี่ยนแปลงทั้งหมดนี้ได้หากคุณเพิ่งดาวน์โหลดไลบรารีที่แนบมา (ฉันทำการเปลี่ยนแปลงทั้งหมดนี้ด้วยตัวเอง) และแยกมันในโฟลเดอร์ไลบรารี Sketchbook ของคุณ:

USBKeyboard ที่กำหนดค่าสำหรับ attiny85

แก้ไข: เมื่อเร็ว ๆ นี้ฉันได้ค้นพบว่า Alejandro Leiva (https://github.com/gloob) ได้รับการดูแลจากห้องสมุดนี้และดูเหมือนว่าจะทำงานได้ดีเช่นกัน คุณยังสามารถลองใช้เวอร์ชันของเขากับการเปลี่ยนแปลงที่จำเป็นที่ฉันทำเพื่อให้ทำงานกับ attiny ได้ ดังนั้นหากคุณต้องการลองดูสิ่งนี้ ให้แยกมันในโฟลเดอร์ไลบรารีสมุดสเก็ตช์ของคุณ

UsbKeyboard กำหนดค่าสำหรับ attiny85 (รุ่น Alejandro Leiva)

ขั้นตอนที่ 6: การติดตั้ง Attiny-IR และ Tinytuner Libraries

A) ห้องสมุด Attiny-IR:

ดาวน์โหลดจาก

B) ห้องสมุด Tinytuner:

สิ่งนี้จำเป็นต่อเมื่อคุณไม่ได้ใช้คริสตัล 16 เมกะเฮิร์ตซ์ แต่เชื่อฉันเถอะ แม้ว่ามันจะทำงานโดยไม่มีคริสตัลด้วย แต่มันก็มีความเสถียรมากกว่ามาก และมีราคาไม่กี่เซ็นต์ ดังนั้นทำให้มันเรียบง่าย ใช้คริสตัลแล้วข้ามไป ห้องสมุดแห่งนี้

ยังไม่มั่นใจ? ตกลง ดาวน์โหลดไลบรารีจากhttps://storage.googleapis.com/google-code-archive…จากนั้นแตกไฟล์ลงในโฟลเดอร์ไลบรารีสมุดสเก็ตช์ของคุณ

เราเสร็จสิ้นกับไลบรารี ตอนนี้เราไปติดตั้ง bootloaders

ขั้นตอนที่ 7: การติดตั้งและกำหนดค่า Bootloaders

เรากำลังจะทำการติดตั้ง bootloaders สองตัว โดย Mellis ตัวหนึ่งนั้นเป็นไปตามประสบการณ์ของผมที่เสถียรกว่า และเราจะใช้มันในการสเก็ตช์ขั้นสุดท้าย อีกอันที่พัฒนาโดย Rowdy Dog Software เป็นคอร์ที่ยอดเยี่ยม มีขนาดเล็กมากและมีอินเทอร์เฟซแบบอนุกรมในตัว แต่รีโมตของฉันพังหลังจากผ่านไประยะหนึ่ง ดังนั้นเราจะใช้ bootloader นี้เพื่อปรับเทียบนาฬิกาภายใน attiny85 และถอดรหัสรีโมตของเรา ปุ่ม

ฉันรู้ว่ามีไลบรารี่ที่พร้อมใช้งานเพื่อให้ความสามารถซีเรียลของ attiny85 แต่คุณจะต้องปรับแต่งไลบรารีที่ใช้อ็อบเจกต์ซีเรียล…ฉันชอบขั้นตอนนี้มากกว่า

เริ่มต้นด้วยการติดตั้ง:

A) Mellis bootloader:

เพียงเปิดการตั้งค่า Arduino IDE และเพิ่มใน Additional Boards Manager URLs:

raw.githubusercontent.com/damellis/attiny/ide-1.6.x-boards-manager/package_damellis_attiny_index.json

จากนั้นเปิดตัวจัดการบอร์ด Arduino IDE และค้นหา attiny ติดตั้งบอร์ดจาก Mellis ตอนนี้คุณควรเห็น Arduino ID ที่บอร์ด ATtiny25/45/85 และ ATtiny24/44/84

B) Rowdy Dog Software bootloader ขนาดเล็ก:

ดาวน์โหลด bootloader จาก

เปิดเครื่องรูดไฟล์และคัดลอกโฟลเดอร์เล็ก ๆ ภายในสมุดสเก็ตช์/ฮาร์ดแวร์ของคุณ (สร้างโฟลเดอร์นี้หากยังไม่มี) จากนั้นย้ายไปที่โฟลเดอร์ sketchbook/hardware/tiny/avr/ และ:

1) คัดลอกไฟล์ Prospective Boards.txt ลงในไฟล์ board.txt

2) แก้ไขไฟล์ platform.txt และทำการเปลี่ยนแปลงบางอย่าง:

ยกเลิกหมายเหตุตัวแปร compiler.path และปล่อยให้ชี้ไปที่โฟลเดอร์ hardware/tools/avr/bin/ ภายในโฟลเดอร์การติดตั้ง arduino ของคุณ:

compiler.path={PATH_TO_YOUR_ARDUINO_FOLDER}/hardware/tools/avr/bin/

เปลี่ยน alsocompiler. S.flags=-c -g -assembler-with-cpptocompiler. S.flags=-c -g -x assembler-with-cpp

จากนั้นเปลี่ยนตัวแปรต่อไปนี้เพื่อให้แน่ใจว่าทุกอย่างเข้าที่ (ไฟล์เหล่านั้นต้องมีอยู่ มิฉะนั้น ให้ชี้ตัวแปรไปยังเส้นทางที่ถูกต้อง):

tools.avrdude.cmd.path={runtime.ide.path}/hardware/tools/avr/bin/avrdude

tools.avrdude.config.path={runtime.ide.path}/hardware/tools/avr/etc/avrdude.conf

tools.avrdude.cmd.path.linux={runtime.ide.path}/hardware/tools/avr/bin/avrdude

tools.avrdude.config.path.linux={runtime.ide.path}/hardware/tools/avr/etc/avrdude.conf

3) แก้ไขไฟล์ cores/tiny/core_build_options.h และเปลี่ยนแปลง:

#define TIMER_TO_USE_FOR_MILLIS 1 ถึง#define TIMER_TO_USE_FOR_MILLIS 0

นี่เป็นสิ่งสำคัญมาก ไม่เช่นนั้นตัวรับสัญญาณ IR จะส่งออกค่าศูนย์สำหรับทุกปุ่ม คำสั่งนี้กำหนดค่า timer0 สำหรับฟังก์ชัน millis() ปล่อยให้ timer1 พร้อมใช้งานในไลบรารี IR ร่างสุดท้ายจะปิดใช้งาน timer0 อยู่ดี ดังนั้นคุณจะไม่ไม่มีฟังก์ชัน millis() และ delay() คุณอาจมีฟังก์ชัน delayMicroseconds() แทน

bootloader นี้มีน้อย แต่มีการสนับสนุนวัตถุอนุกรม:

Attiny85 PB2 (pin7) คือ TX และ PB0 (pin5) คือ RX

คุณสามารถกำหนดค่าด้วยโปรแกรมเมอร์ ISP (arduino) และอะแดปเตอร์ซีเรียลเป็น USB ที่เชื่อมต่อพร้อมกัน ดังนั้นคุณไม่จำเป็นต้องเปลี่ยนสายไฟบ่อยเกินไป:

ตอนนี้ เรามีทั้งไลบรารีและ bootloaders ติดตั้งและกำหนดค่าอย่างเหมาะสม งานที่ยากที่สุดเสร็จเรียบร้อยแล้ว และเราสามารถเริ่มทดสอบสิ่งต่างๆ ได้

ขั้นตอนที่ 8: เบิร์น Bootloaders และอัพโหลด Sketches

ฉันขอแนะนำอย่างยิ่งให้เปิดใช้งานเอาต์พุต verbose ภายใต้การตั้งค่า Arduino IDE เพื่อให้คุณสามารถระบุปัญหาในที่สุด

ในการเขียน bootloader ลงใน Attiny85 คุณต้องอัปโหลดตัวอย่าง ISP ไปยัง Arduino จากนั้นเลือกโปรแกรมเมอร์ Arduino เป็น ISP

ตอนนี้วางตัวเก็บประจุ 10uF ระหว่างรีเซ็ตและพินกราวด์บน Arduino (ไม่จำเป็นสำหรับกระบวนการเบิร์น แต่เป็นการอัปโหลดภาพร่างไปที่ attiny85)

ตอนนี้ Arduino พร้อมที่จะเบิร์น bootloaders และโหลดสเก็ตช์แล้ว คุณเพียงแค่ต้องเลือกบอร์ดที่เหมาะสมกับ Attiny ของคุณและเบิร์นมัน

ในการโหลดภาพสเก็ตช์ลงใน Attiny85 ให้โหลดลงใน Arduino IDE แล้วคลิกที่ "อัปโหลดโดยใช้โปรแกรมเมอร์"

สำคัญ: เมื่ออัปโหลดภาพร่างมี 3 ขั้นตอนคือ การรวบรวม การเขียน และการตรวจสอบ หากการคอมไพล์และการเขียนทำงานสำเร็จ แต่กระบวนการตรวจสอบล้มเหลว อาจเป็นไปได้ว่าแบบร่างจะทำงานต่อไป

ขั้นตอนที่ 9: ปรับเทียบนาฬิกาภายใน Attiny85 (ข้ามสิ่งนี้หากคุณใช้ Crystal)

ในกรณีที่คุณตัดสินใจที่จะไม่ใช้คริสตัล 16 เมกะเฮิร์ตซ์ คุณจำเป็นต้องปรับเทียบนาฬิกา attiny85 ของคุณ ดังนั้น เราจำเป็นต้องใช้โปรแกรมโหลดบูตที่มีอินเทอร์เฟซแบบอนุกรม และเราจะใช้ไลบรารี่ Tinytuner เพื่อรับการปรับเทียบที่ถูกต้อง

ทำตามขั้นตอนต่อไป

  • เลือกภายใต้เครื่องมือ Arduino เป็นโปรแกรมเมอร์ ISP
  • เลือกบอร์ด "ATtiny85 @ 8MHz (ออสซิลเลเตอร์ภายใน; BOD ถูกปิดใช้งาน)"
  • ฉันคิดว่าคุณมีการเชื่อมต่อ ISP พร้อมตามที่อธิบายไว้ก่อนทำการเชื่อมต่อมิฉะนั้นให้ทำการเชื่อมต่อ
  • เบิร์น bootloader
  • bootloader นี้ได้กำหนดค่าพินที่แตกต่างกันสำหรับอินเทอร์เฟซแบบอนุกรม ใช้การกำหนดค่านี้สำหรับ bootloader ปัจจุบันเท่านั้น

- PB4 (pin3 RX) เป็น TX ใน FT232RL attiny85 - PB3 (pin2 TX) ถึง RX ใน FT232RL attiny85 - GND (pin4) ถึง GND บน FT232RL เนื่องจาก attiny85 ได้รับพลังงานจาก Arduino แล้ว คุณไม่จำเป็นต้องเชื่อมต่อ 5v บน FT232RL มิฉะนั้นให้เชื่อมต่อ: attiny85 VCC (pin8) ถึง 5V บน FT232RL

  • อัปโหลดตัวอย่าง tinytuner ไปยัง attiny85
  • เปิดโปรแกรมหน้าจอเพื่อตรวจสอบการสื่อสารแบบอนุกรม: screen /dev/ttyUSB0 9600
  • รีเซ็ต attiny85 ที่เชื่อมต่อพิน RESET (pin1) กับ GND (สักครู่) ข้อความต้อนรับควรปรากฏบนหน้าต่างหน้าจอ
  • ส่งอักขระ 'x' ตัวเดียวต่อไป (ไม่มีการขึ้นบรรทัดใหม่ ไม่มีการป้อนบรรทัด) จนกว่าการสอบเทียบจะเสร็จสิ้น
  • ใส่คำอธิบายประกอบค่าของการสอบเทียบ (OSCCAL = 0x) นี่คือค่าที่คุณต้องประกาศในร่างสุดท้าย

ขั้นตอนที่ 10: ถอดรหัสปุ่มรีโมทของคุณ

ตอนนี้ได้เวลาถอดรหัสปุ่มระยะไกลของเราและกำหนดให้กับการกดแป้นเฉพาะในพีซี โดยทำตามขั้นตอนต่อไป:

  • เลือกบอร์ด "ATtiny85 @ 16MHz (ภายใน PLL;4.3V BOD)" หากคุณไม่ใช้คริสตัล "ATtiny85 @ 16 MHz (คริสตัลภายนอก 4.3 V BOD" มิฉะนั้นให้เบิร์น
  • โหลดภาพสเก็ตช์:
  • หากคุณไม่ได้ใช้คริสตัล ให้ยกเลิกการใส่เครื่องหมายในแถวที่มีตัวแปร OSCCAL และกำหนดให้กับค่าที่คุณพบเมื่อทำการปรับเทียบนาฬิกา
  • ฉันคิดว่าเชื่อมต่อเซ็นเซอร์ตามที่อธิบายไว้ก่อนหน้านี้ ไม่เช่นนั้นให้เชื่อมต่อ
  • ฉันถือว่าเชื่อมต่ออะแดปเตอร์อนุกรม FT232RL เป็น usb ไม่เช่นนั้นให้เชื่อมต่อ
  • รีเซ็ต attiny85 ที่เชื่อมต่อพิน RESET (pin1) กับ GND (สักครู่)
  • กดปุ่มรีโมตของคุณซ้ำ ๆ และชำระเงินที่หน้าต่างหน้าจอ คุณต้องใส่คำอธิบายประกอบหมายเลขสุดท้ายสำหรับแต่ละบันทึก ทุกปุ่มอาจสร้าง 2 หมายเลขที่แตกต่างกัน

ตัวอย่าง:

รับ D44 3396รับแล้ว 544 1348

ใส่คำอธิบายประกอบ 3396 และ 1348 ที่เกี่ยวข้องกับปุ่มที่คุณเพิ่งกด จากนั้นคุณต้องตัดสินใจว่าคุณต้องการทำอะไรกับปุ่มนั้น ตัวอย่างเช่น ฉันต้องการให้ปุ่มนั้นส่งรหัสมัลติมีเดีย "เพิ่มระดับเสียง" จากนั้นฉันต้องหา ID สำหรับรหัสนั้น โดยดาวน์โหลดไฟล์ PDF:

มองหาส่วน "หน้าแป้นพิมพ์/แป้นพิมพ์" หน้า 53 และใช้ตัวเลขในคอลัมน์รหัสการใช้งาน (Dec) เพื่อผูกปุ่มระยะไกลของคุณกับรหัสแป้นพิมพ์ ในตัวอย่างของเรา เราจะเห็นว่ารหัสสำหรับ "เพิ่มระดับเสียง" คือ: 128

แก้ไขไฟล์ของไฟล์ UsbKeyboard.h ภายในไลบรารี UsbKeyboard จากแพ็คเกจ v-usb ที่เราติดตั้งไว้ก่อนหน้านี้ และเพิ่มคำนิยามที่มีอยู่หากยังไม่มี:

#define KEY_VOL_UP 128

เมื่อเราเสร็จสิ้นด้วยปุ่มรีโมต / s ทั้งหมดของเราและการกำหนดทั้งหมดในไฟล์ UsbKeyboard.h พร้อมแล้วเราสามารถไปยังขั้นตอนสุดท้ายได้

ขั้นตอนที่ 11: กำลังโหลด Final Sketch และหวังว่าจะดีที่สุด

กำลังโหลด Final Sketch และหวังว่าจะดีที่สุด!
กำลังโหลด Final Sketch และหวังว่าจะดีที่สุด!
กำลังโหลด Final Sketch และหวังว่าจะดีที่สุด!
กำลังโหลด Final Sketch และหวังว่าจะดีที่สุด!

ตอนนี้เราได้ถอดรหัสปุ่มระยะไกลทั้งหมดแล้ว ไฟล์ UsbKeyboard.h เต็มไปด้วยรหัสของเรา ดังนั้นตอนนี้เราสามารถโหลดภาพร่างขั้นสุดท้ายลงใน arduino IDE จาก:

github.com/venumz/ATtiny85-USB-IR-receiver…

ไฟล์นี้เป็นไฟล์เดียวกับที่ฉันใช้กับเครื่องรับของฉัน และมันใช้งานได้กับรีโมท 2 ตัวที่แตกต่างกัน ดังนั้นคุณจะต้องอัปเดตอย่างชัดเจนเพื่อใช้งานกับรีโมตของคุณ

หากคุณไม่ได้ใช้คริสตัล ให้ยกเลิกการใส่เครื่องหมายในแถวที่มีตัวแปร OSCCAL และกำหนดให้กับค่าที่คุณพบเมื่อทำการปรับเทียบนาฬิกา

ขอให้สังเกตว่าในฟังก์ชันลูปมีคำสั่งมากมายเช่นนี้:

if(results.value==3405 || results.value==1357) { // ลูกศรขึ้น

ถ้า (lastStroke!=results.value) UsbKeyboard.sendKeyStroke (KEY_ARROW_UP);

}

คุณต้องสร้างคำสั่งของคุณเอง หนึ่งปุ่มต่อปุ่มในรีโมทของคุณ ในเงื่อนไข "if" คุณต้องใส่ค่า results.value ที่คุณพบในการถอดรหัสรีโมตของคุณและเป็นอาร์กิวเมนต์ของเมธอด UsbKeyboard.sendKeyStroke คุณต้องใส่หนึ่งในคีย์โค้ดที่กำหนดไว้แล้วในไฟล์ UsbKeyboard.h

จำเป็นต้องมีเงื่อนไข " if(lastStroke!=results.value) " เนื่องจากรีโมตบางตัวส่งรหัสเดียวกันสองครั้งต่อครั้ง และสิ่งนี้จะป้องกันการโจมตีครั้งที่สอง ฉันไม่แน่ใจทั้งหมดและอาจขึ้นอยู่กับโปรโตคอล IR ที่ตั้งโปรแกรมไว้ในรีโมทของคุณ (ฉันไม่ใช่ผู้เชี่ยวชาญในโปรโตคอล IR จริงๆ) แต่จากประสบการณ์ของฉันกับรีโมทของตัวเอง ทุกปุ่มสามารถสร้างรหัสได้ 2 รหัสและ ในขณะที่คุณกดปุ่มค้างไว้ จะเป็นการส่งรหัสเดิม แต่ถ้าคุณกดปุ่มอีกครั้ง จะเป็นการส่งรหัสอื่น ดังนั้นดูเหมือนว่ารหัสจะถูกส่งไปในทางอื่น ฉันคิดว่ามันเป็นโหมดมาตรฐานที่จะรู้ว่าคุณกดปุ่มจริงๆ กี่ครั้ง

ตกลง เราใกล้จะเสร็จแล้ว เพียงอัปโหลดภาพร่างสุดท้าย เชื่อมต่อกับพีซีและดูว่ามันจะดำเนินไปอย่างไร

สำหรับขั้นตอนนี้ จะดีกว่าถ้าคุณถอดปลั๊กทั้ง Arduino และ USB เข้ากับอะแดปเตอร์อนุกรม จากนั้นเสียบ USB เข้ากับพอร์ต PC ของคุณ (ในกรณีที่มีสิ่งผิดปกติเกิดขึ้น วงจรของคุณจะทำการดีบั๊กได้ง่ายขึ้น)

หากทุกอย่างทำงานได้ดี เมื่อคุณเปิดเทอร์มินัลและส่งคำสั่ง dmesg คุณจะเห็นบางสิ่งที่คล้ายกับรูปภาพแรกในขั้นตอนนี้ หากมีปัญหา คุณควรมีข้อผิดพลาดเหมือนที่พบในภาพที่สอง และคุณต้องเริ่มแก้ไขจุดบกพร่องของวงจรและ/หรือซอฟต์แวร์ของคุณ หนึ่งในสาเหตุของข้อผิดพลาดเริ่มต้นที่ฉันมีคือฮับ USB ที่ไม่สามารถทำงานกับตัวรับสัญญาณ IR ของฉันได้ (แต่ตัวอื่นๆ ใช้งานได้)…ดังนั้นจึงเป็นการดีกว่าสำหรับขั้นตอนสุดท้ายนี้ในการเสียบตัวรับสัญญาณ IR เข้ากับพอร์ตพีซีของคุณโดยตรง ข้อผิดพลาดในท้ายที่สุดอาจหายาก แต่ในตอนท้าย คุณจะได้เรียนรู้อะไรมากมาย และราคาที่ต้องจ่ายก็คุ้มค่า ผมรับรองกับคุณ

นั่นคือทั้งหมด แจ้งให้เราทราบหากคุณสังเกตเห็นข้อผิดพลาดใด ๆ ในคำแนะนำนี้และเพลิดเพลินกับตัวรับสัญญาณ IR USB ใหม่ล่าสุดของคุณ!

แนะนำ: