ዝርዝር ሁኔታ:

AVR ማይክሮ መቆጣጠሪያ። የግፊት አዝራር መቀየሪያን በመጠቀም የ LED ን ይቀያይሩ። የግፋ አዝራር Debouncing .: 4 ደረጃዎች
AVR ማይክሮ መቆጣጠሪያ። የግፊት አዝራር መቀየሪያን በመጠቀም የ LED ን ይቀያይሩ። የግፋ አዝራር Debouncing .: 4 ደረጃዎች

ቪዲዮ: AVR ማይክሮ መቆጣጠሪያ። የግፊት አዝራር መቀየሪያን በመጠቀም የ LED ን ይቀያይሩ። የግፋ አዝራር Debouncing .: 4 ደረጃዎች

ቪዲዮ: AVR ማይክሮ መቆጣጠሪያ። የግፊት አዝራር መቀየሪያን በመጠቀም የ LED ን ይቀያይሩ። የግፋ አዝራር Debouncing .: 4 ደረጃዎች
ቪዲዮ: የተበላሸ stablizer እንዴት መስራት እንችላለን? -How to fix dead stablizer at home 2024, ሀምሌ
Anonim
Image
Image

በዚህ ክፍል ውስጥ ፣ ከአዝራር መቀየሪያ ግብዓት መሠረት የሦስቱን ኤልኢዲዎች ሁኔታ ለመቀየር ለኤምኤምኤምኤ 328PU የፕሮግራም ሲ ኮድ እንዴት እንደሚሠራ እንማራለን። እንዲሁም ፣ ለ ‹ችግሩ መቀያየር መቀያየር› ለችግሩ መፍትሄዎችን መርምረናል። እንደተለመደው የፕሮግራም ኮዱን ሥራ ለመፈተሽ በ AVR ATmega328 መሠረት የኤሌክትሪክ ወረዳውን እንሰበስባለን።

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

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

አትሜል ስቱዲዮ ከሌለዎት ማውረድ እና መጫን አለብዎት።

www.microchip.com/mplab/avr-support/atmel-studio-7

የመጀመሪያዎቹ ጥቂት መስመሮች እኛ አንዳንድ አጠናቃሪ ይገልፃሉ።

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

#ifndef F_CPU

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

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

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

በፕሮግራሙ ውስጥ የመዘግየት ተግባርን ለማንቃት #አርዕስት / ያካትቱ

የቤተ መፃህፍት util/delay.h ለአጭር መዘግየቶች አንዳንድ ልምዶችን ይ containsል። የምንጠቀምበት ተግባር ፣ _delay_ms () ነው።

እኛ የእኛን አዝራር እና የ LED ወደቦችን እና ፒኖችን ለማወጅ ትርጓሜዎችን እንጠቀማለን። እንደዚህ ያሉ መግለጫዎችን መግለፅን በመጠቀም ኤልኢዲውን ወደ ሌላ የ I/O ፒን ካንቀሳቀስን ወይም የተለየ AVR ን የምንጠቀም ከሆነ 3 በቀላሉ ማግኘት የሚችሉ መስመሮችን ማሻሻል ብቻ ያስፈልገናል።

#ጥራት BUTTON1 1 // የአዝራር መቀየሪያ ከወደብ ቢ ፒ 1 ጋር ተገናኝቷል

#ጥራት LED1 0 // Led1 ከወደብ ቢ ፒ 0 ጋር ተገናኝቷል # #ጥራት LED2 1 // Led2 ወደብ ሲ ፒ 1 #ተገለጸ LED3 2 // Led3 ወደብ D ፒ 2 ተገናኝቷል

የመጨረሻዎቹ ሁለት መግለጫዎችን የማቀናበር ጊዜዎችን ፣ በሚሊሰከንዶች ውስጥ ፣ ሌላውን የአዝራር ቁልፍ ከመፍቀዱ በፊት ማብሪያውን እና የሚጠብቀውን ጊዜ ለማራገፍ። የማሽቆልቆሉ ጊዜ ሁሉ ከተነሳ በኋላ ከዲጂታል ከፍተኛ ወደ ዲጂታል ዝቅተኛ ለመሄድ ማብሪያ / ማጥፊያ በሚወስድበት ጊዜ መስተካከል አለበት። የመብረቅ ባህሪው ከመቀየሪያ ወደ መቀያየር ይለያያል ፣ ግን ከ20-30 ሚሊሰከንዶች በተለምዶ በቂ ነው።

“የማይነቃነቅ” ቁልፍን ለመጠበቅ #DEBOUNCE_TIME 25 // ጊዜን ይግለጹ

አዝራሩን ከተጫኑ በኋላ ለመጠበቅ #LOCK_INPUT_TIME 300 // ጊዜን ይግለጹ

ባዶ init_ports_mcu ()

{

እኛ የምንጠቀምባቸውን የግብዓት ውፅዓት ፒኖችን ለማስጀመር ይህ ተግባር በፕሮግራማችን መጀመሪያ ላይ አንድ ጊዜ ብቻ ይባላል።

ለቁልፍ ፣ እኛ ለመፃፍ እና ለማንበብ የ PORT እና የፒን መዝገቦችን እንጠቀማለን። በ AVR ዎች አማካኝነት የፒንክስ መመዝገቢያውን በመጠቀም ፒን እናነባለን እና የ PORTx ምዝገባን በመጠቀም ወደ ፒን እንጽፋለን። መጎተቻዎችን ለማንቃት ወደ አዝራር መመዝገቢያ መፃፍ አለብን።

ለ LED እኛ ለመጻፍ የ PORT ምዝገባን ብቻ መጠቀም አለብን ፣ ሆኖም ፣ እኔ/ኦ ፒኖች በነባሪነት እንደ ግብዓቶች ስለሚዋቀሩ የውሂብ አቅጣጫ መመዝገቢያ (DDR) ያስፈልገናል።

በመጀመሪያ ፣ የውሂብ አቅጣጫ መመዝገቢያውን በመጠቀም የ LED ን I/O ፒኖችን እንደ ውፅዓት እናዘጋጃለን።

DDRB = 0xFFu; // ሁሉንም የ PORTB ፒኖች እንደ ውፅዓት ያዘጋጁ።

በመቀጠል ፣ የአዝራር ፒኑን እንደ ግብዓት በግልፅ ያዘጋጁ።

DDRB & = ~ (1 <

በመቀጠልም የ PORTB ፒኖች ለማብራት ከፍተኛ (+5 ቮልት) ተዘጋጅቷል። የውጤት ፒኖች መጀመሪያ ላይ ከፍ ያሉ ናቸው ፣ እና የእኛ ኤልኢዲ ገባሪ-ከፍተኛ ስለሆነ ፣ እኛ በግልጽ ካላጠፋነው በርቷል።

እና በመጨረሻ ፣ እኛ ለኛ አዝራር በምንጠቀምበት የግቤት ፒን ላይ የውስጥ መጎተቻ ተከላካዩን እናነቃለን። ይህ የሚከናወነው አንዱን ወደ ወደብ በማውጣት ብቻ ነው። እንደ ግብዓት ሲዋቀር ፣ ይህን ማድረግ መጎተቻዎችን ማንቃት እና እንደ ውፅዓት ሲዋቀር ፣ ይህን ማድረግ በቀላሉ ከፍተኛ voltage ልቴጅ ያስገኛል።

PORTB = 0xFF; // ሁሉንም የ PORTB ፒኖች እንደ ከፍተኛ ያዘጋጁ። መሪ በርቷል ፣

// እንዲሁም የመጀመሪያው ፒን PORTB ውስጣዊ የመሳብ ተከላካይ ነቅቷል። DDRC = 0xFFu; // ሁሉንም የ PORTC ፒኖች እንደ ውፅዓት ያዘጋጁ። PORTC = 0x00u; // ሁሉንም የሚያሰናክል የ PORTC ዝቅተኛ ፒኖችን ያዘጋጁ። DDRD = 0xFFu; // ሁሉንም የ PORTD ፒኖች እንደ ውፅዓት ያዘጋጁ። PORTD = 0x00u; // ሁሉንም የሚያጠፋውን የ PORTD ዝቅተኛ ፒኖችን ያዘጋጁ። }

ያልተፈረመ ቻር አዝራር_ክልል ()

{

ይህ ተግባር አዝራሩ ተጭኖ እንደሆነ ወይም እንዳልሆነ የሚያመለክት የቦሊያን እሴት ይመልሳል። ይህ የኮድ ማገጃው ያለማቋረጥ በተገደበው loop ውስጥ እየተገደለ በመሆኑ የአዝራሩን ሁኔታ እየመረጠ ነው። ማብሪያ / ማጥፊያውን የምናስወግድበት ይህ ነው።

አሁን ፣ ማብሪያ / ማጥፊያውን ስንጫን የግብዓት ውፅዓት ፒን ወደ መሬት እንደሚጎትት ያስታውሱ። ስለዚህ ፣ ፒን ዝቅተኛ እስኪሆን ድረስ እንጠብቃለን።

/ * BUTTON1 ቢት ግልፅ በሚሆንበት ጊዜ አዝራሩ ተጭኗል */

ከሆነ (! (ፒንቢ እና (1 <

እኛ የምናደርገው ጥርሱ ግልጽ መሆኑን በማጣራት ነው። ንጥሉ ግልጽ ከሆነ ፣ አዝራሩ የተጨነቀ መሆኑን የሚያመለክት ከሆነ ፣ በመጀመሪያ በ DEBOUNCE_TIME 25ms በሆነው ለተገለጸው የጊዜ መጠን እንዘገያለን እና ከዚያ የአዝራሩን ሁኔታ እንደገና ይፈትሹ። ከ 25ms በኋላ አዝራሩ ከተጨነቀ ከዚያ ማብሪያ / ማጥፊያው እንደ ተዘበራረቀ እና አንድ ክስተት ለመቀስቀስ ዝግጁ እንደሆነ ተደርጎ ይቆጠራል እና ስለዚህ 1 ወደ የጥሪ ሥራችን እንመለሳለን። አዝራሩ ካልተጨነቀ ፣ 0 ወደ የጥሪ አሠራራችን እንመለሳለን።

_ መዘግየት_ኤምኤስ (DEBOUNCE_TIME);

ከሆነ (! (ፒንቢ እና (1 <

int main (ባዶ)

{

የእኛ ዋና የዕለት ተዕለት እንቅስቃሴ። ዋናው ተግባር ልዩ እና ከሌሎች ተግባራት ሁሉ የተለየ ነው። እያንዳንዱ ሲ ፕሮግራም በትክክል አንድ ዋና () ተግባር ሊኖረው ይገባል። ዋናው ኃይል መጀመሪያ ሲበራ AVR የእርስዎን ኮድ መፈጸም የሚጀምርበት ነው ፣ ስለሆነም የፕሮግራሙ መግቢያ ነጥብ ነው።

ያልተፈረመ ቻር n_led = 1; // መጀመሪያ የ LED ቁጥር አሁን በርቷል

ጥቅም ላይ የዋሉ የ I/O ፒኖችን ለማስጀመር የተግባሩ ጥሪ

init_ports_mcu ();

ፕሮግራማችን የሚሠራበት ወሰን የሌለው ዑደት

ሳለ (1)

{

የ button_state አዝራሩ እንደተጫነ እና እንደተገለበጠ የሚያመለክት አንድ ሲመልስ ፣ ከዚያ በ n_led ልኬት መሠረት የ LED ን የአሁኑን ሁኔታ በመቀየር።

ከሆነ (button_state ()) // አዝራሩ ከተጫነ የ LED ን ሁኔታ ይቀያይሩ እና ለ 300ms (#ጥራት LOCK_INPUT_TIME) ያዘገዩ

{ማብሪያ (n_led) {ጉዳይ 1 ፦ PORTB ^= (1 << LED1); PORTC ^= (1 << LED2); ሰበር;

እነዚህ መግለጫዎች ሲ ቢትዌይ ኦፕሬተሮችን ይጠቀማሉ። በዚህ ጊዜ ብቸኛውን ወይም ኦፕሬተርን ይጠቀማል። ለመቀያየር በሚፈልጉት የትንሽ እሴት (PORT) ሲያስገቡ ፣ ያኛው ቢት ሌላውን ሳይነካ ይቀየራል።

ጉዳይ 2

PORTC ^= (1 << LED2); PORTD ^= (1 << LED3); ሰበር; ጉዳይ 3 PORTD ^= (1 << LED3); PORTB ^= (1 << LED1); n_led = 0; // የ LED ቁጥር እረፍት እንደገና ያስጀምሩ; } n_led ++; // ቀጣዩ LED _delay_ms (LOCK_INPUT_TIME) ን ያበራል ፤ }} መመለስ (0); }

ስለዚህ አሁን ይህንን ፕሮግራም ሲያካሂዱ የግፊት ቁልፍን ወደ LED ዎች መቀያየር መቻል አለብዎት። በ LOCK_INPUT_TIME በተገለጸው መዘግየታችን ምክንያት ፣ ኤልኢዲው በተከታታይ ፍጥነት (ከያንዳንዱ 275 ሚ.ሜ ብዙም ያልበለጠ) እንዲጠፋ የሚያደርግ አዝራሩን ተጭነው መያዝ ይችላሉ።

ፕሮግራሚንግ ተጠናቋል።

ቀጣዩ ደረጃ የ avrdude ፕሮግራምን በመጠቀም የፕሮጀክቱን እና የፕሮግራም ሄክሱን ፋይል ወደ ማይክሮ መቆጣጠሪያ ውስጥ መገንባት ነው።

በ c ኮድ ውስጥ ከ main.c ፋይል በፕሮግራም ማውረድ ይችላሉ-

ደረጃ 2 የፕሮግራሙን HEX ፋይል ወደ ቺፕ ፍላሽ ማህደረ ትውስታ ውስጥ ማስተላለፍ

የቺክስን ፍላሽ ማህደረ ትውስታ ወደ የፕሮግራሙ HEX ፋይል ማስተላለፍ
የቺክስን ፍላሽ ማህደረ ትውስታ ወደ የፕሮግራሙ HEX ፋይል ማስተላለፍ
የሄክሱን የፕሮግራም ፋይል ወደ ቺፕ ፍላሽ ማህደረ ትውስታ ውስጥ ማስተላለፍ
የሄክሱን የፕሮግራም ፋይል ወደ ቺፕ ፍላሽ ማህደረ ትውስታ ውስጥ ማስተላለፍ

AVRDUDE ን ያውርዱ እና ይጫኑ። የቅርብ ጊዜው ስሪት 6.3 ነው -የዚፕ ፋይሉን ያውርዱ

በመጀመሪያ ፣ የፕሮግራሙን ሄክስ ፋይል ወደ AVRDUDE ማውጫ ውስጥ ይቅዱ። በእኔ ሁኔታ እሱ ButtonAVR.hex ነው

ከዚያ በ “DOS” መስኮት ውስጥ ትዕዛዙን ይተይቡ- avrdude –c [የፕሮግራም አድራጊ ስም] –p m328p –u –U ፍላሽ: w: [የሄክስ ፋይልዎ ስም]።

በእኔ ሁኔታ avrdude –c ISPProgv1 –p m328p –u –U ብልጭታ ፦ w: ButtonAVR.hex

ይህ ትእዛዝ የሄክስ ፋይልን ወደ ማይክሮ መቆጣጠሪያው ማህደረ ትውስታ ይጽፋል።

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

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

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

ደረጃ 3 የሃርድዌር መቀየሪያ ማወዛወዝ

የሃርድዌር መቀየሪያ ማወዛወዝ
የሃርድዌር መቀየሪያ ማወዛወዝ

ከሶፍትዌር መቀየሪያ ከማራገፍ በተጨማሪ የሃርድዌር መቀየሪያ የማራገፍ ዘዴን መጠቀም እንችላለን። ከእንደዚህ ዓይነቱ ቴክኒክ በስተጀርባ ያለው መሠረታዊ ሀሳብ በመለወጫ ምልክቱ ውስጥ ፈጣን ለውጦችን ለማጣራት መያዣ (capacitor) መጠቀም ነው።

ምን ዓይነት እሴት capacitor መምረጥ አለበት? ይህ በመጨረሻ ይህንን ልዩ ችግር በሚመለከት አዝራሩ ምን ያህል በጥሩ ሁኔታ እንደሚሠራ ላይ የተመሠረተ ነው። አንዳንድ አዝራሮች እጅግ በጣም ብዙ የመቧጨር ባህሪን ማሳየት ይችላሉ ፣ ግን ሌሎች በጣም ጥቂት ይኖራቸዋል። እንደ 1.0 nanofarads ያሉ ዝቅተኛ የካፒታተር እሴት በፍጥነት ወይም በፍጥነት በመነሳት ላይ ይሆናል። በተቃራኒው እንደ 220 nanofarads (አሁንም ከካፒታተሮች አንፃር በጣም ትንሽ ነው) ከፍ ያለ የካፒታተር እሴት ከመነሻ እስከ ማብቂያ ቮልቴጅ (5 ቮልት ወደ 0 ቮልት) ዘገምተኛ ሽግግርን ይሰጣል። በ 220 ናኖፋራድስ አቅም የታየው ሽግግር አሁንም በእውነተኛ ዓለም ስሜት በጣም ፈጣን ነው ፣ እና ስለሆነም በጥሩ አፈፃፀም አዝራሮች ላይ ጥቅም ላይ ሊውል ይችላል።

ደረጃ 4 የኤሌክትሪክ ዑደት

የኤሌክትሪክ ዑደት
የኤሌክትሪክ ዑደት
የኤሌክትሪክ ዑደት
የኤሌክትሪክ ዑደት
የኤሌክትሪክ ዑደት
የኤሌክትሪክ ዑደት

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

የሚመከር: