มาเล่น Playstation joystick กันดีกว่า ตอนที่ 3

เสร็จแล้วครับๆ เดินหาขั้วต่ออยู่นานครับ พอดีไปเจอขั้วเปลี่ยนจาก ขั้ว PLAYSTATION เป็น DB25 ตัวผู้เลยรอดตัวไปครับ นึกว่าจะหาไม่ได้ซะแล้ว ซึ่งมา 100 บาท แบบไม่ทันได้ต่อครับ ดีใจมากไปหน่อยเลยลืมต่อ เอาครับมาว่ากันเลยครับ เนื่องจากการต่อ มีไม่กี่สายผมจะไม่เขียน SCHEMATIC นะครับ แต่จะบอกว่าขั้วอะไรต่อกับอะไรนะครับ ในที่นี้ผมทดลองใช้ร่วมกับ MPLAB-ICD ใช้ chip 16F877 นะครับ ที่ความถี่ 4 MHz ครับ แต่เอาไปดัดแปลงเป็น chip ตัวเล็กลงได้ครับ เพราะไม่ได้ใช้ feature พิเศษของ 16F877 เลยครับ เอาครับมาดูกัน

  1. DATA ต่อกับ PORTB,0 ที่ port นี้ต้องใช้ R 10K pullup นะครับ
  2. COMMAND ต่อกับ PORTB,1
  3. Not used ไม่ใช้
  4. GROUND ต่อกับ ground
  5. POWER ต่อกับ Vcc 5 volts ในสเป็นใช้ 3.2 volts แต่ใช้ 5 Volts ได้คงเป็นพวก CMOS
  6. SELECT ต่อกับ PORTB,2
  7. CLOCK ต่อกับ PORTB,3
  8. Not used ไม่ใช้
  9. ACKNOWLEDGE ต่อกับ PORTB,4

คราวนี้เรามาทบทวนรูปแบบข้อมูลก่อนครับ ข้อมูลที่รับได้จะเป็น 41h,5ah,SW1,SW2 ซึ่ง SW1,SW2 คือข้อมูลสถานะของปุ่มบน joystick

 

ในโปรแกรมผมจะทำการเก็บข้อมูลใน Buffer ที่ตำแหน่ง 25h-28h จากรูปเป็นข้อมูลที่รับได้ขณะที่วนลูป โดยยังไม่กด Key ใดๆ หลังจาก break MPLAB-ICD จะเห็นว่าจะได้ข้อมูลคือ 41h,5Ah,FFh,FFh

หลังจากได้ทำการลองกด key UP จะได้ข้อมูลเป็น 41h,5Ah,EFh,FFh ก็หมายความว่าถ้า ปุ่มไหนถูกกด บิตที่แสดงสถานะของปุ่มนั้นจะเป็น 0 ครับ ถ้าไม่ถูกกดสถานะจะเป็น 1

โปรแกรมที่ผมเขียนจะไม่มีอะไรมากมายครับอ่านสถานะปุ่มที่กดแล้วเอาไปเก็บไว้ใน buffer ครับ ไม่อยากเขียนให้มันซับซ้อนมากครับ เดี๋ยวเอาไปใช้ต่อจะงงปล่าวๆ เขียนไว้แค่นี้แหล่ะครับ เอาไปใช้ต่อง่ายดี เอาครับ เอา source code ไปเลยครับ

SOURCE CODE psx.asm

 

BACK