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

USB Port จาก Mini PCI Express

บทความวันนี้ผมจะเสนอการใช้งาน USB Port ภายในเครื่อง Notebook โดย USB จะได้จาก Slot ของ Mini PCI Express ซึ่งปกติใช้ต่อกับการ์ด WiFi ในรูปที่ 1 เป็นรายละเอียดขาต่างๆ ของ mini PCI-e

รูปที่ 1 รายละเอียดขาของ PCI-e
ขาที่เราจะใช้งานมี 2 ขา คือ

  • ขาที่ 36 USB_D-
  • ขาที่ 38 USB_D+
ตัวอย่างการต่อใช้งานในครั้งนี้ผมจะต่อ USB กับตัวรับสัญญาณของ Mouse ไร้สาย จากรูปที่ 2 เป็นพอร์ต pci-e ของ ACER Aspire 4930G
รูปที่ 2 pci-e ของ Acer Aspire 4930

ต่อมาใช้หัวแร้งบัดกรีขาที่ 36 และ 38 ของ pci-e และบัดกรี GND กับ 5v จากที่วงไว้

รูปที่ 3 บัดกรีขา USB

รูปที่ 4 บัดกรีขา 5v และ GND
หลังจากนั้นนำมาต่อกับ USB ตัวเมียเพื่อไว้เสียบกับตัวรับของเมาส์ โดยต่อตามรูปที่ 5

รูปที่ 5 Pinout ของ USB
หลังจากนั้นก็นำตัวรับเมาส์มาเสียบแล้วเดินสายให้เรียบร้อย
รูปที่ 6 การเดินสายไฟเพื่อเสียบกับตัวรับ

เพียงเท่านี้ก็สามารถใช้งานพอร์ต USB ได้ทันที โดย Windows สามารถตรวจพบแล้วใช้งานได้ปกติดี

แหล่งข้อมูล
http://forums.macresource.com/read.php?1,1501079,1501079
http://pinoutsguide.com/Slots/mini_pcie_pinout.shtml
http://pinouts.ru/Power/sata-power_pinout.shtml


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

Serial Console ของ nlink Router(True online)

วันนี้ผมมาเสนอวิธีการเข้าใช้งาน Serial Console ของ nlink Router รุ่นที่แถมจากการสมัคร True Online ซึ่งอาจจะพอเป็นประโยชน์บ้างครับ

รูปที่ 1 nlink Router
จากรูปที่ 1 ผมได้แกะบอร์ดข้างในออกมา จะพบว่ามีขาเชื่อมต่อ 4 ขาอยู่ด้านหน้าไอซีตัวใหญ่ จากการลองก็พบว่าขาต่างๆมีหน้าที่ดังรูปที่ 2

รูปที่ 2 ตำแหน่งของขาสัญญาณ
ในการทดลองนี้ผมต่อพอร์ต Serial ของ Router เข้ากับ USB to Serial ซึ่งเป็นสัญญาณแบบ TTL 3.3v อยู่แล้ว ทำให้ไม่ต้องแปลงสัญญาณเป็น RS-232 อีก เมื่อต่อเชื่อมเรียบร้อยก็เปิดโปรแกรม Putty เลือก การเชื่อมต่อแบบ Serial และตั้ง Baudrate เป็น 115200 ดังรูปที่ 3

รูปที่ 3 การตั้งค่า Putty
หลังจากนั้นคลิก Open แล้วเปิด Router จะพบตัวอักษรต่างๆ ขึ้นมา ให้รอจนกระทั่งขึ้นข้อความว่า "Got PID 197 from TR069"  ดังรูปที่ 4

รูปที่ 4 ข้อความต่างๆ ตอน Boot
หลังจากนั้นให้กด Enter 2 ครั้งเพื่อเข้าสู่หน้า Login โดยชื่อ Login คือ admin และใช้ Password คือ password จะปรากฎผลลัพธ์ดังรูปที่ 5

รูปที่ 5 หน้า console แรก
หลังจากนั้น พิมพ์คำสั่ง sh กด enter จะปรากฎหน้า console ของ busybox เป็นอันเสร็จสิ้นการเข้าใช้งาน Serial console ครับ

รูปที่ 6 หน้า Serial console ของ Busybox

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

ตั้งเวลาคอมพิวเตอร์ให้ตรงกับ Server

โปรแกรมตัวนี้ผมเขียนด้วย VB2010 โดยรับค่าวันที่และเวลาจาก time.navy.mi.th ติดต่อโดยใช้ Daytime Protocol โดย Protocol ตัวนี้ทำงานบน TCP พอร์ต 13 หลักการของ Protocol นี้ไม่ซับซ้อนครับ โดยมีลำดับขั้นตอนดังรูปที่ 1

รูปที่ 1 ลำดับการทำงานของ Daytime Protocol
จากรูปที่ 1 เป็นรายละเอียดที่ได้จากโปรแกรม Wireshark จะเห็นได้ว่าที่

  1. Packet ลำดับที่ 190 ตัว Client ซึ่งก็คือเครื่องของเราได้ทำการส่งคำขอ syn กับ Server 
  2. Packet ลำดับที่ 192 คือการตัวกลับจาก Server ด้วยการ syn และ ack
  3. Packet ลำดับที่ 193 ตัว Client ทำการ ack กลับ เป็นการเสร็จขั้นตอนในการทำ 3-way handshake ของ TCP
  4. Packet ลำดับที่ 198 ตัว Server ส่งข้อมูลวันที่ให้กับ Client 
  5. Packet ลำดับที่เหลือเป็นการบอกหยุดการติดตอระหว่าง Client และ Server
ในส่วนของข้อมูลที่ส่งใน Protocol จะเป็นวันที่และเวลาที่ส่งมาในรูปแบบข้อความธรรมดา สามารถนำไปแสดงผลได้ในทันที

รูปที่ 2 ข้อมูลวันที่และเวลาที่มาจาก Server
ในส่วนของโปรแกรมที่เขียนขึ้นมามีหน้าตาดังรูปที่ 3

รูปที่ 3 หน้าตาของโปรแกรมทดสอบ

ตัวโปรแกรมมีสองฟังก์ชันการทำงานคือ

  1. อ่านค่าเวลาจาก Server
  2. อ่านค่าเวลาจาก Server พร้อมทั้งตั้งเวลาเครื่อง Client ให้ตรงกับ Server
โปรแกรมตัวนี้ต้องการสิทธิ์ Administrator ในการตั้งเวลาตัวเครื่อง โดยเครื่องที่ใช้งานต้องมี .net framework เวอร์ชัน 2.0 ขึ้นไป เครื่องที่ทดสอบมีระบบวันที่แบบพุทธศักราช ไม่ได้ทดสอบกับเครื่องที่มีปีแบบคริสตศักราช ซึ่งอาจจะมีผลต่อการทำงานของโปรแกรมครับ


แหล่งข้อมูล

วันอาทิตย์ที่ 12 พฤษภาคม พ.ศ. 2556

USB LCD Controller

โปรเจคที่ผมจะนำมาเสนอวันนี้คือ USB LCD Controller แนวคิดที่จะทำก็เนื่องมาจากมีคนอื่นเคยทำโมดูลจอ LCD มาแล้ว แต่ยังไม่ค่อยเห็นใครทำแบบที่ควบคุมผ่าน USB ตรงๆ ทีนั่นเองครับ

ATMega8-16AU

Hardware


MCU ที่ใช้คือ ATMega8 ซึ่งไม่มีUSB ในตัว การนำมาใช้งานผ่าน USB จะใช้ซอฟต์แวร์แทน ตัวซอฟต์แวร์ที่ผมนำมาใช้สำหรับการสื่อสารแบบ USB คือ VUSB ตัวไลบรารี่นี้สามารถนำไปใช้งานกับ MCU ตระกูล AVR ได้ทุกตัวที่มี RAM และ ROM เพยงพอครับ

ในส่วนของวงจรผมได้ดูตัวอย่างการต่อเข้า USB จาก Metaboard 

วงจรของ Metaboard

จากรูปวงจรของ Metaboard ส่วนที่วงสีม่วงใช้สำหรับแปลงสัญญาณให้เข้ากับมาตรฐานของ USB 

ผมได้ลองต่อบน Breadboard ก่อน เพื่อดูว่างวงจรสามารถทำงานได้ถูกต้องหรือไม่

การทดลองบน Breadboard


วงจรที่ผมออกแบบใช้ ATMega8 แบบ SMD เชื่อมต่อกับจอ Character LCD แบบ 4 bit ดังรูปด้านล่าง

วงจรของ USB LCD HID

ลายวงจรผมเอา ไอซี ATMega8 ไว้ด้านล่าง เนื่องจากจะทำ PCB หน้าเดียว โดยจัมพ์สายขึ้นด้านบน 5 เส้นซึ่งจะเห็นได้จากรูป PCB Top Overlay

Top Overlay 

ส่วนด้าน bottom เป็นดังรูป

Bottom
ตัว PCB มีขนาด 3x1 นิ้ว ใกล้เคียงกับขนาดของจอ 16x2


รูป Module หลังจากประกอบเสร็จสิ้น

ด้านหน้า

ด้านหลัง

ผลการทำงาน


Firmware

    Firmware ของวงจรนี้เขียนโดยใช้ AVR studio 4 ตั้งค่า IC เป็น ATMega8 ,Crystal 12 MHzโดย Add ไฟล์ของ VUSB การตั้งค่าไลบรารี่สามารถตั้งได้ที่ไฟล์ usbconfig.h หลักๆ ก็จะกำหนด ขาของ USB D+, D- ก็สามารถใช้ได้แล้วครับ
    ถ้าใครไม่อยาก Compile เองตัว Firmware ที่สำเร็จรูปจะอยู่ในโฟลเดอร์ "\Firmware\default" โดยต้องกำหนด Fuse bit ดังนี้

การกำหนด fuse bit

Software ส่วนของ Computer

    ในขั้นแรกเราต้องติดตั้ง Driver ก่อน เนื่องจากตัว Driver เดิมที่ Windows ติดตั้งให้อัตโนมัติ ไม่สามารถใช้ได้ ผมได้สร้าง Driver ให้เรียบร้อยแล้วโดยมันจะอยู่ใน folder - windows driver 
    หลังจากติดตั้ง Driver เสร็จเรียบร้อยจะมีอุปกรณ์ใหม่ขึ้นมาดังรูปที่ได้วงสีม่วงไว้

Device Manager
    จากนั้นเราก็จะสามารถลองใช้งานตัวอุปกรณ์ได้เลยครับ โดยผมสร้างโปรเจคตัวอย่างโดยใช้ Visual Basic 2010 ไว้แล้ว ตัวไฟล์โปรแกรมจะอยู่ใน "\Software\UsbLcdLib\UsbLcdControlApp\bin\Debug" ครับ
เมื่อเปิดโปรแกรม จะมีหน้าตาดังรูป


  วิธีการใช้งานมีดังนี้
  1. กดที่ Open USB
  2. ที่ Groupbox - Command จะสามารถกดได้ 
    1. ถ้าอยากส่งข้อความให้กดที่ LCD Put String 
    2. ปรับความเข้มของตัวอักษรให้เลื่อนแถบ Contrast โดยถ้ายิ่งไปทางขวามือตัวอักษรในจอจะยิ่งจาง
    3. ปรับความสว่างของไฟส่องจอให้เลื่อนแถบ Backlight ทางซ้ายสุดไฟจะดับ ทางขวาสุดจะสว่างที่สุดครับ
แหล่งข้อมูล


  1. VUSB
  2. Metaboard
  3. libusb-win32
  4. LibUsbDotNet C# USB Library

วันพฤหัสบดีที่ 21 กุมภาพันธ์ พ.ศ. 2556

OpenWrt Print Server โดยใช้ TP-Link TL-WR703N

สวัสดีครับ วันนี้ผมขอนำเสนอโครงงานแนว Embeded Linux ซึ่งก็คือ Open-WRT ซึ่งจะนำมาทำเป็น Wireless Print Server โดยมันช่วยเพิ่มความสะดวกในการใช้เครื่อง Printer เนื่องจากไม่ต้องเชื่อม Printer เข้ากับคอมพิวเตอร์โดยตรง การเชื่อมต่อจะใช้ TL-WR703N เชื่อมกับ Printer ซึ่งผมใช้ Brother HL-2130 มานำเสนอ ในตัวของ TL-WR703N มี Wireless LAN Interface อยู่ ทำให้การเชื่อมต่อเข้าเครือข่ายไม่ต้องใช้สาย
TP-Link TL-WR703N 

Printer Brother HL-2130 ที่นำมาทดสอบเป็นเครื่องพิมพ์แบบ Laser ขาว-ดำ มีพอร์ตเชื่อมต่อแบบ USB ดังรูป
Brother HL-2130
อุปกรณ์ที่ต้องใช้มี 2 อย่างคือ
  • TP-Link TL-WR703N
  • Brother HL-2130

ในส่วนของ Software ที่ต้องใช้มีดังนี้
  • Openwrt Firmware สำหรับ TL-WR703N ผมใช้ตัวนี้ครับ Firmware
  • p910nd Printer Server software
  • usb-printer-support module
ก่อนการทดลองต้องเปลี่ยน firmware และตั้งค่า IP Address ให้กับ WiFi Interface ก่อน สามารถดูรายละเอียดได้ที่เว็บนี้ครับ
ในระหว่าการทดลองจะมีการดาวโหลด Packet มาติดตั้งเสริม ดังนั้นตัว Router ต้องสามารถเชื่อมต่ออินเตอร์เน็ตได้ด้วย

ขั้นตอนการติดตั้ง
  • ต่อสายแลนเข้ากับ Router เพื่อที่จะ Telnet หรือ SSH เข้าไปทดลอง
  • IP address ของ Router คือ 192.168.1.1
  • ทำการ Telnet เข้าไปยัง Router
  • ตั้งค่า WiFi interface โดยทำดังนี้
  • พิมพ์คำสั่ง vi /etc/config/network
  • กดปุ่ม 'i' 1 ครั้งเพื่อเข้าสู่โหมดแก้ไข
  • เพิ่ม ข้อความนี้เข้าไป 
                config interface 'wan'
                           option ifname 'wlan0'    
                           option proto 'dhcp' 
  • กด esc 1 ครั้ง แล้วพิมพ์ :wq กดปุ่ม Enter
  • พิมพ์คำสั่ง vi /etc/config/wireless
  • กดปุ่ม 'i' 1 ครั้งเพื่อเข้าสู่โหมดแก้ไข
  • เพิ่ม ข้อความนี้เข้าไป 
        config wifi-iface
              option device radio0
              option network wan
              option mode sta
              option ssid 'ชื่อของ wifi'
              option encryption psk2
              option key 'รหัสผ่าน'

  • กด esc 1 ครั้ง แล้วพิมพ์ :wq กดปุ่ม Enter
  • พิมพ์ reboot กดปุ่ม enter เราเตอร์จะรีบูตตัวเอง หลังจากเปิดตัวเองขึ้นมาใหม่ก็จะสามารถใช้งาน WiFi ได้เลย
  • เมื่อ boot เสร็จเรียบร้อยก็ให้พิมพ์คำสั่ง opkg update จะได้ผลลัพธ์


Downloading http://downloads.openwrt.org/snapshots/trunk/ar71xx/packages/Packages.gz.
Updated list of available packages in /var/opkg-lists/barrier_breaker.


  • พิมพ์ opkg install kmod-usb-printer ผลลัพธ์จะได้เป็น
Installing kmod-usb-printer (3.7.9-1) to root...
Downloading http://downloads.openwrt.org/snapshots/trunk/ar71xx/packages/kmod-usb-printer_3.7.9-1_ar71xx.ipk.
Configuring kmod-usb-printer.
[  257.810000] usblp 1-1:1.0: usblp0: USB Bidirectional printer dev 2 if 0 alt 0 proto 2 vid 0x04F9 pid 0x003F
[  257.820000] usbcore: registered new interface driver usblp


  • พิมพ์ opkg install p910nd ผลลัพธ์จะเป็น
Installing p910nd (0.95-3) to root...
Downloading http://downloads.openwrt.org/snapshots/trunk/ar71xx/packages/p910nd_0.95-3_ar71xx.ipk.
Configuring p910nd.



  • พิมพ์คำสั่งดังนี้
    • /etc/init.d/p910nd enable
    • /etc/init.d/p910nd start
  • พิมพ์คำสั่ง vi /etc/hotplug.d/usb/20-printer
  • กดปุ่ม 'i' 1 ครั้งเพื่อเข้าสู่โหมดแก้ไข
  • เพิ่ม ข้อความนี้เข้าไป 
#!bin/sh
if [ "$PRODUCT" = "4f9/3f/100" ]
then
case "$ACTION" in
        add)
        /etc/init.d/p910nd stop
        echo "`date` : Brother HL-2130 add" >> /tmp/hl-2130
        /etc/init.d/p910nd start >> /tmp/hl-2130
        echo "Done." >> /tmp/hl-2130
        ;;
        remove)
        echo "`date` : Brother HL-2130 removed" >> /tmp/hl-2130
        /etc/init.d/p910nd stop >> /tmp/hl-2130
        echo "Done." >> /tmp/hl-2130
        ;;
esac
fi



  • กด esc 1 ครั้ง แล้วพิมพ์ :wq กดปุ่ม Enter
  • ลองเสียบสาย USB ของ Printer แล้วถอดออก
  • เมื่อพิมพ์คำสั่ง  cat /tmp/hl-2130 ผลลัพธ์จะเป็น

Wed Feb 20 17:07:06 UTC 2013 : Brother HL-2130 removed
Done.
Wed Feb 20 17:07:06 UTC 2013 : Brother HL-2130 removed
Done.
Wed Feb 20 17:07:11 UTC 2013 : Brother HL-2130 add
Done.
Wed Feb 20 17:07:12 UTC 2013 : Brother HL-2130 add
Done.

  •  พิมพ์ชุดคำสั่งต่อไปนี้ลงไป
uci set p910nd.cfg1=p910nd
uci set p910nd.cfg1.device=/dev/usb/lp0
uci set p910nd.cfg1.port=0
uci set p910nd.cfg1.bidirectional=1
uci set p910nd.cfg1.enabled=1
uci commit p910nd
/etc/init.d/p910nd restart

  •  พิมพ์ vi /etc/config/firewall 
  • กดปุ่ม 'i' 1 ครั้งเพื่อเข้าสู่โหมดแก้ไข
  • เพิ่ม ข้อความนี้เข้าไป 
    #Open Port For Network Printer
    config 'rule'
            option 'src' 'lan'
            option 'proto' 'tcp'
            option 'desc_port' '9100'
            option 'target' 'ACCEPT'
    config 'rule'
            option 'src' 'wan'
            option 'proto' 'tcp'
            option 'desc_port' '9100'
            option 'target' 'ACCEPT'

    • กด esc 1 ครั้ง แล้วพิมพ์ :wq กดปุ่ม Enter
    • พิมพ์ reboot เพื่อรีบูตตัวเอง
    หลังจากทำการตั้งค่าฝั่ง Server เสร็จก็สามารถใช้งาน Print-Server ได้ โดยมีขั้นตอนดังนี้


    ขั้นตอนการ Add Printer 

    ในที่นี้จะแสดงตัวอย่างของ Windows 8 ซึ่งสามารถนำไปประยุกต์ใช้กับ  Windows รุ่นอื่นๆ ได้เช่นกัน โดยขั้นตอนมีดังนี้

    • เข้าไปยัง Devices and Printers ที่อยู่ใน Control Panel



    • กดที่ Add a Printer





    • คลิกที่ The printer that I want isn't listed



    • คลิกตัวเลือกล่างสุด แล้วคลิก Next




    • คลิกตัวเลือกล่างและตั้งค่าเป็น Standard TCP/IP Port แล้วคลิก Next



    • ที่ช่อง Hostname ให้ใส่หมายเลขไอพี Wireless ของ Router ช่อง Port name ใส่เป็นอะไรก็ได้ ส่วนที่ check box ให้ติ๊กออกแล้วคลิก Next


    • จะพบกับหน้า Detecting TCP/IP port ให้รอจนมันเปลี่ยนเป็นหน้าถัดไป



    • เมื่อเข้าสู้หน้า addination port information required ให้เลือก Custom แล้วคลิก Settings



    • จะปรากฎหน้าตั้งค่า คลิก OK แล้วคลิก Next

    • เลือก Driver ให้ตรงรุ่นกับ Printer แล้วคลิก Next
    • คลิก Next
    • ตั้งชื่อเครื่องพิมพ์แล้วคลิก Next
    • คลิก Next
    • คลิก Finish
    • จะปรากฎเครื่องพิมพ์รูปขวาสุด สามารถสั่งงานได้แบบปกติ

    แหล่งข้อมูล


    แหล่ง Firmware






                          วันเสาร์ที่ 2 กุมภาพันธ์ พ.ศ. 2556

                          ออกแบบวงจร PCB ของโมดูล GPS HOLUX M-9129

                          Holux M-9129 เป็นโมดูล GPS ที่น่าสนใจ มีราคาไม่แพงประมาณ 500 กว่าบาทอ้างอิงจากเว็บ es.co.th รูปร่างของโมดูลเป็นดังนี้
                          รูปจริงของโมดูล
                          ตัวโมดูลมีขนาดเล็ก มีขา 22 ขา แต่ใช้งานจริงไม่กี่ขา ได้แก่ 
                          • VCC(13) ต่อกับไฟ +3.3V
                          • V_BAT(12) ต่อกับถ่ายกระดุม 3V
                          • GND(7,17,20,22)
                          • TXDA(4) ต่อกับพอร์ต Serial หรือ UART
                          • RXDA(5)
                          • RF_IN(21) ต่อกับเสาอากาศ
                          • GPIO5(8) ต่อกับ LED เพื่อบอกสถานะการ Fix ของ GPS
                          รายละเอียดขาต่างๆ ของโมดูลเป็นดังนี้

                          ชื่อ Pin ต่างๆ

                          ตารางอธิบายรายละเอียดขาต่างๆ
                          ตารางรายละเอียดขา

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

                          Schematic
                          หลังจากนั้นนำไปสร้าง PCB ออกมา
                          PCB Top Layer
                          PCB Top overlay

                          หลังจากออกแบบ PCB เรียบร้อยก็จะเข้าสู่ขั้นตอนการกัด PCB โดยใช้กรรมวิธี Toner Transfer ผ่านทางแผ่นใส แล้วทำการเจาะรูจะได้แผ่น PCB ดังนี้

                          PCB ของโมดูล GPS

                          บอร์ด GPS เมื่อประกอบเสร็จ

                          ทำการบัดกรีอุปกรณ์ต่างๆเสร็จ ก็ทำการทดสอบ โดยต่อเชื่อมอุปกรณ์ดังนี้


                          การเชื่อมต่ออุปกรณ์
                          ในที่นี้เชื่อม GPS กับคอมพิวเตอร์โดยผ่านทางบอร์ดแปลง USB to Serial

                          ต่อ บอร์ด GPS เข้ากับบอร์ด

                          GPS&GSM Antenna

                          บอร์ดแปลง USB to Serial Port
                          จากการทดสอบ GPS สามารถ Fix ตำแหน่งแบบ 3D โดยใช้เวลาประมาณ 38 วินาที ซึ่งก็ถือว่าเร็วทันใจดีมาก

                          รายการอุปกรณ์ที่ใช้(ไม่รวมบอร์ด USB to Serial)
                            • ตัวต้านทานขนาด 240 โอห์ม                                                       1 ตัว
                            • ตัวต้านทานขนาด 1000 โอห์ม                                                     1 ตัว
                            • LED สีเขียว                                                                                  1 ตัว
                            • LED สีแดง                                                                                   1 ตัว
                            • รางถ่านกระดุมแบบยืน                                                                 1 ตัว
                            • Holux M-9129                                                                             1 ตัว
                            • Pin Header                                                                                 22 ขา
                            • GPS Antenna พร้อม Connector                                                    1 ชุด

                          แหล่งข้อมูลที่ใช้