เลือกหน้า

    สวัสดีครับ บทความนี้เราจะมาพูดถึงปัญหาในการแฟลชโปรแกรมจาก KidBright IDE ไปยังบอร์ด KidBright32 ไม่ได้กันนะครับ 

หลายๆ ท่านคงเคยเจอปัญหาการไม่สามารถแฟลชโปรแกรมไปยังบอร์ด Kidbright32 ได้ โดยหลังจากที่เขียนโปรแกรมโดยการลากบล็อกใน KidBright IDE เพื่อสร้างโปรแกรมเสร็จแล้ว และกดปุ่มเพื่อที่จะทำการแฟลชโปรแกรม แต่เกิดข้อความ error แสดงขึ้นดังรูปด้านล่าง ซึ่ง error ที่เกิดขึ้นนี้บางครั้งก็เป็นบางครั้งก็ใช้งานได้ตามปรกติ เราจะมาหาสาเหตุและแนวทางวิธีแก้ไขปัญหากันนะครับ

error นี้เกิดจากโปรแกรม KidBright IDE พยายามจะสั่งให้บอร์ด KidBright32 เข้าสู่โหมดแฟลชโปรแกรม เพื่ออ่านค่า MAC Address แต่บอร์ด KidBright32 นั้นไม่สามารถเข้าสู่โหมดแฟลชโปรแกรมได้

หมายเหตุ: ถ้าเป็นโปรแกรม KidBright IDE เวอร์ชั่นก่อนหน้านี้ที่ไม่ใช่ V1.23 จะไม่มีการแสดงหน้าจอข้างบน แต่จะแสดงข้อความ Failed ตรงบรรทัดที่แสดงการทำงาน board checking : 

ตรงนี้ขออธิบายถึงการเข้าโหมดแฟลชโปรแกรมของบอร์ด KidBright32 ซึ่งจะเกิดขึ้นโดยการควบคุมให้ขาสัญญาณ IO0 ของโมดูล ESP WROOM32 ให้อยู่ที่สถานะ ‘0’ เมื่อมีการรีเซตเพื่อให้บอร์ดเริ่มต้นทำงานด้วยสัญญาณที่ขา EN การทำงานของสัญญาณทั้งสองจะมีลักษณะดังรูปนี้

รูปลำดับสัญญาณของขา EN และ ขา IO0 ที่ ถูกต้อง 

สัญญาณที่ขา IO0 จะต้องอยู่ที่ลอจิก ‘0’  ก่อนที่สัญญาณที่ขา EN เปลี่ยนเจากลอจิก ‘0’ เป็น ลอจิก ‘1’

แต่สำหรับกรณีที่เกิด error ขึ้นที่หน้าจอโปรแกรม KidBrigt IDE นั้น เกิดจากสัญญาณที่ขา EN และขา IO0 ทำงานผิดพลาดไป ทำให้สัญญาณที่ขา IO0 ยังคงอยู่ที่ลอจิก ‘1’ ในจังหวะที่สัญญาณที่ขา EN เปลี่ยนจากลอจิก ‘0’ ไปเป็น ลอจิก ‘1’ ซึ่งทำให้บอร์ด KidBright32 เริ่มต้นทำงานในโหมดการทำงานปรกติ แทนที่จะเป็นโหมดแฟลชโปรแกรม ตัวโปรแกรม Kidbright IDE จึงไม่สามารถดำเนินการส่งข้อมูลโปรแกรมให้กับบอร์ด KidBright32 ได้ และแจ้ง error ขึ้นมาดังที่เห็น

รูปลำดับสัญญาณของขา EN และ ขา IO0 ที่ ผิดพลาด 

ปัญหานี้สามารถเกิดขึ้นได้จากหลายสาเหตุ เช่น การทำงานของพอร์ต USB แต่ละพอร์ต  ที่แตกต่างกันไปของเครื่องคอมพิวเตอร์ตัวที่ใช้งาน  หรือความเร็ว ในการทำงานของคอมพิวเตอร์แต่ละเครื่องแต่ละรุ่นที่แตกต่างกันไปว่าทำงานช้าเร็วแค่ไหน ปัญหานี้มักจะเกิดขึ้นกับคอมพิวเตอร์รุ่นใหม่ๆ ที่มีความเร็วสูงมากกว่ารุ่นเก่าๆ หรืออาจจะมาจากลักษณะการทำงานของ Driver ของ USB  ก็ได้เช่นกัน

การแก้ไข

เนื่องจากสาเหตุมาจากสัญญาณที่ขา EN เปลี่ยนเจากลอจิก ‘0’ ไปเป็นลอจิก ‘1’ เร็วเกินไป เราจึงจะแก้ปัญหาด้วยการทำให้สัญญาณนี้เปลี่ยนลอจิกช้าลง จาก Schematic diagram ของบอร์ด ความเร็วในการเปลี่ยนระดับลอจิกของขา EN ขึ้นอยู่กับค่าความต้านทานของ R6 และค่าความจุของ C8 เราจึงใช้วิธีเพิ่มการหน่วงเวลาของสัญญาณ EN โดย เพิ่มค่าความต้านทานให้ R6 หรือ เพิ่มความจุให้กับ C8

ในบทความนี้เราจะใช้วิธีเปลี่ยนค่าความต้านทาน R6 ให้มีค่าสูงขึ้น โดยเราจะถอดตัวต้านทาน R6 ตัวเดิมที่มากับบอร์ดออก แล้วใส่ตัวต้านทานตัวใหม่ที่มีค่าความต้านทานสูงมากกว่าเดิมเข้าไปแทน

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

หลังจากบัดกรีตัวต้านทาน R6 ออกแล้ว เราจะใส่ตัวต้านทานใหม่ค่าประมาณ 100K เข้าไปที่ตำแหน่งที่ปุ่มรีเซตที่ต่อไปยังขา EN และไฟ 3V3 นะครับ

ในที่นี้เราจะใช้ตัวต้านทานค่า 100K โอห์ม ขนาด 1/8W หรือ 1/4W ที่สามารถหาได้ทั่วไปใส่ลงไปแทน โดยเราจะไม่บัดกรีในตำแหน่งเดิม เนื่องจากจุดบัดกรีเล็กมาก แต่เราจะบัดกรีตัวต้านทานตรงตำแหน่งที่ลูกศรชี้ตามรูปข้างล่าง ซึ่งสามารถจัดการได้ง่ายกว่า ตรงนี้ต้องระวังนิดนึงตอนบัดกรีขาตัวต้านทานเข้ากับขาขั้วต่อ I2C ขาวๆ ในรูป ไม่ให้พลาดไปโดนตัวลำโพงบัซเซอร์นะครับ

มาดูกันว่าหลังจากที่ได้เปลี่ยนค่าตัวต้านทาน R6 ให้มีค่ามากขึ้นแล้ว มันทำให้สัญญาณที่ขา EN เปลี่ยนจากลอจิก ‘0’ เป็น ลอจิก ‘1’ ช้าลงแค่ไหน รูปข้างล่างนี้เป็นรูปสัญญาณจริงที่ขา EN และ IO0 หลังจากที่ได้ทำการเปลี่ยนค่าตัวต้านทาน R6 

สัญญาณ EN (สีเหลือง), สัญญาณ IO0 (สีฟ้า)

เมื่อเปรียบเทียบกับรูปข้างล่างนี้คือรูปสัญญาณที่ขา EN และขา IO0 ก่อนการเปลี่ยนตัวต้านทาน R6

สัญญาณ EN (สีเหลือง), สัญญาณ IO0 (สีฟ้า)

จะเห็นว่าสัญญาณที่ขา EN มีการเปลี่ยนสถานะลอจิกช้ากว่าเดิมตามที่ต้องการแล้วนะครับ

สำหรับคนที่พบปัญหาถ้าลองเปลี่ยนไปใช้ USB พอร์ตอื่นแล้วยังใช้ไม่ได้ ก็สามารถทดลองใช้วิธีนี้แก้ปัญหาดูได้ครับ หวังว่าจะสามารถช่วยแก้ปัญหา error ได้นะครับ