Pages: [1]   Go Down
Print
Author Topic: อยากได้ input 64 ตัวครับ  (Read 12034 times)
0 Members and 6 Guests are viewing this topic.
s_engine
Sr. Member
****
Offline Offline

Posts: 187


« on: August 10, 2009, 03:58:30 PM »

ผมอยากได้ อินพุต 64 ตัว ใช้กับ pic ครับ ตอนนี้กำลังมอง pcf8574 อยู่ โดยใช้ 8 ตัว ก็จะได้ อินพุต 64 ตัว พอดี แต่... 
การสื่อสารแบบ I2C ต้องส่งคำสั่ง control word + address เพื่อ ขอ อ่าน อินพุต การสั่งอ่าน อยู่ตลอดเวลา น่าจะไม่ดีแน่ ถ้าใช้ขา อินเตอร์รัพท์ ของ pcf8574 ซึ่งจะมีตัวละ 1 ขา จับรวบเข้าด้วยกัน แล้ว ส่งให้ PIC เป็นinterrupt ext มีตั้ง 8 ตัว ก็ไม่รุ้อีกว่าตัวไหนมี อินพุตเข้ามา ถ้า เราสั่งอ่านทั้ง 8 ตัว ในช่วงเกิด interrupt มันจะใช้เวลาเยอะไหมครับ กำการอ่าน อินพุตทุกตัวแล้วเช็คว่าตัวไหน มีอินพุตเข้ามาและเป็นขาใด

ขอบคุณครับ
Logged
smitdh
Administrator
Hero Member
*****
Offline Offline

Gender: Male
Posts: 381


อาจารย์ที่ปรึกษา


« Reply #1 on: August 10, 2009, 05:40:47 PM »

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

ผมเองก็ไม่ค่อยได้ใช้ pcf8574 ครับแต่ดูจาก datasheet แล้ว interrupt ของ pcf8574 เป็น Open-drain interrupt output
ซึ่งเราก็สามารถ นำขา INT ของ pcf8574  มาต่อรวมกันได้โดยต่อ R Pullup ไว้  แล้วนำมาต่อกับขา interrupt ext  (RB0)
แล้วใน interrupt sevice จึงค่อยทำการอ่านค่าจาก pcf8574  มาทีละตัว(ผมไม่ทราบว่าสามารถจะเจาะจง ตัวที่เกิด interrupt  ได้ไหม)

- หรือเราอาจจะเลือกใช้การอ่านแบบแมตทริกซ์ โดยเลือกใช้ MCU 40 PIN พวกนี้จะมีพอร์ตเต็ม 8 bit อยู่ 3 พอร์ต B,C,D เช่นใช้ พอร์ต C,D (พอร์ต B ขาRB6,RB7 เก็บไว้สำหรับ ขาโปรแกรม) ก็จะได้ input = 8x8 = 64 input ซึ่งการใช้งานก็คล้ายกับการอ่าน Keyboard แต่เราใช้พวก opto อย่าง PC817 แทนสวิทช์เท่านั้น  การแสกนโดยให้พอร์ตหนึ่งเป็น อินพุต และอีกพอร์ตหนึ่งเป็นเอาต์พุต เวลาตรวจสอบก็ แค่อ่าน อินพุตเข้ามา ว่าเป็น 0xF หรือไม่ ถ้าไม่ก็แสดงว่ามีอินพุตเข้ามาแล้ว ค่อยทำการครวจสอบว่าเป็น Column/Row ไหนอีกที
- แต่ก็ต้องมีการอ่านค่าอินพุตแบบ Polling อยู่ดี
- อาจจะใข้ Timer กำนดระยะเวลาการ Polling ก็ได้ครับ

- หากต้องการให้เป็นแบบ interrupt ที่อินพุตก็ให้ต่อ diode ไปยังขา interrupt ext  (RB0) เพื่อเป็นการตรวจสอบการเปลี่ยนสถานะโลจิกก็ได้ครับ
Logged
s_engine
Sr. Member
****
Offline Offline

Posts: 187


« Reply #2 on: August 14, 2009, 08:27:46 AM »

หายไปนาน เลย กระผม
ครับ ใช้อินพุตระยะไกล แล้วก็มีชุด isolate อีกทีครับ ถ้าทำแบบ สแกน ตลอดเวลา มันจะทำให้ pic ทำงานหนักไปไหมครับ ผมต้องการแบบมี อินพุตเข้ามาถึงจะทำงาน ประมาณนี้ อะครับ
ผมเห็น ของคนไทยที่เขาทำขาย เขาระบุ ว่าต่อได้ 8 ชุด โดยกำหนดแอดเดรสที่ต่างกันทางฮาร์ดแวร์
และขา int pcf8574 ก็ต่อ ถึงกันหมด ผมไม่รู้ว่าถ้าเราจะเอามาใช้เป็น อินพุต ทั้งหมด มันจะทำงานได้ไหม

ขอแถมนอกเรื่องนิดครับ ท่าน
คือผมเขียน potel จะลอก footprint RJ11 จากท่านอะครับ พอไปดูของ จาก es ทำไมระยะขาห่างไม่เท่ากันอะครับ
อย่างเช่น 1 3 5 กับ 2 4 6 แล้วระยะจากรูใหญ่ กับขาที่1 3 5 ด้วย จาก ดาต้าชีส ของ es ที่ผมก็ไม่มีตัวอย่างด้วย มันหาซื้อยากเหลือเกิน จะส่งงานไปกัดปริ้นแล้วครับ

ขอบคุณมากครับ
Logged
smitdh
Administrator
Hero Member
*****
Offline Offline

Gender: Male
Posts: 381


อาจารย์ที่ปรึกษา


« Reply #3 on: August 14, 2009, 06:14:48 PM »

- ผมเคยใช้แล้วครับแบบ แบบแมตทริกซ์ + opto PC817 ใช้ทำเครื่องผสมปูน  สมัยก่อน pcf8574 ยังแพงอยู่ครับ ตัวละ 130 บาท 8ตัว ก็เป็นพัน แพงกว่า MCU อีก ผมก็เลยใช้ MCU 40 PIN ทำเป็นโมดูลรับค่าคีย์ โดยติดต่อกับตัวแม่แบบ network โดยใช้ RS485 แต่ละโมดูลมีแอดเดรสประจำตัว
- แต่ในสมัยนี้ pcf8574 ถูกลงแล้วครับ ตัวละประมาณ 50 บาท ก็สามารถใช้ได้สบายใจยิ่งขึ้น


RJ11 ให้เอามาจาก PCB ของ PICDEV40 ครับ
http://www.thaimicrotron.com/Project/Picdev40/PICDEV40_V1.zip
Logged
s_engine
Sr. Member
****
Offline Offline

Posts: 187


« Reply #4 on: August 22, 2009, 09:52:14 AM »

ท่านครับ ถึงท่านจะไม่เคยเล่น pcf8574 แต่น่าจะแนะนำผมได้ ผมจะทำบอร์ด เป็นบอร์ดๆไปเลย 1 บอร์ดก็
8 i/o  แต่ติดนิดนึงครับ สัญญาณ i2c นี่ ถ้าเราจะพุลอัพR10k ไว้ทุกบอร์ดมันจะมีปัญหาอะไรไหมครับ
แต่ผมได้ทำ พุลอัพ ตรงบอร์ดไมโครแล้วด้วย  ผมอยากให้บอร์ดนี้คนอื่นสามารถ นำไปใช้ได้ด้วยครับ
ขอบคุณครับ
Logged
smitdh
Administrator
Hero Member
*****
Offline Offline

Gender: Male
Posts: 381


อาจารย์ที่ปรึกษา


« Reply #5 on: August 24, 2009, 07:23:23 PM »

- การต่อ R Pullup มักจะต่อไว้ที่ตัวแรก (หรือบนบอร์ดไมโครเป็นตัวแรก) กับตัวสุดท้ายครับ
เพราะถ้าต่อทุกบอร์ด จะทำให้ความต้านทานรวม ต่ำลงไปเรื่อยๆ ครับ จะได้ไม่ต้องคอยระวัง

- การใช้งาน I2C มักจะนิยมใช้ติดต่อกันภายในบอร์ด หรือคนละบอร์ดแต่อยู่ใกล้ๆกัน เท่านั้นครับ
หากต่อไปไกลๆ ก็ต้องใช้พวก Opto ช่วย



ดูรายละเอียด เพิ่มเติมหน้า 46
http://www.standardics.nxp.com/support/documents/i2c/pdf/an10216.pdf
Logged
s_engine
Sr. Member
****
Offline Offline

Posts: 187


« Reply #6 on: September 07, 2009, 08:54:14 AM »

ขอบคุณครับ ถ้างั้น ผมก็ทำ จั้มเปอร์ R pullup ไว้ ครับ บอร์ดแต่ละบอร์ด จะอยู่ใกล้กันทั้งหมด io จะใช้opto อีกทีเพราะ input ไม่ใช่ 5v ตอนนี้ปวดหัวกับ usb เลยไม่ได้ ออกแบบ บอร์ด เลย ไหนกะ โค้ด I2C อีก
เจอแต่ โค้ดที่ทดลองแต่ตัวเดียว หาก ต่อหลายตัว ไม่รุ้ จะอินนิเชียว ยังไง
ขอบคุณครับ
Logged
Pages: [1]   Go Up
Print
 
Jump to: