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

การใช้ Timer ใน ATmega48/88/168 part I


               
PART Timer I ทำความรู้จักกับ timer ในเบื้องต้น



ใน Microcontroller ATmega168 จะมี timer อยู่ 3 ตัวคือ
1. 8-bit timer/counter/pwm (timer0)
2. 16-bit timer/counter/pwm (timer1)
3. 8-bit timer/counter with asynchronous operation (timer2)


                ซึ่งตัวที่เราจะนำเสนอก็คือ timer ตัวแรก ซึ่งก็คือ timer0 นั่นเอง เนื่องจากเป็น timer ที่เหมาะแก่การอธิบาย และทำความเข้าใจได้ง่ายที่สุด timer1 นั้น จะมีหลักการทำงานคล้ายๆกัน เพียงแต่ว่าจะมีรายละเอียดของ register ภายในที่แตกต่างออกไป สามารถศึกษาต่อยอดได้ใน datasheet คาดว่าคงทำได้ไม่ยาก ถ้าหากเข้าใจหลักการเบื้องต้นจาก timer0 แล้ว

มาดูหน้าตาของ
timer0 คร่าวๆก่อนแล้วกัน


เห็นครั้งแรกอาจจะตกใจเล็กน้อย แต่พออ่านบทความนี้จบแล้วกลับมาดูภาพนี้ อีกครั้งจะเข้าใจการทำงานมากยิ่งขึ้น เพราะมันจะทำให้มองเห็นภาพรวมของตัว timer นี้ทั้งหมด
                ก่อนอื่นต้องทำความเข้าใจกับศัพท์ที่จะใช้ให้ตรงกันก่อน ใน
register แต่ละตัวของ timer สามารถเขียนในรูป general  ได้ โดยใช้ ‘n’ แทนตัวเลขของ timer ที่ใช้ ซึ่งอาจจะเป็น 0,1 หรือ 2 ก็ได้ ขึ้นอยู่กับว่าเรากำลังพิจารณาใช้ timer ตัวไหน  และ ‘x’ แทน Output compare unit ว่าเป็น A หรือ B ก็ได้
                ต่อไปคือค่าที่ใช้
‘MAX’ คือค่าสูงสุดที่เป็นไปได้ของ counter ตัวนั้น เช่น ถ้าเป็น counter 8-bit ค่าสูงสุดที่เป็นไปได้คือ 0xFF (255) นั่นเอง ส่วน ‘TOP’ คือค่าสูงสุดของลำดับที่จะนับไปถึงได้ ซึ่งอาจจะเป็นค่าที่เรากำหนดขึ้นมา(ใน register OCR0A) หรือว่าเป็นสูงสุดที่เป็นไปได้ (MAX) ก็ได้ และสำหรับค่า BOTTOM ก็คือค่าต่ำสุดซึ่งก็คือ 0x00



ต่อมาก็มาทำความรู้จักกับ Registers ภายใน timer0 อย่างคร่าวๆแล้วกันว่ามีอะไรบ้าง แต่ละตัวเก็บอะไร
1. The Timer/Counter
(TCNT0) ก็คือตัวนับนั่นแหละ เก็บค่าว่านับได้ถึงไหนแล้ว
2. Output Compare Register (OCR0x) คือรีจิสเตอร์ที่เรากำหนดค่าที่จะใช้เปรียบเทียบกับตัว Counter ว่านับมาถึงค่าที่เรากำหนดไว้นี้แล้วหรือยัง (เอาผลจาก Comparator ไปใช้ต่อใน Waveform Generator)
3. Timer Interrupt Flag Register (TIFR0) เก็บสัญญาณ interrupt ที่เกิดขึ้น (overflow,compare match)
4. Timer Interrupt Mask Register (TIMSK0) เป็นตัว mask ว่าจะ enable interrupt ตัวไหนบ้าง
5. Timer/Counter Control Register (TCCR0x)
ใช้กำหนดค่าควบคุมการทำงานของ timer โดยควบคุมการแสดงผลที่ออกทาง OCnx (หรือ PORTB 1,2)  กำหนดที่มาของ clkTN


ใน PART 2 จะดูองค์ประกอบของ Timer ที่แบ่งตามหน้าที่การทำงาน 


วันจันทร์ที่ 30 กรกฎาคม พ.ศ. 2555

Intro to MY BLOG :)

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






         อย่างไรก็ตาม เนื้อหาต่างๆ ล้วนเกิดจากความเข้าใจโดยส่วนตัวของเราเอง ไม่ว่าจะเป็นจากได้ฟังการบรรยาย การอ่าน หรือการคิดขึ้นมาเองก็ตาม เพราะฉะนั้นข้อมูลที่เกิดขึ้นอาจผิดพลาด ด้วยความเข้าใจที่ผิดของเราเอง หรืออะไรก็ตาม ดังนั้นต้องขอโทษไว้ล่วงหน้าสำหรับความผิดพลาดเหล่านั้น  ทั้งนี้ทั้งนั้น ถ้าพบเห็น ก็รบกวนอีเมลล์มาบอกเราด้วยนะ จะได้ดำเนินการแก้ไข เพื่อที่ว่า คนที่ไม่รู้คนอื่น จะได้ไม่เข้าใจผิดต่อๆกันไป ขอบคุณจ้า ^.^




#########################################