วันอาทิตย์ที่ 26 สิงหาคม พ.ศ. 2550

สรุปผลการทดลอง & ข้อผิดพลาดและข้อเสนอแนะ

สรุปผลการทดลอง

1.อุปกรณ์วัดความเร็วที่เราได้ทำขึ้นมาสามารถวัดความเร็วได้ค่อนข้างแม่นยำ เนื่องจากในส่วนของการคำนวณ และค่าที่เวลาที่วัดได้ค่อนข้างเที่ยงตรง


ข้อผิดพลาดและข้อเสนอแนะ

1.ระยะที่เซนเซอร์สามารถวัดได้ค่อนข้างสั้น เนื่องจาก เป็นเซนเซอร์ประเภท photo transistor
โดยวิธีแก้ไขคือ เราอาจจะเปลี่ยนเซนเซอร์เป็นประเภทอื่นซึ่งมีระยะในการตรวจจับเพิ่มขึ้นได้
และเซนเซอร์จะต้องเป็นประเภทที่ตรวจจับจากวัตถุเป็นเส้นตรงเท่านั้น

2.โดยตัวโปรแกรมไม่สามารถวัดความเร็วได้เกิน 0.07/0.0078125 = 8.96 m/s
เนื่องจากขีดจำกัดทางตรรกะในการคำนวณ และวิธีในการคำนวณ

การทดลอง และผลการทดลอง

จากการทดลองในการหาความเร็วจากสิ่งของ เราจะสามารถหาได้จาก

โดยเรากำหนดให้ระยะทางในการทดลองคือ 7 cm

หาเวลาที่วัตถุผ่านเซนเซอร์ทั้งสองตัว โดยที่เราจะใช้ timer interrupt
ในการเป็นตัวนับเวลา ในขณะที่เซนเซอร์ตัวแรกตรวจจับวัตถุได้แล้ว ก็จะ
ให้เริ่มจับเวลาจาก 0 และตัวไทม์เมอร์เคาน์เตอร์จะค่อยๆนับ ๆ จนจะหยุด
นับเมื่อเซนเซอร์ตัวที่สองตรวจจับวัตถุได้

จากโปรแกรมที่เขียนขึ้น เรากำหนดให้ใน 1 วินาที จะเกิดโอเวอร์โฟลว์
128 ครั้ง (สามารถดูการกำหนดค่าได้จาก ฟังก์ชัน timerinit ข้างล่าง)

จากโปรแกรมเมื่อเราให้แสดงค่าเป็นเวลาวินาที ทุกๆครั้งที่เกิดโอเวอร์โฟลว์
128 ครั้ง ก็พบว่าเวลาค่อนข้างตรงกับเวลาที่เทียบจากนาฬิกา
ซึ่งเสกลเวลาที่ต่ำสุดที่สามารถวัดได้คือ 0.0078125 s ซึ่งเมื่อนำไปทดลอง
ก็พบว่าเป็นเสกลเวลาที่ค่อนข้างดีแล้ว

จากสูตร v = s/t เมื่อเราหาเวลาได้แล้ว และทราบระยะทางที่แน่นอน
เราก็สามารถหาความเร็วได้

รวมโหมดทั้งหมด

รวมโหมดทั้งหมดที่ถูกสร้างขึ้นเพื่อในการใช้งานร่วมกับ AVR Butterfly

เพื่อทำให้ง่ายต่อการเข้าใจ และสะดวกในการนำไปใช้งาน

การทำงานในอาทิตย์สุดท้าย

โหมดที่เพิ่มขึ้นมาในอาทิตย์นี้

1.mode load data
2.mode erase data

ตัวอย่าง จากการทดลองและเก็บค่าลงในดาต้าแฟลช





ตัวอย่าง จากการใช้ mode data load เพื่อโหลดค่าที่เก็บไว้ขึ้นมาดู

โดยค่าที่เก็บไว้ในดาต้าแฟลช จะเก็บไว้เป็นประเภทจำนวนเต็ม เพื่อให้ง่ายต่อการจัดเก็บ

ในการอ่านค่าที่ได้ เช่น 454 จะได้ค่าเท่ากับ 454 x10^-4 m/s



วันอาทิตย์ที่ 19 สิงหาคม พ.ศ. 2550

รูปอุปกรณ์ และ ตัวอย่างผลที่แสดงทาง hyper terminal

ภาพแสดงอุปกรณ์ที่ใช้ทดลอง ล่าสุด
เป็นผลที่แสดงความเร็ว และค่าsensor ของ ฟังก์ชัน fn1_1ทาง Hyper terminal


เป็นผลที่ Test ค่าsensor ของ ฟังก์ชัน fn2_1ทาง Hyper terminal

Program วัดความความเร็ว


เป็นฟังก์ชันหลักซึ่งกำหนดค่าการทำงานทั้งหมดของโปรแกรม

เป็นการเซตค่าcounterจากtimer2 เพื่อใช้นับเวลาในการคิดความเร็วเป็นการรับค่าจากปุ่มแล้วนำไปใช้การเลือกเมนู และการทำงานต่างๆ


เป็นการนำค่าที่ได้จากฟังก์ชันจากgetkey2แล้วนำมาเลือกเมนูและเข้าสู้ฟังก์ชันการทำงาน






เป็นฟังก์ชันการทำงานของ fn1_1 ฟังก์ชันนี้เป็นการรับค่าจากsensor ตัวที่1 และตัวที่ 2 มาคำนวณหาความเร็วซึ่งเมื่อคำนวณแล้วจะนำผลออก ทางport serial และ หน้าจอ LCD


เป็นฟังก์ชันtest การรับค่าจาก sensor ตัวที่หนึ่งและสอง และแสดงผลออกทาง port serial

เป็นฟังก์ชันนับเวลาซึ่งจะเข้ามาทำงานในทุกครั้งที่เกิด overflow ของtimer2

โปรแกรมการทำงานทั้งหมดสามารถ download ได้จาก link ทางขวามือ >>>

อินเตอร์รัพท์(Interrupt)

การอินเตอร์รัพท์
- ในระบบที่มีอุปกรณ์ต่างๆหลายชนิดนั้นบางครั้งเราอาจจะสงสัยว่าในขณะที่นาฬิกาของเครื่องเดินไปได้ตลอดเวลาพร้อมๆกับที่เราใช้ง านอย่างอื่นโดยที่เวลาเดินไปอย่างไม่ผิดพลาด หรือว่าเครื่องได้อ่านแผ่นดิสก์อยู่ ในขณะเดียวกับที่เราพิมพ์ข้อมูลผ่านทางแป้นพิมพ์ได้ ซึ่งเสมือนว่าเครื่องสามารถทํางานได้หลายๆอย่างในเวลาเดียวกัน ซึ่งการที่จะทําได้เช่นนี้นั้น ซีพียูจำเป็นต้องมีวิธีการติดต่อกับอุปกรณ์ภายนอกต่างๆอย่าง มีประสิทธิภาพ
- ซึ่งก็คือให้ซีพียูใช้เวลาส่วนใหญ่ในการทำโปรแกรมหลัก และหันมาสนใจอุปกรณ์ภายนอกก็ต่อเมื่ออุปกรณ์ภายนอกส่งสัญญาณ ซีพียู จะหยุดจากการทำงานในโปรแกรมหลักและไปทำงานในโปรแกรมย่อยซึ่งอุปกรณ์นั้นๆร้องขอมา เมื่อเสร็จแล้ว ซีพียูก็จะกลับมาทำโปรแกรมเดิมที่ หยุดไปต่อ ไป ลักษณะเช่นนี้เรียกว่า การอินเตอร์รัพท์
(Interrupt)

ประเภทของการอินเตอร์รัพท์

การอินเตอร์รัพท์สามารถแบ่งได้เป็น 2 ประเภทใหญ่ๆดังนี้คือ

1.Non-maskable Interrupt (NMI) คือ การอินเตอร์รัพท์ที่ซีพียูไม่สามารถปฏิเสธได้ หากมีการอินเตอร์รัพท์ประเภทนี้มา ซีพียูต้องหยุดการทำงานของโปรแกรมที่ทำอยู่ในขณะนั้นโดยไ ม่มีข้อแม้ และเปลี่ยนไปทำงานให้การอุปกรณ์ที่มีการส่งอินเตอร์รัพท์เข้ามา
2.Maskable Interrupt (INT) คือ การอินเตอร์รัพท์ที่ซีพียูสามารถปฏิเสธได้ โดยปรกติ ซีพียูจะมีการกำหนดว่าในขณะนั้น ซีพียูจะอยู่ในภาวะ
Disable Interrupt (DI) หรือ Enable (EI) ถ้าหากว่า ในขณะที่มีการอินเตอร์รัพท์เข้ามานั้น ซีพียูอยู่ในภาวะ Disable Interrupt แล้ว การอินเตอร์รัพท์นั้นก็จ ะได้รับการปฏิเสธไป แต่ถ้าเป็น Enable Interrupt การอินเตอร์รัพท์นั้นก็จะได้รับการสนองตอบ

ขบวนการอินเตอร์รัพท์


ขั้นตอนการเกิดและตอบรับอินเตอร์รัพท์โดยทั่วไปจะเป็นดังนี้
1. วงจรภายนอกส่งสัญญาณ INT มายังซีพียู
2. ถ้าซีพียูทำคำสั่ง enable interrupt มาแล้ว ซีพียู จะตอบรับ ด้วย interrupt acknowledge cycle
3. วงจรภายนอกส่ง อินเตอร์รัพท์เวคเตอร์ ให้ซีพียู
4. ซีพียู เอา อินเตอร์รัพท์เวคเตอร์ นั้นมาเ ป็นตัวชี้ตำแหน่ง ของ คำสั่งใหม่ ที่จะต้องไปทำ (ก่อนกระโดดไป ซีพียู ตัองเก็บ สถานะของตัวเอง ขณะนั้นไว้)
5. กระโดดไปทำยังตำแหน่งนั้น
6. ตอนจบ ของ โปรแกรม interrupt service routine จะต้อง มีคำสั่ง ให้ซีพียู เรียก สถานะที่เก็บไว้ กลับมา แล้ว กระโดด กลับมายัง ตำแหน่งเดิม ก่อนหน้าจะถูก อินเตอร์รัพท์ (กลไก การเก็บสถานะเดิม ก่อน อินเตอร์รัพท์ และ กลไก การกลับมา สู่โปรแกรมเดิม จะขึ้นกับ รายละเอียด ของซีพียู แต่ละตัว)

วันอาทิตย์ที่ 12 สิงหาคม พ.ศ. 2550

Schematics ที่ช่วยในการศึกษา

sensors
PADS

JTAG and ISP

Joystick




DataFlash



LCD

ต่ออุปกรณ์ และทดสอบบอร์ด รวมทั้งตรวจสอบความสามารถในตัวอุปกรณ์




การทดสอบต่ออุปกรณ์ และศึกษาการทำงานของบอร์ด AVR
หลังจากได้ศึกษาข้อมูลของบอร์ด AVR

1. เชื่อมอุปกรณ์ที่ใช้ทดสอบลงบอร์ด AVR พร้อมทั้งลงโปรแกรมลงบนตัวบอร์ด



2.ใช้LED ในการทดสอบการจ่ายไฟของพอร์ตแต่ละพอร์ต

ด้วยการเขียนโปรแกรมไฟกระพริบ



3.ทดลองต่อ Sensor เข้ากับ AVR เพื่อดูค่าที่แสดงออกมาเมื่อมีวัตถุผ่านตัว Sensor

4.ไฟเลี้ยงบอร์ด AVR ซึ่งเราใช้ค่าความต่างศักยที่์ 4.5V


เซนเซอร์ที่เราใช้ในการทดสอบจะเป็นเซนเซอร์อินฟราเรด ซึ่งเป็นช่วงแสงที่ตามนุษย์ไม่สามารถมองเห็นได้ ซึ่งผลการทดลองต่อเซนเซอร์ ให้ผลออกมาเป็นที่น่าพอใจซึ่งสามารถอ่านค่าออกมาได้ และแบ่งแยกช่วงที่เห็นได้ออกมาอย่างชัดเจน โดยเราจะใช้ฟังก์ชัน ADC_READ() ; ในโปรเจกต์ที่ได้รับมาจากอาจารย์


การเชื่อมต่อAVRผ่านทางพอร์ตUSART


การเชื่อมต่อAVRผ่านทางพอร์ตUSART เราจะใช้สาย3เส้นคือ RXD TXD และGND เชื่อมกับRS-232 โดยที่RXDจะเชื่อมกับพินที่2 TXDจะเชื่อมกับพินที่3 และGNDจะเชื่อมกับพินที่5ของ RS-232ตามลำดับ

วันอาทิตย์ที่ 5 สิงหาคม พ.ศ. 2550

การเชื่อมต่อบอร์ด AVR โดยผ่านทาง JTAG Interface

ET-AVR JTAG (RS232) V1.0


ET-AVR JTAG (RS232) V1.0 เป็นบอร์ดที่ออกแบบมาเพื่อใช้ในการดาวน์โหลด Hex File และ ดีบัก ให้กับ MCU ตระกูล AVR ของ Atmel โดยผ่านทาง JTAG Interface ซึ่งสามารถใช้ได้กับ MCU ที่มีโมดูลJTAG Interface เท่านั้น โดยต้องใช้ร่วมกับโปรแกรม AVR Studio 4.XX

คุณสมบัติของ ET-AVR JTAG (RS232) V1.0

1. มีคุณสมบัติเทียบเท่า AVR JTAG ICE ของ ATMEL
2. สนับสนุนการดีบักแบบเรียลไทม์
3. โปรแกรมและดีบัก MCU ที่มีโมดูล JTAG Interface
4. สามารถอัพเกรด Firmware โดยตรงผ่านโปรแกรม AVR Studio 4
เพื่อให้สามารถใช้กับMCUเบอร์ใหม่ ๆ ได้ ซึ่ง Firmware จะติดมากับโปรแกรม AVR studio 4
5. สามารถใช้ได้กับระบบไฟเลี้ยงตั้งแต่ 2.7V – 5.5V
6. ใช้แรงดันจากบอร์ด Target
7. การติดต่อสื่อสารผ่านพอร์ตอนุกรม (RS232)
8. มี LED แสดงสถานการณ์ทำงาน Power , Activity

การเชื่อมต่อ ET-JTAG AVR กับไมโครคอนโทรลเลอร์ AVR


การต่อใช้งานจะใช้สายสัญญาณ TCK , TDO , TMS , TDI , VCC , GND เท่านั้นส่วนขาสัญญาณ VTrefไม่จำเป็นต้องต่อก็ได้เนื่องจากวงจรของ ET-JTAG AVR ขานี้จะต่อกับ VCC อยู่แล้ว


แสดงตำแหน่งขาสัญญาณของ ET-AVR JTAG


แสดงการเชื่อมต่อ ET-AVR JTAG กับ ET-AVR START KIT V1.0/EXP

บอร์ด AVR Butterfly

AVR Butterfly




สเปคของ cpu ATmega169
- 16KB Flash
- 512B EEPROM
- 1KB Internal SRAM
- JTAG Interface
- 4 x 25 Segment LCD Driver
- Two 8-bit Timer/Counters
- One 16-bit Timer/Counter
- Real Time Counter
- Four PWM Channels
- 8-channel, 10-bit ADC
- USART
- SPI
- Universal Serial Interface
- Watchdog Timer
- Analog Comparator
- Power-on Reset and Brown-out Detection
- Internal Calibrated Oscillator
- Five Sleep Modes:
- Idle, ADC Noise Reduction, Power-save, Power-down, and Standby
- 53 Programmable I/O Lines and 1 Input Line
- 64-lead TQFP and 64-pad MLF
- Operating Voltage:
>>>>>1.8 - 3.6V for ATmega169V
>>>>>2.7 - 3.6V for ATmega169L
- Temperature Range:
>>>>>0°C to 70°C
- Speed Grade:
>>>>>0 - 1 MHz for ATmega169V
>>>>>0 - 4 MHz for ATmega169L
- Ultra-Low Power Consumption
- Active Mode:
>>>>>1 MHz, 1.8V: 300μA
>>>>>32 kHz, 1.8V: 20μA (including Oscillator)
>>>>>32 kHz, 1.8V: TBD (including Oscillator and LCD)
- Power-down Mode:
>>>>>0.5μA at 1.8V


pin ต่างๆ ในบอร์ด


บัดกรีใส่จัมเปอร์ตัวผู้ลงไปที่ขา ADC , PORT B , PORT D และอย่าลืมว่าแพดที่เป็นสี่เหลี่ยมจะเป็นขา 1ของทั้ง PORT B และ PORT D และจะเห็นว่าทั้งสองพอร์ตมี 10 ขา แต่ไม่ใช่ ขาที่ 9 และ 10 เป็นขาไฟเลี้ยงและกราวนด์ (ดูรูปประกอบ)
การเชื่อมต่อผ่าน RS-232
การเชื่อมต่อกับคอมพิวเตอร์ต้องการสาย 3 เส้น ประกอบด้วย TXD, RXD และ GND โดยที่
- TXD จะเป็นขาส่งข้อมูลจากคอมพิวเตอร์ไป Butterfly
- RXD จะเป็นขารับข้อมูลจาก Butterfly เข้าสู่คอมพิวเตอร์
- GND จะเป็นขาคอมมอนกราวนด์
และขอให้เข้าใจว่าขา RXD ของคอมพิวเตอร์ คือ ขา TXD ของ Butterfly

แนะนำสมาชิกกลุ่ม Velocity Measurement

1. นาย เจยวัฒน์ ตั้งศิริวัฒนวงศ์ รหัส 4810611477
Tel: 089-986-2633 E-mail: jediedark@hotmail.com
2. นาย ทนงศักดิ์ สังขโบสถ์ รหัส 4810611964
Tel: 081-590-6542 E-mail: sungkabod@hotmail.com
3. นาย ปัญญา เอื้อรักษ์โอฬาร รหัส 4810611972
Tel: 085-948-2598 E-mail: shadow_72692@hotmail.com

กลุ่มพวกเราทำ Project เรื่อง Velocity Measurement(วัดความเร็วของอุปกรณ์ขนาดเล็ก)โดยใช้บอร์ด AVR Butterfly และ Sensor ที่ใช้ในการตรวจจับ โดยพวกเราได้แบ่งการทำงานออกเป็น 4 ช่วง คือ
สัปดาห์ที่ 1 : ศึกษาการทำงานและการใช้งาน บอร์ด AVR Butterfly และส่วนอื่นที่ใช้ในการทำงาน
สัปดาห์ที่ 2 : ต่ออุปกรณ์และทดสอบบอร์ดรวมทั้งตรวจสอบความสามารถในตัวอุปกรณ์ที่นำมาใช้ว่าเหมาะสมหรือไม่
สัปดาห์ที่ 3 : เขียนโปรแกรมในการโปรแกรมบอร์ดAVR Butterfly
สัปดาห์ที่ 4 : ทำการทดลอง เก็บข้อมูล และสรุปผล