© 2020,จารุต บุศราทิจ
จากบทความตอนที่แล้วเราได้ฝึกฝนการติดตั้งเครื่องมือและลองใช้งานบอร์ดรุ่น ET-STM32F103 ไปเรียบร้อยแล้ว ...เอาล่ะ จริง ๆ ผมอยากบอกว่า ผมตั้งใจจบที่การทำเครื่องอ่านอุณหภูมิและแสดงผลบนจอแอลซีดี ดังนั้น ตอนนี้เรามาฝึกอีกหน่อยเรื่องการอ่านข้อมูลแบบสัญญาณแอนาล็อก ... แต่จริง ๆ ข้ามไปได้แหละครับ เพราะไม่ได้เอามาเกี่ยวดองอะไรกับเป้าหมายสักเท่าไร ... ก็บอกแล้วฝึกฝนจร้า ฝึกฝน มาเริ่มกันเลยเนอะ
ปกติแล้วนักคอมพิวเตอร์เรามักรู้จักและคุ้นเคยกับข้อมูลดิจิทัล หรือสัญญาณดิจิทัล ประเด็นคือ ข้อมูลในชีวิตจริงมีความละเอียดอ่อนมากมาก ดังนั้น เพื่อให้ง่ายต่อตัวเราเองเข้าใจได้ เขาเลยคิดค้นวิธีการแปลงข้อมูลที่ละเอียด ๆ เหล่านั้นให้กลายเป็นค่าตัวเลขจำนวนเต็ม เช่น มองแรงดันไฟฟ้า 0-5 VDC (ลองใช้มัลติมิเตอร์แบบเข็มวัดแรงดันดูครับจะเห็นว่ามันไม่เป๊ะ มันนิด ๆ หน่อย ๆ ตลอด) ให้เป็นอีกแบบหนึ่ง คือ มองว่ามันเป็นค่า 0-255 (สมมุติว่าเครื่องแปลงสารของเราแปลงได้ละเอียดถึง 8 บิต) ก็เทียบเคียงกันว่า 0 แทน 0VDC และ 255 แทน 5VDC ตรงกลางก็ปรับสัดส่วนกันเอาน่อ
คำถามก็มาตรงนี้ล่ะ แล้ว ET-STM32F103 เขาละเอียดเท่าไร ... อ้อ บอกเลยไม่เยอะครับแค่ 12 บิต หรือ 212 หรือ 4,096 ค่าเท่านั้นเอง หมายความว่าแรงดัน 0VDC ก็มองเป็นค่า 0 แล้ว 5VDC ก็มองว่าเป็น 4,095 (งงไหมว่าทำไมไม่เป็น 4,096 ... ไม่มีอะไรในกอไผ่ครับ แปลงได้ 4,96 ค่า นั่นเขารวมค่า 0 ด้วย ดังนั้น ค่าสูงสุดเลยเป็น 4,095 ไปโดยประการนี้แหละจร้า) ที่บอกว่าไม่เยอะเท่าไรเพราะเดี๋ยวนี้มีเยอะกว่านี้น่ะครับ ... แล้วที่สำคัญคือ STM32F104 ดันเตรียมไว้ให้ใช้ 12 ช่องสัญญาณ อืม ... เราหยิ่ง ใช้ตัวเดียวพอ เนอะ
จากภาพจะเห็นว่าขาเชื่อมต่อกับวงจรคือขา PA1 ดังนั้น ในการเขียนโปรแกรมเราจึงต้องเลือกใช้คำสั่ง readAnalog() เนื่องจากข้อมูลที่ได้เป็นสัญญาณแบบแอนล็อก
วงจรแสดงผลมีการใช้บัฟเฟอร์เป็นตัวกลางระหว่างพอร์ตของ STM32F104 กับวงจรแอลอีดี ซึ่งผมชอบวิธีนี้มากเลยครับ เพราะเกิดปัญหาเรื่องแรงดันหรือแรงดันย้อนกลับ หรือมีการดึงกระแสมากเกินไป ซึ่งล้วนแต่สร้างปัญหากับไอซีของเราได้ การใช้บัฟเฟอร์มาคั่น ความซวยก็ตกกับบัฟเฟอร์แทน (LoL) และการแสดงผลเนื่องจากเรามีหน้าที่ส่งสัญญาณดิจิทัลออกที่ขา PB8 ถึง PB15 เราเลยต้องใช้คำสั่ง writeDigital() และการส่งสัญญาณดิจิทัล 0 เป็นการการดับหลอดแอลอีดี และการส่งสัญญาณดิจิทัล 1 เป็นการขับให้หลอดแอลอีดีสว่าง
ประมวลผลอะไร ... ประมวลผลว่า ทำไงน้อ ไอ้เจ้า 4,096 ต่านั้นจะมาถูกเปลี่ยนรูปแบบการแสดงผลได้อย่างไร คือ เราอยากได้ว่า ค่าน้อย ๆ หลอดไม่ต้องติดเลย ค่ามากๆ ยันมากสุดๆๆๆๆๆๆ หลอดติดทุกดวง แล้วครงกลางก็ให้หลอดติดจำนวนดวงเท่ากับความเหมาะสมไง (ตอบเหมือนคิดออก...)
:----: บทความก่อนหน้านี้ :----: บทความตอนถัดไป (next) :----: