ఈ ప్రాజెక్ట్లో మేము ATMEGA32 టైమర్లను ఉపయోగించి సాధారణ అలారం గడియారాన్ని రూపొందించబోతున్నాము. ATmega32A మైక్రోకంట్రోలర్లో 16 బిట్ టైమర్ ఉంది, మరియు మేము ఆ టైమర్ను సెకన్లను లెక్కించడానికి మరియు డిజిటల్ గడియారాన్ని అభివృద్ధి చేస్తాము.
అన్ని డిజిటల్ గడియారాలు వాటి లోపల ఒక క్రిస్టల్ కలిగివుంటాయి, ఇది గడియారం యొక్క గుండె. ఈ క్రిస్టల్ గడియారంలోనే కాకుండా అన్ని కంప్యూటింగ్ రియల్ టైమ్ సిస్టమ్స్లోనూ ఉంటుంది. ఈ క్రిస్టల్ గడియారపు పప్పులను ఉత్పత్తి చేస్తుంది, ఇది సమయ గణనలకు అవసరం. గడియార పప్పులను పొందడానికి మరికొన్ని మార్గాలు ఉన్నప్పటికీ, ఖచ్చితత్వం మరియు అధిక పౌన frequency పున్యం కోసం చాలా మంది క్రిస్టల్ ఆధారిత గడియారాన్ని ఇష్టపడతారు. ఖచ్చితమైన గడియారం పొందడానికి మేము ఒక క్రిస్టల్ను ATMEGA32 కి కనెక్ట్ చేయబోతున్నాము.
భాగాలు అవసరం
హార్డ్వేర్: ATmega32 మైక్రోకంట్రోలర్, 11.0592MHz క్రిస్టల్, 22pF కెపాసిటర్ (2 ముక్కలు), విద్యుత్ సరఫరా (5v), AVR-ISP PROGRAMMER, JHD_162ALCD (16x2 LCD), 100uF కెపాసిటర్ (విద్యుత్ సరఫరా అంతటా కనెక్ట్ చేయబడింది), బటన్లు (నాలుగు ముక్కలు), 10KΩ రెసిస్టర్ (ఆరు ముక్కలు), 100 ఎన్ఎఫ్ కెపాసిటో ఆర్ (నాలుగు ముక్కలు), మూడు పిన్ స్విచ్లు (2 ముక్కలు), 2 ఎన్ 2222 ట్రాన్సిస్టర్, బజర్, 200Ω రెసిస్టర్.
సాఫ్ట్వేర్: అట్మెల్ స్టూడియో 6.1, ప్రోగిస్ప్ లేదా ఫ్లాష్ మ్యాజిక్.
సర్క్యూట్ రేఖాచిత్రం మరియు వర్కింగ్ వివరణ
ఖచ్చితమైన సమయం కోసం, మేము గడియారం కోసం 11.0592MHz క్రిస్టల్ను కనెక్ట్ చేసాము. ఇప్పుడు ATMEGA యొక్క అంతర్గత గడియారాన్ని నిలిపివేయడానికి మేము దాని తక్కువ ఫ్యూస్ బిట్లను మార్చాలి. మేము అధిక ఫ్యూజ్ బిట్లను తాకడం లేదని గుర్తుంచుకోండి, కాబట్టి JTAG కమ్యూనికేషన్ ఇప్పటికీ ప్రారంభించబడుతుంది.
అంతర్గత గడియారాన్ని నిలిపివేయడానికి మరియు బాహ్యంగా పనిచేయడానికి ATMEGA కి చెప్పడం కోసం మేము సెట్ చేయాలి:
తక్కువ ఉపయోగం BYTE = 0xFF లేదా 0b11111111.
సర్క్యూట్లో ATMEGA32 యొక్క PORTB డేటా పోర్ట్ LCD కి అనుసంధానించబడి ఉంది. PORTC ని సాధారణ కమ్యూనికేషన్ పోర్ట్గా ఉపయోగించాలనుకుంటే, అధిక ఫ్యూజ్ బైట్లను మార్చడం ద్వారా ATMEGA యొక్క PORTC లోని JTAG కమ్యూనికేషన్ను నిలిపివేయాలని ఇక్కడ గుర్తుంచుకోవాలి. 16x2 ఎల్సిడిలో బ్లాక్ లైట్ ఉంటే అన్నింటికంటే 16 పిన్స్ ఉన్నాయి, బ్యాక్ లైట్ లేకపోతే 14 పిన్స్ ఉంటాయి. బ్యాక్ లైట్ పిన్లను శక్తివంతం చేయవచ్చు లేదా వదిలివేయవచ్చు. ఇప్పుడు 14 పిన్లలో 8 డేటా పిన్స్ (7-14 లేదా డి 0-డి 7), 2 విద్యుత్ సరఫరా పిన్స్ (1 & 2 లేదా విఎస్ఎస్ & విడిడి లేదా జిఎన్డి & + 5 వి), కాంట్రాస్ట్ కంట్రోల్ కోసం 3 వ పిన్ (అక్షరాలు ఎంత మందంగా ఉండాలో VEE- నియంత్రిస్తుంది చూపబడింది), మరియు 3 కంట్రోల్ పిన్స్ (RS & RW & E)
సర్క్యూట్లో, నేను రెండు కంట్రోల్ పిన్స్ మాత్రమే తీసుకున్నానని మీరు గమనించవచ్చు. ఇది మంచి అవగాహన యొక్క సౌలభ్యాన్ని ఇస్తుంది, కాంట్రాస్ట్ బిట్ మరియు READ / WRITE తరచుగా ఉపయోగించబడవు కాబట్టి అవి భూమికి తగ్గించబడతాయి. ఇది ఎల్సిడిని అత్యధిక కాంట్రాస్ట్ మరియు రీడ్ మోడ్లో ఉంచుతుంది. అక్షరాలు మరియు డేటాను తదనుగుణంగా పంపడానికి మేము ఎనేబుల్ మరియు RS పిన్లను నియంత్రించాలి.
LCD కోసం చేసిన కనెక్షన్లు క్రింద ఇవ్వబడ్డాయి:
PIN1 లేదా VSS భూమికి
PIN2 లేదా VDD లేదా VCC నుండి + 5v శక్తికి
PIN3 లేదా VEE to ground (ఒక అనుభవశూన్యుడు కోసం గరిష్ట విరుద్ధతను ఉత్తమంగా ఇస్తుంది)
UC యొక్క PD6 కు PIN4 లేదా RS (రిజిస్టర్ ఎంపిక)
PIN5 లేదా RW (చదవడం / వ్రాయడం) భూమికి (LCD ని రీడ్ మోడ్లో ఉంచుతుంది వినియోగదారు కోసం కమ్యూనికేషన్ను సులభతరం చేస్తుంది)
UC యొక్క PD5 కు PIN6 లేదా E (ప్రారంభించు)
UC యొక్క PIN7 లేదా D0 నుండి PB0 వరకు
UC యొక్క PIN8 లేదా D1 నుండి PB1 వరకు
UC యొక్క PB9 లేదా D2 నుండి PB2 వరకు
UC యొక్క PIN10 లేదా D3 నుండి PB3 వరకు
UC యొక్క PIN11 లేదా D4 నుండి PB4 వరకు
UC యొక్క PIN12 లేదా D5 నుండి PB5 వరకు
UC యొక్క PIN13 లేదా D6 నుండి PB6 వరకు
UC యొక్క PIN14 లేదా D7 నుండి PB7 వరకు
సర్క్యూట్లో మేము 8 బిట్ కమ్యూనికేషన్ (డి 0-డి 7) ను ఉపయోగించామని మీరు చూడవచ్చు, అయితే ఇది తప్పనిసరి కాదు, మేము 4 బిట్ కమ్యూనికేషన్ (డి 4-డి 7) ను ఉపయోగించవచ్చు, కాని 4 బిట్ కమ్యూనికేషన్ ప్రోగ్రామ్ తో కాస్త క్లిష్టంగా మారుతుంది. పై పట్టికలో చూపిన విధంగా మనం 10 పిన్స్ ఎల్సిడిని కంట్రోలర్కు కలుపుతున్నాము, ఇందులో 8 పిన్లు డేటా పిన్స్ మరియు నియంత్రణ కోసం 2 పిన్స్.
అలారం మరియు సమయం మధ్య సర్దుబాటు లక్షణాన్ని ప్రారంభించడం కోసం ఒకటి మారండి. పిన్ తక్కువగా ఉంటే, బటన్లను నొక్కడం ద్వారా అలారం సమయాన్ని సర్దుబాటు చేయవచ్చు. దాని అధిక బటన్లు కేవలం TIME ను సర్దుబాటు చేయడానికి ఉంటే. ఇక్కడ నాలుగు బటన్లు ఉన్నాయి, మొదట అలారం లేదా సమయంలో MINUTES పెంచడం. రెండవది అలారం లేదా సమయంలో MINUTES తగ్గుదల కోసం. మూడవది అలారం లేదా సమయం లో HOUR పెంచడం. FOURTH అలారం లేదా సమయంలో గంటలు తగ్గడం.
ఇక్కడ ఉన్న కెపాసిటర్లు బటన్ల బౌన్స్ ప్రభావాన్ని రద్దు చేయడానికి. అవి తీసివేయబడితే, నియంత్రిక ప్రతిసారీ బటన్ నొక్కినప్పుడు ఒకటి కంటే ఎక్కువ లెక్కించవచ్చు. పిన్స్ కోసం అనుసంధానించబడిన రెసిస్టర్లు కరెంట్ను పరిమితం చేయడం కోసం, పిన్ను భూమికి లాగడానికి బటన్ నొక్కినప్పుడు.
ఒక బటన్ నొక్కినప్పుడల్లా, కంట్రోలర్ యొక్క సంబంధిత పిన్ భూమికి లాగబడుతుంది మరియు తద్వారా నియంత్రిక కొన్ని బటన్ నొక్కినట్లు గుర్తించి సంబంధిత చర్య తీసుకోబడుతుంది.
అన్నింటిలో మొదటిది, మేము ఇక్కడ ఎంచుకున్న గడియారం 11059200 హెర్ట్జ్, దీనిని 1024 ద్వారా విభజించడం 10800 ఇస్తుంది. కాబట్టి ప్రతి సెకనుకు 10800 పప్పులు లభిస్తాయి. కాబట్టి మేము కౌంటర్ గడియారాన్ని 10800 Hz గా పొందడానికి 1024 ప్రీస్కాలర్తో కౌంటర్ ప్రారంభించబోతున్నాము. రెండవది మేము ATMEGA యొక్క CTC (క్లియర్ టైమర్ కౌంటర్) మోడ్ను ఉపయోగించబోతున్నాము. 16 బిట్ రిజిస్టర్ ఉంటుంది, అక్కడ మనం విలువను నిల్వ చేయవచ్చు (విలువను పోల్చండి), కౌంటర్ పోల్చిన విలువ వరకు లెక్కించినప్పుడు అంతరాయం ఏర్పడటానికి సెట్ చేయబడింది.
మేము పోలిక విలువను 10800 కు సెట్ చేయబోతున్నాము, కాబట్టి ప్రాథమికంగా మనకు ప్రతి సెకనుకు ISR (ప్రతి పోలికలో అంతరాయ సేవా రొటీన్) ఉంటుంది. కాబట్టి మనకు అవసరమైన గడియారాన్ని పొందడానికి ఈ సమయానుకూలమైన దినచర్యను ఉపయోగించబోతున్నాము.
BROWN (WGM10-WGM13): ఈ బిట్స్ టైమర్ కోసం ఆపరేషన్ మోడ్ను ఎంచుకోవడం కోసం.
ఇప్పుడు మేము OCR1A బైట్లో పోలిక విలువతో CTC మోడ్ను కోరుకుంటున్నాము కాబట్టి, మేము WGM12 ను ఒకదానికి సెట్ చేయాలి, మిగిలినవి అప్రమేయంగా సున్నా అయినందున మిగిలి ఉన్నాయి.
RED (CS10, CS11, CS12): ఈ మూడు బిట్స్ ప్రెస్కాలర్ను ఎంచుకోవడం మరియు తగిన కౌంటర్ గడియారం పొందడం.
మేము 1024 ను ప్రీస్కేలింగ్గా కోరుకుంటున్నాము కాబట్టి, మేము CS12 మరియు CS10 రెండింటినీ సెట్ చేయాలి.
ఇప్పుడు మనం పరిగణించవలసిన మరో రిజిస్టర్ ఉంది:
గ్రీన్ (OCIE1A): మేము సెట్ చేసిన కౌంటర్ విలువ మరియు OCR1A విలువ (10800) మధ్య పోలిక మ్యాచ్లో అంతరాయం పొందడానికి ఈ బిట్ సెట్ చేయాలి.
OCR1A విలువ (కౌంటర్ పోలిక విలువ), పై రిజిస్టర్లో వ్రాయబడింది.
ప్రోగ్రామింగ్ వివరణ
అలారం గడియారం యొక్క పని క్రింది కోడ్లో దశల వారీగా వివరించబడింది:
పిన్లపై డేటా ప్రవాహ నియంత్రణను ప్రారంభించడానికి # చేర్చండి // హెడర్ # F_CPU 1000000 ని నిర్వచించండి // కంట్రోలర్ క్రిస్టల్ ఫ్రీక్వెన్సీని జతచేయడం # చేర్చండి