WEEK 12 : I2C and More





หลักการในการทำงาน

1.     เลือกโหมดผ่าน Switch D7 บนบอร์ด Nx-100  โดย 0 เป็นโหมดที่จะเก็บข้อมูลจาก Switch D0 – D6 (จาก LSB ไป MSB ตามลำดับ) ลงใน EEprom และ 1 เป็นโหมดที่จะอ่านข้อมูลจาก EEprom แล้วแสดงข้อมูลแต่ละบิตออกมาในรูป LED

2.     โหมดที่เก็บข้อมูลจาก Switch D0-D6 โดย D0 เป็น LSB และ D6 เป็น MSB ซึ่งจะเก็บข้อมูลไว้ใน EEprom  เมื่อมีการกด Debounce Switch โดยจะเริ่มเก็บใน EEprom ตั้งแต่ address ที่ 0 เมื่อมีการใส่ข้อมูลลงไปอีกชุด จะไปเก็บข้อมูลลงใน address ที่ 1 ไปเรื่อยๆตามลำดับ การกด Debounce Switch

3.     โหมดที่อ่านจะอ่านข้อมูลจาก EEprom เมื่อมีการกด Debounce Switch แล้วไปแสดงข้อมูลแต่ละบิตผ่าน LED  ซึ่งจะเริ่มอ่านข้อมูลตั้งแต่ address ที่ 0 ไปจนถึง address ที่มีการใส่ข้อมูลเข้ามา แล้วจะวนไปอ่านที่ address ที่ 0 ตามการกด Debounce Switch เช่น มีการใส่ข้อมูลเข้ามา 4 ครั้ง เราจะอ่านและแสดงข้อมูลออกมาในรูปแบบของ LED ตั้งแต่ address ที่ 0 ไปจนถึง address ที่ 3 แล้ววนไปที่ Address ที่ 0 ตามการกด Debounce Switch


File : https://onedrive.live.com/redir?resid=3F628B0AE1904BF7!515&authkey=!AHRfkHN5w2uZlfM&ithint=file%2crar

Links : https://www.youtube.com/watch?v=_GbA_JVL3ZQ

WEEK 11 : SPI(SINE WAVE)




LINKS : https://onedrive.live.com/redir?resid=3F628B0AE1904BF7!514&authkey=!ALMHc_Mrq3mdJdo&ithint=file%2crar

WEEK 10 : SERIAL COMMUNICATION






WEEK 10 : SERIAL COMMUNICATION
หลักการทำงาน
                วงจรนี้เป็นวงจรที่ให้เชื่อมต่อ Nucleo สื่อสารกับ Computer โดยใช้ Comport โดยให้ Nucleo ส่ง เมนู สาหรับสั่งงานขึ้นที่หน้าจอ Serial Monitor โดยจะแบ่งเป็น 2 mode มีการสั่งงานดังต่อไปนี้

Mode1 เมนูที่ 1 จะสั่งให้ LED 8 ดวงทำงาน เมื่อเข้าไปใน mode1 จะรอรับคำสั่งจากแป้นพิมพ์ทั้งหมด 3 ตัวคือ 3 ตัวคือ a, s, d
·  เมื่อเลือก a
ไฟ LED จะวิ่งทีละดวงจากด้านซ้ายไปยังด้านขวา วนไปเรื่อยๆ และในหน้าจอ Serial monitor จะแสดงคำว่า LED1 ไปเรื่อยๆจนกว่าจะ input คำสั่งใหม่
·  เมื่อเลือก s
ไฟ LED จะวิ่งทีละดวงจากด้านขวาไปยังด้านซ้าย วนไปเรื่อยๆ และในหน้าจอ Serial monitor จะแสดงคำว่า LED2 ไปเรื่อยๆจนกว่าจะ input คำสั่งใหม่
· เมื่อเลือก d
จะออกไปยังเมนูหลัก  เพื่อรอคำสั่งถัดไป

Mode 2 เมนูที่ 2 จะสั่งให้รับค่าจากสวิตซ์ในบอร์ด NX-100 โดยเชื่อมต่ออยู่กับ D2 ของ Nucleo และแสดงสถานะบน Serial monitor ถ้าสวิตซ์ Off อยู่จะแสดงค่าออกมาเป็น 0 ถ้า On อยู่จะแสดงค่าออกมาเป็น 1




Link : http://youtu.be/XOfevbCa44E (Video)

Link : http://1drv.ms/1Xk6Ddd (Code program)

WEEK 9 : GPIO & ADC









GPIO  :   LAB 1


หลักการทำงาน

วงจรนี้เป็นวงจรการควบคุม LED โดยใช้ Switch ทั้งหมด 3 Switch ซึ่งจะใช้  STM32FA411 Nucleo  Microcontroller ในการควบคุม ประมวลผล ให้ได้รูปแบบการแสดง LED ที่แตกต่างกัน โดยเมื่อเปลี่ยน INPUT ของ Switch จะทำให้รูปแบบเปลี่ยน LED เปลี่ยนไปดังตารางต่อไปนี้




หลักการในการเขียนโปรแกรม

แนวคิดในการเขียนโปรแกรม  เราจะใช้คำสั่ง BusIn และ BusOut ซึ่งในการ Input และ Output     ซึ่งจะเป็นการรับค่าและส่งค่าหลาย Digital Pins โดยจะคิดรวมค่าเป็นเพียงค่าเดียวซึ่งจะแปลงเลขฐาน 2 เป็นในรูปแบบเลขฐาน 10 เช่น ถ้า SW3 = 1 , SW2 =  0 , SW1 = 1 ซึ่งเมื่อ INPUT มาในรูป BusIn  จะมีค่าเท่ากับ 9  แล้วนำค่าที่ได้จาก BusIn  ไปเป็นตัวเช็คว่าเราสั่งให้ LED อยู่ในรูปแบบไหน และ  ในการสั่งให้ LED ติดเราจะนำอนุกรมเลขคณิตมาคิด ซึ่งรูปแบบอนุกรมเลขคณิตที่ต่างกันจะได้ รูปแบบการติดของ LED ที่ต่างกัน โดยเลขที่ได้มาจากอนุกรมเลขคณิตจะเป็นเลขฐาน 10 แต่เราใช้ คำสั่ง BusOut  เราจึงสามารถ Output เป็นเลขฐาน 2 ที่มีทั้งหมด 8 บิต ผ่าน LED 8 ดวง โดย LED จะแสดงถึงเลขแต่ละบิตของฐาน 2  เช่น เลข 65 ในฐาน 10 จะเท่ากับ  0010 0001 ในเลขฐาน 2

                      LED 1      LED 2       LED 3      LED 4     LED 5    LED 6      LED 7      LED  8
                         o      o        o       o      o      o       o       o
                          0           0               1              0           0            0             0              1

ดังนั้นจะมี LED 3 และ LED 8 ที่ไฟติด


ส่วนประกอบต่างๆ

-   สายไฟ
-    NX – 100 Plus Digital Circuit Experiment Board
     -  Output  LED (D0 – D7)
     -  Input Switch (D0 – D2)





-   STM32FA411 Nucleo  Microcontroller
    -  GPIO โดย Output คือ (D2-D9) , Input คือ (D10-D12)



LINKS : https://www.youtube.com/watch?v=UNKcxQqD5FU&html5=1




ADC  :   LAB 2.1


หลักการทำงาน

            วงจรนี้เป็นวงจรที่อ่านค่าจาก Analog โดยใช้  Adjust Voltage  (Range 0 – 5V) ใน NX – 100 Plus Digital Circuit Experiment Board  แล้วใช้ STM32FA411 Nucleo  Microcontroller  ในประมวลผลและควบคุม ซึ่งจะแสดง OUTPUT เป็น LED ทั้งหมด 8 เป็นระดับไป โดย Output Voltage ที่มากที่สุด LED จะติดทั้งหมด 8 ดวง เมื่อ Output Voltage น้อยลง LED จะติดน้อยลง


หลักการในการเขียนโปรแกรม

          ในการเขียนเราจะใช้คำสั่ง AnalogRead() เพื่ออ่านค่าจาก Adjust Voltage ใน NX – 100 Plus Digital Circuit Experiment Board  ซึ่งค่าที่ได้จะมากกว่า 3.3 V และ เกินที่ Port ของ Nucleo  Microcontroller จะรับได้เราจึงต้องระวังในการทดลองเพราะอาจจะทำให้อุปกรณ์เสียหายได้ แล้วเราจะนำค่าที่อ่านมา  ซึ่งอยู่ในช่วง 0 -1 มาแปลงให้อยู่ในช่วง 0-3.3V แล้วนำมาแบ่งเป็น 8 ช่วง ตาม LED  ดังนั้นจะแสดงระดับ LED ตาม ระดับโวลต์ที่ออกมา

ส่วนประกอบต่างๆ
-   สายไฟ
-    NX – 100 Plus Digital Circuit Experiment Board
          - Output  : LED (D0 – D7)
          - Input     : Adjust Voltage  
-    STM32FA411 Nucleo  Microcontroller
            GPIO โดย Output โดยเป็น Digital Output  (D2- D9) , Input โดยเป็น Analog Input (A1)


ADC  :   LAB 2.2


หลักการทำงาน

             วงจรนี้เป็นวงจรที่อ่านค่าจาก Analog โดยใช้  Adjust Voltage  (Range 0 – 5V) ใน NX – 100 Plus Digital Circuit Experiment Board  แล้วใช้ STM32FA411 Nucleo  Microcontroller  ในประมวลผลและควบคุม เหมือนกับ Lab 2.1 ซึ่งจะแสดง OUTPUT เป็น เลขทศนิยม 1 ตำแหน่ง โดย 7-Segment       2 ตัว 

หลักการในการเขียนโปรแกรม

           ในการเขียนเราจะใช้คำสั่ง AnalogRead() เพื่ออ่านค่าจาก Adjust Voltage ใน NX – 100 Plus Digital Circuit Experiment Board  ซึ่งค่าที่ได้จะมากกว่า 3.3 V และ เกินที่ Port ของ Nucleo  Microcontroller แล้วเราจะนำค่าที่อ่านมาซึ่งอยู่ในช่วง 0 -1 มาแปลงให้อยู่ในช่วง 0-3.3V แล้ว Output ออกมาเป็น 7 – Segment  โดยเราจะหาเลขหลักหน่วยโดยแปลงค่าที่หามาได้เก็บไว้ในตัวจำนวนเต็ม และ หาเลขทศนิยมจากการ มอส หาเศษ ส่วนของ จุดระหว่างตัวเลขเราจะต่อกับ 5 V 


ส่วนประกอบต่างๆ

- สายไฟ
- NX – 100 Plus Digital Circuit Experiment Board
       - Output  :  7-Segment 2 ตัว(D0 – D7)
       - Input     :  Adjust Voltage  
- STM32FA411 Nucleo  Microcontroller
       GPIO โดย Output โดยเป็น Digital Output  (D2-D9) , Input โดยเป็น Analog Input (A1)


LINKS : https://www.youtube.com/watch?v=i_6P1WGdNGU

FILES : http://1drv.ms/1QGSW6m

WEEK 7 : DESIGNING SEQUENTIAL LOGIC CIRCUIT

DESIGNING SEQUENTIAL CIRCUITS

Finite State Machine: เป็นการวาดแผนภาพไดอาแกรมขึ้นมาโดยใส่ชื่อ state, input, output

ตัวอย่าง สร้างเงื่อนไข state ปุ่มกดของรายการต่างๆ เพื่อหาคนที่กดก่อน


Moore and Mealy Machines

      Moore: output ขึ้นอยู่กับ state                                                                         Mealy: output ขึ้นอยู่กับ input



Assign binary numbers to each state: เปลี่ยนชื่อ state กลายเป็น binary เพื่อนำไปสร้างเป็น current state


Create State Table: สร้างตารางขึ้นมาคล้ายกับ tube table

ประกอบด้วย  
Current state คือ ใส่ชื่อ state ที่แปลงเป็น binary แล้ว
Input               คือ ค่าที่ออกมาแต่ละ state นั้นๆโดยจะมี 2 ค่า นั้นคือ 0 และ 1
Next state      คือ ดูจาก Current state ตามด้วย input 1 และ 0 แล้วดูว่าถ้า input ที่เป็น 1 state ต่อไปคืออะไร และ input               คือ ที่เป็น 0 state ต่อไปคืออะไร จำนวนจะขึ้นอยู่ตาม Current state
Output            คือ ดูค่าจาก Current state แล้วเอาค่า Output มาใส่



Assigning filp-flops

        Input ของ filp-flops ดูจาก Current และ Next state ว่าควรใส่ logic อะไรเพื่อให้เป็นไปตาม Current และ Next state หรือถ้าใช้แบบ D Type สามารถคัดลอกจาก Next state ได้เลย

** จำนวน filp-flops ขึ้นอยู่กับจำนวนบิตของ state นั้นคือ A, B**
  • แบบ D Type




  •    แบบ JK filp-flops (2 ขา)




สามารถใส่ค่าตามตารางได้เลย ซึ่งดูจาก Current และ Next state เทียบกับตารางที่สร้างแล้วใส่ค่า JK ลงไปในตาราง




Determine the Boolean input (สนใจ Current, input, Input filp-flops)
โดยใช้ K-map ในการยุบเพื่อเอาค่า input ที่ได้ไปสร้างวงจร

  • แบบ D Type




กำหนด   A, B = Current
              I        = input


  • แบบ JK filp-flops


กำหนด   A, B = Current
              I        = input



Determine the Boolean output (สนใจ Current, output)
โดยใช้ K-map ในการยุบเพื่อเอาค่า output ที่ได้ไปสร้างวงจร



      เมื่อได้ค่า input และ output ของทั้งแบบ D Type และ JK filp-flops แล้ว สามารถนำมาเขียนเป็น Draw the circuit เพื่อนำไปต่อวงจรจึงจะได้สิ่งที่โจทย์ต้องการตั้งแต่ต้น


Class Work