สารบัญ:
- เสบียง
- ขั้นตอนที่ 1: การเดินสายไฟและการตั้งค่า
- ขั้นตอนที่ 2: ทดสอบคีย์บอร์ด
- ขั้นตอนที่ 3: ตัวอย่างการแปลง PS/2 เป็น USB
- ขั้นตอนที่ 4: คำอธิบายทางเทคนิค
- ขั้นตอนที่ 5: การอัปโหลด Final Sketch
- ขั้นตอนที่ 6: การอัปเดตเฟิร์มแวร์
- ขั้นตอนที่ 7: สนุก……
วีดีโอ: อะแดปเตอร์ Arduino PS/2 เป็น USB: 7 ขั้นตอน (พร้อมรูปภาพ)
2024 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2024-01-30 13:03
คุณเคยต้องการใช้คีย์บอร์ด PS/2 เก่ากับแล็ปท็อปหรือพีซีเดสก์ท็อปเครื่องใหม่และพบว่าไม่มีพอร์ต PS/2 อีกต่อไปหรือไม่ แทนที่จะไปซื้อ PS/2 เป็น USB Adapter ราคาถูกเหมือนที่คนทั่วไปทำ ต้องการใช้ Arduino ของคุณเป็น PS/2 เป็น USB Adapter แล้วคุณมาถูกที่แล้ว:)
คำเตือนที่เป็นธรรมก่อนที่เราจะเข้าไป เมื่อคุณใช้ UNO/Mega เป็นอุปกรณ์ USB-HID (ไม่จำกัดเฉพาะคีย์บอร์ด อาจเป็นเมาส์ จอยสติ๊ก ฯลฯ) คุณจะสูญเสียหน้าที่ของ Arduino ชั่วคราว โดยที่ฉันหมายความว่าคุณไม่สามารถใช้การสื่อสารแบบอนุกรมและคุณไม่สามารถตั้งโปรแกรมใหม่ผ่าน USB ได้ เนื่องจากเราจะเขียนทับเฟิร์มแวร์บนชิปอินเทอร์เฟซ USB (เจ้าตัวเล็กใกล้กับพอร์ต USB Atmega8U2 และ 16U2 ขึ้นอยู่กับการแก้ไข) แต่อย่ากังวลไป คุณไม่สามารถสร้าง UNO/Mega ของคุณได้จริงโดยการทำเช่นนี้ มันสามารถย้อนกลับได้เสมอ
นอกจากนี้หากคุณมี Arduino ที่มีความสามารถ USB-HID อยู่แล้ว (Arduino Pro Micro หรือ Leonardo ฯลฯ ทำการค้นหาโดย Google) คุณสามารถลืมได้ว่าคำแนะนำนี้เคยมีอยู่โดยตรงที่นี่เพื่อช่วยตัวคุณเองจากโลกแห่งปัญหา ล้อเล่น!
เสบียง
-
ฮาร์ดแวร์
- Arduino UNO หรือ Mega
- คีย์บอร์ด PS/2
- ตัวเลือก Arduino พิเศษหรือโปรแกรมเมอร์ USB ชนิดใดก็ได้ (USBasp ฯลฯ) อาจมีประโยชน์
-
ซอฟต์แวร์
- Atmel FLIP
-
ไลบรารี PS2KeyAdvanced สำหรับ Arduino IDE
ขั้นตอนที่ 1: การเดินสายไฟและการตั้งค่า
ขึ้นอยู่กับสถานการณ์ คุณสามารถค้นหาบอร์ดฝ่าวงล้อมหรือกอบกู้พอร์ตเก่าจากเมนบอร์ด (ลองครั้งที่ 2 ของฉัน) หรือถ้าคุณรู้สึกหงุดหงิดเป็นพิเศษ คุณสามารถตัดแจ็คสีม่วงทั้งหมดและเปิด 4 สาย (ลองครั้งแรกของฉัน) และ เชื่อมต่อกับ UNO
คีย์บอร์ด_Arduino
+5V(VCC)_+5V
พื้นดิน_GND
นาฬิกา_ PIN 2**
ข้อมูล_ PIN3*
*คุณสามารถเปลี่ยนหมุด DATA เป็นสิ่งที่คุณต้องการได้ แต่อย่าลืมอัปเดตภาพร่าง
**CLOCK ต้องเชื่อมต่อกับพินอินเทอร์รัปต์บน Arduino ซึ่งสามารถเป็น PIN 2 หรือ 3 ได้เท่านั้น (อย่าลืมอัปเดตภาพร่าง) บน UNO สำหรับข้อมูลเพิ่มเติมและการกำหนดค่าบอร์ดต่างๆ คุณสามารถตรวจสอบส่วนความคิดเห็นของตัวอย่างไลบรารี PS2KeyAdvanced
ขั้นตอนที่ 2: ทดสอบคีย์บอร์ด
ก่อนที่คุณจะลงมือบนดาดฟ้าก่อนอื่นตรวจสอบให้แน่ใจว่าทุกอย่างทำงานบนแป้นพิมพ์และห้องสมุด
ที่นี่ฉันได้แนบ SimpleTest.ino เวอร์ชันที่แก้ไขแล้วจากตัวอย่างไลบรารี PS2KeyAdvanced พร้อมนาฬิกาและหมุดข้อมูลที่อัปเดตแล้ว และการแสดง "สร้าง" และ "หยุด" นี่คือคำอธิบายบางส่วนสำหรับผลลัพธ์
- ระบบ scancode "สร้าง" และ "ทำลาย" และ "รหัส" ซึ่งเป็นรหัสสแกนแบบแยก (c & 0xFF) ของการกดปุ่มหรือการกดปุ่มมีส่วนสำคัญในการแปลง PS/2 เป็น USB และฉันแนะนำให้คุณศึกษา อีก 2 ตัวอย่างที่มาพร้อมกับไลบรารี่เพื่อให้เข้าใจได้ดีขึ้นหากคุณกำลังวางแผนที่จะปรับปรุงหรือเปลี่ยนแปลง (การรีแมปคีย์ไปยังเลย์เอาต์ต่างๆ) ร่างสุดท้าย นอกจากนี้คุณยังสามารถรับรายการสแกนโค้ด PS/2 ทั้งหมดจากไลบรารีได้โดยเปิดไฟล์ 'PS2KeyAdvanced.h' หรือ 'PS2KeyCode.h' จาก '\Documents\Arduino\libraries\PS2KeyAdvanced\src\'
- "Status Bits" หมายถึงคีย์ตัวปรับแต่ง (Ctrl, Alt, Windows, Shift/Caps) และคุณจะเห็นว่าด้วยคีย์ตัวปรับแต่งเพิ่มเติมแต่ละคีย์ ค่านี้จะเปลี่ยนไปในขณะที่ "โค้ด" หลักของคีย์ปกติ (ไม่ใช่ตัวปรับแต่ง) จะไม่เปลี่ยนแปลง แต่ในการร่างขั้นสุดท้าย ฉันได้ละเลยวิธีนี้และนำปุ่มตัวปรับแต่งเหล่านี้ไปใช้ด้วยการกดแป้นอย่างง่าย (คุณจะเห็นว่าปุ่มตัวปรับแต่งเหล่านี้ยังมีรหัสสแกน "สร้าง" และ "แตก" โดยไม่ขึ้นกับปุ่มปกติไม่ว่าจะกดหลายปุ่มหรือไม่ก็ตาม) เพราะมันทำให้ทุกอย่างง่ายขึ้นด้วยโปรโตคอล USB-HID
ขั้นตอนที่ 3: ตัวอย่างการแปลง PS/2 เป็น USB
ก่อนอัปเดต Atmega8U2 หรือ 16U2 (UNO Rev3) เพื่อระบุ Arduino ของเราเป็นแป้นพิมพ์ USB เราควรตรวจสอบให้แน่ใจว่าสิ่งที่แปลงทั้งหมดทำงานอย่างถูกต้องและร่างสุดท้ายขั้นสุดท้ายถูกอัปโหลด มิฉะนั้นจะเป็นความเจ็บปวดอย่างมากในการเขียนทับ เฟิร์มแวร์ครั้งแล้วครั้งเล่าระหว่างไฟล์ฐานสิบหกดั้งเดิมและแป้นพิมพ์ USB เพื่อให้คุณสามารถอัปโหลดภาพร่างที่ถูกต้องได้ สิ่งนี้จะกลายเป็นจริงโดยเฉพาะอย่างยิ่งหากคุณไม่มีโปรแกรมเมอร์ภายนอกเช่น USBasp หรือ Arduino อื่นเพื่อใช้เป็น ISP ดังนั้น เราจะอัปโหลดเวอร์ชัน 'ดีบัก' ของภาพร่างสุดท้ายที่มีเอาต์พุตที่มนุษย์อ่านได้ (ผ่านจอภาพอนุกรม) เพื่อทดสอบสิ่งต่างๆ
ผลลัพธ์ที่คุณเห็นจะถูกจัดรูปแบบเช่นนี้เมื่อทุกคีย์ถูกปล่อย
00 00 00 00 00 00 00 00
นี่คือคำอธิบายพื้นฐานสำหรับผลลัพธ์ที่คาดหวัง
สำหรับการกดคีย์ตัวแก้ไขหลายตัวใหม่แต่ละครั้ง คุณควรขึ้นบรรทัดใหม่ด้วยค่าที่ต่างกันสำหรับ 'xx' ในที่สุดเมื่อคุณปล่อยคีย์ตัวปรับแต่งทั้งหมด 'xx' ควรกลายเป็น 00
xx 00 00 00 00 00 00 00
สำหรับการกดแป้นปกติหลายครั้ง (เช่น เราจะกดทั้งแป้นสมมุติ a, แป้น b และแป้น c ด้วยค่า 'xx', 'yy' และ 'zz' ตามลำดับ) คุณควรได้รับอย่างต่อเนื่อง (ไม่บังคับ) ขึ้นบรรทัดใหม่แบบนี้
00 00 xx ปปปป zz 00 00 00
เมื่อคุณปล่อยคีย์ b ผลลัพธ์ควรเปลี่ยนเป็น
00 00 xx 00 zz 00 00 00
และถ้าคุณกดปุ่มใหม่ d ด้วยค่า 'nn' โดยไม่ปล่อยคีย์ a หรือคีย์ b ผลลัพธ์ของคุณควรเปลี่ยนเป็น
00 00 xx nn zz 00 00 00
และสุดท้ายกลับมาที่สิ่งนี้เมื่อทุกคีย์ถูกปล่อย
00 00 00 00 00 00 00 00
และสุดท้ายถ้าคุณกด Caps Lock, Num Lock หรือ Scroll Lock คุณควรจะได้อะไรแบบนี้หลายบรรทัดพร้อมกัน
00 00 xx 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
หากทุกอย่างเกิดขึ้น แสดงว่าคุณพร้อมแล้วที่จะไปต่อ!
ขั้นตอนที่ 4: คำอธิบายทางเทคนิค
ถ้าคุณชอบคุณสามารถข้ามขั้นตอนนี้ได้ นี่เป็นเพียงคำอธิบายสำหรับผลลัพธ์ก่อนหน้า อาร์เรย์เอาต์พุต 8 ไบต์ที่คุณเห็นถูกจัดรูปแบบตาม fig.1 ด้านบน คุณสามารถเรียนรู้เพิ่มเติมเกี่ยวกับสิ่งนี้และวิธีเขียนไบต์สถานะคีย์ตัวแก้ไขจากวิกิเกี่ยวกับ USB-HID นี้ โดยทั่วไป สิ่งที่รหัสของฉันทำคือทุกครั้งที่มีการกดปุ่มใหม่ (โปรโตคอล PS/2 เรียกสิ่งนี้ว่า 'สร้าง') มันจะวนรอบ 6 ไบต์สุดท้ายของอาร์เรย์ที่ใช้สำหรับการกดแป้นปกติ และกรอกข้อมูลในครั้งแรก ไบต์ว่างที่พบด้วย 'HID scancode' ที่เกี่ยวข้อง (แสดงในรูปที่ 2 นอกจากนี้ คุณสามารถค้นหารายการทั้งหมดจาก PDF ที่แนบมาด้วย) สำหรับ 'PS/2 scancode' ที่ได้รับ และสุดท้ายเมื่อคีย์ที่เกี่ยวข้องถูกปล่อยออกมา (โปรโตคอล PS/2 เรียกสิ่งนี้ว่า 'ตัวแบ่ง') โค้ดจะวนรอบอาร์เรย์ไบต์ปัจจุบันและล้างเฉพาะไบต์ที่เกี่ยวข้องเท่านั้น
หากคุณติดตามมาจนถึงที่นี่ และหากคุณอ่านหน้าวิกิ คุณจะเห็นว่าวิธีนี้มีปัญหาเล็กน้อย โดยปกติเมื่อปล่อยคีย์ ในโปรโตคอล HID ไบต์ที่เหลือจะถูกจัดเรียงใหม่เพื่อกำจัดไบต์ว่าง ระหว่างไบต์ที่ไม่ว่างเปล่าที่เหลืออยู่ แต่ด้วยเหตุผลบางอย่าง ไม่ว่าฉันจะพยายามกี่วิธีก็ตาม ฉันก็ไม่สามารถทำให้มันทำงานตามที่ตั้งใจไว้ได้โดยไม่ตั้งใจล้างไบต์ที่ไม่ต้องการสำหรับปุ่มที่ถูกกดด้วย หากคุณสามารถปรับปรุงสิ่งนี้เพื่อให้ใช้งานได้โปรดแสดงความคิดเห็น แม้ว่าในตอนท้ายปัญหานี้จะไม่ส่งผลต่อการทำงานของแป้นพิมพ์ตราบใดที่ Arduino ยังคงลงทะเบียนทุกปุ่มที่กดโดยไม่คำนึงถึงลำดับการกด (ซึ่งไม่ส่งผลต่อการใช้งานจริง)
ขั้นตอนที่ 5: การอัปโหลด Final Sketch
ดังนั้นก่อนที่คุณจะอัปเดตเฟิร์มแวร์ของ Atmega8U2 หรือ 16U2 (UNO Rev3) ในที่สุดเพื่อระบุ Arduino ของเราเป็นแป้นพิมพ์ USB เราต้องอัปโหลด Final Sketch หลังจากที่คุณอัปโหลดสิ่งนี้ หากคุณไปที่จอภาพแบบอนุกรม คุณจะเห็นว่ามันพิมพ์ขยะโดยกดปุ่มใหม่ทุกปุ่ม นี่เป็นลางดีที่ทุกอย่างทำงานตามที่ตั้งใจไว้ และเราสามารถดำเนินการขั้นตอนสุดท้ายได้ เย้!!!
ขั้นตอนที่ 6: การอัปเดตเฟิร์มแวร์
ในที่สุด คุณสามารถอัปเดตเฟิร์มแวร์ของ Arduino เพื่อลงทะเบียนเป็นแป้นพิมพ์ USB สำหรับสิ่งนี้ฉันจะไม่ลงรายละเอียดมากนักเพราะจะทำให้คำแนะนำนี้ยาวเกินไป
- ทำตามคำแนะนำนี้จาก arduino.cc เกี่ยวกับ 'การอัปเดต Atmega8U2 และ 16U2 บน Uno หรือ Mega2560 โดยใช้ DFU' แต่แทนที่จะใช้ 'Arduino-usbserial-uno.hex' ให้ใช้ ' Arduino-keyboard-0.3.hex ' ที่แนบมา
- ใน FLIP อย่าลืมเลือกอุปกรณ์เป้าหมายเป็น Atmega8U2 หรือ 16U2 ขึ้นอยู่กับ Arduino ของคุณและจากการเลือกสื่อการสื่อสารให้เลือก USB และสุดท้ายโหลดไฟล์ hex ที่ถูกต้องก่อนที่จะเลือกรัน
- หากคุณพบข้อผิดพลาดของไดรเวอร์ ให้ไปที่ windows device manager และเลือกเพื่อค้นหาไดรเวอร์ที่ไม่รู้จักภายในไดเร็กทอรีการติดตั้งของ FLIP '\Program Files (x86)\Atmel\'
- หากคุณพบข้อผิดพลาดขณะอัปเดตเฟิร์มแวร์จาก FLIP หลายครั้ง ให้ปิด FLIP และเรียกใช้ 'Reset Preferences' จาก 'Start menu\FLIP\' จากนั้นรีสตาร์ท FLIP และทำตามขั้นตอนการกำหนดค่าก่อนที่จะลองอีกครั้ง ซึ่งมักจะได้ผลสำหรับฉัน
- หากคุณต้องการกู้คืน Arduino ของคุณให้กลับสู่สถานะเดิม เพียงทำตามคำแนะนำ arduino.cc ด้านบนในจดหมายโดยไม่ต้องใช้ไฟล์ hex นี้
ขั้นตอนที่ 7: สนุก……
เพลิดเพลินไปกับคีย์บอร์ด PS/2 เป็น USB ที่แปลงใหม่ของคุณ…. ป.ล. คำแนะนำนี้เขียนอย่างสมบูรณ์จากแป้นพิมพ์ PS / 2 ภายนอกที่เชื่อมต่อกับแล็ปท็อปของฉันผ่าน Arduino:)
แนะนำ:
อะแดปเตอร์ Arduino Nano เป็น Arduino Uno: 6 ขั้นตอน (พร้อมรูปภาพ)
อะแดปเตอร์ Arduino Nano เป็น Arduino Uno: Arduino Nano เป็นสมาชิกที่ดี ขนาดเล็ก และราคาถูกของตระกูล Arduino มันขึ้นอยู่กับชิป Atmega328 สิ่งที่ทำให้มีประสิทธิภาพเท่ากับ Arduino Uno พี่ชายที่ใหญ่ที่สุดของเขา แต่สามารถรับเงินน้อยกว่า ในอีเบย์ตอนนี้เวอร์ชั่นภาษาจีนสามารถข
อะแดปเตอร์ ZX Spectrum USB สำหรับ Raspberry Pi RetroPie Builds: 5 ขั้นตอน (พร้อมรูปภาพ)
อะแดปเตอร์ ZX Spectrum USB สำหรับ Raspberry Pi RetroPie Builds: RetroPie เป็นลินุกซ์ distro พิเศษที่ออกแบบมาโดยเฉพาะสำหรับการจำลองระบบวิดีโอเกมย้อนยุคบน Raspberry Pis และคอมพิวเตอร์บอร์ดเดี่ยวอื่นๆ ฉันต้องการใช้ RetroPie build อย่างเต็มที่มาระยะหนึ่งแล้ว และเมื่อฉันเห็น repro
อะแดปเตอร์ DSUB-15 เป็น USB สำหรับ Cobalt Flux DDR Pads: 5 ขั้นตอน
อะแดปเตอร์ DSUB-15 เป็น USB สำหรับ Cobalt Flux DDR Pads: เมื่อเร็ว ๆ นี้ฉันคุ้นเคยกับ DDR มากที่ร้านค้าและต้องการแผ่นรองของตัวเองเพื่อเล่นกับ Stepmania ที่บ้าน หลังจากซื้อเสื่อราคาถูกใน Amazon และไม่พอใจเลย ฉันพบแผ่น Cobalt Flux DDR บน OfferUp ในพื้นที่ของฉัน อย่างไรก็ตาม มันไม่ได้มาไว
อะแดปเตอร์ Arduino Atari: 8 ขั้นตอน (พร้อมรูปภาพ)
อะแดปเตอร์ Arduino Atari: เมื่อเร็ว ๆ นี้ฉันสนใจเทคโนโลยีคอมพิวเตอร์โบราณมากขึ้นเรื่อย ๆ หนึ่งในเทคโนโลยีคลาสสิกที่น่าสนใจและมีอิทธิพลมากที่สุดคือ Atari 2600 ซึ่งเปิดตัวครั้งแรกในปี 1977 น่าเสียดายที่ฉันไม่เคยมีโอกาสได้เล่นสิ่งนี้ในฐานะนักเ
อะแดปเตอร์ 12v เป็น USB หม้อแปลง 12v ถึง 5v (เหมาะสำหรับรถยนต์): 6 ขั้นตอน
ตัวแปลง 12v เป็น USB หม้อแปลง 12v ถึง 5v (เหมาะสำหรับรถยนต์): นี่จะแสดงวิธีการสร้างอะแดปเตอร์ 12v เป็น USB (5v) การใช้งานที่ชัดเจนที่สุดคือสำหรับอะแดปเตอร์ในรถยนต์ 12v แต่ทุกที่ที่คุณมี 12v คุณสามารถใช้มันได้! หากคุณต้องการ 5v สำหรับสิ่งอื่นที่ไม่ใช่ USB เพียงข้ามขั้นตอนเกี่ยวกับการเพิ่มพอร์ต USB