มันขึ้นอยู่กับงานด้วยครับ ว่าเป็นงานประเภทไหน ผมจะสรุปแบบกว้างๆ นะครับ
1). ก่อนที่จะคิดขยาย I/O
ควรจะเลือกเปลี่ยนชิพดูก่อนครับ หากราคาชิพที่เพิ่มขึ้นคุ้มกับพอร์ตที่เพิ่ม ก็ควรจะใช้วิธีเปลี่ยนชิพดีกว่า เพราะคำสั่งพื้นๆ ก็จะเหมือนเดิม และการเปลี่ยนชิพที่ ใหญ่ขึ้น จะมักจะได้หน่วยความจำโปรแกรม ที่ใหญ่ขึ้นด้วยครับ การใช้ชิพตัวเล็กๆ แล้วมาขยาย I/O เพื่อควบคุมงานที่ซับซ้อน อาจจะต้องใช้หน่วยความจำโปรแกรม จำนวนมาก จะทำให้โค๊ดเต็มได้ครับ
2). แล้วอีกอย่างหนึ่งเกี่ยวกับ I/O ที่ใช้ควบคุมอุปกรณ์ไฟฟ้า เรามักจะใช้โลจิก 1 ในการไดร์ทรานซิสเตอร์ขนิด NPN หรือ IC ULN2803, ULN2003 เพื่อขับรีเลย์ อีกทีหนึ่ง ดังนั้น
เมื่อเริ่มจ่ายไฟหรือ MCU ถูกรีเซ็ต พอร์ตจะต้องถูกเคลียร์ เป็นโลจิก 0 เพื่อให้เอาต์พุตทั้งหมดหยุดทำงาน ตรงนี้สำคัญ เพราะมันจะรวนและควบคุมยาก ในช่วงนี้
3). อุปกรณ์ที่ใช้ขยาย I/O ก็มีทั้งแบบ
I2C และ
ชิพรีจิสเตอร์ ขึ้นอยู่กับวงจรที่เราออกแบบครับ เช่นถ้าในวงจรของเราใช้ RTC เช่น DS1307 ซึ่งเป็น BUS แบบ I2C หากเราใช้ขยาย I/O แบบ I2C โดยมีแอดเดรสที่ต่างกัน ก็จะทำให้ประยัดพอร์ตครับ
4). การออกแบบบอร์ด ทั้งแบบ I2C และ ชิพรีจิสเตอร์ Control BUS การเดินสายจะต้องให้ห่างจากเอาต์พุตที่เกินกระแสสูง และสัญญาณ clock อื่นๆ และจะต้องเดินสายให้สั้นที่สุด เพื่อป้องกันสัญญาณรบกวน
5). การขยาย I/O แบบ ชิพรีจิสเตอร์ มักจะใช้กับภาคแสดงผลเช่น 7 SEG ,LED แบบ matrix
ไม่ควรไปใช้ควบคุมโหลดพวกมอเตอร์หรือเครื่องจักรครับ เพราะการส่งข้อมูลให้ชิพรีจิสเตอร์ ไม่ชัวร์เหมือนแบบขนานครับ (เพราะสามารถตรวจสอบความถูกต้องโดยการอ่านพอร์ตนั้นกลับเข้ามา) ข้อมูลที่ส่งอาจผิดพลาดได้เนื่องจากสัญญาณรบกวน
6). หากทำเป็นการค้า ให้พิจารณาเรื่อง
ราคาและการหาของด้วย บางทีอุปกรณ์ที่ใช้ขยาย I/O มีราคาสูงกว่าไมโครฯ ซะอีก หรืออุปกรณ์หายาก ของหมดแล้วนานๆจะโผล่มาให้เห็นสักที
ึ7). หากอุปกรณ์หายาก หรือมีราคาแพง สิ่งที่มักจะลืมกันก็คือ
การนำไมโครหลายๆตัวมาทำเป็นโมดูลซะเลย โดยให้แต่ละโมดูลลิงค์กันด้วย UART โดยสร้าง
format และ Protocol ขึ้นมาในการติดต่อระหว่างโมดูล