"Skills, Knowledge, Abilities, and Experiences

are only useful....

If you are at the right place "

นาๆ (ไร้) สาระ

เขียนโปรแกรมอ่านค่า Keyboard ด้วย MCS-51

MCS-51 Controller Board

สมัยทำงานอยู่โรงงานอิเล็กโทรนิกส์แห่งหนึ่ง(เมื่อชาติที่แล้ว5+) หน้าที่หลักๆ คือควบคุมกระบวนการผลิตตั้งแต่รับวัตถุดิบเข้าโรงงานยันส่งออก งานหลักๆ ส่วนหนึ่งที่รับผิดชอบก็คือการแก้ปัญหาของเสียของผลิตภันณ์ที่เกิดขึ้นในกระบวนการผลิต (พูดให้ชัดก็คือเป็นช่างซ่อมแผงวงจรว่างั้นเถอะ5+) สาเหตุของของเสียที่เกิดขึ้นจะถูกนำไปแจกแจงกระทบเข้ากับตัวเลขสรุปของไลน์การผลิตแล้วนำเสนอเป็นรายงานต่อไป

ในแต่ละกระบวนการผลิตจะมีการเก็บข้อมูล เช่นจำนวนที่ผลิตได้ในแต่ละชั่วโมง จำนวนของดีและของเสียที่เกิดขึ้น ข้อมูลทั้งหลายจะถูกบันทึกลงในใบบันทึกหรือที่มักเรียกกันว่าใบเช็คชีต (Check sheet) หลังจากนั้นข้อมูลเหล่านี้ก็จะมีหัวหน้างานในแต่ละส่วนนำไปสรุปผลเพื่อทำรายงานและนำไปนำเสนอในการประชุมผลผลิตประจำสัปดาห์ต่อไป ในส่วนความรับผิดชอบของผมคือการนำข้อมูลของเสียต่างๆ มาวิเคราะห์หาสาเหตุว่าของเสียเหล่านั้นเกิดจากกระบวนการผลิต หรือว่าเกิดจากวัตถุดิบที่ไม่ได้คุณภาพ หรืออาจจะเกิดจากการออกแบบของตัวผลิตภันณ์เองที่ไม่ดีพอ แล้วนำรายงานเหล่านี้ไปรายงานในที่ประชุม ผลของข้อมูลจากการนำเสนอของแต่ละฝ่ายจะได้รับทั้งคำด่าและคำชมเชยจากผู้บริหาร (จริงๆไม่ค่อยได้ยินคำชมนะ ส่วนมากจะโดนด่าเสียส่วนใหญ่5+) แต่ผมก็โชคดีกว่าแผนกอื่นๆ หน่อยที่แทบจะไม่เคยโดนผู้บริหารตำหนิ เพราะงานของผมเป็นเหมือนการวิเคราะห์หาสาเหตุมากกว่า แล้วรายงานให้ผู้บริหารทราบว่าใครเป็นผู้กระทำผิด

สิ่งที่น่าเบื่อของการทำงานอย่างหนึ่งก็คือทุกๆ เช้าเมื่อเริ่มงานต้องรีบไปเก็บใบเช็คชีตจากส่วนงานที่เกี่ยวข้องแล้วนำมาสรุปซึ่งเสียเวลามาก และโดยเฉพาะยิ่งวันไหนมันตรงกับวันที่จะต้องเอาข้อมูลสรุปเข้าห้องประชุมตอน 10 โมงเช้า เช้านั้นแทบจะไม่ต้องทำไรกัน หัวหน้าแต่ละส่วนจะสาละวนจนตัวสั่นกับการเตรียมตัวขึ้นเขียง

สมัยนั้นในโรงงานไม่ได้มีระบบ Visual Control แบบไฮเทคอะไรทั้งนั้นนะครับ อย่างเช่นพวกป้ายไฟ หรือจอมอนิเตอร์ที่จะคอยรายงานว่า ณ.เวลานี้ผลิตชิ้นงานไปแล้วได้กี่ชิ้น, เป้าหมายเท่าไหร่, มีของเสียเกิดขึ้นเท่าไหร่ หรือข้อมูลอื่นๆ ทุกอย่างถูกบันทึกด้วยมือหมดครับ จะดีหน่อยก็อาจจะมีตัวกดมือ(Counter) แล้วก็คอยดูนาฬิกาว่าเมื่อครบ ชม.แล้วก็นำตัวเลขที่่อ่านได้จาก counter มาบันทึกลงกระดาษเช็คชีตอีกทีหนึ่ง

แต่ก็เคยไปดูงานที่โรงงานของบริษัทแม่ที่ต่างประเทศ โรงงานที่โน่นเขามีระบบ Visual Control หลายๆ อย่างที่ไฮเทค (แต่โรงงานที่ไทยไม่มีไรพวกนั้นเลย ทำไมนะ? ได้แต่สงสัย) ผมจึงมักชอบคิดว่าจะทำอย่างไรที่จะปรับปรุงกระบวนการทำงานให้มันทำงานได้ง่ายและประหยัดเวลาอยู่เสมอๆ

ด้วยตอนที่สมัยเรียน ปวส.ผมเคยทำโครงงานอิเล็กทรอนิกส์ที่ต้องเขียนโปรแกรมควบคุมด้วย Z80 Microprocessor ผมจึงมีไอเดียว่าคงจะดีมั๊ยหากเราเปลี่ยนระบบการเก็บข้อมูลลงบนกระดาษเช็คชีตมาเป็นระบบอัตโนมัติด้วยคอมพิวเตอร์และระบบเครือข่าย

ไอเดียง่ายๆ ตอนนั้นคืออยากทำระบบ Visual Control ด้วยการมีป้ายไฟที่คอยรายงานข้อมูลการผลิตในไลน์ผลิตแบบเรียลไทม์ และมี Terminal ปุ่มกดที่คอยเก็บบันทึกข้อมูลแล้วส่งข้อมูลไปยังเครื่องคอมพิวเตอร์ส่วนกลาง

ไอเดียนี้หากทำจริงผมคงทำไม่ได้หรอกครับ เพราะมันใหญ่เกินความสามารถและด้วยงานที่ทำก็ไม่มีเวลาให้ทำมันได้ และผู้บริหารก็ไม่ได้เห็นด้วยกับโครงการนี้ (เคยนำเสนอแต่เขากลับมองว่าไม่จำเป็น ณ.เวลานั้น)

แต่ด้วยส่วนตัวที่ชอบเล่นพวก Microcontroller ผมก็เลยลองทำมันขึ้นมาเองกับบางส่วน คือเฉพาะส่วน Terminal ที่ใช้คีย์ข้อมูล ไอเดียตอนนั้นคือมันน่าจะดีหากเราเอาคียร์บอร์ดแป้นพิมพ์ของเครื่องคอมพิวเตอร์ที่มีใช้อยู่ทั่วไปและราคาไม่แพงมาต่อเข้ากับ MCS-51 Controller Board แล้วเขียนโปแกรมให้มันอ่านค่าคีย์แล้วแสดงผลผ่านจอ LCD Dot Matrix (หมายเหตุ: อุปกรณ์อิเล็กทรอนิกส์หลายๆ อย่างมีใช้อยู่แล้วในโรงงาน เพราะเป็นโรงงานผลิตอุปกรณ์สื่อสาร เลยหยิบโน่นนี่นั่นมาเล่นได้ง่ายโดยไม่ต้องซื้อ) แล้วข้อมูลเบื้องต้นที่ถูกประมวลผลด้วย Terminal นี้จะถูกดึงข้อมูลด้วยเครื่อง PC ส่วนกลางไปประมวลผลแล้วส่งขึ้น Visual Display Board อีกทีหนึ่ง (ในภาคส่วนตรงนี้ผมไม่ได้คิดจะทำจริงเพราะใหญ่เกินความสามารถที่จะทำได้ แต่คิดว่าควรจ้างทีมงานบริษัทภายนอกรับไปทำอีกทีหนึ่ง และเคยได้เอาไอเดียนี้ไปนั่งคุยกับบริษัทที่รับทำงานพวกนี้ พวกเขาสนใจแต่ก็ไม่ได้ไปต่อ แต่อยู่มาวันหนึ่งผมได้เห็นผลิตภัณฑ์ป้ายไฟนี้ออกวางขายในท้องตลาด ซึ่งมันอาจจะบังเอิญหรือไม่ก็ตามแต่ผมเชื่อว่ามันเกิดจากไอเดียส่วนหนึ่งที่ผมได้เคยไปนำเสนอเขาไว้ (มั๊ง? 55+))

รูปภาพด้านซ้ายมือที่ผมนำมาแปะไว้ให้ดู เป็นส่วนหนึ่งของโปรแกรมภาษา Assembly ที่ผมได้เขียนขึ้น ในสมัยของผม (ช่วงเวลานั้นยังไม่มี Raspberry Pi หรือ Arduino หรือบอร์ดอื่นๆ มากมายเหมือนเดี๋ยวนี้นะครับ สมัยนั้นที่นิยมกันก็ Z80, MCS-51 และที่เพิ่งเริ่มนิยมก็น่าจะเป็นพวก PIC และภาษาที่ใช้เขียนโปรแกรมก็จะเริ่มนิยมเขียนเป็นภาษา C แต่สำหรับผมถนัดพวก Assembly ของ Z80 และ MCS-51 มากกว่า (โบราณโคตรๆ55+)

การทำงานของ Terminal ที่ผมทำขึ้นตอนนั้นผมใช้คีย์บอร์ดแป้นพิมพ์ของคอมพิวเตอร์แบบ PS/2 แล้วต้องทำวงจร Interface เพื่อรับข้อมูลอนุกรมและสัญญาณ Clock ของคีย์บอร์ดมาแปลงเป็น parallel ด้วย IC Shift Register แล้วจึงส่งสัญญานไป Interrup MCU แล้วให้โปแกรมย่อยมาอ่านค่าเข้าไปแล้วแปลงค่าคีย์เหล่านั้นเป็นรหัส ASCII Code แล้วแสดงเก็บไว้ที่ RAM ที่จองหน่วยความจำไว้ส่วนหนึ่ง และพร้อมกันนั้นก็ส่งข้อมูลส่วนหนึ่งขึ้นไปแสดงผลยังจอ LCD

แต่หากปุ่มที่กดไม่ใช้ตัวอักษรแต่เป็นแป้นควบคุมต่างๆ เช่น Return, Ctrl, Shift หรือ F1-F12 ก็จะมีการเรียกโปรแกรมย่อยเพื่อสั่งงานอื่นๆ อีกทีหนึ่ง ทั้งหมดนี้คืองานหลักๆ ของ MCU หลังจากนั้นหากเครื่อง PC ส่วนกลางมีการร้องขอข้อมูลมาก็จะทำการส่งข้อมูลกลับไปให้ด้วย RS-485 

อย่างไรก็ตามโปรเจคนี้ก็สำเร็จแค่บางส่วนของ Terminal เท่านั้นและก็ไม่ได้ทำต่อเนื่องจากเวลาและงานที่เปลี่ยนไปจนต้องเก็บลงโลงไป55+

Related articles

- Chatchaval -

" A MAN OF FEW WORDS "

เรื่อยๆ มาเรียงๆ นกบินเฉียงไปทั้งหมู่ คนเดียวมาไร้คู่เหมือนพี่อยู่เพียงเอกา ร่ำๆ ใจรอนๆ อกสะท้อนอ่อนใจข้า ดวงใจใยหนีหน้า โถแก้วตามาหมางเมิน

" hoXBot "

My personal favorite
Sponsor

SAFE MASK

โรงงานผลิตหน้ากากอนามัยทางการแพทย์ และหน้ากากป้องกันฝุ่น
Clips

Get in Touch !