วันจันทร์ที่ 20 กันยายน พ.ศ. 2553

Ultrasonic Distance Detector Module : SRF05

โมดูลตรวจจับและวัดระยะทางด้วยอัลตร้าโซนิก


        SRF05 เป็นแผงวงจรวัดตรวจจับและวัดระยะทางด้วยคลื่นอัลตร้าโซนิกที่มีความเที่ยงตรงสูงโดยสามารถวัดระยะทางได้ไกลถึง 4 เมตร ถูกออกแบบมาให้ใช้งานกับไมโครคอนโทรลเลอร์ได้ง่ายโดยใช้ขาเชื่อมต่อเพียง 1 หรือ 2 ขา ขึ้นอยู่กับการกำหนดรูปแบบการทำงานทางฮาร์ดแวร์ เหมาะอย่างยิ่งกับการประยุกต์ใช้งานด้านหุ่นยนต์


คุณสมบัติ
  • ใช้ไฟเลี้ยง +5 โวลต์ ต้องการกระแสไฟฟ้า 30 มิลลิแอมป์
  • ใช้ตัวรับและส่งคลื่นอัลตร้าโซนิก ใช้ความถี่ 40 กิโลเฮริตซ์ ในการทำงาน
  • วัดระยะทางในช่วง 1 เซนติเมตรถึง 4 เมตร
  • สัญญาณพัลส์สำหรับกระตุ้นการทำงาน ต้องมีความกว้างอย่างน้อย 10 ไมโครวินาที
  • ให้ผลลัพธ์จากการวัดระยะเป็นค่าความกว้างพัลส์ซึ่งเป็นสัดส่วนกับระยะทางที่วัดได้  
  • มีขนาดเล็กคือ 43 มิลลิเมตร × 20 มิลลิเมตร × 17 มิลลิเมตร (กว้าง  × ยาว  ×สูง)
  • สามารถติดต่อได้ 2 แบบคือ แบบ 2 สัญญาณ (Echo กับ Trigger) และแบบอนุกรมสัญญาณเส้นเดียว

หลักการทำงาน
               SRF05 จะทำการส่งสัญญาณคลื่นอัลตร้าโซนิกออกไป แล้ววัดระยะเวลาที่มีสัญญาณสะท้อนตอบกลับมา เอาต์พุตที่ได้จาก SRF05 จะอยู่ในรูปของความกว้างพัลส์ซึ่งสัมพันธ์กับระยะทางของวัตถุที่ตรวจจับได้ ความถี่ของสัญญาณอัลตร้าโซนิกของ SRF05 คือ กิโลเฮริตซ์ ถูกส่งออกไปในอากาศด้วยความเร็ว 1.125 ฟุตต่อมิลลิวินาที (ประมาณ 346 เมตรต่อวินาที) ดังนั้นเมื่อทราบความเร็วในการเคลื่อนที่ของคลื่น เวลาเริ่มต้นส่งคลื่น และเวลาที่ได้รับ เสียงสะท้อนกลับมา ซึ่งความกว้างพัลส์สะท้อนต้องอยู่ในช่วง100 ไมโครวินาที ถึง 25 มิลลิวินาที จึงสามารถคำนวณหาค่าของระยะทางได้ ถ้ามากกว่า 30 มิลลิวินาที แสดงว่าตรวจจับไม่พบวัตถุ

 รูปแสดงหลักการตรวจจับวัตถุโดยใช้สัญญาณความถี่เหนือเสียงหรืออัลตร้าโซนิก


จุดเชื่อมต่อการใช้งานของ SRF05

                                                                       รูปแสดงจุดเชื่อมต่อการใช้งานของ SRF05

จุดเชื่อมต่อสำหรับใช้งานมีทั้งหมด 5 จุด
                                1. ขาไฟเลี้ยง (+5 V) สำหรับต่อไฟเลี้ยงแรงดัน +5 โวลต์
                                2. ขา Echo Pulse Output (ECHO) เป็นขาเอาต์พุตสำหรับส่งสัญญาณพัลส์ออกจาก SRF05 ซึ่งการใช้งานจะนำขานี้ไปต่อเข้ากับพอร์ตอินพุตของไมโครคอนโทรลเลอร์เพื่อตรวจจับความกว้างของสัญญาณพัลส์ที่ส่งออกมาเพื่อแปลความหมายออกมาเป็นระยะทางอีกครั้งหนึ่ง
                                3. ขา Trigger Pulse Input (TRIGGER) เป็นขาอินพุตรับสัญญาณพัลส์ที่มีความกว้างอย่างน้อย 10 ไมโครวินาทีเพื่อกระตุ้นการสร้างคลื่นอัลตร้าโซนิกความถี่ 40 กิโลเฮริตซ์ ออกสู่อากาศจากตัวส่ง ดังนั้นเมื่อคลื่นเคลื่อนที่ไปกระทบสิ่งกีดขวางที่อยู่เบื้องหน้าก็จะเกิดการสะท้อนกลับมายังตัวรับ และถูกแปลงออกมาเป็นความกว้างของสัญญาณพัลส์ที่จะส่งออกไปทางขา ECHO นอกจากนี้ในโหมด 1 สัญญาณ จะใช้จุดนี้เป็นจุดสื่อสารข้อมูลอนุกรมเพื่อรับส่งค่าการวัดกับไมโครคอนโทรลเลอร์
                                4. ขา MODE สำหรับเลือกรูปแบบการติดต่อกับ SRF05 
                                    ปล่อยลอยไว้ (NC): เลือกให้ติดต่อแบบ 2 สัญญาณ ผ่านจุดต่อ ECHO และ TRGGER
                                    ต่อลงกราวด์          :  เลือกให้ติดต่อแบบ 1 สัญญาณ ผ่านจุดต่อ TRIGGER
                                5. ขา GND สำหรับต่อกราวด์ 0 โวลต์

โหมดการใช้งาน
มีโหมดการใช้งาน 2 โหมด
                1. การติดต่อแบบ 2 สัญญาณ ผ่านจุดต่อ ECHO และ TRIGGER

รูปแสดงจุดเชื่อมต่อการใช้งานของ SRF05 ในกรณีติดต่อแบบ 2 สัญญาณ

               รูปไดอะแกรมเวลาแสดงสัญญาณที่ส่งไป และสัญญาณที่ตอบกลับของ SRF05 ในกรณีติดต่อแบบ 2 สัญญาณ


                2. การติดต่อแบบ 1 สัญญาณ ผ่านจุดต่อ TRIGGER

รูปแสดงจุดเชื่อมต่อการใช้งานของ SRF05 ในกรณีติดต่อแบบ 1 สัญญาณ

รูปไดอะแกรมเวลาแสดงสัญญาณที่ส่งไป และสัญญาณที่ตอบกลับของ SRF05 ในกรณีติดต่อแบบ 1 สัญญาณ


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

Cross toolchain and Install Cross toolchain

            Toolchain เป็นเครื่องมือจำเป็นที่ใช้ในการ Compile โปรแกรมเพื่อใช้งานในการรันโปรแกรมบน platform ต่าง ๆ อาทิเช่น gcc , g++ เป็นต้น เช่นเดียวกันในการจะนำโปรแกรมที่เขียนบนเครื่องคอมพิวเตอร์ของเรานั้นไปทำ งานบน  mini2440 (ARM-9) เราก็จะต้องอาศัยเจ้า Cross toolchain นี้ช่วยในการ Compile โปรแกรม หรือ Source Code ของเราเสียก่อน
            Toolchain มีให้เลือกใช้งานมากมายแต่ตัวที่แนะนำคือ arm-angstrom เพราะเป็นที่นิยมมากมายในวงการผู้ที่สนใจและพัฒนาบอร์ดนี้  แต่ก็สามารถที่จะใช้ตัวอื่นได้เช่นกันซึ่ง arm-angstrom นั้นสามารถ  download ได้จาก link นี้เลยครับ  Cross toolchain ARM920-T

การติดตั้ง Toolchain
             การติดตั้งให้ทำด้วย root user หากอยู่ใน mode user ธรรมดาให้ใช้คำสั่ง su แล้วตามด้วย root password


  1. $su
    Password:   
    ถ้าเป็น ubuntu ให้ทำตามข้อ 2 
    


  2. $sudo passwd root
    [sudo] password for hs8jcv: ใส่ password sudo
    Enter new UNIX password: กำหนดย password ของ root
    Retype new UNIX password: ใส่ password ของ root ซ้ำอีกครั้ง
    passwd: password updated successfully
    
    

  3. จากนั้นไปยัง directory /opt หากยังไม่มี direcotry /opt 
    ให้สร้างด้วยคำสั่ง mkdir /opt แล้วทำการ download cross tool chain 
    พร้อมกับแตกไฟล์ 
    # cd /opt
    # wget http://qtextended.org/downloads/toolchains/arm920t-eabi.tgz
    หรือ
    # wget http://www.thaiembedded.net/downloads/arm920t-eabi.tgz
    # tar xzvf arm920t-eabi.tgz -C /
    
    

  4. ตรวจสอบไฟล์ที่แตกออกมาจะเห็น directory toolchains เพิ่มขึ้นมา ซึ่งภายใต้ 
    toolchains/arm920t-eabi/bin จะเป็นไฟล์ที่ใช้ในการ cross compile
    # ls toolchains/arm920t-eabi/bin/

  5. หลังจากติดตั้งแล้วเราจาเป็นต้องเพิ่ม path ของ cross compile สาหรับการเรียกใช้งาน ดังนี้หากยังอยู่ใน root user ให้ออกจาก root user ไปยัง user ธรรมดาด้วยปุ่ม ctrl-d และเพิ่มข้อความ export PATH=$PATH:/opt/toolchains/arm920t-eabi/bin เข้าไป ในระบบดังนี้ $ echo "export PATH=\$PATH:/opt/toolchains/arm920t-eabi/bin" >> .bashrc
  6. หลัง จากนั้นทุกครั้งที่เข้า shell console ไฟล์ .bashrc จะทาการเพิ่ม path ให้เราโดย อัตโนมัติ ทดสอบ cross compile โดยคาสั่ง $ arm-angstrom-linux-gnueabi-gcc arm-angstrom-linux-gnueabi-gcc: no input files

Create Installation and Use uboot for mini2440

1. เริ่มต้นด้วยการติดตั้ง Cross tool chain อ่านได้การติดตั้ง cross tool chain
     $ cd $ mkdir uboot 
     $ cd uboot 
     $ git clone git://repo.or.cz/u-boot-openmoko/mini2440.git
2. กาหนด ตัวแปร CROSS_COMPILE เพื่อให้ make ใช้ Cross Tool Chain 
    ของ arm สาหรับการ Compile
    $ export CROSS_COMPILE=arm-angstrom-linux-gnueabi-
    $ cd mini2440 $ make mini2440_config $ make all
3. เมื่อ เสร็จสิ้นการ compile เราจะได้ไฟล์ u-boot.bin ซึ่งเราจะได้นำไปใช้ในการติดตั้งบน NAND Flashต่อไป การติดตั้ง u-boot.bin บน NAND Flash เตรียมพร้อมระบบด้วยการ 
  • ต่อ USB Client ของ mini2440 ไปยัง PC Host พร้อมทั้ง Start program dwn.exe 
  • ต่อ Serial port mini2440 ไปยัง PC Host พร้อมทั้งรันโปรแกรม Terminal emulator อย่างเช่น putty หรือ Hyperterminal ด้วย Buadrate 115200
ในส่วนของ nand flash นั้นเราไม่สามารถเข้าถึงได้โดยตรงจึงต้องเข้าถึงผ่าน nor flash แล้วใช้ Supervivi เพื่อเข้าถึงส่วนของ nand flash แทนซึ่ง Supervivi คือ bios ของ mini2440 ใช้ในการติดตั้งโปรแกรมและระบบต่าง ๆ ลงใน mini2440 สามารถอ่านวิธีการติดตั้ง Supervivi  การติดตั้ง Supervivi ใน nor flash
          เมื่อทำการติดตั้ง u-boot ลงใน nand  flash เรียบร้อยแล้วลำดับต่อไปเราจะทำการ configure nand flash ดังนี้

1. บันทึก u-boot ลง NAND Flash ดังนี้ 
  •  Turn Power Off 
  •  Switch NOR/NAND Selector to NOR 
  •  Turn Power Switch on เลือก q จาก vivi menu แล้วพิมพ์ข้อความข้างล่างโดย ให้แทนที่ 240500 ด้วยขนาดไฟล์จริงของ u-boot.bin ที่ได้จากการคอมไพล์ข้างต้น จากนั้นให้ upload ไฟล์ u-boot.bin ด้วย dwn.exe

    Supervivi> load flash 0 240500 u USB host is connected. Waiting a download. u-boot จะถูกบันทึกไปยัง NAND Flash
2. สร้าง bbt (Bad Block Table) ของ NAND Flash
  •  Turn Power Off
  •  Switch NOR/NAND Selector to NAND 
  •  Turn Power Switch on 
  •  mini2440 จะบูทเข้าสู่ u-boot ให้ใช้คาสั่ง nand scrub เพื่อลบ bbt 


ใช้คาสั่ง nand createbbt เพื่อสร้าง bad block table ใหม่

3. สร้าง Environment สาหรับ u-boot จาก ขั้นตอนที่ 2 โปรแกรม u-boot ที่ถูกบันทึกไว้จะถูกลบไปจาก NAND Flash ดังนั้นเราจึงจาเป็นต้องทาตามขั้นตอนที่ 1 ใหม่อีกครั้งเพื่อบันทึกโปรแกรม u-boot กลับเข้าไปใน NAND Flash
  •  Turn Power Switch Off 
  •  Switch NOR/NAND Selector to NAND 
  •  Turn Power Switch On mini2440 จะบูท u-boot
    โปรดสังเกตุว่าจะมีข้อความ *** Warning - bad CRC or NAND, using default environment ใช้คาสั่ง dynenv set 40000 เพื่อทาการสร้าง environment ใหม่ และตามด้วยคาสั่ง saveenv
ใช้คาสั่ง reset เพื่อรีบูทระบบ เมื่อเสร็จสิ้นการรีบูทแล้ว u-boot ก็พร้อมที่จะใช้งาน


การใช้งาน U-boot

                uboot เป็น boot loader ที่มีประสิทธิาพสูงมาก สามารถ boot ได้หลายรูปแบบ ทั้ง NOR Flash,NAND Flash,SD Card และ NFS ในที่นี่เราจะกล่าวถึงเฉพาะ NAND Flash,SD Card และ NFS เนื่องจาก NOR บนบอร์ด ใช้เก็บ vivi boot loader เป็นตัวสารองครับ
                 ในส่วนของการใช้งาน u-boot รวมทั้งการติดตั้ง u-boot ลงใน nand flash อ่านวิธีการติดตั้งได้จากการสร้างและติดตั้ง uboot สาหรับ mini2440 

1.Boot ด้วย Nand Flash

  • เริ่มต้นด้วยจัดเตรียมไฟล์ kernel และ File System(uImage และ FS.jffs2) เพื่อไว้ เขียนลงใน NAND Flash
  • Copy file ทั้งสองลงใน SD Card ที่มีเนื้อที่ว่างพอใช้งาน
  • เลือกสวิตซ์ไปที่ NAND แล้วเปิดเครื่อง
  • erase nand flash ในส่วนของ kernel และ เขียน uImage ลงไป
MINI2440 # nand erase kernel
MINI2440 # mmcinit
MINI2440 # fatload mmc 0:1 0x31000000 uImage
MINI2440 # nand write 0x31000000 kernel

  • erase nand flash ในส่วนของ root และ เขียน File System ลงไป
MINI2440 # nand erase root
MINI2440 # mmcinit
MINI2440 # fatload mmcblk0p0:1 0x31000000 gpe-image-micro2440.jffs2
MINI2440 # nand write.jffs2 0x31000000 root ${filesize}
  • ขั้นตอนสุดท้ายคือการเขียน boot command และ setting parameter ต่างๆ
MINI2440 # setenv bootcmd nboot.e kernel \; bootm
MINI2440 # setenv bootargs root=/dev/mtdblock3 rootfstype=jffs2 console=ttySAC0,115200
ในกรณีที่ใช้จอ 7" ในเพิ่ม mini2440=1tb เข้าไปด้วย
MINI2440 # setenv bootargs root=/dev/mtdblock3 rootfstype=jffs2  console=ttySAC0,115200 mini2440=1tb
MINI2440 # saveenv   เป็นอันว่าเสร็จพร้อมใช้งานครับ

2.Boot ด้วย SD Card เตรียม SD Card ขนาด 1-2G ขึ้นอยู่กับความต้องการของงานที่พัฒนา เตรียม kernel,file system สามารถดาวน์โหลดได้ ที่นี่

  - kernel
  •  uImage 
  • modules.tar.bz2
  - File System
  •  armel-rootfs-released-032110.tar.bz2
  - เสียบ SD Card เข้ากับ Card Reader ที่เชื่อมต่ออยู่กับ Linux Desktop ของท่าน check SD Card ว่าใช้ device อะไรด้วยคาสั่ง dmesg หรือ fdisk –l


จากข้อมูลของ sd card ซึ่งต่อกับระบบเป็น /dev/ mmcblk0p เราจะใช้คาสั่ง fdisk เพื่อสร้าง partition ที่มีลักษณะดังนี้


mmcblk0p1 - type b (fat32) ขนาด 100MB 
mmcblk0p2 - type 83 (Linux) ขนาดเท่ากับที่เหลือ 
mmcblk0p3 - type 82 (Swap)

หลังจากสร้าง partition เสร็จให้ Format Partition ดังนี้
$ sudo mkfs.vfat /dev/ mmcblk0p1
$ sudo mkfs.ext3 /dev/ mmcblk0p2

Copy kernel(uImage) ลงใน partition แรก
$sudo mkdir /mnt/sdc1
$sudo mkdir /mnt/sdc2
$sudo mount -t vfat /dev/ mmcblk0p1 /mnt/sdc1 
$sudo cp /path ที่เก็บไฟล์/uImage-mini2440 /mnt/sdc1

แตก file system และ module ของ kernel ลงไปใน partition ที่สอง
$ sudo mount /dev/ mmcblk0p2 /mnt/sdc2 
$ cd /mnt/sdc2 $ sudo tar xvjpf /path ที่เก็บไฟล์/ armel-rootfs-released-032110.tar.bz2 
$ sync

$ sudo tar xvjpf /path ที่เก็บไฟล์/modules.tar.bz2
$ sync

umount SD Card
$ sudo umount /mnt/sdc1 
$ sudo umount /mnt/sdc2

ตอน นี้จบขั้นตอนของ SD Card แล้วครับ นา SD Card ไปเสียบที่ บอร์ดได้เลย เหลืออยู่อีกขั้นตอนคือการเซ็ท uboot ให้ boot ด้วย SD Card Boot board เข้าสู่ uboot command prompt เขียน boot command และ boot argument ดังต่อไปนี้

MINI2440 # setenv bootcmd 'mmcinit ; fatload mmcblk0p 0:1 0x31000000 uImage-mini2440 ; bootm 0x31000000' 
MINI2440 # setenv bootargs 'console=ttySAC0,115200n8 rootdelay=3 root=/dev/mmcblk0p2 rw rootfstype=ext3 rootwait'

หากเป็นจอ 7" ให้เพิ่ม mini2440=1tb เข้าไปใน bootargs ด้วยครับ
MINI2440 # # setenv bootcmd 'mmcinit ; fatload mmcblk0p 0:1 0x31000000 uImage-mini2440 ; bootm 0x31000000'
MINI2440 # setenv bootargs 'console=ttySAC0,115200n8 rootdelay=3 root=/dev/mmcblk0p2 rw rootfstype=ext3 rootwait mini2440=1tb'

ปิดท้ายด้วยการ save parameter ด้วยคาสั่ง saveenv
เสร็จขั้นตอนการคอนฟิกให้ uboot บูท ด้วย SD แล้วครับ หลังจากนี้ให้ใช้คาสั่ง reset หรือ boot ต่อได้เลยครับ


3.Boot ด้วย NFS (Network File System)  ในส่วนของการใช้งาน NFS นั้นให้ท่านผู้ที่สนใจศึกษาจากเว็บไซต์นี้ได้เลยครับ  Boot ระบบด้วย Network File System

Configure & Compile Qt for mini2440

                   Qt เป็น Cross-Platform Application และ UI Frame Work ที่วิ่งได้ในหลายระบบตั้งแต่ Windows, Mac OSX, Linux ตลอดจนไปถึง Linux Embeded system เราสามารถที่จะพัฒนาบน Platform หนึ่งแล้วเอาซอสโคดไปคอมไพล์ใช้บนอีก Platform ได้อย่างสบาย ตลอดจนเนื่องจากเป็น C++ ดังนั้นประสิทธิภาพของโปรแกรมที่ได้จึงสูงมาก   ในส่วนของบทความนี้จะแสดงวิธีการคอมไพล์ระบบ Qt เพื่อนำไปใช้บน Mini2440 โดยจะอิง Qt 4.7 ซึ่งเพิ่งออกล่าสุดเป็นหลัก

  1.  หากระบบยังไม่ได้ติดตั้ง cross tool chain ให้ทำงานติดตั้งได้ตามนี้ครับ การติดตั้ง Cross Tool Chain สำหรับ mini2440 
  2. ติดตั้ง TE-Linux ลงใน SD Card ให้ทำงานติดตั้งได้ตามนี้ครับ Thai Embedded Linux Distribution(TE-Linux
  3.  เนื่องจาก Mini2440 + Qt มักจะใช้งานร่วมกับ Touch screen ดังนั้นเราจึงจำเป็นต้องเตรียม Driver สำหรับ Touch screen ดังนี้
  •     สร้าง directory ขึ้นมาใน home directory ของเรา ในที่นี้ใช้ชื่อว่า tslb
  •     กำหนดค่า parameter ต่างๆที่จำเป็นต้องใช้ใน cvs เพื่อใช้ในการ login ดึง source code ของ tslib มา
และใช้คาสั่งดังต่อไปนี้

  1. $ mkdir tslib
    $cd tslib/
    $ export CVSROOT=:pserver:anoncvc@cvs.handhelds.org:/cvs

    จากนั้นพิมพ์คาสั่ง
    $ cvs login
    ในที่นี้ได้มีการให้ทาการ install cvs ก่อน เราก็ทาโดยใช้คาสั่ง
    $ sudo apt-get install cvs

    เมื่อการ install เสร็จสิ้น ให้พิมพ์
    $ cvs login
    จะมีการถาม Password ให้ใส่ anoncvs

    หลังจากนั้น เริ่มต้นการสร้าง tslib ดังนี้
    $ export ac_cv_func_malloc_0_nonnull=yes

    จากนั้นพิมพ์
    $ cd ~/tslib/apps/tslib $ ./autogen.sh $ CC=arm-angstrom-linux-gnueabi-gcc CXX=arm-angstrom-linux-gnueabi-g++ ./configure --build=i386-linux --host=arm-linux --target=arm --disable-inputapi --prefix=$PWD/build $ make $ make install


  2. คราวนี้ก็ได้เวลาเตรียม source code สำหรับ Qt4.7 แล้วครับ โดยสร้าง Directory แล้วทำการดึงไฟล์มาแล้วแตกไฟล์ดังนี้


    $ mkdir ~/qt4.7
    $ cd ~/qt4.7
    $ wget http://get.qt.nokia.com/qt/source/qt-everywhere-opensource-src-4.7.0-tp.tar.gz
    $ tar xvzf qt-everywhere-opensource-src-4.7.0-tp.tar.gz
    $ cd qt-everywhere-opensource-src-4.7.0-tp
    

  3.  แก้ไขไฟล์ mkspecs/qws/linux-arm-g++/qmake.conf ที่ใช้กำกับการสร้าง Qt ดังนี้
      - แก้ไขFilename ของ cross tool chain ให้ถูกต้อง หากท่านใช้ Cross Tool Chain ตัวอื่นที่แตกต่างไปจากที่กำหนดไว้ในข้อ 1
      - เพิ่มบรรทัด QMAKE_INCDIR,QMAKE_LIBDIR และ LIBS เพื่อกำหนดตำแหน่งของ Include/Lib สำหรับ Touch Screen Lib ที่เราได้สร้างไว้



    #
    # qmake configuration for building with arm-linux-g++
    #
    include(../../common/g++.conf)
    include(../../common/linux.conf)
    include(../../common/qws.conf)
    # modifications to g++.conf
    QMAKE_CC                = arm-linux-gcc
    QMAKE_CXX               = arm-linux-g++
    QMAKE_LINK              = arm-linux-g++
    QMAKE_LINK_SHLIB        = arm-linux-g++
    # modifications to linux.conf
    QMAKE_AR                = arm-linux-ar cqs
    QMAKE_OBJCOPY           = arm-linux-objcopy
    QMAKE_STRIP             = arm-linux-strip
    QMAKE_INCDIR            = /home/piyachai/tslib/apps/tslib/build/include 
    QMAKE_LIBDIR            = /home/piyachai/tslib/apps/tslib/build/lib         
    LIBS                    += -lts
    load(qt_config)

      - กรณีที่ home directory ไม่ใช่ piyachai ให้แก้ path ให้ตรงกับ home directory ขอเรา

  4. ทำการ configure ด้วยคำสั่ง
    $ ./configure -embedded arm -xplatform qws/linux-arm-g++ -prefix /usr/local/Qt -qt-mouse-tslib 
    -little-endian -qt-gfx-transformed -qt-gfx-linuxfb -qt-gfx-vnc
    •   qt-gfx-transformed สำหรับติดตั้ง Driver เพื่อการหมุนหน้าจอ
    •   qt-gfx-linuxfb สำหรับติดตั้ง Driver เพื่อติดต่อกับ Linux Frame Buffer
    •   qt-gfx-vnc สำหรับติดตั้ง Driver เพื่อให้ Qt เป็น vncserver ทำให้เราสามารถใช้ vnc client ติดต่อกับหน้าจอของ Qt
    •   prefix /usr/local/Qt จะกำหนด Directory ที่จะทำการติดตั้งระบบ Qt
    และเลือก o สำหรับ Open Source Edition และ เลือก yes เพื่อยอมรับ license


    
    
  5. ทำการสร้างระบบ Qt ด้วยคำสั่ง make ซึ่งจะใช้เวลาในการ compile ยาวนานมากและหากทุกอย่างเรียบร้อย เราก็สามารถต่อด้วยคำสั่ง sudo make install เพื่อติดตั้ง Qt ไปยังตำแหน่งที่ระบุไว้ด้วย -prefix ในข้อ 5 ซึ่งในกรณีนี้คือ /usr/local/Qt เราจำเป็นต้องใช้คำสั่ง sudo ในขั้นตอนการ make install เพราะ /usr/local จะเขียนได้โดย root เท่านั้น

  6. มาถึงจุดนี้ ไฟล์ของระบบ Qt ที่จะใช้รันบน mini2440 ทั้งหมดจะถูกเก็บอยู่ไว้ที่ /usr/local/Qt ซึ่งเราจะต้องทำการย้ายไปลงยัง File system ของ mini2440 ที่จะใช้รัน โดยเราจะต้องมีระบบที่วิ่ง Linux อยู่แล้ว คือ TE-Linux ที่อยู่ใน SD Card ตามหัวข้อที่ 2

  7. เริ่มต้นด้วยการย้ายไฟล์ที่เกี่ยวของกับ touch screen ไปยัง File System ของ mini2440 ที่อยู่บน SD Card ของผม mount อยู่ใน Directory /mnt/ext3  หรือแกตามให้ตรงกับเครื่องของเรา


    $ export MINI2440FS="/mnt/ext3"
    $ sudo cp -Rp ~/tslib/apps/tslib/build/lib/* $MINI2440FS/usr/lib
    $ sudo cp -Rp ~/tslib/apps/tslib/build/bin/* $MINI2440FS/usr/bin
    $ sudo cp -Rp ~/tslib/apps/tslib/build/etc/* $MINI2440FS/etc

  8. คัดลอกไฟล์ที่จำเป็นในการรันจาก Cross Tool Chain ไปยัง File system ของ mini2440 บน SD Card ดังนี้


    $ sudo mkdir $MINI2440FS/usr/local/Qt
    $ sudo mkdir $MINI2440FS/usr/local/Qt/lib
    $ sudo cp -p /opt/toolchains/arm920t-eabi/arm-angstrom-linux-gnueabi/lib/libstdc++.so* 
    $MINI2440FS/usr/local/Qt/lib
    
    
  9. คัดลอกไฟล์ Qt ไปยัง Root File System ของ mini2440 บน SD Card

    $ sudo cp -Rpf /usr/local/Qt/* $MINI2440FS/usr/local/Qt/
    $ sync

  10. มาถึงขั้นนี้เราก็พร้อมที่จะบูท mini2440 ของเราแล้วครับให้เปิดสวิชท์เพื่อเริ่มต้นรัน mini2440 รอจนบูทเสร็จสิ้นแล้วให้ login ระบบด้วย root user


    เราจำเป็นต้องทำการ Calibrate touch screen ของเราก่อนใช้งาน แต่ก่อนอื่นเราต้องแก้ไขไฟล์อีกสองตัวดังนี้
       - แก้ไขไฟล์ /etc/ts.conf โดยตัดคอมเม็นท์ # ออกจากบรรทัดที่สองดังนี้
    # Uncomment if you wish to use the linux input layer event interface
    module_raw input
       - แก้ไขไฟล์ /etc/profile โดยเพิ่ม export ที่เกี่ยวข้องกับ tslib ดังนี้
    # /etc/profile: system-wide .profile file for the Bourne shell (sh(1))
    # and Bourne compatible shells (bash(1), ksh(1), ash(1), ...).
    export TSLIB_TSEVENTTYPE=input
    export TSLIB_CONSOLEDEVICE=none
    export TSLIB_FBDEVICE=/dev/fb0
    export TSLIB_TSDEVICE=/dev/input/event1
    export TSLIB_CALIBFILE=/etc/pointercal
    export TSLIB_CONFFILE=/etc/ts.conf
    export TSLIB_PLUGINDIR=/usr/lib/ts
    export QWS_MOUSE_PROTO=tslib:/dev/input/event1
    export QTDIR=/usr/local/Qt
    
    
    
    
  11. หลังจากแก้ไขไฟล์แล้วให้ รีบูท mini2440 หนึ่งครั้ง


      - login root แล้ววิ่งคำสั่ง ts_calibrate จะเห็นภาพดังนี้ปรากฏบนหน้าจอmini2440 ให้ทำการแตะจุดไปจน
    ครบห้าจุดซึ่งโปรแกรมจะทำการเก็บข้อมูลของการ 
    Calibrate ไว้ในไฟล์ /etc/pointercal
    
  12. และแล้วก็ได้เวลาที่เราจะได้ทดสอบโปรแกรมแรกของ Qt ภายใต้ mini2440 แล้ว ให้รัน demo ดังนี้ # cd /usr/local/Qt/demos/embedded/fluidlauncher # ./fluidlauncher -qws




    ขั้นต่อไปเป็นส่วนในการปรับแต่งการใช้งาน Qt ให้สามารถแสดงผลอย่างมีประสิทธิภาพ

  13. การเปลี่ยน font ที่ใช้ใน Applicationเมื่อทาการติดตั้ง Qt4 เป็นที่เรียบร้อยแล้ว ทดลองรัน program

    # ./calculatorform -qws



    และคาถามที่มักจะตามมาคือ font เล็กจัง จะเปลี่ยน font ยังไง

    จากตัวอย่างเราจะลองเปลี่ยน font เป็น unifont ดังนี้
    # ./calculatorform -qws -fn unifont
    จะสังเกตุเห็นว่า font ที่ใช้ใน Application จะเปลี่ยนไปตามที่เรากาหนด


  14. การหมุนจอภาพจำเป็นต้องใช้ driver ตัวนึงที่ชื่อว่า Transformed ซึ่งจะถูกสร้างขึ้นมาพร้อมกับระบบโดยเราต้องระบุ feature ดังนี้ -qt-gfx-transformed ในขั้นตอนการ configureการใช้งานสามารถระบุได้ทั้งจาก Environment Variables ดังนี้

    # export QWS_DISPLAY=tansformed:rot90
    หรือจะเป็น option ต่อท้าย application ก็ได้ดังนี้
    # ./calculatorform -qws -fn unifont -display "transformed:rot90"
    หลังจากนั้นเมื่อรัน application จอภาพก็จะหมุนไป 90 องศาตามต้องการ




  15. การทา Remote Desktop ด้วย VNC


                    VNC (Virtual Network Computing) เป็นเทคนิคในการแชร์จอภาพ คีย์บอร์ด และ เมาส์ ด้วยกันจากคอมพิวเตอร์ตัวหนึ่งไปยังอีกตัวหนึ่ง ทาให้คอมพิวเตอร์อีกตัวสามารถเห็นภาพของคอมพิวเตอร์อีกตัวหนึ่งและควบคุมได้ ด้วย ข้อดีของ VNC คือเป็น Open Source และไม่ยึดติดกับ Operating System

    สิ่งที่ต้องมีคือ
    •  ระบบ Qt ที่มี VNC Driver ซึ่งสามารถกาหนดได้ในขั้นตอน configure ด้วยการเพิ่ม option ดังนี้ -qt-gfx-vnc
    • โปรแกรม vncviewer โดยใช้คาสั่ง sudo apt-get install vncviewer บน linux PC
    ขั้นตอนในการใช้งาน
    1.  ใช้คาสั่ง ifconfig ที่ mini2440 เพื่อตรวจสอบดูว่า ip address ของ mini2440 คืออะไร ในที่นี้กาหนดให้เป็น 192.168.1.102
    2.  VNC Driver ในมุมมองของ Qt แล้วคือจอตัวหนึ่งซึ่ง defualt จะกาหนดให้มีขนาด 800x600 พิกเซล เราสามารถที่จะทาการเปลี่ยนแปลงค่า default นี้ได้
    3. ลองมารัน application


      mini2440#./calculatorform -qws -fn unifont –display "VNC:size=800x600:depth=32" QVNCServer created on port 5900

      เริ่มต้นด้วยการรัน calculatorform โดยกาหนดให้ใช้ font unifont และให้แสดงผลไปยัง vnc driver ที่กาหนดให้มีขนาด 800x600 จานวนสีต่อพิกเซล 32 ซึ่งเราจะไม่เห็นอะไรปรากฏบนหน้าจอ lcd เพราะขณะนี้เอาพุทของโปรแกรมจะวิ่งไปหา vnc โปรดสังเกตุข้อความ QVNCServer created on port 5900 ซึ่งหมายความว่าขณะนี้ VNCServer ได้ทาการรันแล้วโดยใช้พอร์ทหมายเลข 5900

    4. 4. ที่ linux PC ใช้คาสั่ง
      $vncviewer 192.168.1.102 จะได้




    5. ถ้าต้องการที่จะรันและให้แสดงผล บน lcd ของ mini2440 และ vnc บน PC ไปพร้อมๆกันสามารถทาได้โดย กาหนด display ให้เป็น vnc over framebuffer ดังนี้

      ./calculatorform -qws -fn unifont -small –screen -display "vnc:linuxfb"






      ภาพจาก linux-PC




      ภาพจาก Board mini2440


 ขอบคุณข้อมูลจาก www.thaiembedded.net
                      

Installation Supervivi to nor flash

1. ติดตั้ง โปรแกรม H-JTAG จาก www.friendlyarm.com
หรืกจาก CD ที่ให้มากับบอร์ด
2.
  •    เสียบสาย pair 10 pin ระหว่าง mini2440 กับ J-TAG บอร์ด
  •    เสียบ J-TAG บอร์ดกับเครื่อง PC ที่ printer port
  •    ให้สวิตช์ S2 ไปที่ Nor Flash
  •    จ่ายไฟให้บอร์ดและเปิดบอร์ดให้ทางาน
3. เปิดโปรแกรม H-JTAG

4. Click OK
5. จะได้โปรแกรมดังรูป


6. ให้เลือก Setting->Jtag Setting แล้วตั้งค่าดังรูป


7. เลือก Script->Init Script เลือก Open เลือก OK

ห้ามติ๊กถูกที่ Enable Auto hit



8. เลือก Operation-> Detect Target 




“ก่อนจะดาเนินการต่อไปตรวจสอบให้แน่ใจว่าท่านได้เลือกสวิตช์ไปที่ Nor Flash แล้ว”
10. เลือก Flasher->Start H-Flasher เพื่อเปิดโปรแกรม HFlasher


11. หลังจากโปรแกรม H-Flasher เปิดขึ้นมาให้เลือก Load


12. หลังจากนั้นจะได้ค่าของ Nor Flash ดังรูป


13. เลือกไปที่ Programming 
14. กด Check จะได้ดังรูป (ในตัวอย่างนี้เป็น SST39VF1601)


15. ที่หัวข้อ Type ให้เลือก Plain Binary Format
16. ให้กด “…” ตรง Src File แล้วเลือกไฟล์ให้เหมาะกับบอร์ดของท่าน(ตัวอย่างบอร์ดนี้ Nand Flash มี
      ขนาด 128MB จึงเลือกไฟล์ supervivi-128M
17. ในช่อง Dst ใส่เลข 0
18. จากนั้นกด Program รอจนเสร็จ หลังจากนั้นปิ ดโปรแกรม เป็นอันเสร็จเรียบร้อย

Buzzer


ZX-SPEAKER Piezo Speaker module
                ZX-SPEAKER Piezo Speaker module ของบริษัท Inex เป็นโมดูล buzzer คือออดหรือลำโพงไฟฟ้าขนาดเล็กแบบเปียโซ จะมีแผ่นลำโพงแบบเปียโซ เมื่อป้อนแรงดันไฟฟ้าจะทำให้เกิดการบิดงอไปมาทำให้เสียงเกิดขึ้น โดยที่คุณสมบัติของเสียงขึ้นอยู่กับขนาดของแผ่นเปียโซและกล่องกำทอน (Resonance box)
                         
               

คุณสมบัติ
  • อิมพิแดนซ์ 32 โอห์ม
  • มีความต้านทานสูงสามารถต่อกับไมโครคอนโทรลเลอร์ได้โดยตรง
  • รองรับสัญญาณความถี่ในช่วง 1kHz ถึง 3kHz
  • ไฟเลี้ยงในช่วง +3V ถึง +6V
  • การเชื่อมต่อมี 3 ขาคือ ไฟเลี้ยง , สายสัญญาณ และกราวด์

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

Memory in ARM9 S3C2440 FriendlyArm

               หลังจากที่ได้กล่าวถึงเจ้าบอร์ด Friendly ARM กันไปแล้วทีนี้ก็จะมีคำถามตามมาว่าทำไมต้องมีหน่วยความจำหลายแบบไม่ว่าจะเป็น Nand , Nor flash  , SD-RAM มันเกี่ยวกันอย่างไร แล้วเวลาเขียนแอพลิเคชั่นแล้วมันจะไปทำงานที่ไหน  แล้วระบบปฏิบัติการนั้นเก็บไว้ที่ไหน 


ในบอร์ด ARM9 S3C2440 จะมี Memory ประกอบด้วย 
  1.  RAM คือ ชนิดหน่วยความจำแบบชั่วคราว เมื่อเวลาไฟดับแล้ว ข้อมูลหายหมด แต่หน่วยความจำชนิดนี้ จะมีความเร็วในการอ่านเขียนข้อมูลสูง ซึ่งเหมาะที่จะใช้สื่อสารกับ CPU ต่าง ๆ ได้  ยกตัวอย่างเช่น SDRAM , DDR2 RAM ด้วยเหตุนี้ RAM จึงใช้ในการเก็บโปรแกรมและข้อมูลระหว่างการประมวลผลกับ CPU
    •  SDRAM คือ RAM ที่เป็น Memory ความเร็วสูง (ไฟดับแล้วข้อมูลหาย) ซึ่งต่อเข้ากับ CPU โดยตรง
  2.  ROM คือ ชนิดหน่วยความจำแบบถาวร เก็บข้อมูลได้โดยถ้าไฟดับ ยังคงสามารถเก็บข้อมูลได้อยู่เหมือนเดิม แต่ความเร็วจะต่ำกว่า RAM ซึ่งไม่เหมาะจะคุยกับ CPU โดยตรง เนื่องจาก CPU มีความเร็วในการทำงานสูงมาก เช่น NAND Flash , NOR Flash , Hard Disk , SDCARD , Thumb Drive
    • NAND Flash จะเปรียบเสมือน Hard Disk ครับ ซึ่งจะเก็บ OS  , File ต่าง ๆ , Bootloader , โปรแกรมต่าง ๆ อยู่ในนี้ และ SDCARD , Thumb Drive เป็นพวก NAND Flash ครับ
    • NOR Flash จะเป็นหน่วยความจำที่ใช้เก็บพวก Bios 
     
การโหลด OS ขึ้นมามีกระบวนการที่เกิดขึ้นแบบนี้ครับ
 
  •   สำหรับ OS ที่เป็น WIN CE เมื่อท่านเปิดเครื่องขึ้นมา จะพบว่า WIN CE Image จะถูกเก็บไว้ใน   NAND Flash (ROM ) ซึ่งแยกการเก็บเป็นส่วน ๆ คือส่วนที่เป็น Nboot และ CE Image หลังจากนั้น ระบบจะเอาโปรแกรมที่เก็บอยู่ใน ROM มาไว้ที่ RAM (ซึ่งก็คือ SDRAM) แล้วทำงาน 
  • ส่วน OS ที่เป็น Linux ก็จะมีหลักการเหมือนกัน คือถูกเก็บไว้ใน NAND Flash (ROM) แยกเป็น Boot Loader หรือ Supervivi ของบอร์ด FriendlyARM , Kernel และ File System หลังจากนั้น ระบบจะเอาโปรแกรมที่เก็บอยู่ใน ROM มาไว้ที่ RAM (ซึ่งก็คือ SDRAM) แล้วทำงาน 

สรุปคือ
  • ในกรณีการเขียน Application นั้นไม่จำเป็นต้องใช้ Nand Flash เป็นจำนวนมากสามารถเก็บใน SD-Card , Thum Drive แล้วเรียกขึ้นมาทำงานก็ได้ หรือจะเก็บไว้ใน Nand เลยก้ได้
  • โดยสรุปคือ ขนาดของแรมจะมากหรือน้อยขึ้นอยู่กับว่ารันพร้อมพันเยอะมั้ย  ส่วนขนาดของรอมก็คือว่าเราจะใช้พื้นที่ในการเก็บข้อมูลเยอะหรือเปล่า
Nand Vs Nor Flash 
                Rom แบ่งออกเป็น  2 ประเภทใหญ่ ๆ คือ 
  1. NOR - Read เร็ว Write ช้า ทำ XIP ได้ (execute in place หมายถึง run program ที่ ตัวมันเองได้เลย)
  2. NAND - Read ช้า Write เร็ว ทำ XIP ไม่ได้ 
                ทั้งคู่มีข้อแตกต่างที่สำคัญ คือ NOR มันสามารถทำ execute in place (XIP) ได้  โดยปกติ ระบบจะ RUN โปรแกรม ดึงจาก ROM ไปไว้ใน RAM แล้วจึงจะทำงาน ถ้าเป็น NOR ROM แล้ว มันสามารถ run program ที่ ตัวมันเองได้เลย ไม่จำเป็นต้องเอาไปทำงานใน RAM (จึงทำให้ลดขนาดของ RAM ลงได้) อย่างไรก็ตาม NOR ROM นี้ไม่สามารถ XIP ได้กับ รูปภาพ หรือ เสียง
               เนื่องมาจากว่า NAND write เร็ว ส่วน NOR read เร็ว เครื่องโดยส่วนมากจึงจะประกอบไปด้วย NOR 64M และ NAND 64M เมื่อ NOR มัน XIP โปรแกรมได้ RAM จึงจำเป็นเพียงแค่ 64M หรือ ต่ำกว่าคือ 32M (เพื่อประหยัดพลังงาน)  


ในเรื่องของความจุ NAND FLASH ถ้าใครยังสงสัยว่า บอร์ดที่ท่านมีอยู่เป็นรุ่นขนาด NAND FLASH เท่าไหร่

ดูรหัสของ Part Number IC SAMSUNG ครับ



  • Code F12 = 64 MB
  • Code F1G = 128 MB
  • Code F2G = 256 MB 
  • Code F8G = 1 GB   


 ขอขอบคุณ ข้อมูลจาก http://www.smart-mobile.com 
                   และ       http://http://www.thaieasyelec.com