การเขียนโปรแกรมประยุกต์ติดต่อกับไมโครคอนโทรลเลอร์ผ่านทาง Serial Port Computer

    ในกรณีที่เราต้องการโปรแกรมสักตัวหนึ่งที่เอาไว้ดูข้อมูลที่วิ่งเข้าออกทาง Serial Port Computer เราอาจจะเลือกใช้โปรแกรมที่ติดต้งมากับระบบปฏิบัิติการ Windows เช่น Hyper Terminal หรือจะเป็นโปรแกรมสำเร็จรูปที่มีให้ดาวน์โหลดทางอินเตอร์เนต เช่น Putty หรือโปรแกรมติดต่อสื่อสารอื่น ซึ่งทางหากต้องการแค่ดูข้อมูลเพียงอย่างเดียว ก็คงเลือกใช้โปรแกรมเหล่านี้ได้ แต่ ถ้าในกรณีงานของเรามีความต้องการ นำข้อมูลที่รับมาได้ ไปประมวลผลต่อ หรือต้องการนำข้อมูลที่รับเข้ามาไปเป็นเงื่อนไข ในการสั่งงานอะไรสักอย่าง นั่นแปลว่า โปรแกรมที่พูดมาเหล่านี้ ไม่สามารถตอบโจทย์ของเราได้ ดังนั้น เราจำเป็นจะต้องสร้างโปรแกรมขึ้นมาใหม่ เพื่อใช้ในการติดต่อสื่อสารกับพอร์ตอนุกรมของคอมพิวเตอร์ เพื่อรับค่าจากไมโครคอนโทรลเลอร์ แล้วนำไปแสดงผล ประมวลผลต่อไป   
    ในการจะทำเช่นนั้นได้ เราเองในฐานะเป็นผู้สร้าง จะต้องมีความรู้ความเข้าใจเกี่ยวกับการเขียนโปรแกรมด้วยภาษาคอมพิวเตอร์ ภาษาใด ภาษาหนึ่งเป็นอย่างน้อย ซึ่งในปัจจุบัน หากเป็นภาษาคอมพิวเตอร์หลายๆ ภาษา มีความสามารถในการติดต่อสื่อสารกับพอร์ตอนุกรมติดมาด้วยอยู่แล้ว ไม่ว่าจะเป็น MATLAB , Python , Visual Studio.NET , LABView เหล่านี้ ล้วนแต่มีความาสามารถในการติดต่อสื่อสารกับพอร์ตอนุกรม ที่เป็น ไลบรารีเสริม ติดตั้งมากับภาษาเหล่านี้อยู่แล้ว 
    
    ในตอนนี้ ผมจะมาแนะนำการติดต่อสือสารกับพอร์ตอนุกรมของคอมพิวเตอร์ด้วยภาษา C#.NET จริงๆ หลายๆภาษาก็ทำได้ แต่ C#.NET ก็ตอบโจทย์เกี่ยวกับ Windows Programming ได้ค่อนข้างครอบคลุม และยังเข้ากันได้กับ Windows เป็นอย่างดี หากใครสนใจที่จะเขียนด้วย Python ติดต่อกับไมโครฯ ผ่านทาง Serial Port Computer ผมก็มีแนะนำ ที่นี่ ลองเอาไปประยุกต์กันดู 

อันดับแรก คงต้องแนะนำให้รู้จักกับ Serial Port Computer กันก่อน ซึ่งในปัจจุบันอาจจะหายากแล้วในคอมพิวเตอร์บางเครื่อง คงจะมีพอร์ต USB เข้ามาแทน แต่ เราก็ยังสามารถที่จะใช้ USB to TTL cable ที่มีขายอยู่ทั่วไป มาทดแทนกันได้ ขอเพียงมี Driver รองรับติดตั้งไว้ที่เครื่องคอมพิวเตอร์ของเรา ก็จะทำให้ Windows มองเห็นเป็นเสมือนพอร์ตอนุกรฒ พอร์ตหนึ่งเหมือนกัน ส่วนการเขียนโปรแกรมติดต่อก็เหมือนๆกัน 

    ก่อนที่เราจะมาลงมือเขียนโปรแกรมนั้น ผมจะขอพูดถึงภาพรวม ไม่อิงวิชาการมากนัก เพื่อให้เกิดความเข้าใจก่อน โดยผมจะแบ่งงานออกเป็น 3 กลุ่มใหญ่ด้วยกัน ก็คือ
  1. งานทางฝั่ง PC  ได้แก่การเขียนโปรแกรมด้วย C#.NET ติดต่อกับ Serial Port
  2. งานทางฝั่ง MCU ด้วยการเปิดการใช้งาน USART module เพื่อรอรับ/ส่งข้อมูล
  3. รูปแบบของการสื่อสาร 
Null Modem without Handshaking

จากรูปจะเห็นว่า PC เราจะส่งข้อมูลออกทาง Tx (อ้างอิงตามสายแปลง USB to TTL cable)  ไปยังขา Rx ซึ่งเป็นขา USART module ทำหน้าที่รับข้อมูล และขา Tx ของไมโครคอนโทรลเลอร์ส่งข้อมูลกลับมาที่ Rx ที่ฝั่งคอมพิวเตอร์ และกราวด์ทั้งสองฝั่ง ต่อถึงกัน ซึ่งเป็นการต่อแบบ Null Modem without handshaking