วันอาทิตย์ที่ 13 ธันวาคม พ.ศ. 2558

Final Project


นาฬิกาปลุกแบบเล่นเกมได้

       - ฟังก์ชันพื้นฐานของนาฬิกาปลุกนี้ได้แก่การดูเวลา, ตั้งนาฬิกาปลุก, ดูเวลาที่เหลืออยู่ก่อนปลุก, มีโหมดเล่นเกม, สามารถดูบันทึกการตื่นนอนได้, สามารถใช้ bluetooth สั่งงานจากมือถือได้
       - นาฬิกานี้เมื่อปลุกแล้วจะเข้าสู๋โหมดเล่นเกม ซึ่งผู้ใช้จะต้องเล่นให้ผ่านตามคะแนนที่กำหนดนาฬิกาจึงจะหยุดปลุก โดยมีเกมให้เลือกอยู่ 2 เกม ได้แก่เกมงูและเกมข้ามถนน
       - การตั้งค่าต่าง ๆ ของนาฬิกาจะทำได้โดยการส่งเลข 5 ตัวจากโทรศัพท์ โดยเลขตัวแรกจะเป็นตัวที่บอกว่าจะส่งไปตั้งค่าอะไร
       - การกดเลือกคำสั่งต่าง ๆ ของนาฬิกาจะทำได้โดยใช้ joystick เลื่อนขึ้นลงเพื่อเลือกคำสั่ง แล้วจึงเลื่อน joystick ไปทางขวาเพื่อเลือกคำสั่งนั้น และเลื่อนไปทางซ้ายเพื่อกลับมาที่หน้าเมนู




       - ในวิดีโอแรกนี้จะแสดงฟังก์ชันพื้นฐานต่าง ๆ ของนาฬิกายกเว้นฟังก์ชัน bluetooth

      



       - วิดีโอนี้แสดงการตั้งเวลาของนาฬิกาผ่านทาง bluetooth โดยหากเลขตัวแรกเป็นเลข 0 จะเป็นการตั้งเวลาที่จะแสดง และหากเป็นเลข 1 จะเป็นการตั้งเวลาที่จะปลุก



       - วิดีโอนี้เป็นการตั้งระดับความยากของเกม โดยจะส่งเลขตัวแรกเป็นเลข 2 และเลขตัวต่อไปจะเป็นระดับความยากของเกม ตั้งแต่ 1 - 3 โดย 3 จะยากที่สุด และเลขอีก 3 ตัวที่เหลือสามารถเป็นเลขอะไรก็ได้ไม่มีผลต่อการทำงานของนาฬิกา



       - การใช้ bluetooth เพื่อดูบันทึกการตื่นนอนจะส่งเลขตัวแรกเป็นเลข 3 และข้อมูลจะมาแสดงที่หน้าจะโทรศัพท์

************************************

วันอาทิตย์ที่ 6 ธันวาคม พ.ศ. 2558

วันศุกร์ที่ 27 พฤศจิกายน พ.ศ. 2558

week 10 Lab 3

การทำงานและแนวคิดของโค้ด
       - ในโค้ดนี้เราเขียนฟังก์ชันของโหมดที่ 1 ไว้ก่อนเพื่อให้สะดวกแก่การทำงาน และในฟังก์ชัน main จะแสดงข้อความบอกว่าโหมดไหนทำอะไรและต้องส่งค่าอะไรเพื่อเข้าโหมดนั้น จากนั้นจึงรอรับค่าเพื่อทำงานต่อไป โดยหากค่าที่ส่งมาไม่ตรงกับโหมดใดเลยก็จะแสดงเมนูใหม่อีกครั้ง 
       - โหมด 1 จะเป็นการเปิด LED ใน pattern ต่าง ๆ โดยในโปรแกรมนี้จะมีอยู่ 2 pattern โดยจะเลือกโหมดโดยการส่งค่าตัวอักษร a หรือ d และถ้าหากส่งค่าตัวอักษร s จะทำการปิด LED ทั้งหมดและกลับไปหน้า menu
       - โหมด 2 จะแสดงค่าของสวิตซ์ตัวซ้ายของบอร์ด Nx-100 ว่าเป็น logic 0 หรือ 1 แล้วจึงกลับไปหน้า menu

***********************************


VDO แสดงการทำงานของโปรแกรม

       - เมื่อเริ่มทำงาน Serial Monitor จะแสดงหน้า menu ขึ้นมา โดยจะมีให้เลือกโหมดการทำงาน 2 โหมด ขึ่นอยู่กับค่าที่ส่งไปทาง Serial Monitor 
       - โหมด 1 เริ่มทำงานเมื่อส่งค่าเลข 1 ไปทาง Serial Monitor โดยจะเป็นการเปิด LED ใน pattern ต่าง ๆ ในโปรแกรมนี้จะมีอยู่ 2 pattern เลือกได้โดยการส่งต่าตัวอักษร a หรือ d ไปทาง Serial Monitor และหากส่งตัวอักษร s จะเป็นการปิดไฟ LED และกลับไปที่หน้า menu
       - โหมด 2 จะทำงานเมื่อส่งค่าเลข 2 ไปทาง Serial Monitor โดยจะเป็นการอ่านค่าของสวิตซ์ตัวซ้ายสุดบนบอร์ด NX100 ว่าเป็น logic 0 หรือ 1 แล้วจึงแสดงผลเป็นเลข 0 หรือ 1 ออกมาทางหน้าจอ Serial Monitor และเมื่อแสดงผลเสร็จแล้ว จะกลับไปที่หน้า menu
      

************************************

week 11 Lab 4

การทำงานและแนวคิดของโค้ด

       - .ในโปรแกรมจะใช้การวนลูปไปเรื่อย ๆ และเนื่องจากค่าที่ส่งไปได้มากสุดอยู่ที่ 4095 และค่า sine จะวนครบรอบที่รอบละ 2*pi เรเดียน ในการวนลูปแต่ละรอบจึงส่งค่า sine ไป 4095 ครั้ง โดยแต่ละครั้งจะเพิ่มค่ามุมขึ้น pi/2047 เรเดียนแล้วจึงคูณค่าที่ได้ด้วย 2047 เพื่อขยายสัญญาณ และเมื่อส่งครบแต่ละรอบจะตั้งค่ามุมกลับไปเป็น 0 แล้วจึงเริ่มส่งค่ารอบใหม่

     การรับ-ส่งค่ามนที่นี้ จะคล้าย ๆ กับการพล็อตกราฟ โดยเมื่อเราต้องการรูปของกราฟ sine เราจึงวนลูปค่าของ i (เปรียบเสมือนแกน x) ให้วนตั้งแต่ 0 ไปจนถึง 4094 ซึ่งเป็นค่าสูงสุดที่เราจะส่งค่าไปได้ แล้วจึงนำค่า i ไปแปลงให้อยู่ในรูปของกราฟ sine (ซึ่งเปรียบเสมือนแกน y) โดยใช้สมการคือ (sin(i*(2*pi)/4094)*(4094/2))
     ป.ล. ที่ต้องคูณด้วย 2pi/4094 เนื่องจากกราฟ sine จะมีการวนครบ 1 รอบเมื่อองศาเปลี่ยนไปตั้งแต่ 0-2pi และที่ต้องหารด้วย 4094 เนื่องจาก i มีค่าอยู่ในช่วง 0-4095 จึงต้องการแบ่งสัญญาณของกราฟ sine ออกเป็นช่วงเล็ก ๆ
     ป.ล.2 ที่ต้องนำสมการ sine ไปคูณกับ (4094/2) เนื่องจากต้องการขยายกราฟ sine ให้มีสัญญาณใหญ่ขึ้น จะได้ง่ายต่อการมองเห็น

***********************************


VDO แสดงการทำงานของโปรแกรม




************************************

week 12 Lab 5

การทำงานและแนวคิดของโค้ด

       - ในโค้ดนี้การรับสถานะของสวิตซ์จะใช้ DigitalIn แบบ array เช่นเดียวกันกับการส่ง DigitalOut ไปเป็นสัญญาณเปิดปิด LED 
       - ในการควบคุมโหมดการทำงานของโค้ดนี้ จะใช้ค่าสถานะของสวิตซ์ 2 ตัว และตัวแปรอีกหนึ่งตัวจะเป็นตัวช่วยควบคุมให้โปรแกรมทำคำสั่งเพียงครั้งเดียวต่อการกดสวิตซ์ 1 ครั้ง
       - สำหรับโหมดที่ 1 ซึ่งเป็นการเขียนข้อมูลลงไปบน eeprom จะใช้ array 1 ตัวรับค่าสถานะของสวิตซ์ของบอร์ด NX100 จากนั้นจึงใช้การรันลูป 7 ครั้งเพื่อเขียนข้อมูลลงไปบน eeprom 7 ตำแหน่ง (เขียนทีละตำแหน่ง แต่ละตำแหน่งใช้ loop 1รอบ) โดยหากมีการบันทึกข้อมูลเพิ่มขึ้น address ที่ใช้บันทึกก็จะเลื่อนไปทีละ 7 ตำแหน่งเรื่อย ๆ ด้วย หรือก็คือ หากบันทึกข้อมูลแล้วจะทำการเลื่อน address ไปยังตำแหน่งที่ว่างตำแหน่งถัดไปเพื่อไม่ให้เกิดการซ้อนทับกันของข้อมูล
       - โหมดที่ 2 เป็นการอ่านข้อมูลจากใน eeprom 7 ตำแหน่ง โดยจะใช้การวนลูป 7 รอบเพื่อรับข้อมูลมาเก็บไว้ในตัวแปร array (รับข้อมูลจาก eeprom มาเก็บไว้ใน array ทีละตำแหน่ง) จากนั้นจึงใช้ค่าในตัวแปรนั้นไปควบคุมสถานะของหลอด LED แต่ละหลอด


***********************************


VDO แสดงการทำงานของโปรแกรม

       - โปรแกรมนี้เป็นการใช้บอร์ด nucleo ติดต่อกับ eeprom โดยโปรแกรมจะมีโหมดการทำงาน 2 โหมดซึ่งสามารถเลือกโหมดได้โดยสวิตซ์ทางซ้ายสุดบนบอร์ด NX100 โดยหากสวิตซ์อยู่ที่ logic 1 จะเป็นการบันทึกค่าสถานะของสวิตซ์อีก 7 ตัวที่เหลือลงไปบน address 7 ตัวแหน่งของ eeprom และหากสวิตซ์ตัวซ้ายสุดอยู่ที่ logic 0 จะเป็นการอ่านค่าที่บันทึกอยู่ให eeprom มาแสดงผ่านทางหลอด LED 7 หลอด โดยการทำงานแต่ละรอบจะต้องกดสวิตซ์ User_Button บนบอร์ด nucleo ก่อน


       
************************************

วันจันทร์ที่ 19 ตุลาคม พ.ศ. 2558

week 9 Lab 2.2

การทำงานและแนวคิดของโค้ด

       - โปรแกรมนี้จะเป็นการรับค่าแรงดันไฟฟ้ามาจากนั้นจึงแสดงค่าความดันไฟฟ้าด้วย 7-segments หรือก็คือ LED เส้นๆ 7 เส้นที่แสดงผลแล้วเป็นตัวเลขนั่นเอง ซึ่งในที่นี้จะแสดงค่าได้ตั้งแต่ 0.0 ถึง 3.3 V และมีความละเอียดเป็นทศนิยม 1 ตำแหน่ง
       - โค้ดที่เขียนขึ้นนั้น จะมีการทำงานประมาณนี้
       - เริ่มจากรับค่า analog ของแรงดันไฟฟ้ามา โดยค่าที่รับมาจะอยู่ในช่วงของ 0.0 ถึง 1.0จากนั้นก็นำค่าที่ได้มาคูณด้วย 33.0 เพื่อให้ค่าอยู่ในช่วง 0 ถึง 33 แทน
       - เมื่อได้ค่าที่เป็นเลข 2 หลักมาแล้วก็จะทำการแยกให้ได้ค่าของเลขหลักหน่วยและหลักสิบมาเพื่อใช้ควบคุม 7-segments 
      e.g. ถ้าไฟจ่ายเข้ามา 1.3 V โปรแกรมจะได้ค่าที่คูณด้วย 33 แล้วเป็น 13 แยกได้หลักสิบเป็น 1 และหลักหน่วยเป็น 3 ทำให้ 7-segments ตัวขวาแสดงค่า 3 และตัวซ้ายแสดงค่า 1

***********************************


VDO แสดงการทำงานของโปรแกรม

       - เมื่อจ่ายแรงดันเข้าไป ค่าของแรงดันก็จะแสดงออกมาเป็นตัวเลขที่ความละเอียดทศนิยม 1 หลัก



       * note : เพราะบอร์ดจะประมวลผลได้โดยไม่เอ๋อที่ความดันช่วง 0 ถึง 3.3 เพราะงั้นช้วงท้ายๆ VDO ที่ค่าเด้งกลับไปน้อยๆทั้งที่ให้ V มากๆเป็นเพราะให้ค่ามากเกินช่วงที่บอร์ดจะประมวลผลได้นั่นเอง

************************************
Code ที่เขียนขึ้น
         http://www.mediafire.com/download/pa64uhuc8c6n6vn/week+9+lab2.2.rar


week 9 Lab 2.1

การทำงานและแนวคิดของโค้ด

       - โปรแกรมนี้จะเป็นการรับค่าแรงดันไฟฟ้ามาและแสดงความดันไฟฟ้าในรูปแบบของหลอด LED 8 ดวง โดยจำนวนหลอด LED ที่สว่างจะแปรผันตรงกับค่าความดันไฟฟ้า โดยจะติดเรียงจากขวาไปซ้าย
     
       - โค้ดที่กลุ่มของเราได้เขียนขึ้นนั้น ใช้การประกาศตัวแปรแบบ array ของ LED ทั้ง 8 ดวง
       - จากนั้นโปรแกรมก็จะทำการรับค่า analog ของแรงดันไฟฟ้ามาในช่วงของ 0.0 ถึง 1.0 แล้วโปรแกรมจึงนำเลขนั้นมาคูณด้วย 3300 เพื่อให้ค่าออกมาดูเข้าใจง่ายขึ้นเพราะอยู่ในช่วง 0 ถึง 330 ซึ่งคล้ายกับช่วงความดันไฟฟ้าที่บอร์ดจะประมวลผลได้โดยไม่เอ๋อไปซะก่อน
       - และสำหรับ logic ของการเปิด LED เนื่องจากว่าความดันสูงสุดที่จะประมวลผลได้คือ 3.3 V และมี LED 8 ดวง เราจึงแบ่ง 3.3 ออกเป็น 8 ช่วง ได้ประมาณช่วงละ 0.4 V จึงให้ค่า 0.4*n เป็นตัวบอกว่าหลอดที่ n จะติดหรือไม่ โดยจะวนลูปของ LED ทั้ง 8 ดวง เพื่อเช็คดูว่าหลอดไหนจะติดบ้าง
      e.g. ถ้าไฟจ่ายเข้ามา 1.3 V LED จะติดถึงหลอดที่ 3 เพราะว่า 1.3 > 0.4*3 แต่ 1.3 < 0.4*4

***********************************


VDO แสดงการทำงานของโปรแกรม

       - เมื่อทำการเพิ่มความดันไฟฟ้าที่จ่ายให้บอร์ด ไฟ LED ก็จะค่อยติดเพิ่มขึ้นไปเรื่อยๆ จนเมื่อความดันไฟฟ้าที่จ่ายไปมีค่า >3.2 V หลอด LED จะติดครบทุกดวง
      

************************************
Code ที่เขียนขึ้น
         http://www.mediafire.com/download/89vmg8h7h0l5zhl/week+9+lab2.1.rar




week 9 Lab 1

การทำงานและแนวคิดของโค้ด

       - โปรแกรมนี้จะมีการทำงานคือมีสวิตช์ 3 ตัว เมื่อเปิดปิดสวิตช์ในรูปแบบต่าง ๆ กัน LED ทั้ง 8 ดวงก็จะมีรูปแบบการทำงานที่ต่างกันไปด้วย
       - แนวคิดสำหรับโจทย์ข้อนี้ไม่ค่อยมีอะไรนัก เพราะจะถือว่าสวิตช์ทั้ง 3 ตัวแทนเลขฐานสอง 3 หลัก ก็จะได้กรณีทั้งหมด 2^3 = 8รูปแบบพอดีตามที่โจทย์ต้องการ
       - จากนั้นก็ใช้วิธีแยกเคส 8 เคสตามสวิตช์ที่เปิด แล้วให้หลอดไฟแสดงผลตามแบบที่ต้องการตามใจผู้โค้ด -w-

***********************************


VDO แสดงการทำงานของโปรแกรม

       - เมื่อสับสวิตช์แบบต่างๆ LED ก็จะเปลี่ยนรูปแบบไปเรื่อยๆ




       
************************************
Code ที่เขียนขึ้น
         http://www.mediafire.com/download/n5e36kv1g2qda78/week+9+lab1.rar

วันพุธที่ 14 ตุลาคม พ.ศ. 2558

week 7 (14/09/2015)

ความประทับใจ <3

       - ได้รู้ว่าการออกแบบวงจรไม่ได้ยากอย่างที่คิด ถ้าจะยากคงเป็นตอนต่อวงจรซะมากกว่า =3=
       - d(=^・ω・^=)b
       
สิ่งที่ได้เรียนรู้ และปฏิบัติ <3
      
       - ได้เรียนรู้การออกแบบวงจร Sequential Logic โดยการใช้ State Diagram ที่มีขั้นตอนประมาณนี้
                  1. ทำการวิเคราะห์ว่าวงจรที่เราต้องการออกแบบมีกี่ state และแต่ละมีจะเปลี่ยนแปลงยังไง                          เมื่อให้ input เข้าไป
                  2. นำแต่ละ state มาวาดเป็น state diagram ดังรูปด้านล่าง โดยให้แทนแต่ละ state ด้วยเลข                          ฐาน 2 และเลขที่อยู่ในครึ่งล่างของวงกลมคือ output ของ state นั้น ๆ
                  3. นำ State Diagram ที่ได้ ไปเขียนเป็นตาราง truth table ของ State, Input, Output และ                               D-Flip Flop Input เช่นตารางข้างล่าง
                  4. หา Boolean Function ของแต่ละอันแล้วนำไปต่อเป็นวงจรตามต้องการ
                  5. ชื่นชมวงจรที่ต่อมาได้และรอดูเผื่อมีบัคอะไรมาให้แก้

ปัญหาที่ได้พบ <3

       - ตอนเรียนรอบแรกยังไม่ค่อยเข้าใจเนื้อหาซักเท่าไหร่ ทำให้ตารางที่คิดมาค่อนข้างมั่วๆไปหน่อย




***********************************



 State Diagram ที่พูดถึง วงจรในที่นี้มี 3 States


Truth Table ที่กำเนิดขึ้นมาจาก State Diagram


อันนี้แถม =w=
************************************

วันอาทิตย์ที่ 13 กันยายน พ.ศ. 2558

week 6 (07/09/2015)

ความประทับใจ <3

       - Flip-flop น่ารักดี =3=
       
สิ่งที่ได้เรียนรู้ และปฏิบัติ <3
      
       - Sequential Logic เป็น Logic ที่ Output ขึ้นอยู่กับ Input ก่อนหน้า เหมือนๆกับเป็นการใช้หน่วยความจำช่วยในการกำหนด Output
       - Flip-flop เป็นอุปกรณ์พื้นฐานอย่างหนึ่งของ Sequential Logic ซึ่ง Flip-flop สามารถต่อด้วย NAND gates หรือ NOR gates ก็ได้ แต่จะมีการทำงานตรงข้ามกัน
       - นอกจากเรื่องชนิดของ gates ที่เอามาต่อแล้ว Flip-flop ก็ยังแบ่งประเภทได้จากวิธีการต่อวงจรด้วย ได้แก่ SR Flip-flop ซึ่งจะมีอยู่ 1 เคส ที่วงจรจะงง จึงได้มีวงจร JK Flip-flop ซึ่ง D Type Flip-flop และ  T Type Flip-flop
       - Digital Counter หรือ ก็คือตัวนับค่า ก็เป็นการประยุกต์ใช้ของ Flip-flop อย่างนึง เพราะการที่กดๆปุ่มๆเดียวซ้ำไปเรื่อยๆแล้วได้ Output ที่แตกต่างกันออกมา ก็ต้องใช้ memory คอยช่วย

ปัญหาที่ได้พบ <3

       - ลืมเอากล่องเก็บ ic และสายไฟมา ทำให้ต้องขอยืมใช้ไปก่อน T/\T
       - สายไฟวุ่นวายจนต่อผิดพลาดไป ทำให้วงจรนับเลขแบบงงๆ เลยต้องรื้อมาต่อใหม่ TwT




***********************************



 Digital Counter ที่กดไปถึง a (10)


Digital Counter ที่กดต่อจากรูปด้านบน



************************************

วันอังคารที่ 1 กันยายน พ.ศ. 2558

week 5 (31/08/2015)

ความประทับใจ <3

       - Logic Friday ใช้งานง่ายดี ไม่ต้องคำนวณ ถึงจะเสียใจบ้างก็เถอะ .__.
       
สิ่งที่ได้เรียนรู้ และปฏิบัติ <3
      
       - Logic Friday เป็นโปรแกรมที่ใช้ในการคำนวณ logic โดยการใส่ input และ output เข้าไป แล้วโปรแกรมจะแสดงผลลัพท์ออกมาเป็น logic ที่ต้องใช้ พร้อมกับวิธีการต่อให้โดยอัตโนมัติ
       - ได้ใช้ตัวแปลงจากเลขฐาน 2 (ตาม input logic) ให้แสดงออกมาในรูปของเลขฐาน 16 (แบบตัวเลขดิจิตอล)
       - ได้ทดลองต่อวงจรที่แปลงจากเลขฐาน 2 ให้แสดงออกมาในรูปของเลขฐาน 10 โดยคำนวน logic ผ่านโปรแกรม Logic Friday

ปัญหาที่ได้พบ <3

       - สายไฟจัด
       - เวลาปรับเปลี่ยน logic เร็ว ๆ ทำให้เกิด propagation delay ทำเอาปวดหัวไประยะหนึ่ง -.,-




***********************************


 การวิเคราะห์ logic ผ่านโปรแกรม Logic Friday



วงจรที่ต่อออกมาได้ -3-



************************************

วันพฤหัสบดีที่ 27 สิงหาคม พ.ศ. 2558

week 4 (24/08/2015)

ความประทับใจ <3

       - ได้เรียนตรรกศาสตร์ ทำให้รู้สึกเหมือนกลับกลายเป็นเด็กอีกครั้ง
       - วิธีการเขียนลำดับ gray code นึกถึงวิธีการทำแพนเค้ก ส่วน K-Map ก็เหมือนโดนัท -w-
       
สิ่งที่ได้เรียนรู้ และปฏิบัติ <3
      
       - ได้เรียนรู้เรื่องวิธีการลดรูปประพจน์ผ่านการใช้ Karnaugh-Map (K-Map) วิธีที่ง่ายกว่าเดิมมาก
       - K-Map ลึก ๆ แล้วก็คือการวิเคราะห์ทางตรรกะศาสตร์แบบทั่วไป เพียงแต่ K-Map นี้จะเป็นตัวช่วยให้สามารถมองรูปประพจน์ออกมาได้ง่ายยิ่งขึ้น
       - วิธีการเขียน K-Map ทำได้โดยการเขียน metric ขนาด n + 2*(n%2)) x n เมื่อ n แทนจำนวน input (สามารถปรับเปลี่ยนขนาดได้ตามความถนัด แต่วิธีแบ่งแบบนี้มาตรฐานสุด) แล้วเขียน logic ทั้งหมดที่เป็นไปได้ของ input ตามลำดับแบบ Gray-code บนช่องต่าง ๆ จากนั้น ทำการเขียน logic 0,1 ตามพิกัดบนช่องต่าง ๆ ตามสมการของตัวเอง แล้ววงกลมล้อมรอบ logic 1 ที่ติดกัน และมีลักษณะเป็นสี่เหลี่ยมขนาด 2^k เมื่อ k เป็นจำนวนเต็มที่มีค่ามากกว่าหรือเท่ากับศูนย์ โดยยิ่งวงให้เป็นวงใหญ่ได้เท่าไหร่ การคำนวนลอจิกที่ได้ก็จะลดลงได้มากขึ้นเท่านั้น โดย K-map มีลักษณะตารางเหมือนเป็นวงโดนัท กล่าวคือ ตัวหลังสุดจะวนมาต่อกับตัวหน้าสุด ส่วนตัวล่างสุดจะวนมาต่อกับตัวบนสุด โดยการวงแต่ละครั้งต้องคำนึงถึงจุดนี้ด้วย
       - การวิเคราะห์ K-Map ทำโดยการดูธรรมชาติของ วงแต่ละวง หากมีหลายวงสามารถนำมาบวกกันได้เลย 
       - Gray-code คือการเขียนลำดับ logic เพื่อให้ง่ายต่อการส่งสัญญาณ เนื่องจากการเปลี่ยนแปลงเลขแต่ละตัวจะรับประกันได้ว่ามีลอจิกเปลี่ยนแค่อันเดียว ทำให้เกิดความผิดพลาดในการส่งสัญญาณได้น้อยกว่า และเหมาะกับการนำมาเขียนการแก้ปัญหาทาง logic แต่ไม่เหมาะกับการนำมาคำนวนผ่านวิธีการปกติซักเท่าไหร่

ปัญหาที่ได้พบ <3

       - หิว
       - ขี้เกียจเขียนแหล่งอ้างอิงตามหลักวิชาการ ไหน ๆ ก็สไลด์คณะ เพื่อการเรียนการสอนในคณะขออ้างอิงแบบเวปบล็อกทั่วไปละกันนะ -3-




***********************************




ตัวอย่างการวง และวิเคราะห์ Karnaugh-Map




ลักษณะการวนกลับเหมือนโดนัท

************************************


วันพุธที่ 19 สิงหาคม พ.ศ. 2558

week 3 (17/08/2015)

ความประทับใจ <3

       - ได้ทดลองการเปลี่ยน ic nand gate กับ nor gate ให้เป็น and gate กับ or gate แล้วนำไปทำเป็น xor gate เนื่องจากว่าลืม ic ไว้กับบอร์ด แลปรอบนี้เลยไม่มีใช้ -3-
       - ได้ใช้สกิลคณิตศาสตร์ที่ใฝ่หามานานจากค่ายต่าง ๆ และวิชาคณิตศาสตร์ที่ไม่เกี่ยวกับมนุษย์ปกติที่ต้องใช้จ่ายตลาดในชีวิตประจำวัน
       
สิ่งที่ได้เรียนรู้ และปฏิบัติ <3
      
       - ได้เรียนรู้เรื่อง Boolean Algebra แบบจริง ๆ จัง ๆ จากแต่ก่อนที่มีอะไรก็คิดเอาเองตาม truth table เช่น A or T = T, A or F = A และการตัดพจน์ที่เป็นสัจนิรันดร์ทิ้งไปเลยโดยที่ไม่เคยเขียนมาในรูปของการพิสูจน์โดยสมการ
       - ได้รู้ว่า ตรรกะศาสตร์สามารถเชื่อมกับคณิตศาสตร์แบบตัวเลขทั่วไปได้แบบไม่คาดคิดมาก่อน เช่น เอกลักษณ์การคูณ Ax0 = 0 เราสามารถจับมาดำเนินการตามแบบฉบับของตัวเลข และตัวแปรได้เลย โดยที่ไม่จำเป็นต้องคิดแบบตรรกะศาสตร์ ว่า A and F ได้ F
       - ได้เขียนการต่อ logic ในรูปแบบที่เคยเรียนมาจากค่าย plc (อย่างน้อยก็ทำให้อัคติกับการเรียน plc น้อยลงละมั้งนะ -.,-)
       - ได้เรียนเรื่อง Sum of Product และ Product of Sum โดยที่ทั้งสองเรื่องนี้เป็นเรื่องที่ช่วยในการแก้โจทย์ของตรรกะศาสตร์ที่ใช้วิธีมโนเอาเองไม่ได้ โดยเมื่อผ่านกระบวนการนี้แล้วจะได้สมการที่นำไปสู่ผลลัพท์ตาม truth table ที่กำหนดไว้ได้
       - Sum of Product และ Product of Sum เป็นการกลับคำกันอย่างคาดไม่ถึง ส่วนวิธีการของทั้งสองกระบวณการก็กลับกันตามชื่อด้วย
       - SOP คือการทำ Boolean Expression ให้อยู่ในรูปของผลบวกของการคูณ โดยจะเขียน Boolean Expression ของ input ใด ๆ ที่ให้ output เป็น T (A*B*C)+(C*D*E)
       - POS คือการทำ Boolean Expression ให้อยู่ในรูปของผลคูณของการบวก โดยจะเขียน Boolean Expression ของ input ใด ๆ ที่ให้ output เป็น F (A+B+C)*(C+D+E)
       - Product >> AND Gate, Sum >> OR Gate เนื่องจากทั้งสองมีพฤติกรรมของ logic ออกมาเหมือนกัน
       - พิสูจน์การคำนวณ xor เอง เนื่องจากตอนนั้นไม่ทันฟังที่อาจารย์พูด QwQ

ปัญหาที่ได้พบ <3

       - ตรรกะศาสตร์ที่ดีเป็นพื้นฐานของมนุษย์จนไม่รู้ว่าควรจะเขียนอะไรลงไปในบล็อก -.,-
       - ลืม ic ไว้บนบอร์ดในคาบที่แล้ว ทำให้ไม่สามารถทดลองได้ตามเป้าหมาย เลยต้องเอาไปทำรวมกับกลุ่มเพื่อน (ตอนแรกกะจะจั๊มป์เกทมาจากบอร์ดของเพื่อน แต่มันคงวุ่นวายไปหน่อย แถมเสี่ยงต่อการสายมีปัญหา -3-)
      - หลังจากพยายามเขียนให้ได้จนมีเนื้อหาบนบล็อกเกิดขึ้นมาก็พบว่า ประโยคข้อแรกของปัญหาที่ได้พบไม่เป็นความจริง





**********************************************

ความยุ่งเหยิงของการนำ Universal Gate มาต่อเป็น gate ที่ต้องการจะใช้ -.,-


บทสรุปของการทำงานที่ต้องไปทำกับกลุ่มเพื่อน -3-







วันพฤหัสบดีที่ 13 สิงหาคม พ.ศ. 2558

week 2 (10/08/2015)

ความประทับใจ <3

       - ได้เล่นกับเลขฐาน 2 (เลขบิตเดียว) รู้สึกเหมือนได้กลับมาเป็นเด็ก(?) อีกครั้ง >__<
       - สายไฟสีสวย *-*
       
สิ่งที่ได้เรียนรู้ และปฏิบัติ <3
      
       - เขียนชื่อ และประเภทของ ic ไว้บนกระดาษแล้วใส่ไว้ในกล่อง ทำให้สุขภาพจิตในการนั่งหา ic ดีขึ้นเยอะ
       - การต่อวงจรของการบวกเลข ใช้ and, xor ในการต่อแบบง่าย ๆ หรือ half adder, แต่ถ้าจะต่อแบบสมบูรณ์ขึ้นให้เพิ่ม or ขึ้นมาอีกตัวเพื่อใช้จัดการเรื่องตัวทดกลายเป็น full adder
       - วงจรการลบ ทำตามวิธีที่ง่ายที่สุดโดยการเปลี่ยนให้อยู่ในรูปของการบวก A-B >> A+(-B)
       - การเก็บข้อมูลของค่าลบ ทำได้ด้วยการทำ compliment โดยการสลับบิต(1st) แล้วบวก 1 เข้าไป(2nd) ซึ่งอธิบายในอีกแง่ได้ก็คือ การทำ 1st และ 2nd compliment ทำให้เราได้ค่าตัวเลขที่นำมาบวกกับค่าตั้งต้นได้เท่ากับศูนย์ เสมือนตัวเลขใด ๆ บวกกับค่าติดลบของตัวมันเอง (จะมีบิตเกินมาหน้าสุด 1 ตัว จึงตัดบิตที่เกินมาทิ้ง หากไม่ตัดจะมีค่าเท่ากับจำนวนฐาน) 
         --[[ e.g. 0101 >(1st)> 1010 >(2nd)> 1011 and 0101 + 1011 = 1|0000 = 0000 ]]--
       - การต่อวงจรบวก-ลบ (A+B) ทำได้ด้วยการต่อ op เข้าไป โดยการใช้หลักของการทำ 2nd compliment โดย logic ของ op จะเป็นตัวบ่งบอกว่าจะให้ค่า B เป็นบวกหรือลบ โดยถ้า 1 เป็นลบ 0 เป็นบวก แล้วนำค่าจาก op ไปบวกเข้ากับสมการ แล้วนำค่า op ไป xor กับค่า B ทำให้เมื่อเราใส่ logic ให้ op เป็น 0 (ค่าบวก) จะไม่เกิดอะไรขึ้น แต่ถ้า op เป็น 1 จะเป็นการทำให้ B กลายเป็นค่าที่ผ่านการทำ 2nd compliment มาแล้ว
       - การเชคค่าที่ overflow คือ แก้ไขโดยการทำค่า Cin มาเชคกับค่า Cout ของหลักหน้าสุดที่เป็นตัวบอกสถานะบวก-ลบ (MSB) ที่ทำการบวกกัน โดยจะเกิดการ overflow ขึ้นเมื่อสองค่านี้มีค่าต่างกัน หรือก็คือ การนำค่า Cin กับ Cout มา xor กัน

ปัญหาที่ได้พบ <3

       - ตอนแรกกำลังสับสนกับค่าทด (Cin) คืออะไรถ้าบวกเลขฐานเดียว จนสุดท้ายพอเอาไปลองถึงระลึกได้ว่า ถ้าไม่มีก็ไม่ต้องต่อให้มันมี ใส่ค่า logic 0 ไปเลย =__= 
       - ic ที่ต้องใช้มีแค่ตัวเดียว เลยต่อหลาย ๆ หลักไม่ค่อยสะใจเท่าไหร่ -3-
       - เพราะมัวแต่แคร์กับเรื่องไม่เป็นเรื่อง(สีสายไฟไม่สวย) ทำให้ต่อเล่นได้ไม่ค่อยมากเท่าที่ควร





**********************************************





การจัดเรียง ic อย่างยิ่งใหญ่ 

ความวุ่นวายของสายจากการที่มี ic ตัวเดียว (เพิ่งบวกได้หลักเดียวเอง Q__Q)

วันอังคารที่ 4 สิงหาคม พ.ศ. 2558

week 1 (03/08/2015)

ความประทับใจ <3

       - อาจารย์บอกว่าถึงไฟฟ้าตัวก่อนหน้าจะทำคะแนนได้ไม่ดี ก็ไม่ได้หมายความว่าตัวนี้จะแย่
       - มีเวลาที่ได้เล่นอุปกรณ์นาน สามารถจิ้มเล่นได้ตามใจชอบ -w-
       - บอร์ดน่ารัก 
       - เหมือนได้ย้อนยุคกลับไปสมัยบัตรเจาะรูของคอมพิวเตอร์ *-*
       
สิ่งที่ได้เรียนรู้ และปฏิบัติ <3
      
       - การปัก และแกะ IC ไม่ใช่เรื่องง่าย -.,-
       - เพิ่งรู้ว่า IC มีประเภทแยกย่อยตาม mosfet กับ transistor ด้วย และไม่ควร(บางครั้งไม่ได้)นำไปต่อรวมกัน เพราะะทำให้ logic ที่ได้ผิดพลาด
       - ได้ต่อ logic gate แบบจริง ๆ จัง ๆ หลังจากเคยได้เล่นเป็นของสำเร็จรูป
       - สัญญาณความถี่ที่ออกจาก logic gate เอาไปทำให้ลำโพงร้องได้
       - ควรกักตุน nand gate และ nor gate ไว้ให้ดี เพราะมันสามารถแปลงเป็น gate อื่นได้
       - ได้รู้ความหมายบนตัวอักษรที่อยู่ระหว่างตัวเลขของ logic gate ถึงจะยังไม่ค่อยเข้าใจว่าทำไมต้องเอามาคั่นก็เถอะ
       - เอาสัญญาณจากช่องความถี่ กับสวิตซ์ไปเป็นอินพุทของ or gate กับ nor gate แล้วให้มันกระพริบแข่งกัน (ถึงแม้ตามจริงจะใช้แค่ not gate ก็พอก็เถอะ แต่แบบนี้ดูขลังกว่า .__.)
       - ความถี่ที่สูงมาก ทำให้ลำโพงเสียงแหลมขึ้น แต่ถ้าต่ำเกินไปจะไม่ค่อยได้ยินเสียง หรือเสียงไม่น่ารัก -3-
       - ในขณะเดียวกัน การที่ความถี่ต่ำ ๆ กลับทำให้หลอดไฟกระพริบออกมามากกว่า
       - วิชาดิจิตอลนี้เหมือนได้ปลดปล่อยวิชาที่เรียนมาในเรื่องเลขฐาน 2 หลังจากที่เคยเรียนอย่างคลุ้มคลั่งมาในอดีต -.,-

ปัญหาที่ได้พบ <3

       - nor gate ขาของชุดแรก (ขาที่ 1,2,3) พัง จนทำให้เกิดการเงิบมหาศาล -__-
       - or gate มีรอบนึงร้อนมาก ๆ แต่พอถอดแล้วเสียบใหม่กลับปกติ