Friday, December 11, 2015

การเปลี่ยน i2c address

การเปลี่ยน address ของอุปกรณ์เซนเซอร์ ที่ใช้การสื่อสารบัส i2c ที่ศึกษามา 2 วิธี
ได้แก่
1. เปลี่ยนโดยการเขียน code python
2. เปลี่ยนโดยใช้โปรแกรม explorer ของ OpenElectrons

เปลี่ยน Address โดยการเขียน code python

  วิธีการนี้เป็นวิธีการของผู้ที่ใช้นามแฝงว่า dannyoneill จาก forums ของ https://www.raspberrypi.org ในหัวข้อ i2c addressing - set device to unaddressable by RPi address! ซึ่งเป็นเพียงแนวทางในการเปลี่ยน address ในการสื่อสารบัส i2c เท่านั้น เพราะใน forums เองยังหาข้อมสรุปถึงขั้นตอนการทำให้สำเร็จอยู่ โดยในบางความเห็นก็แนะนำให้เปลี่ยนโดย ใช้ serial

  ขั้นตอนการเปลี่ยน Address โดยใช้ code python

  1. เชื่อมต่ออุปกรณ์ เข้ากับบอร์ด RPi
  2. ใช้ code ต่อไปนี้ในการเปลี่ยน address


  สำหรับการแก้ปัญหาโดยใช้ serial ตามที่มีความเห็นแนะนำมาใน forum มีขั้นตอนดังนี้
  1. เชื่อมต่ออุปกรณ์เข้ากับบอร์ด RPi      
    Pi 5V  --- device 5V
    Pi ground --- device ground
    Pi ground --- device mode
    Pi TX --- device RX
  2. Configue RPi serial ที่ baud rate 9600
    stty -F /dev/ttyAMA0 9600
  3. ใช้ echo เพื่อส่งคำสั่งไปยังอุปกรณ์สำหรับเปลี่ยน address ของอุปกรณ์ 0 ถึง 5   
    echo -ne "\x00\xA0\x00\xAA\x00\xA5\x00\x05" >/dev/ttyAMA0
  4.  การเปลี่ยน address ของอุปกรณ์ 5 ถึง 0
    echo -ne "\x05\xA0\x05\xAA\x05\xA5\x05\x00" >/dev/ttyAMA0

เปลี่ยนโดยใช้โปรแกรม explorer ของ OpenElectrons

  สำหรับการเปลี่ยน Address โดยใช้โปรแกรม explorer นั้น จะใช้ภาษา python เช่นเดียวกับวิธีข้างต้น แต่จะต้องมีการติดตั้ง module OpenElectrons_i2c ของบริษัท OpenElectrons โดยมีขั้นตอนการใช้งานดังนี้
  1. ดาวน์โหลด module OpenElectrons_i2c จาก http://pypi.akbild.ac.at/OpenElectrons_i2c/ และทำการแตกไฟล์ที่ได้มา
  2. ติดตั้ง module ตามขัั้นตอนดังต่อไปนี้
    cd OpenElectrons_i2c
    sudo  python setup.py install
  3. เชื่อมต่ออุปกรณ์เข้ากับบอร์ด RPi
  4. หา address ของอุปกรณ์
    sudo i2cdetect -y 1
  5. ดาวน์โหลดโปรแกรม explorer และทำการแตกไฟล์
  6. ใช้งานโปรแกรม explorer ตามขั้นตอนดังนี้
    cd explorer
    sudo python explore.py
    โปรแกรมจะแสดงข้อมูลของอุปกรณ์เซนเซอร์ที่ต่ออยู่กับบอร์ด RPi
  7. ดาวน์โหลดโปรแกรมเปลี่ยน Address และแตกไฟล์
  8. เปลี่ยน Address โดยใช้คำสั่ง
   ./addresschange (i2c address) (new i2c address)




   
    

Thursday, June 25, 2015

การทดสอบและสังเกตสัญญาณที่ได้จากเซนเซอร์ Hall Effect

วัตถุประสงค์

    เพื่อทดสอบและสังเกตเอาต์พุตที่ได้จากการเซนเซอร์ Hall Effect A1302 ซึ่งในส่วนนี้แรงดันเอาต์พุตสูงสุดของ Hall Effect Sensor คือ 5V และเป็น analog แต่ GPIO ของบอร์ดราสเบอร์รี่พายสามารถรับได้สูงสุดเพียง 3.3V และเป็นดิจิตอลดังนั้นจึงต้องมี วงจร comparator  มาเปรียบเทียบ หากเซนเซอร์ตรวจพบแม่เหล็กจะได้เอาต์พุตที่่ผ่าน comparator เป็น 1 คือแรงดันจากเซนเซอร์มากกว่า 2.5 แต่ถ้าไม่พบแรงดันจะเป็น 0 แล้วทำการลดแรงดันที่ได้จาก comparator ให้ไม่เกิน 3.3 V จึงแบ่งการออกแบบวงจรและการทดสอบออกเป็น 3 ส่วนคือ
   1.วงจร Hall Effect Sensor
   2. วงจร Comparator และ วงจรแบ่งแรงดัน
   3. การทดสอบวงจรโดยรวม

1. วงจร Hall Effect Sensor


การต่อวงจร Hall Effect Sensor

    การทดสอบเบื้องต้น

    1. ทดสอบป้อนแรงดัน Vcc เป็น 5V แล้วทำการวัดแรงดัน Vout ก่อนนำแม่เหล็กมาเข้าใกล้
        - วัดแรงดัน Vout ได้ 2.56 V

    2. ป้อนแรงดันเช่นเดียวกับในขั้นตอนที่ 1 แล้วทำการลดแรงดัน Vcc ทีละ 0.5 V จนเหลือ 0 V และสังเกตแรงดัน Vout ได้ผลการทดสอบดังนี้ 
แรงดัน Vcc และ Vout ของ Hall Effect Sensor

    3.นำแม่เหล็กมาวางห่างจากเซนเซอร์ 1 cm และทำการวัดแรงดัน Vout เช่นเดียวกันขั้นตอนที่ 2 ดังรูป

การวางแม่เหล็กและเซนเซอร์




      ได้ผลการวัดแรงดัน Vout ดังนี้





    สรุปการทดสอบ Hall Effect Sensor

    จากการทดสอบพบว่า เมื่อแรงดัน Vcc ลดลง แรงดัน Vout จะลดลงด้วย ซึ่งจะส่งผลกระทบต่อการใช้งานจริง เพราะในวงจร comparator มีการกำหนดแรงดันที่ใช้เปรียบเทียบไว้ ที่ 2.5 แต่ถ้าหากแรงดันจาก Hall Effect ลดลงจะทำให้ค่าที่ได้เกิดความผิดพลาด ซึ่งอาจจะแก้ไขโดยใช้วงจรรักษาระดับแรงดันไฟเลี้ยงที่ป้อนให้กลับเซนเซอร์และวงจร comparator

2.วงจร comparator และวงจรแบ่งแรงดัน


แสดงการต่อวงจร Comparator

    การทดสอบเบื้องต้น

    1. กำหนด  Vin ขาลบ(ขา 2)ของไอซี LM393 เป็น 2.5 และป้อนสัญญาณเข้าที่ Vin ขาบวก(ขา 3) จากฟังก์ชัน generator ที่ความถี่ f = 1kHz ,Amplitude = 5Vpp และ offset = 2.5 V


วงจร Comparator 


    2. สังเกตสัญญาณเอาต์พุตที่ได้เทียบกับ Vin ขาบวก โดยที่ Vin มากกว่า 2.5 V สัญญาณเอาต์พุตที่ได้จะมี logic เป็น 1 แต่ถ้าหากแรงดัน Vin น้อยกว่า 2.5 V  สัญญาณเอาต์พุตที่ออกมาจะมี logic 0

สัญญาณอินพุต และเอาต์พุต ที่ป้อนให้กับวงจร Comparator



3. การทดสอบวงจรโดยรวม

     นำวงจร Hall Effect และวงจร Comparator มาทดสอบร่วมกัน เพื่อสังเกตลักษณะของเอาต์พุตที่ได้ ว่ามีลักษณะเป็นอย่างไร ซึ่งในที่นี้จะใช้อุปกรณ์ในการขับมอร์เตอร์มาช่วยในการทดสอบ


อุปกรณ์ที่ใช้

    1. วงจร comparator และวงจร Hall Effect
    2. Brushless Control Box 36V
    3. Power Supply จำนวน 2 เครื่อง
    4. แม่เหล็ก
    5. สายไฟสำหรับต่อวงจร
    6. ออสซิลโลสโคป จำนวน 1 เครื่อง
    7. มัลติมิเตอร์
    8. มอเตอร์
    9. อุปกรณ์วัดความเร็วจักรยาน


ขั้นตอนการทดสอบ

    1. นำเอาต์พุตของวงจร Hall Effect มาต่อเข้ากับขา Vin (ขาบวก) ของวงจร Comparator และติดตั้งวงจร Hall Effect ไว้ใกล้กับส่วนที่เป็นดุมล้อของมอเตอร์และติดแม่เหล็กให้มีระดับตรงกันกับ Hall Effect Sensor และป้อนแรงดันไฟเลี้ยง 5 V ให้กับทั้งสองวงจร 




    2. ต่ออุปกรณ์ Brushless เข้ากับมอเตอร์ ชุดคันเร่งและเบรค จากนั้นป้อนแรงดัน 30 V ให้กับอุปกรณ์ Brushless
    3. ติดอุปกรณ์วัดความเร็วของจักรยานไว้ในระดับเดียวกันกับ Hall Effect Sensor เพื่อวัดความเร็วการหมุนของมอเตอร์


    4. นำออสซิลโลสโคปมาวัดสัญญาณเอาต์พุตของวงจร Hall Effect และวงจร Comparator โดยให้ช่องสัญญาณที่ CH1 เป็นสัญญาณจากวงจร Hall Effect และ ช่องสัญญาณที่ CH2 เป็นสัญญาณจากวงจร Comparator
    5. ทดสอบเร่งความเร็วของมอเตอร์ และบันทึกภาพสัญญาณที่ได้
        โดยก่อนทำการเร่งความเร็วของมอเตอร์ ได้วัดแรงดันจากคันเร่งที่เป็น analog voltage ได้ 0.867 V และความเร็วของล้อเป็น 0 km/h
        5.1 เร่งความเร็วมอเตอร์โดยป้อนแรงดันจากคันเร่ง 1.588 V และวัดความเร็วได้ 8.6 km/h ได้สัญญาณดังรูป


        สัญญาณที่ได้มานั้นมีความกว้าง 31.0 ms และมีความถี่ 1.078 Hz โดยที่ CH1(สีเหลือง) เป็นเอาต์พุตของวงจร Hall Effect วัดแรงดันสูงสุดได้ 4.88 V ส่วน CH2(สีฟ้า) เป็นเอาต์พุตของวงจร Comparator ที่ผ่านการแบ่งแรงดันมาแล้ว วัดแรงดันสูงสุดได้ 2.48 V
        
        5.2 เร่งความเร็วมอเตอร์โดยป้อนแรงดันจากคันเร่ง 1.772 V และวัดความเร็วได้ 12.7 km/h วัดความกว้างของสัญญาณได้ 21.4 ms และมีความถี่ 1.667 Hz ดังรูป

        5.3 เร่งความเร็วมอเตอร์โดยป้อนแรงดันจากคันเร่ง 1.900 V และวัดความเร็วได้ 15.3 km/h ได้สัญญาณที่มีความกว้าง 17.0 ms และมีความถี่ 2.016 Hz ดังรูป




        5.4 เร่งความเร็วมอเตอร์โดยป้อนแรงดันจากคันเร่ง 2.50 V (สูงสุด)และวัดความเร็วได้ 26.9 km/h ได้สัญญาณที่มีความกว้าง 9.80 ms และมีความถี่ 3.57 Hzดังรูป





         5.5 เร่งความเร็วมอเตอร์โดยป้อนแรงดันจากคันเร่ง 3.48 V (สูงสุด)และวัดความเร็วได้ 38.2 km/h ได้สัญญาณที่มีความกว้าง 17.0 ms และมีความถี่ 2.016 Hz ดังรูป





สรุปการทดสอบ

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























Friday, April 17, 2015

Multiprogramming, Multiprocessing, Multitasking and Multithreading


Multiprogramming

    ระบบมัลติโปรแกรมมิ่ง(Multiprogramming System) จะมีหนึ่งโปรแกรมหรือมากกว่า ในหน่วยความจำหลัก(main memory) ที่พร้อมจะดำเนินการ(execute) แต่จะมีเพียงหนึ่งโปรแกรมที่จะได้รับ CPU สำหรับการทำคำสั่ง ในขณะที่โปรแกรมอื่นๆ ต้องรอให้ถึงลำดับของตัวเอง โดยแนวคิดหลักของมัลติโปรแกรมมิ่ง คือลดการใช้ของ CPU time เช่น ถ้าหากในขณะนี้มีกระบวนการที่กำลังทำงานเกี่ยวกับ I/O (ไม่ต้องใช้ CPU ในการทำให้เสร็จ) แล้วระบบปฏิบัติการ (OS) มีการขัดจังหวะ(interrupt) การทำงานในกระบวนการดังกล่าว และกำหนดให้โปรแกรมที่เป็นหนึ่งในหน่วยความจำหลักเตรียมพร้อมที่จะดำเนินการ ซึ่งวิธีนี้จะไม่มีการสูญเสีย CPU time ที่ระบบะบบปฏิบัติการรอการทำงาน I/O ให้เสร็จ อีกทั้งกระบวนการที่กำลังทำงานอยู่จะยังคงดำเนินการไปจนกว่าจะมีกระบวนการหนึ่งเลิกใช้ CPU หรือยุติการใช้ I/O
    อย่างไรก็ตามเป้าหมายสูงสุดของมัลติโปรแกรมมิ่ง คือการทำให้ CPU ยุ่งมากที่สุดจนกว่าจะมีกระบวนการหนึ่งพร้อมสำหรับการดำเนินการ
    ข้อควรจำ หากในคำสั่งอย่างเช่น ระบบที่มีการทำงานอย่างถูกต้อง ระบบปฏิบัติการควรจะโหลดโปรแกรมต่างๆ ไปยังหน่วยความจำหลักที่มีการแบ่งพิื้นที่ไว้ และให้มีการป้องกันการร้องขอ เพื่อหลีกเลี่ยงการเกิดโอกาสที่กระบวนการหนึ่ง อาจเปลี่ยนแปลงกระบวนการอื่นๆได้ ส่วนปัญหาอื่นคือระบบควรมีการระบุ address ถ้ามีโปรแกรมเกิด fragmentation ในขณะที่เข้าหรือออกจากหน่วยความจำหลัก และอีกหนึ่งปัญหาที่ต้องมีการจัดการคือโปรแกรมขนาดใหญ่มักจะไม่พอดีกับหน่วยความจำ ซึ่งจะต้องแก้ปัญหาโดยการใช้ pagination และ virtual memory
     สุดท้ายนี้ ถ้ามี N กระบวนการที่พร้อมสำหรับ CPU ในกรณีที่เกิดข้อผิดพลาดอาจจะมีหนึ่งโปรแกรมที่จะรอ N-1 โปรแกรมในการทำให้สำเร็จก่อนจะเริ่มดำเนินการ



Multiprocessing

   มัลติโปรเซสซิ่ง(Multiprocessing) คือการใช้งานตั้งแต่ 2 CPU ขึ้นไปภายในระบบคอมพิวเตอร์เพียงระบบเดียว ซึ่งอาจรวมไปถึงความสามารถของระบบที่สนับสนุนมากกว่าหนึ่งโปรเซสเซอร์ (processor) และความสามารถในการจัดการงาน(task)ระหว่างโปรเซสเซอร์
   ในบางครั้งหรือบางพจนานุกรม มัลติโปรเซสซิ่ง หมายถึงกระบวนการ(process)หลายๆกระบวนการ ที่ดำเนินการอยู่ในเวลาเดียวกัน แต่ถ้าอธิบายในเชิงฮาร์ดแวร์(hardware) มัลติโปรเซสซิ่งจะสื่อถึง ระบบคอมพิวเตอร์ที่มีหน่วยประมวลผลหลายๆหน่วย โดยใช้หน่วยความจำหลักและอุปกรณ์ต่อพ่วงร่วมกัน เพื่อการดำเนินการไปพร้อมกับโปรแกรม ส่วนในระดับของระบบปฏิบัติการนั้นมัลติโปรเซสซิ่ง หมายถึง กระบวนการที่มีการดำเนินการไปพร้อมๆกัน หรือ กระบวนการแบบขนาน(parallel processing)



Multitasking

    ในระบบคอมพิวเตอร์ มัลติทาร์กกิ้ง(multitasking) คือ กระบวนการที่งาน(task)หลายๆงาน หรือเรียกกันว่าโปรเซส(process) ดำเนินการไปในระยะเวลาเดียวกัน ซึ่งงานแต่ละงานจะทำงานไปพร้อมกันแทนการทำงานแบบเรียงตามลำดับ โดยงานจะแชร์ CPU และหน่วยความจำหลัก แต่ก็ไม่ได้หมายถึงกระบวนการทำงานแบบขนาน
    กรณีที่คอมพิวเตอร์มีหน่วยประมวลผลเดียว มีเพียงหนึ่งงานที่ได้ทำงาน ณ เวลาใดๆ ซึ่งหมายความว่า CPU ถูกกระตุ้นให้ทำคำสั่งสำหรับงานดังกล่าว แต่มัลติทาร์กกิ้งสามารถแก้ปัญหาได้โดย กำหนดให้งานหนึ่งงาน ดำเนินการที่เวลาใดๆ และเมื่อมีงานที่รออยู่ จะกำหนด CPU ให้ดำเนินการจากงานหนึ่งไปยังอีกงานหนึ่ง เรียกว่า context switch ถ้าเกิด context switch บ่อยๆ พอ จะทำให้กระบวนการทำงานแบบขนานเสมือนเกิดขึ้นสำเร็จ
    ส่วนในกรณีที่มีมัลติโปรเซสเซอร์(multiprocessor) หรือ มัลติคอร์(multicore) จะช่วยให้งานมากกว่าหนึ่งงานดำเนินการไปได้ในครั้งเดียว(หนึ่งงาน ต่อหนึ่ง CPU หรือ core)


Multithreading

   มัลติเธรดดิง คือ รูปแบบการดำเนินการที่ยอมให้หนึ่งกระบวนการหรือโปรแกรมมี code segment (threads) มากกว่าหนึ่งดำเนินการไปพร้อมกัน โดยการสลับ(context) กันของงานภายในโปรแกรมดังกล่าว ซึ่งจะทำงานได้ดีในกรณีที่ใช้ CPU ที่มีมากกว่า 2 core ขึ้นไป ด้วยการแบ่งงานให้กับแต่ละ core ของ CPU ไปดำเนินการ แต่สำหรับกรณีที่ CPU มีเพียง 1 core การทำงานของโปรแกรมจะทำงานแบบเรียงตามลำดับก่อน-หลัง ทำให้ประสิทธิภาพการทำงานยังคงเท่าเดิม

ที่มา:

Multiprogramming, Multiprocessing, Multitasking, and Multithreading 

Multiprocessing 

Computer multitasking    

มัลติเธรดดิง (Multithreading)