มาเล่น Playstation joystick กันดีกว่า ตอนที่ 3
เสร็จแล้วครับๆ เดินหาขั้วต่ออยู่นานครับ พอดีไปเจอขั้วเปลี่ยนจาก ขั้ว PLAYSTATION เป็น DB25 ตัวผู้เลยรอดตัวไปครับ นึกว่าจะหาไม่ได้ซะแล้ว ซึ่งมา 100 บาท แบบไม่ทันได้ต่อครับ ดีใจมากไปหน่อยเลยลืมต่อ เอาครับมาว่ากันเลยครับ เนื่องจากการต่อ มีไม่กี่สายผมจะไม่เขียน SCHEMATIC นะครับ แต่จะบอกว่าขั้วอะไรต่อกับอะไรนะครับ ในที่นี้ผมทดลองใช้ร่วมกับ MPLAB-ICD ใช้ chip 16F877 นะครับ ที่ความถี่ 4 MHz ครับ แต่เอาไปดัดแปลงเป็น chip ตัวเล็กลงได้ครับ เพราะไม่ได้ใช้ feature พิเศษของ 16F877 เลยครับ เอาครับมาดูกัน
DATA ต่อกับ PORTB,0 ที่ port นี้ต้องใช้ R 10K pullup นะครับ- COMMAND ต่อกับ PORTB,1
- Not used ไม่ใช้
- GROUND ต่อกับ ground
- POWER ต่อกับ Vcc 5 volts ในสเป็นใช้ 3.2 volts แต่ใช้ 5 Volts ได้คงเป็นพวก CMOS
- SELECT ต่อกับ PORTB,2
- CLOCK ต่อกับ PORTB,3
- Not used ไม่ใช้
- 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 ไปเลยครับ