- ఎంబెడెడ్ ఎలక్ట్రానిక్స్లో TIMER అంటే ఏమిటి?
- ఆర్డునో టైమర్ రిజిస్టర్లు
- ఆర్డునో టైమర్ అంతరాయాలు
- భాగాలు అవసరం
- సర్క్యూట్ రేఖాచిత్రం
- ప్రోగ్రామింగ్ Arduino UNO టైమర్స్
ఆర్డునో డెవలప్మెంట్ ప్లాట్ఫాం మొదట 2005 లో ఆర్ట్ డిజైన్ ప్రాజెక్ట్ల కోసం ఉపయోగించడానికి సులభమైన ప్రోగ్రామబుల్ పరికరంగా అభివృద్ధి చేయబడింది. ఎక్కువ ప్రోగ్రామింగ్ పరిజ్ఞానం లేకుండా ప్రాథమిక ఎలక్ట్రానిక్స్ మరియు మైక్రోకంట్రోలర్లతో పనిచేయడానికి ఇంజనీర్లు కానివారికి సహాయం చేయడమే దీని ఉద్దేశ్యం. అయితే, ప్రకృతిని ఉపయోగించడం సులభం కనుక దీనిని త్వరలో ప్రపంచవ్యాప్తంగా ఎలక్ట్రానిక్స్ బిగినర్స్ మరియు అభిరుచి గలవారు స్వీకరించారు మరియు ఈ రోజు ప్రోటోటైప్ అభివృద్ధి మరియు పిఒసి అభివృద్ధికి కూడా ప్రాధాన్యత ఇవ్వబడింది.
Arduino తో ప్రారంభించడం సరైందే అయినప్పటికీ, AVR, ARM, PIC, STM మొదలైన కోర్ మైక్రోకంట్రోలర్లలోకి నెమ్మదిగా వెళ్లడం చాలా ముఖ్యం మరియు వారి స్థానిక అనువర్తనాలను ఉపయోగించి ప్రోగ్రామ్ చేయండి. ఆర్డ్యునో ప్రోగ్రామింగ్ భాష అర్థం చేసుకోవడం చాలా సులభం ఎందుకంటే డిజిటల్ రైట్ (), అనలాగ్ రైట్ (), ఆలస్యం () వంటి ముందే నిర్మించిన ఫంక్షన్ల ద్వారా చాలా పనులు జరుగుతాయి, అయితే తక్కువ స్థాయి యంత్ర భాష వాటి వెనుక దాగి ఉంటుంది. ఆర్డునో ప్రోగ్రామ్లు ఇతర ఎంబెడెడ్ సి కోడింగ్తో సమానంగా ఉండవు, ఇక్కడ మేము రిజిస్టర్ బిట్లతో వ్యవహరిస్తాము మరియు మా ప్రోగ్రామ్ యొక్క తర్కం ఆధారంగా వాటిని ఎక్కువ లేదా తక్కువగా చేస్తాము.
ఆలస్యం లేకుండా ఆర్డునో టైమర్స్:
అందువల్ల, ముందే నిర్మించిన ఫంక్షన్లలో ఏమి జరుగుతుందో అర్థం చేసుకోవడానికి ఈ నిబంధనల వెనుక మనం త్రవ్వాలి. ఉదాహరణకు, ఆలస్యం () ఫంక్షన్ ఉపయోగించినప్పుడు ఇది వాస్తవంగా ATmega మైక్రోకంట్రోలర్ యొక్క టైమర్ మరియు కౌంటర్ రిజిస్టర్ బిట్లను సెట్ చేస్తుంది.
ఈ ఆర్డునో టైమర్ ట్యుటోరియల్లో మేము ఈ ఆలస్యం () ఫంక్షన్ యొక్క వాడకాన్ని నివారించబోతున్నాము మరియు బదులుగా రిజిస్టర్లతోనే వ్యవహరిస్తాము. మంచి విషయం ఏమిటంటే మీరు దీని కోసం అదే ఆర్డునో IDE ని ఉపయోగించవచ్చు. మేము మా టైమర్ రిజిస్టర్ బిట్లను సెట్ చేస్తాము మరియు ప్రతిసారీ అంతరాయం సంభవించినప్పుడు LED ని టోగుల్ చేయడానికి టైమర్ ఓవర్ఫ్లో అంతరాయాన్ని ఉపయోగిస్తాము. టైమర్ బిట్ యొక్క ప్రీలోడర్ విలువను అంతరాయం సంభవించే వ్యవధిని నియంత్రించడానికి పుష్బటన్లను ఉపయోగించి సర్దుబాటు చేయవచ్చు.
ఎంబెడెడ్ ఎలక్ట్రానిక్స్లో TIMER అంటే ఏమిటి?
టైమర్ ఒక రకమైన అంతరాయం. ఇది ఒక సాధారణ గడియారం లాంటిది, ఇది సంఘటన యొక్క సమయ విరామాన్ని కొలవగలదు. ప్రతి మైక్రోకంట్రోలర్కు గడియారం (ఓసిలేటర్) ఉంటుంది, ఆర్డునో యునోలో ఇది 16Mhz అని చెప్పండి. ఇది వేగానికి కారణం. క్లాక్ ఫ్రీక్వెన్సీ ఎక్కువ అయితే ప్రాసెసింగ్ వేగం ఉంటుంది. టైమర్ గడియార పౌన.పున్యాన్ని బట్టి నిర్దిష్ట వేగంతో లెక్కించే కౌంటర్ను ఉపయోగిస్తుంది. Arduino Uno లో ఒకే గణన చేయడానికి 1/16000000 సెకన్లు లేదా 62 నానో సెకన్లు పడుతుంది. అర్ధం అర్దునో ప్రతి 62 నానో సెకనుకు ఒక సూచన నుండి మరొక సూచనకు కదులుతుంది.
Arduino UNO లో టైమర్లు:
Arduino UNO లో వేర్వేరు ఫంక్షన్ల కోసం మూడు టైమర్లు ఉపయోగించబడతాయి.
టైమర్ 0:
ఇది 8-బిట్ టైమర్ మరియు ఆలస్యం (), మిల్లిస్ () వంటి టైమర్ ఫంక్షన్లో ఉపయోగించబడుతుంది.
టైమర్ 1:
ఇది 16-బిట్ టైమర్ మరియు సర్వో లైబ్రరీలో ఉపయోగించబడుతుంది.
టైమర్ 2:
ఇది 8-బిట్ టైమర్ మరియు టోన్ () ఫంక్షన్లో ఉపయోగించబడుతుంది.
ఆర్డునో టైమర్ రిజిస్టర్లు
టైమర్ల ఆకృతీకరణను మార్చడానికి, టైమర్ రిజిస్టర్లు ఉపయోగించబడతాయి.
1. టైమర్ / కౌంటర్ కంట్రోల్ రిజిస్టర్లు (TCCRnA / B):
ఈ రిజిస్టర్ టైమర్ యొక్క ప్రధాన నియంత్రణ బిట్లను కలిగి ఉంది మరియు టైమర్ యొక్క ప్రీస్కాలర్లను నియంత్రించడానికి ఉపయోగిస్తారు. ఇది WGM బిట్లను ఉపయోగించి టైమర్ మోడ్ను నియంత్రించడానికి కూడా అనుమతిస్తుంది.
ఫ్రేమ్ ఫార్మాట్:
టిసిసిఆర్ 1 ఎ | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
COM1A1 | COM1A0 | COM1B1 | COM1B0 | COM1C1 | COM1C0 | WGM11 | WGM10 |
టిసిసిఆర్ 1 బి | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
ICNC1 | ICES1 | - | WGM13 | WGM12 | CS12 | CS11 | CS10 |
ప్రెస్కాలర్:
TCCR1B లోని CS12, CS11, CS10 బిట్స్ ప్రీస్కాలర్ విలువను సెట్ చేస్తాయి. టైమర్ యొక్క గడియార వేగాన్ని సెటప్ చేయడానికి ప్రీస్కాలర్ ఉపయోగించబడుతుంది. ఆర్డునో యునోలో 1, 8, 64, 256, 1024 ప్రీస్కాలర్లు ఉన్నాయి.
CS12 | CS11 | CS10 | వా డు |
0 | 0 | 0 | క్లాక్ టైమర్ లేదు |
0 | 0 | 1 | CLCK i / o / 1 ప్రెస్కేలింగ్ లేదు |
0 | 1 | 0 | CLK i / o / 8 (ప్రెస్కాలర్ నుండి) |
0 | 1 | 1 | CLK i / o / 64 (ప్రెస్కాలర్ నుండి) |
1 | 0 | 0 | CLK i / o / 256 (ప్రెస్కాలర్ నుండి) |
1 | 0 | 1 | CLK i / o / 1024 (ప్రెస్కాలర్ నుండి) |
1 | 1 | 0 | T1 పిన్లో బాహ్య గడియార మూలం. పడిపోయే అంచున గడియారం |
1 | 1 | 1 | T1 పిన్లో బాహ్య గడియార మూలం. పెరుగుతున్న అంచున గడియారం. |
2. టైమర్ / కౌంటర్ రిజిస్టర్ (TCNTn)
ఈ రిజిస్టర్ కౌంటర్ విలువను నియంత్రించడానికి మరియు ప్రీలోడర్ విలువను సెట్ చేయడానికి ఉపయోగించబడుతుంది.
సెకనులో అవసరమైన సమయం కోసం ప్రీలోడర్ విలువ కోసం ఫార్ములా:
TCNTn = 65535 - (సెకను / ప్రెస్కాలర్ విలువలో 16x10 10 xTime)
2 సెకన్ల సమయం కోసం టైమర్ 1 కోసం ప్రీలోడర్ విలువను లెక్కించడానికి:
TCNT1 = 65535 - (16x10 10 x2 / 1024) = 34285
ఆర్డునో టైమర్ అంతరాయాలు
మేము ఇంతకుముందు Arduino అంతరాయాల గురించి తెలుసుకున్నాము మరియు టైమర్ అంతరాయాలు ఒక రకమైన సాఫ్ట్వేర్ అంతరాయాలు అని చూశాము. Arduino లో వివిధ టైమర్ అంతరాయాలు ఉన్నాయి, ఇవి క్రింద వివరించబడ్డాయి.టైమర్ ఓవర్ఫ్లో అంతరాయం:
టైమర్ దాని గరిష్ట విలువకు చేరుకున్నప్పుడల్లా చెప్పండి (16 బిట్ -65535) టైమర్ ఓవర్ఫ్లో అంతరాయం ఏర్పడుతుంది. కాబట్టి, టైమర్ అంతరాయ ముసుగు రిజిస్టర్ TIMSKx లో ఉన్న TOIEx లో టైమర్ ఓవర్ఫ్లో ఇంటరప్ట్ బిట్ ఎనేబుల్ అయినప్పుడు ISR అంతరాయ సేవా దినచర్య అంటారు.
ISR ఫార్మాట్:
ISR (TIMERx_OVF_vect) { }
అవుట్పుట్ పోలిక రిజిస్టర్ (OCRnA / B):
ఇక్కడ అవుట్పుట్ కంపేర్ మ్యాచ్ ఇంటరప్ట్ సంభవించినప్పుడు ఇంటరప్ట్ సర్వీస్ ISR (TIMERx_COMPy_vect) అని పిలుస్తారు మరియు TIFRx రిజిస్టర్లో OCFxy ఫ్లాగ్ బిట్ కూడా సెట్ చేయబడుతుంది. TIMSKx రిజిస్టర్లో ఉన్న OCIExy లో ఎనేబుల్ బిట్ను సెట్ చేయడం ద్వారా ఈ ISR ప్రారంభించబడుతుంది. TIMSKx టైమర్ ఇంటరప్ట్ మాస్క్ రిజిస్టర్.
టైమర్ ఇన్పుట్ క్యాప్చర్:
టైమర్ ఇన్పుట్ క్యాప్చర్ ఇంటరప్ట్ సంభవించినప్పుడు, అంతరాయ సేవ ISR (TIMERx_CAPT_vect) అని పిలుస్తారు మరియు ICFx ఫ్లాగ్ బిట్ TIFRx (టైమర్ ఇంటరప్ట్ ఫ్లాగ్ రిజిస్టర్) లో సెట్ చేయబడుతుంది. TIMSKx రిజిస్టర్లో ఉన్న ICIEx లో ఎనేబుల్ బిట్ను సెట్ చేయడం ద్వారా ఈ ISR ప్రారంభించబడుతుంది.
భాగాలు అవసరం
- ఆర్డునో UNO
- పుష్ బటన్లు (2)
- LED (ఏదైనా రంగు)
- 10 కె రెసిస్టర్ (2), 2.2 కె (1)
- 16x2 LCD డిస్ప్లే
సర్క్యూట్ రేఖాచిత్రం
Arduino UNO మరియు 16x2 LCD డిస్ప్లే మధ్య సర్క్యూట్ కనెక్షన్లు:
16x2 LCD |
ఆర్డునో UNO |
వి.ఎస్.ఎస్ |
GND |
VDD |
+ 5 వి |
వి 0 |
LCD యొక్క కాంట్రాస్ట్ కంట్రోల్ కోసం పొటెన్షియోమీటర్ సెంటర్ పిన్కు |
ఆర్ఎస్ |
8 |
ఆర్డబ్ల్యూ |
GND |
ఇ |
9 |
డి 4 |
10 |
డి 5 |
11 |
డి 6 |
12 |
డి 7 |
13 |
జ |
+ 5 వి |
కె |
GND |
10 కె యొక్క పుల్ డౌన్ రెసిస్టర్లతో రెండు పుష్ బటన్లు ఆర్డునో పిన్స్ 2 & 4 తో అనుసంధానించబడి ఉన్నాయి మరియు ఒక ఎల్ఇడి 2.2 కె రెసిస్టర్ ద్వారా ఆర్డునో యొక్క పిన్ 7 కి అనుసంధానించబడి ఉంది.
సెటప్ చిత్రం క్రింద కనిపిస్తుంది.
ప్రోగ్రామింగ్ Arduino UNO టైమర్స్
ఈ ట్యుటోరియల్ లో మేము ఉపయోగించే టైమర్ ఓవర్ఫ్లో అంతరాయం మరియు మీటలతో ఉపయోగించి preloader విలువ (TCNT1) సర్దుబాటు ద్వారా కొన్ని కాల LED మరియు OFF రెప్పపాటు దాన్ని ఉపయోగించండి. Arduino టైమర్ కోసం పూర్తి కోడ్ చివరిలో ఇవ్వబడింది. ఇక్కడ మేము కోడ్ లైన్ను లైన్ ద్వారా వివరిస్తున్నాము:
ప్రీలోడర్ విలువను ప్రదర్శించడానికి ప్రాజెక్ట్లో 16x2 LCD ఉపయోగించబడుతోంది కాబట్టి, లిక్విడ్ క్రిస్టల్ లైబ్రరీ ఉపయోగించబడుతుంది.
# చేర్చండి
Arduino పిన్ 7 తో అనుసంధానించబడిన LED యానోడ్ పిన్ను లెడ్పిన్గా నిర్వచించారు.
# ledPin 7 ని నిర్వచించండి
తరువాత లిక్విడ్ క్రిస్టల్ క్లాస్ను యాక్సెస్ చేసే వస్తువు ఆర్సిడినో యుఎన్ఓతో అనుసంధానించబడిన ఎల్సిడి పిన్లతో (ఆర్ఎస్, ఇ, డి 4, డి 5, డి 6, డి 7) ప్రకటించబడుతుంది.
లిక్విడ్ క్రిస్టల్ ఎల్సిడి (8,9,10,11,12,13);
అప్పుడు ప్రీలోడర్ విలువ 3035 ను 4 సెకన్ల పాటు సెట్ చేయండి. ప్రీలోడర్ విలువను లెక్కించడానికి పై సూత్రాన్ని తనిఖీ చేయండి.
ఫ్లోట్ విలువ = 3035;
నెక్ట్స్ గర్జన సెటప్ (), మొదటి 16x2 రీతిలో LCD సెట్ మరియు కొన్ని సెకన్ల ఒక స్వాగత సందేశం ప్రదర్శించడానికి.
lcd.begin (16,2); lcd.setCursor (0,0); lcd.print ("ARDUINO TIMERS"); ఆలస్యం (2000); lcd.clear ();
తరువాత LED పిన్ను OUTPUT పిన్గా సెట్ చేయండి మరియు పుష్ బటన్లు INPUT పిన్లుగా సెట్ చేయబడతాయి
పిన్మోడ్ (లెడ్పిన్, అవుట్పుట్); పిన్మోడ్ (2, ఇన్పుట్); పిన్మోడ్ (4, ఇన్పుట్);
తరువాత అన్ని అంతరాయాలను నిలిపివేయండి:
noInterrupts ();
తరువాత టైమర్ 1 ప్రారంభించబడింది.
టిసిసిఆర్ 1 ఎ = 0; టిసిసిఆర్ 1 బి = 0;
ప్రీలోడర్ టైమర్ విలువ సెట్ చేయబడింది (ప్రారంభంలో 3035 గా).
TCNT1 = విలువ;
అప్పుడు ప్రీ స్కేలర్ విలువ 1024 టిసిసిఆర్ 1 బి రిజిస్టర్లో సెట్ చేయబడింది.
TCCR1B - = (1 << CS10) - (1 << CS12);
టైమర్ ఓవర్ఫ్లో అంతరాయం టైమర్ ఇంటరప్ట్ మాస్క్ రిజిస్టర్లో ప్రారంభించబడింది, తద్వారా ISR ఉపయోగించబడుతుంది.
TIMSK1 - = (1 << TOIE1);
చివరికి అన్ని అంతరాయాలు ప్రారంభించబడతాయి.
అంతరాయాలు ();
ఇప్పుడు LED చెయ్యడానికి మరియు ఉపయోగించి OFF నిర్వర్తించే టైమర్ ఫ్లో అంతరాయ కోసం ISR వ్రాయండి digitalWrite . టైమర్ ఓవర్ఫ్లో అంతరాయం సంభవించినప్పుడల్లా స్థితి మారుతుంది.
ISR (TIMER1_OVF_vect) { TCNT1 = విలువ; డిజిటల్ రైట్ (లెడ్పిన్, డిజిటల్ రీడ్ (లెడ్పిన్) ^ 1); }
లో గర్జన లూప్ () preloader విలువ పెరిగినప్పటికీ లేదా పుష్ బటన్ ఇన్పుట్లను మరియు కూడా విలువ 16x2 LCD ప్రదర్శించబడుతుంది ఉపయోగించి decremented ఉంది.
if (DigitalRead (2) == HIGH) { విలువ = విలువ + 10; // ఇన్సేషన్ ప్రీలోడ్ విలువ } if (DigitalRead (4) == HIGH) { value = value-10; // తగ్గింపు ప్రీలోడ్ విలువ } lcd.setCursor (0,0); lcd.print (విలువ); }
కాబట్టి ఆర్డునో ప్రోగ్రామ్లో ఆలస్యాన్ని ఉత్పత్తి చేయడానికి టైమర్ను ఈ విధంగా ఉపయోగించవచ్చు. పుష్ బటన్లను ఉపయోగించి ప్రీలోడర్ విలువను పెంచడం మరియు తగ్గించడం ద్వారా ఆలస్యం యొక్క మార్పును మేము ప్రదర్శించిన దిగువ వీడియోను తనిఖీ చేయండి.