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

DIGITAL LAB.No 5 Final :: THE INTER-INTREGRATED CIRCUIT PROTOCOL (I2C)

 LAB 5 Final :: THE INTER-INTREGRATED CIRCUIT PROTOCOL (I2C)

จากโจทย์ที่ได้รับมอบหมาย
     จากโจทย์ให้ทำการเชื่อมต่อ NucleO กับ IC Eeprom 24LC64 เพื่อทำการอ่านค่าและเก็บค่าข้อมูล โดยที่ให้มันสามารถทำงานได้ทั้ง 2 mode คือ อ่านและเก็บข้อมูล
       Mode เก็บข้อมูล
             ให้ Nucleo อ่านค่า Digital 7 bits จาก Switch on/off จากบอร์ด nx-100 แล้วเก็บค่าไว้ที่ eeprom โดยการเก็บค่านั้นให้ใช้ Debounce Switch เพื่อเก็บข้อมูลลง eeprom
       Mode อ่านข้อมูล
             ให้ Nucleo อ่านข้อมูลที่เก็บใน eeprom มาแสดงผลบนหลอด LED 7 ดวง โดยการใช้ Debounce Switch เพื่ออ่านข้อมูลที่เก็บใน eeprom

สิ่งที่ได้เรียนรู้จากการทำ Lab ครั้งนี้
          ก่อนทำการเขียนโปรแกรมนั้น ได้กำหนดไว้ว่า
                 ใช้ Switch D7 จากบอร์ด NX-100 เป็นตัวเปลี่ยนโหมด โดยกำหนดค่าว่า
             ถ้าค่า D7 = 1 eeprom จะอยู่ในโหมดเก็บข้อมูล โดยการเก็บข้อมูลนั้น จะเก็บค่าที่อ่านจาก Switch D0-D6 มาเก็บไว้ที่ IC eeprom
            ถ้าค่า D7=0 eeprom จะอยู่ในโหมดอ่านข้อมูล โดยการอ่านข้อมูลนั้น จะนำค่าที่อยู่ใน eeprom มาแสดงผลที่หลอด LED บนบอร์ด NX-100
          เพื่อป้องกันการเก็บ/อ่าน ข้อมูลของ eeprom ที่มากเกินไปนั้น จึงกำหนดให้ปุ่ม Debounce Switch sw-2 เป็นตัวสั้งว่า เมื่อเราพร้อมที่จะเก็บ/อ่านข้อมูลนั้น เราจะต้องกดปุ่ม sw-2 1 ครั้งเพื่อทำการเก็บหรืออ่านข้อมูลนั้น

และนี่คือวีดีโอการทำงาน LAB_5 ของกลุ่มนะครับ^^
         


        ในการเขียนโปรแกรมนั้น ในส่วนของ MODE เก็บข้อมูลนั้น เราก็ต้องทำการเลื่อน Switch D0-D6 ว่าจะให้มันจ่าย logic อะไรให้ nucleo และเมื่อจะทำการเก็บข้อมูลนั้น เราก็ต้องมากด Debownce sw-2 1 ครั้ง เพื่อสั่งให้ nucleo อ่านค่าของแต่ละ Switch และจากนั้นค่าที่ nucleo อ่านมานั้นก็จะถูกเก็บไว้ที่ IC eeprom
         และในส่วนของ MODE อ่านข้อมูลนั้น ในครั้งแรกที่เขียนโปรแกรมนั้นได้ปัญหาว่าข้อมูลที่อ่านจาก eeprom สามารถอ่านข้อมูลได้เฉพาะข้อมูลอันดับแรกเท่านั้น ไม่สามารถอ่านข้อมูลที่เหลือได้ ทางกลุ่มเราจึงแก้ปัญหาโดยลองเก็บข้อมูลและอ่านข้อมูลเป็นแบบ Array ดู ผลปรากฏว่าอ่านข้อมูลได้ครบตามที่เขียนไว้ แต่รู้สึกว่ามันเป็นการเปลือง เลยกลับไปใช้การเก็บข้อมูลแบบ int แบบเดิม แต่คราวนี้แก้เพียงที่อยู่ที่จะอ่านข้อมูลนั้น ผลเลยว่า เมื่อนำมาทดสอบแล้วสามารถอ่านข้อมูลจาก IC eeprom ได้ครบทุกตัวและจากนั้นก็ให้ nucleo ทำการอ่านค่าจาก IC eeprom ไปแสดงผลบนหลอด LED ทั้ง 7 ดวงบนบอร์ด NX-100 โดยการอ่านค่าจาก IC นั้น เราก็ต้องมากด Debownce sw-2 ทุกๆครั้ง เพื่อไล่อ่านค่าใน eeprom ที่เก็บไว้ตามลำดับ
        ในการอ่านค่านั้นทางกลุ่มได้เขียนไว้เป็น 2 รูปแบบคือ 
        1) จะอ่านค่าตามจำนวนที่เขียนไว้ เมื่ออ่านค่าได้ครบตามที่เขียนแล้วโปรแกรมจะทำการอ่านค่าแรกใหม่อีกครั้ง
        2) เมื่อกดปุ่ม Reset บน NucleO ทุกครั้งๆ ก็จะอ่านค่าไปเรื่อยๆแบบไม่มีที่สิ้นสุด

และนี่คือไฟล์ Code ของกลุ่มครับ

วันอังคารที่ 10 พฤศจิกายน พ.ศ. 2558

DIGITAL LAB.No 4 Serial Periphearl Interfaec

LAB 4 Serial Periphearl Interfaec (SPI)

จากโจทย์ที่ได้มอบหมาย

           จากโจทย์ให้ทำการเชื่อมต่อ Nucleo กับ IC MCP4922-E/P เพื่อกำเนิดคลื่นสัญญาณ Sinewave โดยกำหนด Amplitude และความถี่ของสัญญาณขึ้นมาเอง และใช้ Scope วัดสัญญาณ Sinewave ที่สร้าง

สิ่งที่เรียนรู้จากการทำ Lab ครั้งนี้
           จากสมการฟังก์ชัน 
           และกำหนด Amplitude = 511 และความถี่ 100MHz 
       
            หลักการในการเขียนโปรแกรม ในครั้งแรกผลการทดลองไม่เป็นเหมือนที่คาดการณ์ไว้ คือผลทีได้จากตัวโปรแกรมจะได้แค่คลื่น sine wave ที่ออกมาเพียงครึ่งเดียวของกราฟ sine wave ซึ่งเราติดกับปัญหานี้อยู่นานมาก แต่ก็ไม่มีการเปลี่ยนแปลงใดๆ จน....นึกขึ้นได้ว่า IC ที่ทางกลุ่มได้รับมา เป็น IC 12 Bits ซึ่งเมื่อเราทำการเอาค่า 12 Bits มาหาร 2 ให้เหลือ 6 Bits ก็จะสามารถสร้างกราฟ sine wave ได้

กราฟครึ่ง Sin ที่ยังมีเพียงแค่ครึ่งเดียว
กราฟ Sine ที่สมบูรณ์แบบ
             เหตุผลที่ต้องหารค่า 12 Bits ให้เหลือเป็น 6 Bits นั้น ก็เพราะว่าเราจะทำการแบ่งช่วงของแรงดันที่ใช้ ซึ่งค่า 12 ฺBits นั้นก็เปรียบเหมือนกับแรงดัน 3.3 Vol และค่า 6 Bits นั้นก็แปลงเป็นแรงดันได้ 1.65 Vol และค่า 0 Bits ก็คือค่าแรงดัน 0 Vol และตัว Nucleo เองนั้นก็จ่ายไฟลบไม่ได้ด้วย เลยจำเป็นต้องเริ่มต้นสร้าง Sinewave ที่ค่า 6 Bits แทน
Original of Sine Wave

และนี่คือวีดีโอประกอบการทดลอง Lab SPI ของกลุ่ม

 
ปล. ที่ใช้ Scope ตัวนี้ในการวัดเพราะเนื่องจากคอมที่ในการบันทึกวีดีโอนี้กากมาก ลงโปรแกรม Scope PC ไม่ได้ (เพราะติดAdmin)

ส่วนนี้เป็น Code ที่กลุ่มเราได้เขียนขึ้นมาครับ
https://www.dropbox.com/s/w1m8mkso3vjxb8a/Nucleo_LAB4s4_MCP4922_Sinewave.zip?dl=0

วันพฤหัสบดีที่ 5 พฤศจิกายน พ.ศ. 2558

DIGITAL LAB.No 3 Serial Commutation

LAB 3 Serial Commutation 

จากโจทย์ที่ให้มาว่า

          ให้ทำการเชื่อมต่อ Nucleo เข้ากับ Computer เพื่อทำการสื่อสารกันโดยใช้ Comport โดยการให้ Nucleo ส่งเมนูสำหรับสำหรับสั่งงานขึ้นที่หน้าจอ Serial Monitor
              MODE 1 สั่งงานไฟวิ่ง LED 8 ดวง
                MODE 2 อ่านสถานะ switch logic input 1 bits.
       ซึ่งการทำงานของกลุ่มเรานั้น จะต้องส่งตัวเลข 1 หรือ 2 ไป เพื่อทำการเลือกรูปแบบการทำงานของโปรแกรม
           ในกรณีที่ส่งค่าเลข 1 ออกไปนั้น โปรแกรมจะทำการเข้าสู่ MODE ไฟวิ่ง LED 8 ดวง ซึ่งเราได้กำหนดรูปแบบการทำงานของหลอด LED ไว้เป็นดังนี้
    ส่งค่า ‘a’ เพื่อสั่งให้ไฟ LED วิ่งสลับกันในรูปแบบ 10101010 , 01010101 ไปมาเรื่อยๆ
   ส่งค่า ‘d’ เพื่อสั่งให้ไฟ LED วิ่งในลักษณะ 11110000 , 00001111 , 11001100 , 00110011 ไปเรื่อยๆ
   ส่งค่า ‘s’ เพื่อสั่งให้ไฟ LED นั้นหยุดทำงาน และออกจาก MODE สั่งงานไฟ LED เพื่อกลับไปสู่เมนูหลัก
            และในกรณีที่ส่งเลข 2 ออกไป โปรแกรมจะเข้าสู่ MODE อ่านค่าสถานะ Switch logic input โดยการอ่านค่านั้น เราจะใช้สวิตซ์ D0 จากบอร์ด NX-100 และนำค่าที่อ่านได้นั้น มาแสดงสถานะบน Serial monitor ซึ่งการทำงานใน MODE นี้นั้น เราจะต้องส่งค่า ‘a’ อีกครั้งเพื่อยืนยันว่า เราจะทำการอ่านค่า input switch แล้วนะ
        หากสวิตซ์อยู่ตำแหน่ง OFF ค่าที่อ่านได้จะเป็น 0 โปรแกรมก็จะส่งค่า 0 ไปยัง Serial monitor
        หากสวิตซ์อยู่ตำแหน่ง ON ค่าที่อ่านได้จะเป็น 1 โปรแกรมก็จะส่งค่า 1 ไปยัง Serial monitor  และถ้าเกิดส่งค่า ‘s’ ออกไป โปรแกรมก็จะกลับไปสู่เมนูหลักเพื่อเลือก MODE การทำงานอีกครั้ง

วีดีโอการทำงานของโปรแกรมแลป 3


ส่วนนี้คือไฟล์โปรแกรม จากแลป 3 

DIGITAL LAB.NO 2 Analog To Digital Converter

LAB 2 Analog To Digital Converter


จากโจทย์ที่ให้มาว่า 




สิ่งที่ได้จากการทำแลป

         จากโจทย์ของแลป 2 คือ 2.1 คือ ให้ไฟ led 8 หลอดแสดงถึงระดับแรงดันออกมาโดยตามที่ทราบคือ nuclio สามารถอ่านค่าระดับ low ได้ตั้งแต่ 0-3.3 เราต้องเอาค่าตั้งแต่ 0-3.3 ออกมาแบ่ง stage ออกเป็น 8 ช่วง คือ  เอา 3.3 มา หาร 8 แล้วจะแบ่งช่งของการอ่านค่าระดับแรงดันได้ คือ

1.       0.4175

2.       0.825

3.       1.2475

4.       1.665

5.       2.082

6.       2.5

7.       2.9175

8.       3.3

เมื่อราได้ค่าของ voltage ทั้ง 8 stage แล้วเราก็เอาค่าทั้งหมดมากำหนดเงื่อนไข แล้วสั่งการให้แสดงผลออกทาหลอดไฟ LED ทั้ง 8 ดวง ตามระดับ voltage ที่อ่านได้ 

โดยแลป 2.2 การทำงานมีความคล้ายกัน โดยทำการเปลี่ยนจากการแสดงค่าออกมาเป็นหลอดไฟ เป็นการแสดงค่าออกทาง 7 segment แทน


และนี่เป็นวัดีโอของแลป 2.1 ทีแสดงค่าออกทางหลอดไฟ และ 2.2 แสดงออกทาง 7segment แทน




วีดีโอแลป 2.1 



 วีดีโอแลป 2.2

DIGITAL LAB.NO 1 GPIO Interface

LAB 1 GPIO Interface 

จากโจทย์  ที่ให้มาว่า 


           จากโจทย์ที่ให้ว่า ทำการเปลี่ยนแปลงที่ switch 3 ตัวแล้วทำให้เกิดการเปลี่ยนแปลงที่หลอดไฟ LED ทั้ง 8 ดวง โดยที่การเปลี่ยนแปลงของ switch ทั้งสามนั้นจะต้องมีการเปลี่ยนแปลงของหลอดไฟ led ทั้ง 3 รูปแบบ โดยทำให้การกด  switch 1 ครั้ง ทำให้เกิดการเปลี่ยนแปลงของรูปแบบ LED ผมจึงได้ลองคิดแบบง่ายๆ คือ เราก็ทำให้ LED ติดหมด แล้วก็ เมื่อทำการสับ switch 1 ครั้ง ก็จะทำให้มีการเปลี่ยนแปลงเกิดขึ้นได้ นี่เป็นแบบง่ายที่ได้ลองทำแล้วก็เกิดการเปลี่ยนแปลง จึงได้ลองศึกษาเงื่อนไขตัวเพิ่มเพิ่มเติม คือฟังก็ชั่น wait ซึ่งคือการหน่วงเวลา โดยการใส่ wait เข้าไปที่ตัโปรแกรมนั้นจะทำให้มีการหน่วงเวลาการติดดับของหลอดไฟได้ แล้วทำให้เกิดลูกเล่นมากมายใรการบังคับให้ไฟติด หรือ ดับ ทำให้เกิดการเปลี่ยนแปลงรูปแบบของหลอดไฟทั้ง 8 ดวงที่มากขึ้น 

                                                            และนี่คือวีดีโอของกลุ่มครับ 


อันนี้เป็นไฟล์โปรแกรมครับ