ዝርዝር ሁኔታ:

AVR ማይክሮ መቆጣጠሪያ። LEDs Flasher ሰዓት ቆጣሪን በመጠቀም። ሰዓት ቆጣሪዎች ያቋርጣሉ። የሰዓት ቆጣሪ CTC ሞድ 6 ደረጃዎች
AVR ማይክሮ መቆጣጠሪያ። LEDs Flasher ሰዓት ቆጣሪን በመጠቀም። ሰዓት ቆጣሪዎች ያቋርጣሉ። የሰዓት ቆጣሪ CTC ሞድ 6 ደረጃዎች

ቪዲዮ: AVR ማይክሮ መቆጣጠሪያ። LEDs Flasher ሰዓት ቆጣሪን በመጠቀም። ሰዓት ቆጣሪዎች ያቋርጣሉ። የሰዓት ቆጣሪ CTC ሞድ 6 ደረጃዎች

ቪዲዮ: AVR ማይክሮ መቆጣጠሪያ። LEDs Flasher ሰዓት ቆጣሪን በመጠቀም። ሰዓት ቆጣሪዎች ያቋርጣሉ። የሰዓት ቆጣሪ CTC ሞድ 6 ደረጃዎች
ቪዲዮ: 220v AC from 12v 90 Amps Car Alternator 1000W DIY 2024, ህዳር
Anonim
Image
Image

ሰላም ለሁላችሁ!

ሰዓት ቆጣሪዎች በኤሌክትሮኒክስ መስክ ውስጥ አስፈላጊ ጽንሰ -ሀሳብ ነው። እያንዳንዱ የኤሌክትሮኒክ ክፍል በጊዜ መሠረት ላይ ይሠራል። ይህ የጊዜ መሠረት ሥራው ሁሉ ተመሳስሎ እንዲቆይ ይረዳል። ሁሉም የማይክሮ መቆጣጠሪያዎች በተወሰነ የቅድመ -ሰዓት ድግግሞሽ ላይ ይሰራሉ ፣ ሁሉም ሰዓት ቆጣሪዎችን ለማቋቋም ዝግጅት አላቸው። AVR በጣም ትክክለኛ ፣ ትክክለኛ እና አስተማማኝ ሰዓት ቆጣሪ በመኖሩ ይኮራል። በውስጡ ብዙ ባህሪያትን ያቀርባል ፣ ስለሆነም ሰፊ ርዕስ ያደርገዋል። በጣም ጥሩው ክፍል ቆጣሪው ከሲፒዩ ሙሉ በሙሉ ነፃ መሆኑ ነው። ስለዚህ ፣ እሱ ከሲፒዩ ጋር ትይዩ ሆኖ ሲፒዩ ጣልቃ ገብነት የለም ፣ ይህም ሰዓት ቆጣሪውን በጣም ትክክለኛ ያደርገዋል። በዚህ ክፍል ውስጥ የ AVR ሰዓት ቆጣሪዎች መሰረታዊ ፅንሰ ሀሳቦችን እገልፃለሁ። ጊዜ ቆጣሪዎችን በመጠቀም የ LED ፍላሽ መቆጣጠሪያን ለመቆጣጠር በ C ኮድ ውስጥ ቀለል ያለ ፕሮግራም እጽፋለሁ።

ደረጃ 1: መግለጫ

የችግር መግለጫ 1 - በየ 50 ወይዘሮ የመጀመሪያ LED ን (አረንጓዴ) እናበራ
የችግር መግለጫ 1 - በየ 50 ወይዘሮ የመጀመሪያ LED ን (አረንጓዴ) እናበራ

በ ATMega328 ውስጥ ሶስት ዓይነት የሰዓት ቆጣሪዎች አሉ-

ሰዓት ቆጣሪ/Counter0 (TC0) - አጠቃላይ ዓላማ 8 -ቢት የሰዓት ቆጣሪ/ቆጣሪ ሞዱል ፣ በሁለት ገለልተኛ የውጤት ማወዳደር አሃዶች ፣ እና የ PWM ድጋፍ;

ሰዓት ቆጣሪ/ቆጣሪ 1 (TC1) - ባለ 16 ቢት የሰዓት ቆጣሪ/ቆጣሪ አሃዱ ትክክለኛ የፕሮግራም አፈፃፀም ጊዜን (የክስተት አስተዳደር) ፣ የሞገድ ማመንጫ እና የምልክት ጊዜ መለካት ይፈቅዳል ፤

ሰዓት ቆጣሪ/Counter2 (TC2) -አጠቃላይ ዓላማ ፣ ሰርጥ ፣ 8 -ቢት የሰዓት ቆጣሪ/ቆጣሪ ሞዱል ከ PWM እና ያልተመሳሰለ አሠራር ጋር ፤

ደረጃ 2: የችግር መግለጫ 1: በየ 50 ወይዘሮ የመጀመሪያ LED ን (አረንጓዴ) እናበራ

የችግር መግለጫ 1 - በየ 50 ወይዘሮ የመጀመሪያ LED ን (አረንጓዴ) እናበራ
የችግር መግለጫ 1 - በየ 50 ወይዘሮ የመጀመሪያ LED ን (አረንጓዴ) እናበራ
የችግር መግለጫ 1 - በየ 50 ወይዘሮ የመጀመሪያ LED ን (አረንጓዴ) እናበራ
የችግር መግለጫ 1 - በየ 50 ወይዘሮ የመጀመሪያ LED ን (አረንጓዴ) እናበራ

ዘዴ -

- ከፍተኛ ድግግሞሽ የኤሌክትሪክ ምልክት ወደ ዝቅተኛ ድግግሞሽ በኢንቲጀር ክፍፍል ለመቀነስ የ Timer0 ተጠባባቂን መጠቀም ፤

- ሰዓት ቆጣሪው በተጥለቀለ ቁጥር መቋረጥን በመጠቀም ፣

ሰዓት ቆጣሪ 0 (8 ቢት) ከዚያ በኋላ ከ 0 ወደ 255 ይቆጥራል ፣ ይትረፈረፋሉ ፣ ይህ እሴት በእያንዳንዱ የሰዓት ምት ይለወጣል።

F_CPU = 16MHz: የሰዓት ጊዜ = 1000ms / 16000000Hz = 0.0000625ms

የሰዓት ቆጣሪ ብዛት = (አስፈላጊ መዘግየት / የሰዓት ጊዜ) -1 = (50ms / 0.0000625ms) = 799999

50 ms ብቻ መዘግየትን ለመስጠት ሰዓቱ ቀድሞውኑ 799999 ጊዜ ምልክት አድርጓል!

የሰዓት ቆጣሪን ቁጥር ለመቀነስ የድግግሞሽ ክፍፍል ቴክኒክን መጠቀም እንችላለን prescaling ይባላል። AVR ከ 8 ፣ 64 ፣ 256 እና 1024 ለመምረጥ የሚከተሉትን የመጠባበቂያ እሴቶችን ይሰጠናል። ሰንጠረ Seeን ይመልከቱ የተለያዩ ቅድመ -ተቆጣጣሪዎች የመጠቀም ውጤቶችን ያጠቃልላል።

የቆጣሪው እሴት ሁል ጊዜ ኢንቲጀር መሆን አለበት። ቅድመ -ተቆጣጣሪ 256 እንምረጥ!

በአብዛኛዎቹ ማይክሮ መቆጣጠሪያዎች ውስጥ “መቋረጥ” የሚባል ነገር አለ። የተወሰኑ ሁኔታዎች በተሟሉ ቁጥር ይህ መቋረጥ ሊባረር ይችላል። አሁን ማቋረጫ በተሰደደ ቁጥር AVR ይቆማል እና ዋናውን የዕለት ተዕለት ሥራ አፈፃፀም ይቆጥባል ፣ በተቋረጠው ጥሪ ላይ ይሳተፋል (ልዩ ሥራን በማከናወን ፣ “የአቋራጭ አገልግሎት የዕለት ተዕለት እንቅስቃሴ ፣ ISR” ተብሎ ይጠራል) እና አንዴ ከጨረሰ በኋላ ወደ ዋናው የዕለት ተዕለት ተግባር እና እሱን መፈጸሙን ይቀጥላል።

የሚፈለገው መዘግየት (50ms) ከሚቻለው ከፍተኛ መዘግየት ስለሚበልጥ 4 ፣ 096ms = 1000ms / 62500Hz * 256 ፣ ሰዓት ቆጣሪው እንደሚፈስ ግልጽ ነው። እና ሰዓት ቆጣሪው በሚፈስበት ጊዜ ሁሉ ማቋረጫ ይነዳል።

መቋረጡ ስንት ጊዜ መባረር አለበት?

50ms / 4.096ms = 3125 /256 = 12.207 ሰዓት ቆጣሪው 12 ጊዜ ሞልቶ ከሆነ 12 * 4.096ms = 49.152ms ያልፋል። በ 13 ኛው ድግግሞሽ ፣ 50ms - 49.152ms = 0.848ms መዘግየት ያስፈልገናል።

በ 62500Hz (prescaler = 256) ድግግሞሽ ፣ እያንዳንዱ ምልክት 0.016ms ይወስዳል። ስለዚህ የ 0.848ms መዘግየትን ለማሳካት 0.848ms / 0.016ms = 53 መዥገሮችን ይፈልጋል። ስለዚህ ፣ በ 13 ኛው ድግግሞሽ ጊዜ ቆጣሪውን እስከ 53 ድረስ እንዲቆጥር ብቻ እንፈቅዳለን ፣ ከዚያ እንደገና ያስጀምረዋል።

ሰዓት ቆጣሪ 0/ቆጣሪ ያስጀምሩ (ፎቶውን ይመልከቱ)

TCCR0B | = (1 << CS02) // ሰዓት ቆጣሪን በ prescaler = 256 TCNT0 = 0 // ማስጀመሪያ ቆጣሪ TIMSK0 | = (1 << TOIE0) // የትርፍ ፍሰት ማቋረጥን ያንቁ () // ዓለም አቀፍ ማቋረጫዎችን ያንቁ tot_overflow = 0 // የትርፍ ፍሰት ቆጣሪ ተለዋዋጭን ያስጀምሩ

ደረጃ 3 - የችግር መግለጫ 2 - በየ 1 ዎቹ ሁለተኛ LED (ሰማያዊ) እናብራት

የችግር መግለጫ 2 - በየ 1 ሴኮንድ ሁለተኛውን ኤልኢዲ (ሰማያዊ) እናብረው
የችግር መግለጫ 2 - በየ 1 ሴኮንድ ሁለተኛውን ኤልኢዲ (ሰማያዊ) እናብረው
የችግር መግለጫ 2 - በየ 1 ሴኮንድ ሁለተኛውን ኤልኢዲ (ሰማያዊ) እናብረው
የችግር መግለጫ 2 - በየ 1 ሴኮንድ ሁለተኛውን ኤልኢዲ (ሰማያዊ) እናብረው
የችግር መግለጫ 2 - በየ 1 ሴኮንድ ሁለተኛውን ኤልኢዲ (ሰማያዊ) እናብረው
የችግር መግለጫ 2 - በየ 1 ሴኮንድ ሁለተኛውን ኤልኢዲ (ሰማያዊ) እናብረው

ዘዴ -

- በኢንቴጀር ክፍፍል ከፍተኛ ድግግሞሽ የኤሌክትሪክ ምልክትን ወደ ዝቅተኛ ድግግሞሽ ለመቀነስ የ Timer1 ቅድመ -ተቆጣጣሪ በመጠቀም ፣

- በንፅፅር (ሲቲሲ) ሁናቴ ላይ ግልፅ ሰዓት ቆጣሪን መጠቀም ፤

- ከ CTC ሞድ ጋር ማቋረጫዎችን መጠቀም ፤

ሰዓት ቆጣሪ 1 (16 ቢት) ከዚያ በኋላ ከ 0 እስከ 65534 ይቆጥራል ፣ እነሱ ሞልተዋል። ይህ እሴት በእያንዳንዱ የሰዓት ምት ይለወጣል።

F_CPU = 16MHz: የሰዓት ሰዓት = 1000ms / 16000000Hz = 0.0000625ms የቲመር ቆጠራ = (አስፈላጊ መዘግየት / የሰዓት ሰዓት ጊዜ) -1 = (1000ms / 0.0000625ms) = 15999999

የ 1 ዎች መዘግየት ለመስጠት ሰዓቱ ቀድሞውኑ 15999999 ጊዜ ምልክት አድርጓል!

የሰዓት ቆጣሪን ቁጥር ለመቀነስ የድግግሞሽ ክፍፍል ቴክኒክን መጠቀም እንችላለን prescaling ይባላል። AVR ከ 8 ፣ 64 ፣ 256 እና 1024 ለመምረጥ የሚከተሉትን የመጠባበቂያ እሴቶችን ይሰጠናል። ሰንጠረ Seeን ይመልከቱ የተለያዩ ቅድመ -ተቆጣጣሪዎች የመጠቀም ውጤቶችን ያጠቃልላል። የቆጣሪው እሴት ሁል ጊዜ ኢንቲጀር መሆን አለበት። ቅድመ -ተቆጣጣሪ 256 እንምረጥ!

በንፅፅር (ሲቲሲ) ሁናቴ ላይ በንፅፅር ሰዓት ቆጣሪ ውስጥ ፣ የ OCR1A ወይም ICR1 መመዝገቢያው የቆጣሪውን ጥራት ለመቆጣጠር ያገለግላሉ። በ CTC ሞድ ውስጥ አጸፋዊ እሴት (TCNT1) ከ OCR1A ወይም ከ ICR1 ጋር ሲዛመድ ቆጣሪው ወደ ዜሮ ይጸዳል። OCR1A ወይም ICR1 ለቆጣሪው ከፍተኛውን እሴት ይወስናል ፣ ስለሆነም የእሱ ጥራትም እንዲሁ። ይህ ሁናቴ የንፅፅር ተዛማጅ ውፅዓት ድግግሞሽ የበለጠ ቁጥጥርን ይፈቅዳል እንዲሁም የውጭ ክስተቶችን የመቁጠር ሥራን ያቃልላል። እሴቱ ዋጋ 62500 እንደደረሰ ሰዓት ቆጣሪውን 1/ቆጣሪውን እንደገና እንዲያስጀምር AVR ን መንገር አለብን ፣ ስለሆነም የ 1 ዎችን መዘግየት ለማሳካት።

ሰዓት ቆጣሪ 1/ቆጣሪ ያስጀምሩ (ፎቶውን ይመልከቱ)

TCCR1B | = (1 << WGM12) | (1 << CS12) // ሰዓት ቆጣሪ በ prescaler = 256 እና CTC ሞድ TCNT1 = 0 // ማስጀመሪያ ቆጣሪ TIMSK1 | = (1 << OCIE1A) // ን ማወዳደር ማቋረጥን OCR1A = 62500 // ንፅፅር እሴትን ያስጀምሩ

ደረጃ 4 - የችግር መግለጫ 3 - በየ 16 ሚ.ሜ ሦስተኛውን ኤልኢዲ (ቀይ) እናበራ

የችግር መግለጫ 3 - በየ 16 ሚ.ሜ ሦስተኛውን ኤልኢዲ (ቀይ) እናበራ
የችግር መግለጫ 3 - በየ 16 ሚ.ሜ ሦስተኛውን ኤልኢዲ (ቀይ) እናበራ
የችግር መግለጫ 3 - በየ 16 ሚ.ሜ ሦስተኛውን ኤልኢዲ (ቀይ) እናበራ
የችግር መግለጫ 3 - በየ 16 ሚ.ሜ ሦስተኛውን ኤልኢዲ (ቀይ) እናበራ
የችግር መግለጫ 3 - በየ 16 ሚ.ሜ ሦስተኛውን ኤልኢዲ (ቀይ) እናበራ
የችግር መግለጫ 3 - በየ 16 ሚ.ሜ ሦስተኛውን ኤልኢዲ (ቀይ) እናበራ
የችግር መግለጫ 3 - በየ 16 ሚ.ሜ ሦስተኛውን ኤልኢዲ (ቀይ) እናበራ
የችግር መግለጫ 3 - በየ 16 ሚ.ሜ ሦስተኛውን ኤልኢዲ (ቀይ) እናበራ

ዘዴ -

- በኢንቴጀር ክፍፍል ከፍተኛ ድግግሞሽ የኤሌክትሪክ ምልክትን ወደ ዝቅተኛ ድግግሞሽ ለመቀነስ የ Timer2 ቅድመ -ተቆጣጣሪ በመጠቀም ፣

- በንፅፅር (ሲቲሲ) ሁናቴ ላይ ግልፅ ሰዓት ቆጣሪን መጠቀም ፤

- ያለማቋረጥ የሃርድዌር CTC ሁነታን መጠቀም ፤

ሰዓት ቆጣሪ 2 (8 ቢት) ከዚያ በኋላ ከ 0 ወደ 255 ይቆጥራል ፣ ይትረፈረፋሉ። ይህ እሴት በእያንዳንዱ የሰዓት ምት ይለወጣል።

F_CPU = 16MHz: የሰዓት ጊዜ = 1000ms / 16000000Hz = 0.0000625ms

የሰዓት ቆጣሪ ብዛት = (አስፈላጊ መዘግየት / የሰዓት ጊዜ) -1 = (16ms / 0.0000625ms) = 255999

16ms መዘግየትን ለመስጠት ሰዓቱ ቀድሞውኑ 255999 ጊዜ ምልክት አድርጓል!

ሰንጠረ Seeን ይመልከቱ የተለያዩ ቅድመ -ተቆጣጣሪዎችን የመጠቀም ውጤቶችን ያጠቃልላል። የቆጣሪው እሴት ሁል ጊዜ ኢንቲጀር መሆን አለበት። ቅድመ -ጠባቂ 1024 ን እንምረጥ!

በ CTC ሞድ ውስጥ አጸፋዊ እሴት (TCNT2) ከ OCR2A ወይም ከ ICR2 ጋር ሲዛመድ ቆጣሪው ወደ ዜሮ ይጸዳል። ፒን PB3 እንዲሁ የ TIMER2 - OC2A የውጤት ማወዳደር ፒን ነው (ስዕሉን ይመልከቱ)።

የሰዓት ቆጣሪ/ቆጣሪ 2 መቆጣጠሪያ ምዝገባ ሀ - TCCR2A ቢት 7: 6 - COM2A1: 0 - የውጤት ሁነታን ለንፅፅር ክፍል ሀ ያወዳድሩ ሀ. ኤልዲውን መቀያየር ስለምንፈልግ አማራጩን እንመርጣለን። የ OC2A ፒን በራስ -ሰር ይቀየራል። ማንኛውንም ባንዲራ ቢት መፈተሽ አያስፈልግም ፣ በማንኛውም ማቋረጦች ላይ መገኘት አያስፈልግም።

Timer2/Counter ን ያስጀምሩ

TCCR2A | = (1 << COM2A0) | (1 << WGM21) // የጊዜ መቀየሪያ OC2A ፒን በማቀያየር ሁኔታ እና በ CTC ሁነታ TCCR2B | = (1 << CS22) | (1 << CS21) | (1 << CS20) // ሰዓት ቆጣሪን በ prescaler = 1024 TCNT2 = 0 // ማስጀመሪያ ቆጣሪ OCR2A = 250 // ንፅፅር እሴት ያዋቅሩ

ደረጃ 5 - በሲ.ሲ ውስጥ ለፕሮግራም ኮድ መጻፍ የ HEX ፋይልን ወደ ማይክሮ መቆጣጠሪያ ፍላሽ ማህደረ ትውስታ በመጫን ላይ

በ C. ውስጥ ለፕሮግራም የጽሑፍ ኮድ የ HEX ፋይልን ወደ ማይክሮ መቆጣጠሪያ ፍላሽ ማህደረ ትውስታ በመጫን ላይ
በ C. ውስጥ ለፕሮግራም የጽሑፍ ኮድ የ HEX ፋይልን ወደ ማይክሮ መቆጣጠሪያ ፍላሽ ማህደረ ትውስታ በመጫን ላይ
በ C. ውስጥ ለፕሮግራም የጽሑፍ ኮድ የ HEX ፋይልን ወደ ማይክሮ መቆጣጠሪያ ፍላሽ ማህደረ ትውስታ በመጫን ላይ
በ C. ውስጥ ለፕሮግራም የጽሑፍ ኮድ የ HEX ፋይልን ወደ ማይክሮ መቆጣጠሪያ ፍላሽ ማህደረ ትውስታ በመጫን ላይ

የተቀናጀ የእድገት መድረክ - Atmel Studio ን በመጠቀም በ C ኮድ ውስጥ የ AVR ማይክሮ መቆጣጠሪያ መተግበሪያን መፃፍ እና መገንባት።

F_CPU በሄርዝ ውስጥ የሰዓት ድግግሞሽን ይገልፃል እና በ avr-libc ቤተ-መጽሐፍት በመጠቀም በፕሮግራሞች ውስጥ የተለመደ ነው። በዚህ ሁኔታ የጊዜ መዘግየቶችን እንዴት ማስላት እንደሚቻል ለመወሰን በመዘግየቱ አሰራሮች ይጠቀማል።

#ifndef F_CPU

#ጥራት F_CPU 16000000UL // ለተቆጣጣሪ ክሪስታል ድግግሞሽ (16 ሜኸ AVR ATMega328P) መንገር #endif

በፒን ላይ የውሂብ ፍሰት ቁጥጥርን ለማንቃት #አርዕስት / አርዕስት። ፒኖችን ፣ ወደቦችን ፣ ወዘተ ይገልጻል።

የመጀመሪያው ፋይል ፋይል የ avr-libc አካል ነው እና በሚሠሩበት በማንኛውም የ AVR ፕሮጀክት ውስጥ ጥቅም ላይ ይውላል። io.h እርስዎ የሚጠቀሙበትን ሲፒዩ ይወስናል (ለዚህም ነው በሚሰበሰብበት ጊዜ ክፍሉን የሚገልጹት) እና በተራው እኛ የምንጠቀምበትን ቺፕ ተገቢውን የ IO ፍቺ ራስጌን ያካትታል። እሱ በቀላሉ ለሁሉም ፒኖችዎ ፣ ወደቦችዎ ፣ ልዩ መመዝገቢያዎችዎ ፣ ወዘተ ቋሚዎቹን ይገልጻል።

መቋረጥን ለማንቃት #አርዕስት ያካትቱ

ተለዋዋጭ uint8_t tot_overflow; የተትረፈረፈ ብዛት ለመቁጠር/ ዓለም አቀፍ ተለዋዋጭ

የችግር መግለጫ ዘዴ -ብልጭታ መጀመሪያ (አረንጓዴ) LED በየ 50 ሚሴ

- ከፍተኛ ድግግሞሽ የኤሌክትሪክ ምልክት ወደ ዝቅተኛ ድግግሞሽ በኢንቲጀር ክፍፍል ለመቀነስ የ Timer0 ተጠባባቂን መጠቀም ፤

- ሰዓት ቆጣሪው በተጥለቀለ ቁጥር መቋረጥን በመጠቀም ፣

ባዶ ሰዓት ቆጣሪ 0_init () // timer0 ን ያስጀምሩ ፣ ያቋርጡ እና ተለዋዋጭ

{TCCR0B | = (1 << CS02); // ከቅድመ -ተቆጣጣሪ = 256 TCNT0 = 0 ጋር ሰዓት ቆጣሪ ያዘጋጁ። // ማስጀመሪያ ቆጣሪ TIMSK0 | = (1 << TOIE0); // የተትረፈረፈ የማያቋርጥ sei () ን ያንቁ ፤ // ዓለም አቀፍ ማቋረጫዎችን ያንቁ tot_overflow = 0; // የትርፍ ፍሰት ቆጣሪ ተለዋዋጭ ያስጀምሩ}

የችግር መግለጫ ዘዴ -ብልጭታ ሁለተኛ LED (ሰማያዊ) በየ 1 ሴ

- በኢንቴጀር ክፍፍል ከፍተኛ ድግግሞሽ የኤሌክትሪክ ምልክት ወደ ዝቅተኛ ድግግሞሽ ለመቀነስ የ Timer1 ቅድመ -ተቆጣጣሪ መጠቀም ፣

- በንፅፅር (ሲቲሲ) ሁናቴ ላይ ግልፅ ሰዓት ቆጣሪን መጠቀም ፤

- ከ CTC ሞድ ጋር ማቋረጫዎችን መጠቀም ፤

ባዶ ሰዓት ቆጣሪ1_init () // የጊዜ ቆጣሪ 1 ን ያቋርጡ ፣ ያቋርጡ እና ተለዋዋጭ {TCCR1B | = (1 << WGM12) | (1 << CS12); // ሰዓት ቆጣሪን በ prescaler = 256 እና CTC ሞድ TCNT1 = 0 ያዘጋጁ። // ማስጀመሪያ ቆጣሪ OCR1A = 62500; // የመጀመሪያ እሴት ማወዳደር TIMSK1 | = (1 << OCIE1A); // የንፅፅር ማቋረጥን ያንቁ}

የችግር መግለጫ ዘዴ - ብልጭታ ሶስተኛ ኤልኢዲ (ቀይ) በየ 16 ሚ

- በኢንቴጀር ክፍፍል ከፍተኛ ድግግሞሽ የኤሌክትሪክ ምልክትን ወደ ዝቅተኛ ድግግሞሽ ለመቀነስ የ Timer2 ቅድመ -ተቆጣጣሪ በመጠቀም ፣

- በንፅፅር (ሲቲሲ) ሁናቴ ላይ ግልፅ ሰዓት ቆጣሪን መጠቀም ፤

- ያለማቋረጥ የሃርድዌር CTC ሁነታን መጠቀም ፤

ባዶ የጊዜ ቆጣሪ 2_init () // የጊዜ ማስጀመሪያ 2 ን ያስጀምሩ {TCCR2A | = (1 << COM2A0) | (1 << WGM21); // ሰዓት ቆጣሪን OC2A ፒን በማቀያየር ሁኔታ እና በ CTC ሁኔታ TCCR2B | = (1 << CS22) | (1 << CS21) | (1 << CS20); // ከቅድመ -ተቆጣጣሪ = 1024 TCNT2 = 0 ጋር ሰዓት ቆጣሪን ያዘጋጁ። // ማስጀመሪያ ቆጣሪ OCR2A = 250; // የንፅፅር እሴትን ያስጀምሩ}

TCNT0 በተጥለቀለ ቁጥር የሚጠራው የ TIMER0 የትርፍ ፍሰት አገልግሎት መቋረጥ

ISR (TIMER0_OVF_vect)

{tot_overflow ++; // የተትረፈረፈውን ብዛት ይከታተሉ}

አንድ ግጥሚያ በተከሰተ ቁጥር ይህ አይኤስአር ይባረራል ፣ መቀያየር ራሱ እዚህ ይመራል -

ISR (TIMER1_COMPA_vect) {PORTC ^= (1 << 1); // መቀያየር እዚህ ይመራል}

int main (ባዶ)

{DDRB | = (1 << 0); // ይገናኙ 1 (አረንጓዴ) ወደ ፒን PB0 DDRC | = (1 << 1); // ይገናኙ 2 (ሰማያዊ) ወደ ፒን PC1 DDRB ተመርቷል = = (1 << 3); // ይገናኙ 3 (ቀይ) ወደ ፒን PB3 (OC2A) ሰዓት ቆጣሪ0_init () አመራ። // ሰዓት ቆጣሪ 0 ሰዓት ቆጣሪ 1_init () ያስጀምሩ ፤ // ሰዓት ቆጣሪ 1 ሰዓት ቆጣሪ 2_init () ያስጀምሩ ፤ // ሰዓት ቆጣሪን ያስጀምሩ (1) // loop ለዘላለም {

Timer0 12 ጊዜ ከፈሰሰ 12 * 4.096ms = 49.152ms ያልፋል። በ 13 ኛው ድግግሞሽ ፣ 50ms - 49.152ms = 0.848ms መዘግየት ያስፈልገናል። ስለዚህ ፣ በ 13 ኛው ድግግሞሽ ጊዜ ቆጣሪውን እስከ 53 ድረስ እንዲቆጥር ብቻ እንፈቅዳለን ፣ ከዚያ እንደገና ያስጀምረዋል።

ከሆነ (tot_overflow> = 12) // የለም ከሆነ ያረጋግጡ። የተትረፈረፈ = 12 ማሳሰቢያ: '> =' ጥቅም ላይ ውሏል

{ከሆነ (TCNT0> = 53) // የሰዓት ቆጣሪ ቆጠራው 53 መድረሱን ይፈትሹ {PORTB ^= (1 << 0); // መሪውን TCNT0 = 0 ይቀይራል። // ቆጣሪ ዳግም አስጀምር tot_overflow = 0; // የትርፍ ፍሰት ቆጣሪን ዳግም ያስጀምሩ}}}}

የ HEX ፋይልን ወደ ማይክሮ መቆጣጠሪያ ፍላሽ ማህደረ ትውስታ በመስቀል ላይ

በ DOS መጠየቂያ መስኮት ውስጥ ትዕዛዙን ይተይቡ

avrdude –c [የፕሮግራም አድራጊ ስም] –p m328p –u –U ፍላሽ: w: [የሄክስ ፋይልዎ ስም] በእኔ ሁኔታ - avrdude –c ISPProgv1 –p m328p –u –U ብልጭታ ፦ w: Timers.hex

ይህ ትእዛዝ የሄክስ ፋይልን ወደ ማይክሮ መቆጣጠሪያው ማህደረ ትውስታ ይጽፋል። ስለ ማይክሮ መቆጣጠሪያ ፍላሽ ማህደረ ትውስታ ማቃጠል ዝርዝር መግለጫ ቪዲዮውን ይመልከቱ-

የማይክሮ መቆጣጠሪያ ፍላሽ ማህደረ ትውስታ እየነደደ ነው…

እሺ! አሁን ማይክሮ መቆጣጠሪያው በፕሮግራማችን መመሪያ መሠረት ይሠራል። እስቲ እንፈትሽ!

ደረጃ 6 የኤሌክትሪክ ዑደትን መሥራት

የኤሌክትሪክ ዑደት መሥራት
የኤሌክትሪክ ዑደት መሥራት
የኤሌክትሪክ ዑደት መሥራት
የኤሌክትሪክ ዑደት መሥራት
የኤሌክትሪክ ዑደት መሥራት
የኤሌክትሪክ ዑደት መሥራት

በስዕላዊ ሥዕላዊ መግለጫ መሠረት አካላትን ያገናኙ።

የሚመከር: