Title: อยากได้ input 64 ตัวครับ Post by: s_engine 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 มันจะใช้เวลาเยอะไหมครับ กำการอ่าน อินพุตทุกตัวแล้วเช็คว่าตัวไหน มีอินพุตเข้ามาและเป็นขาใด ขอบคุณครับ Title: Re: อยากได้ input 64 ตัวครับ Post by: smitdh 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) เพื่อเป็นการตรวจสอบการเปลี่ยนสถานะโลจิกก็ได้ครับ Title: Re: อยากได้ input 64 ตัวครับ Post by: s_engine 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 ที่ผมก็ไม่มีตัวอย่างด้วย มันหาซื้อยากเหลือเกิน จะส่งงานไปกัดปริ้นแล้วครับ ขอบคุณมากครับ Title: Re: อยากได้ input 64 ตัวครับ Post by: smitdh 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 Title: Re: อยากได้ input 64 ตัวครับ Post by: s_engine on August 22, 2009, 09:52:14 AM ท่านครับ ถึงท่านจะไม่เคยเล่น pcf8574 แต่น่าจะแนะนำผมได้ ผมจะทำบอร์ด เป็นบอร์ดๆไปเลย 1 บอร์ดก็
8 i/o แต่ติดนิดนึงครับ สัญญาณ i2c นี่ ถ้าเราจะพุลอัพR10k ไว้ทุกบอร์ดมันจะมีปัญหาอะไรไหมครับ แต่ผมได้ทำ พุลอัพ ตรงบอร์ดไมโครแล้วด้วย ผมอยากให้บอร์ดนี้คนอื่นสามารถ นำไปใช้ได้ด้วยครับ ขอบคุณครับ Title: Re: อยากได้ input 64 ตัวครับ Post by: smitdh on August 24, 2009, 07:23:23 PM - การต่อ R Pullup มักจะต่อไว้ที่ตัวแรก (หรือบนบอร์ดไมโครเป็นตัวแรก) กับตัวสุดท้ายครับ
เพราะถ้าต่อทุกบอร์ด จะทำให้ความต้านทานรวม ต่ำลงไปเรื่อยๆ ครับ จะได้ไม่ต้องคอยระวัง - การใช้งาน I2C มักจะนิยมใช้ติดต่อกันภายในบอร์ด หรือคนละบอร์ดแต่อยู่ใกล้ๆกัน เท่านั้นครับ หากต่อไปไกลๆ ก็ต้องใช้พวก Opto ช่วย (http://www.thaimicrotron.com/forumpic/I2C EXtenders.gif) ดูรายละเอียด เพิ่มเติมหน้า 46 http://www.standardics.nxp.com/support/documents/i2c/pdf/an10216.pdf Title: Re: อยากได้ input 64 ตัวครับ Post by: s_engine on September 07, 2009, 08:54:14 AM ขอบคุณครับ ถ้างั้น ผมก็ทำ จั้มเปอร์ R pullup ไว้ ครับ บอร์ดแต่ละบอร์ด จะอยู่ใกล้กันทั้งหมด io จะใช้opto อีกทีเพราะ input ไม่ใช่ 5v ตอนนี้ปวดหัวกับ usb เลยไม่ได้ ออกแบบ บอร์ด เลย ไหนกะ โค้ด I2C อีก
เจอแต่ โค้ดที่ทดลองแต่ตัวเดียว หาก ต่อหลายตัว ไม่รุ้ จะอินนิเชียว ยังไง ขอบคุณครับ |