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