Timer/Counter & Watch dog

Timer & Counter
           ภายใน  AT90S4434 / AT90S8535 มี Timer / Counter 3 ชุด โดยจัดเป็น Timer / Counter ขนาด 8 บิท 2 ชุด และ
Timer / Counter ขนาด 16 บิท 1 ชุด
           Timer / Counter2ภายใน  สามารถรับสัญญาณ Clock จากภายนอก ซึ่งเป็น Option ที่จะนำ Timer / Counter2 มาทำเป็น RCT 
โดยใช้ XTAL ที่มีค่าความถี่เท่ากับ 32.768 KHz มาเป็นฐานเวลา
            Timer / Counter0 และ Timer / Counter1 ใช้วงจร Prescaling ขนาด 10 บิท ร่วมกัน ส่วน Timer / Counter2 ใช้วงจร 
Prescaling แยกออกไป
Timer / Counter0
            โครงสร้าง Timer / Counter0 ขนาด 8 บิท ซึ่งสามารถเลือกสัญญาณ Clock ได้จาก CK ของระบบ / ที่ถูกหาร หรือ สัญญาณภายนอก 
โดยการใช้งานจะอธิบายในรีจีสเตอร์ TCCR0 และ TIFR สัญญาณควบคุมได้จาก รีจีสเตอร์ TCCR0 ซึ่งการควบคุมการอินเตอร์รับจะควบคุมได้จาก
รีจีสเตอร์ TIMSK เมื่อ Timer / Counter0 ได้รับสัญญาณจากภายนอก ซึ่งสัญญาณดังกล่าวจะซิงโครไนกับศัญญาณนาฬิกาภายใน CPU
            โดย Timer / Counter0 จะเป็นวงจรนับขึ้นที่สามารถเขียนและอ่านข้อมูลได้ตลอดเวลา เมื่อทำการเขียนข้อมูลลงใน Timer / Counter0
 ในขณะที่มีสัญญาณ Clock จะทำการนับค่าต่อเนื่องจากค่าที่ถูกเขียนลงไป
รูปแสดงโครงสร้างของ Timer / Counter 0

ตารางClock 0 Prescale Select
CS02 CS01An CS00 Description
0 0 0 Stop, Timer / Counter 0 is stopped
0 0 1 CK
0 1 0 CK / 8
0 1 1 CK / 64
1 0 0 CK / 256
1 0 1 CK / 1024
1 1 0 External Pin TO , falling edge
1 1 1 External Pin TO , rising edge
รูปแสดงโครงสร้างของ Timer / Counter 1
            Timer / Counter1 ขนาด 16 บิท ซึ่งสามารถเลือกสัญญาณ Clock ได้จาก CK หรือสัญญาณการหารจาก CK การหยุด Timer
 / Counter1 ในรีจีสเตอร์ TCCR1 A และTCCR1 B โดยแฟร์กที่แสดงสถานะต่าง ๆ ส่วนสัญญาณควบคุมอยู่ในรีจีสเตอร์TCCR1 A และ
TCCR1 B การควบคุมสัญญาณอินเตอร์รับจะควบคุมได้จากรีจีสเตอร์ TIMSK
            เมื่อ Timer1 / Counter1 ถูกกำหนดให้สัญญาณนาฬิกาจากภายนอก สัญญาณดังกล่าวจะถูกซิงโครไนท์กับศัญญาณนาฬิกาภายใน 
CPU
            Timer1 / Counter1 จะประกอบด้วยส่วนของการเปรียบเทียบ Output 2 ฟังก์ชั่น โดยใช้ รีจีสเตอร์ OCRIA และ OCRIB 
เป็นส่วนของการเก็บค่าข้อมูลของการเปรียบเทียบ
                    โดย Timer1 / Counter1 จะสามารถเลือกใช้ฟังก์ชั่น PWM ได้ทั้ง 8 , 9 และ 10 
ตาราง Compare 1 Mode Select
COM1X1 COM1X0 Description
0 0 Timer/Counter 1 disconnected form output pin OC1X)
0 1 Toggle the OC1X Output line
1 0 Clear the OC1X Output line (to Zero)
1 1 Set the OC1X output line (to one)
ตาราง PWM Mode Select
PWM11 PWM10 Description
0 0 PWM operation of Timer/Counter 1 is disabled
0 1 Timer/Counter 1 is an 8-bit PWM
1 0 Timer/Counter 1 is an 9-bit PWM
1 1 Timer/Counter 1 is an 10-bit PWM

ตารางClock 1 Prescale Select
CS12 CS11An CS10 Description
0 0 0 Stop, Timer / Counter 1 is stopped
0 0 1 CK
0 1 0 CK / 8
0 1 1 CK / 64
1 0 0 CK / 256
1 0 1 CK / 1024
1 1 0 External Pin T1 , falling edge
1 1 1 External Pin T1 , rising edge
การใช้งาน Timer / Counter 1 ในโหมด PWM
            การทำงานในโหมด PWM ของ  Timer / Counter1 จะสามารถเลือกใช้งานได้ทั้ง 8 , 9 , 10 บิท โดยoutput ที่ได้จะออกที่ขา PD5
(OC1A)และขาPD(OC1B)
            ในการทำงาน Timer / Counter1 จะนับขึ้นแลนับลง ซึ่งจะนับจาก 0000 ถึงค่าสูงสุดตามที่กำหนดและนัลจากค่าสูงสุเลงมาที่ 0000
แล้วจึงนับอีกครั้ง
            เมื่อค่าใน Timer / Counter1 เท่ากับค่าในรีจีสเตอร์ OC1A หรือ OCR1B จะทำให้ขา PD5(OC1A) / PD1(OC1B) เปลี่ยนแปลง
ตามที่กำหนดในบิท COM1A1 / COM1A0 หรือ COM1B1 / COM1B0
ตารางการกำหนดค่าสูงสุดของ PWM
PWM Resolution Timer TOP value Frequency
8-bit $00FF (225) f TC1/510
9-bit $01FF(511) f TC1/1022
10-bit $03FF(1023) f TC1/2046
ตารางกำหนดลักษณะขาสัญญาณที่ขา PD5 (OC1A)และPD6 (OC1B) ในโหมด PWM
COM1X1 COM1X0 Effect on OCX1
0 0 Not connected
0 1 Not connected
1 0 Cleared on compare match,upcounting. Set on compare match,downcounting (non-inverted PWM)
1 1 Cleared on compare match,downcounting. Set on compare match,upcounting (inverted PWM)
            เมื่อ  OCR1 มีค่าเท่ากับ 0000 หรือ ค่าสูงสุด จะทำให้ output ขา OC1A / OCR1B มีลอจิกเป็น LOW หรือ HIGH ตามที่กำหนด
ในบิท COM1A1 / COM1A0 หรือ COM1B1 หรือ COM1B0
            เมื่อ Timer / Counter1 เกิด Overflow และค่าการนับเป็น 0000 จะทำให้บิท TOV1 เซ็ตเป็น 1
ตาราง Output ของ PWM (OCR1X = $0000) หรือ TOP
COM1X1 COM1X0 OCR1X Output OC1X
1 0 &0000 L
1 0 TOP H
1 1 &0000 H
1 1 TOP L
Timer 2 & Counter 2 รูปแสดงโครงสร้างของ Timer / Counter
            เป็นTimer / Counter  ขนาด 8 บิท
รูปแสดงโครงสร้างของ Timer / Counter
            เมื่อ PWM ถูกกำหนดให้ทำงานจะทำให้ Timer  / Counter 2 ทำงานใน Compare Output Match โดย Timer
 / Counter 2 จะนับขึ้นจาก 00H - FFH โดยเมื่อนับค่า FFH แล้วก็นับกลับมาเป็น 0FH อีกครั้ง ซึ่งเมื่อเกิด Compare Output Match 
จะทำให้ขา PD7(OC2) เป็นไปตามที่กำหนด
ตาราง Compare Mode in PWM Mode
COMn1 COMn0 Effect on Compare Pin
0 0 Not connected
0 1 Not connected
1 0 Cleared on compare match,upcounting. Set on compare match,downcounting (non-inverted PWM)
1 1 Cleared on compare match,downcounting. Set on compare match,upcounting (inverted PWM)
ตาราง Compare Mode Select
COM21 COM20 Description
0 0 Timer/Counter disconnected form output pin OC2
0 1 Toggle the OC2 Output line
1 0 Clear the OC2 Output line (to Zero)
1 1 Set the OC2 output line (to one)

ตาราง Timer / Counter2 Prescale Select
CS22 CS21An CS20 Description
0 0 0 Timer / Counter 2 is stopped
0 0 1 TCK2
0 1 0 TCK 2 / 8
0 1 1 TCK 2 / 32
1 0 0 TCK 2 / 64
1 0 1 TCK 2 / 128
1 1 0 TCK 2 / 256
1 1 1 TCK 2 / 1024
Asynchronous Operation of Timer / Counter 2
            เมื่อ Timer / Counter2 ทำงานจาก Clock จากภายนอก จะเป็นการทำงานที่เรียกว่า Asynchronous 
            เมื่อ Timer / Counter2 สลับการทำงานจาก Clock ภายในเป็นการทำงานจาก Clock ภายนอก จะทำให้Timer / Counter2 
ถูกขัดจังหวะ จึงต้องมีการทำงานดังนี้  
           1. เคลียบิท OCIE2 และบิท TOIE2 เพื่อ Disable อินเตอร์รัพท์
           2. เลือก Clock จากภายนอกโดยการเซ็ตบิท
           3. เขียนค่าใหม่ในรีจีสเตอร์ TCNT2 , OCR2 , TCCR2 
      4. สลับการทำงานไปยัง Clock ภายนอก
           5. กำหนดให้อินเตอร์รัพท์ทำงาน

ตาราง Watch Dog Timer Prescale Select
WDP2 WDP1An WDP0 Timeout Period
0 0 0 16K cycles
0 0 1 32K cycles
0 1 0 64K cycles
0 1 1 128K cycles
1 0 0 256K cycles
1 0 1 512K cycles
1 1 0 1,024K cycles
1 1 1 2,048K cycles
SLEEP MODE
            ภายในของ AT90S4434/AT90S8535 ได้จัดให้มีระบบ Sleep Mode ที่สามารถเลือกการทำงานได้ 3 Mode ด้วยกัน โดยการ
จะเข้าสู่ Mode หนึ่งจะต้องจัดบิท SE ในรีจีสเตอร์ MCUCR มีการเซ็ตเป็น 1 และ CPU จะต้องทำคำสั่ง Sleep
            โดยบิท SM1 และ SM0 ใช้ในการเลือกการทำงานของ Sleep Mode ว่าจะต้องการให้มีการทำงาน Sleep Mode ในส่วนของ Idel , 
Power Down และ Power Save 
            ถ้ามีการอินเตอร์รัพท์เกิดขึ้นขณะที่ CPU อยู่ใน  Sleep Mode จะทำให้ CPU ออกจาก  Sleep Mode และไปทำโปรแกรมบริการการ
อินเตอร์รัพท์แล้วก็จะกลับไปทำคำสั่งที่อยู่ต่อจากคำสั่ง Sleep แต่ถ้ามีการรีเซ็ทในขณะที่อยู่ใน Sleep Mode จะทำให้ CPU ออกจาก Sleep Mode
และไปทำคำสั่งที่ตำแหน่ง Reset Vector
Idel Mode
             เมื่อ SM1 และ SM0 ถูกเคลียเป็น 0 จะทำให้ MCU ทำงานใน Idel Mode ซึ่งจะทำให้ CPU หยุดทำงาน ยกเวัน Timer/Counter
WatchDog , Interrupt ยังคงทำงานต่อไป ซึ่ง MCU ออกจาก Idel Mode ได้โดยการเกิดสัญญาณ Trig จากภายนอก เพื่อให้เกิดการอินเตอร์รัพท์
การอินเตอร์รัพท์ที่เกิดจากการ  Overflow  ของ Timer / Counter , การอินเตอร์รัพท์จากการรับ  Serial  Port   แต่ถ้าอินเตอร์รัพท์จาก Analog 
Compareator ไม่ได้รับการกำหนด ผู้ใช้สามารถเซ็ตบิท ACD เพื่อให้เกิดการประหยัดพลังงานใน Idel Mode ได้เมื่อ CPU ออกจาก Idel Mode 
จะทำคำสั่งทันที
Power Down Mode
             เมื่อ SM1 ถูกเซ็ทเป็น1 และ SM0 ถูกเคลียเป็น 0 จะทำให้ MCU ทำงานใน Power Down Mode ซึ่งใน Mode นี้จะทำให้วงจร 
Oscilator จากภายนอกถูกทำให้หยุดการทำงาน โดยผูใช้สามารถกำหนดให้ Watch Dog ทำงานครบเวลา Time Out จะทำให้ MCU ออกจาก
Power Down Mode แต่ถ้า Watch Dogไม่ถูกกำหนดให้ทำงาน ผุ้ใช้สามารถกำนหดให้ MCU ออกจาการทำงานได้โดยรีเซ็ตจากภายนอก Trig 
เพื่อให้เกิดการอินเตอร์รัพท์ 
Power Save Mode
             เมื่อ SM1 ถูกเซ็ทเป็น1 และ SM0 ถูกเคลียเป็น 0 จะทำให้ MCU ทำงานใน Power Save Mode ซึ่ง Mode นี้จะทำเหมือนกับ
ให้วงจร Power Down Mode แตกต่างกันที่ Timer/Counter2 ให้ OSC จากภายนอก ซึ่ง Timer/Counter2 จะทำงานแบบ 
Asynchronouse Timer/Counter2 ทำงานใน Sleep Mode ซึ่งออกจาก Power Down Mode ได้จากการอินเตอร์รัพท์จากการ 
Overflow ของ Timer/Counter2หรือการอินเตอร์รัพท์จาก Output Compare match ของ Timer/Counter2