Category: IoT

ARM Programming: ใช้งาน CRC module ของ STM32

microcontroller ตระกูล STM32 หลายๆ ตัวจะมีฮาร์ดแวร์สำหรับช่วยคำนวณค่า CRC มาด้วย (อยากรู้ว่า CRC คืออะไรดูที่นี่ Wikipedia Cyclic_redundancy_check) แต่ความสามารถของ CRC module ของ microcontroller แต่ละตัวจะมีไม่เท่ากัน ในรุ่นเล็กๆ อย่าง STM32F030 จะคำนวณได้เฉพาะ CRC32 เท่านั้น ไม่สามารถเปลี่ยนให้คำนวณค่า CRC แบบอื่นได้ ในขณะที่รุ่นใหญ่กว่าเช่น STM32F072 และ F3 F4 จะสามารถเปลี่ยนให้คำนวณค่า CRC แบบอื่นได้ เริ่มใช้ CRC module อย่างไร ถ้าเขียนโปรแกรมที่ใช้ HAL ก็ใช้ STM32CubeMX สร้าง code ขึ้นมาก่อนได้ เมื่อเปิด code ใน ide แล้วให้ดูใน MX_CRC_INIT() ส่วนนี้จะเป็นการตั้งค่าสำหรับ CRC module

การจัดการไฟล์ bitmap เพื่อแสดงผลบนจอ TFT

ซื้อจอ TFT แบบในรูปมา เพื่อจะใช้กับ Arduino โปรแกรมแรกที่ใช้กับจอนี้เป็น example ที่มากับ library ของ adafruit ก็ใช้งานได้ดี เห็นที่จอมีช่อง sd card อยู่ ก็เลยลองให้แสดงรูปใน sd card วนๆ ไปดู แก้ไขจากตัวอย่างโปรแกรมแสดงรูปที่อยู่ใน library ของ adafruit เช่นเดียวกัน ปรากฏว่าทำงานได้ แต่ช้ามากๆ โดยรูปที่จะเอาขึ้นจอต้องเป็นไฟล์ BMP ด้วย ค้นพบว่ารูปแบบการแสดงผลของจอเป็นแบบ 16 บิต คือ สีแดง 5 บิต สีเชียว 6 บิต สี น้ำเงิน 5 บิต ถ้าจะให้แสดงผลเร็วขึ้นก็ต้องแปลงไฟล์ BMP แบบ 24 บิต เป็น 16 บิต ก่อน ซึ่งอ่านดูหลายที่เขาแนะให้ใช้

การเขียนโปรแกรม ARM Cortex-M ตอนที่ 4 : เปรียบเทียบความเร็ว

ตอนนี้เราจะมาดูกันว่าบอร์ดแต่ละแบบเร็วช้าต่างกันแค่ไหน วิธีการคือเราจะให้บอร์ดทุกอันทำงานแบบเดียวกันตาม flowchart นี้ สรุปย่อๆ ว่าให้ดูจำนวนเต็มทุกตัวตั้งแต่ 1-10000 ว่าตัวไหนเป็นจำนวนเฉพาะ ถ้าเป็นจำนวนเฉพาะให้เปิด LED ถ้าไม่ใช่ให้ดับ LED เมื่อครบแล้วถือเป็น 1 รอบ ให้บวกตัวนับจำนวนรอบแล้วแสดงผลที่ 7-segment LED บอร์ดที่นำมาทดสอบมีด้วยกัน 4 ตัว ตามรูป การทดสอบจะทำทั้งหมด 5 ครั้ง Code ที่ใช้ทดสอบนี้ใช้ library อยู่ 2 ตัว คือ MAX7219/MAX7221 Digital Tube 7-Segment LED Display Arduino Library https://github.com/ozhantr/DigitLedDisplay/ Library for driving MAX7219 displays using STM32 https://github.com/petoknm/MAX7219 โดยได้เพิ่ม code สำหรับใช้งาน 7-segment LED เข้าไป

การเขียนโปรแกรม ARM Cortex-M ตอนที่ 3 : ไฟกระพริบ

ตอนนี้เรามาลองเขียนโปรแกรมลงบอร์ดกัน ไปดูตาม vdo เลย รายละเอียด MCU STM32F030F4P6 http://www.st.com/en/microcontrollers/stm32f030f4.html ใน vdo มีการใช้ function HAL_Delay() และ HAL_GPIO_TogglePin() ซึ่งสอง function นี้เป็น function ที่ ST เตรียมไว้ให้แล้วใน STM32Cube ซึ่งสามารถดูรายละเอียดได้จากเอกสาร UM1785 Description of STM32F0 HAL and Low Layer drivers ดูตอนอื่นๆ ตอนที่ 1 ตอนที่ 2 หากมีข้อติชม หรือข้อสงสัยอะไร สามารถติดต่อผู้เขียนได้ที่ twitter @vorasilp

การเขียนโปรแกรม ARM Cortex-M ตอนที่ 2 : ภาคซอฟต์แวร์

มาต่อกันในตอนที่ 2 ส่วนนี้เราจะพูดถึงเรื่องซอฟต์แวร์ที่จำเป็นสำหรับการเขียนโปรแกรม ซึ่งประกอบด้วย 3 ส่วนด้วยกันคือ IDE driver ของ programmer/debug probe ตัวช่วยสร้างโค้ดเริ่มต้น หรือ initialization code generator library และ middleware สำหรับ MCU แต่ละแบรนด์ ว่าด้วย IDE กันก่อน ผู้ผลิต MCU แต่ละเจ้าส่วนใหญ่ก็จะมี IDE เฉพาะของตัวเองออกมา และจะให้ใช้ได้ฟรีๆ กัน นอกจากนี้ยังมีผู้ผลิต IDE สำหรับ MCU อีกหลายรายที่บอกว่า IDE ของตัวเองมีความสามารถและคุณสมบัติที่แตกต่างจากตัวอื่นซึ่งมีทั้งที่ให้ใช้ฟรีและที่ต้องจ่ายเงินซื้อ License IDE จากผู้ผลิต MCU IDE จากผู้ผลิตอิสระ ส่วนต่อไปก็คือ driver ของ programmer/debug probe อันนี้ก็ขึ้นอยู่กับว่าเราจะพัฒนาโปรแกรมบนบอร์ดตัวไหน development board หลายๆตัวจะมี on-board

การเขียนโปรแกรม ARM Cortex-M ตอนที่ 1 : ภาคอุปกรณ์

แน่นอนว่าเมื่อเราจะเขียนโปรแกรมบนไมโครคอนโทรลเลอร์ อย่างแรกที่ต้องมีคือตัวไมโครคอนโทรเลอร์เอง ใน blog นี้และตอนต่อไปจะใช้บอร์ดต่อไปนี้เป็นหลัก Arduino M0 หรือเทียบเท่า บอร์ด STM32F030 Discovery บอร์ด STM32F030 หรือ STM32F103 อย่างตัวนี้ http://www.ebay.com/itm/401193554185 หรือ http://www.ebay.com/itm/STM32F103C8T6-ARM-STM32-Minimum-System-Development-Board-Module-For-Arduino/311156408508 บอร์ด Arduino M0 และ STM32F103 นี้สามารถเขียนโปรแกรมด้วย Arduino IDE ได้ โดยที่ตัว STM32F103 จะต้อง upload code ผ่าน USB serial adapter อย่างต่อไปคือ Debug Probe ซึ่งก็คือตัวที่ใช้เขียนโปรแกรมลงไมโครคอนโทรลเลอร์และยังใช้ debug โปรแกรมที่เราเขียนลงไปได้ด้วย แบบนี้จะต่างจากการใช้ Arduino IDE ที่โดยมากเราจะเขียนโปรแกรมและปล่อยมันทำงานไปเลย จากนั้นก็ดูผลการทำงานโดยอาจดูจากไฟ LED หรือ serial monitor ไม่สามารถไล่โปรแกรมทีละบรรทัดได้ การใช้ IDE

Google cloud + Pi + micro:bit part 2

ต่อจากตอนที่แล้ว (Part 1) ตอนนี้เราจะเชื่อมต่อทั้งหมดเข้าด้วยกัน โดยหน้าที่ของแต่ละส่วนเป็นดังนี้ Pi จะเรียกข้อมูลจาก web service ที่จะ return ข้อมูลกลับมาในรูปแบบ JSON ประกอบด้วย String และ List of String ตามรูป และส่งข้อมูลที่อยู่ใน List of String ไปแสดงผลที่ micro:bit ทีละตัว ทาง usb serial ทุกกี่วินาทีที่กำหนด micro:bit รับข้อมูลทาง usb serial มาแสดงผล เมื่อกดปุ่ม A ที่ micro:bit จะเป็นการร้องขอข้อมูลชุดใหม่จาก Pi ให้ Pi ส่งกลับมาทันที ไม่ต้องรอตามรอบ vdo แสดงการทำงาน code ของ micro:bit เขียนด้วย JavaScript Blocks Editor

Google cloud + Pi + micro:bit part 1

จากที่เพิ่งซื้อ Micro:bit มา มันมี led อยู่ประมาณนึง ใช้ทำ scroll text ได้ เลยคิดเล่นๆ ว่าจะให้ Micro:bit แสดงข้อมูลที่ส่งมาจาก internet แล้วจะให้แสดงข้อมูลอะไรดี คิดไปคิดมา ทำ data provider  เองดีกว่า จากงาน Google Next ที่ผ่านมา Google ก็มี free tier ให้ใช้แล้ว ก็ขอลองสักหน่อย ขั้นสุดท้ายคงเป็นแบบนี้ micro:bit — pi — internet — google cloud สร้าง App วิ่งบน Google App Engine Google App Engine รองรับหลายภาษามาก แต่ ณ เวลานี้ที่ตัวเองทำ webapp ได้เร็วสุดก็ Python