Atmega8 ක්ෂුද්‍ර පාලක. ආරම්භකයින් සඳහා Atmega8 වැඩසටහන්කරණය. AVR ක්ෂුද්‍ර පාලක. ආරම්භකයින් සඳහා ක්‍රමලේඛනය Microcontroller atmega8 පුහුණුව

2015 දෙසැම්බර්

1. යෝජිත ක්රමයේ වාසි

ක්ෂුද්‍ර පාලක (MCUs) මත පදනම් වූ උපාංග පරිපථ සාමාන්‍යයෙන් වෙන්කර හඳුනාගත හැක්කේ ඒකාබද්ධ කිරීමට අපහසු ගුණාංග දෙකක එකතුවකිනි: උපරිම සරල බව සහ ඉහළ ක්‍රියාකාරීත්වය. මීට අමතරව, පරිපථයේ කිසිදු වෙනසක් සිදු නොකර අනාගතයේදී ක්‍රියාකාරීත්වය වෙනස් කර පුළුල් කළ හැකිය - වැඩසටහන ප්‍රතිස්ථාපනය කිරීමෙන් (දැල්වීම). නවීන එම්කේ නිර්මාතෘවරුන් සංවර්ධකයෙකුට අවශ්‍ය විය හැකි සෑම දෙයක්ම එක් චිපයක් මත තැබීමට උත්සාහ කිරීමෙන් මෙම විශේෂාංග පැහැදිලි කෙරේ. ඉලෙක්ට්රොනික උපාංගය- අවම වශයෙන් හැකි තරම්. එහි ප්‍රතිඵලයක් වශයෙන්, පරිපථ සහ ස්ථාපනය වෙතින් මෘදුකාංග වෙත අවධාරණය මාරු විය. MK භාවිතා කිරීමත් සමඟ, කොටස් සමඟ පරිපථය "පූරණය" කිරීමට දැන් අඩු අවශ්යතාවයක් ඇති අතර, සංරචක අතර සම්බන්ධතා අඩු වේ. මෙය ඇත්ත වශයෙන්ම, පළපුරුදු සහ නවක ඉලෙක්ට්‍රොනික ඉංජිනේරුවන් විසින් පුනරාවර්තනය කිරීම සඳහා පරිපථය වඩාත් ආකර්ශනීය කරයි. නමුත්, සුපුරුදු පරිදි, ඔබ සියල්ල සඳහා ගෙවිය යුතුය. මෙයද දුෂ්කරතා නොමැතිව නොවේ. ඔබ නව MK එකක් මිලට ගන්නේ නම්, එය සේවා කළ හැකි කොටස් වලින් නිවැරදිව එකලස් කර ඇති පරිපථයක ස්ථාපනය කර බලය යොදන්න, එවිට කිසිවක් ක්රියා නොකරනු ඇත - උපාංගය ක්රියා නොකරයි. ක්ෂුද්‍ර පාලකයට වැඩසටහනක් අවශ්‍යයි.

මේ සමඟ සෑම දෙයක්ම සරල බව පෙනේ - අන්තර්ජාලයේ ඔබට නොමිලේ ස්ථිරාංග සමඟ බොහෝ යෝජනාක්‍රම සොයාගත හැකිය. නමුත් මෙහි එක් අල්ලා ගැනීමක් තිබේ: ස්ථිරාංග කෙසේ හෝ ක්ෂුද්‍ර පාලකයට “උඩුගත කළ යුතුය”. මීට පෙර කිසි දිනෙක මෙය කර නැති කෙනෙකුට, එවැනි කාර්යයක් බොහෝ විට ගැටලුවක් වන අතර ප්‍රධාන පිළිකුල් සහගත සාධකය බවට පත්වේ, බොහෝ විට ඔවුන්ට MK භාවිතා කිරීමේ සතුට අතහැර දමා “ලිහිල්” සහ දෘඩ තර්කනය මත පදනම් වූ යෝජනා ක්‍රම සෙවීමට බල කරයි. නමුත් සෑම දෙයක්ම මුලින්ම බැලූ බැල්මට පෙනෙන තරම් සංකීර්ණ නොවේ.

අන්තර්ජාලයේ ප්‍රකාශන විශ්ලේෂණය කිරීමෙන් පසු, මෙම ගැටළුව බොහෝ විට ක්‍රම දෙකෙන් එකකින් විසඳා ඇති බව ඔබට පෙනෙනු ඇත: සූදානම් කළ ක්‍රමලේඛකයෙකු මිලදී ගැනීම හෝ ගෙදර හැදූ එකක් සෑදීම. ඒ අතරම, ගෙදර හැදූ ක්‍රමලේඛකයන්ගේ ප්‍රකාශිත පරිපථ බොහෝ විට අසාධාරණ ලෙස සංකීර්ණ වේ - ඇත්ත වශයෙන්ම අවශ්‍ය ප්‍රමාණයට වඩා බෙහෙවින් සංකීර්ණ වේ. ඇත්ත වශයෙන්ම, ඔබ සෑම දිනකම MK ෆ්ලෑෂ් කිරීමට අදහස් කරන්නේ නම්, "සිසිල්" වැඩසටහන්කරුවෙකු සිටීම වඩා හොඳය. නමුත් එවැනි ක්රියා පටිපාටියක් සඳහා අවශ්යතාවය කලාතුරකින් පැන නගින්නේ නම්, වරින් වර, එවිට ඔබට සම්පූර්ණයෙන්ම ක්රමලේඛකයෙකු නොමැතිව කළ හැකිය. නැත, ඇත්ත වශයෙන්ම, අපි කතා කරන්නේ සිතීමේ බලයෙන් මෙය කිරීමට ඉගෙන ගැනීම ගැන නොවේ. මෙයින් අදහස් කරන්නේ එහි ක්‍රමලේඛන මාදිලියේ තොරතුරු ලිවීමේදී සහ කියවීමේදී ක්‍රමලේඛකයා ක්ෂුද්‍ර පාලකය සමඟ අන්තර්ක්‍රියා කරන ආකාරය තේරුම් ගැනීමෙන්, අපට පුළුල් අරමුණක් සඳහා පවතින මෙවලම් සමඟ කළ හැකි බවයි. මෙම මෙවලම් මඟින් ක්‍රමලේඛකයාගේ මෘදුකාංග සහ දෘඪාංග යන කොටස් දෙකම ප්‍රතිස්ථාපනය කිරීමට සිදුවේ. දෘඪාංගය MK microcircuit වෙත භෞතික සම්බන්ධතාවයක් සැපයිය යුතුය, එහි යෙදවුම් සඳහා තාර්කික මට්ටම් යෙදීමේ හැකියාව සහ එහි ප්රතිදාන වලින් දත්ත කියවීම. මෘදුකාංග කොටස අවශ්ය සියලු ක්රියාවලි පාලනය කරන ඇල්ගොරිතමයේ ක්රියාකාරිත්වය සහතික කළ යුතුය. MK හි තොරතුරු පටිගත කිරීමේ ගුණාත්මකභාවය ඔබේ ක්‍රමලේඛකයා කෙතරම් “සිසිල්” ද යන්න මත රඳා නොපවතින බව අපි සටහන් කරමු. "වඩා හොඳ වාර්තා" හෝ "නරක" වැනි දෙයක් නොමැත. ඇත්තේ විකල්ප දෙකක් පමණි: "ලියාපදිංචිය" සහ "ලියාපදිංචි නොකළ". ස්ඵටිකයේ ඇතුළත පටිගත කිරීමේ ක්රියාවලිය MK විසින්ම සෘජුවම පාලනය වන බව මෙය පැහැදිලි කරයි. ඔබට එය උසස් තත්ත්වයේ බලයක් ලබා දීමට අවශ්‍ය වේ (කිසිදු බාධාවක් හෝ රැල්ලක් නැත) සහ අතුරු මුහුණත නිසි ලෙස සංවිධානය කරන්න. පරීක්ෂණ කියවීමේ ප්රතිඵල කිසිදු දෝෂයක් හෙළි නොකළහොත්, සෑම දෙයක්ම පිළිවෙලට තිබේ - ඔබට එහි අපේක්ෂිත අරමුණ සඳහා පාලකය භාවිතා කළ හැකිය.

ක්‍රමලේඛකයෙකු නොමැතිව MK වෙත වැඩසටහනක් ලිවීමට, අපට USB-RS232TTL වරාය පරිවර්තකයක් අවශ්‍ය වේ. USB-RS232TTL පරිවර්තකය "සැබෑ" එකට වඩා වෙනස් වන COM පෝට් එකක් සෑදීමට USB පෝට් එකක් භාවිතා කිරීමට ඔබට ඉඩ සලසයි, එහි යෙදවුම් සහ ප්‍රතිදානයන් TTL තාර්කික මට්ටම් භාවිතා කරයි, එනම් වෝල්ට් 0 සිට 5 දක්වා පරාසයක වෝල්ටීයතාවය ( ඔබට "" ලිපියෙන් වැඩිදුර කියවිය හැකිය. ඕනෑම අවස්ථාවක, එවැනි පරිවර්තකයක් ඔබේ "ගෘහස්ථ" තුළ තිබීම ප්රයෝජනවත් වේ, එබැවින් ඔබට දැනටමත් එකක් නොමැති නම්, එය අනිවාර්යයෙන්ම මිලදී ගැනීම වටී. තාර්කික මට්ටම් සම්බන්ධයෙන් ගත් කල, අපගේ නඩුවේදී TTL යනු සාමාන්‍ය COM පෝට් එකකට වඩා වාසියකි, මන්ද එවැනි වරායක යෙදවුම් සහ ප්‍රතිදානයන් ATtiny සහ ATmega ඇතුළුව 5 V මගින් බල ගැන්වෙන ඕනෑම ක්ෂුද්‍ර පාලකයකට කෙලින්ම සම්බන්ධ කළ හැකි බැවිනි. නමුත් නිතිපතා COM port එකක් භාවිතා කිරීමට උත්සාහ නොකරන්න - ඔවුන් -12 සිට +12 V (හෝ -15 ... + 15V) දක්වා පරාසයක වෝල්ටීයතා භාවිතා කරයි. මෙම අවස්ථාවේදී, ක්ෂුද්ර පාලකය වෙත සෘජු සම්බන්ධතාවය පිළිගත නොහැකිය !!!

ක්‍රමලේඛකයාගේ කාර්යයන් ක්‍රියාත්මක කරන Perpetuum M වැඩසටහන සඳහා ස්ක්‍රිප්ට් එකක් නිර්මාණය කිරීමේ අදහස මතු වූයේ MK ස්ථිරාංග සඳහා ඇතැම් විසඳුම් ඉදිරිපත් කරන අන්තර්ජාලයේ ප්‍රකාශන ගණනාවක් කියවීමෙන් පසුවය. සෑම අවස්ථාවකදීම බරපතල අඩුපාඩු හෝ අධික දුෂ්කරතා සොයා ගන්නා ලදී. බොහෝ විට මට ක්ෂුද්‍ර පාලකයක් අඩංගු ක්‍රමලේඛක පරිපථ හමු වූ අතර, ඒ සමඟම, උපදෙස් තරමක් බැරෑරුම් ලෙස ලබා දෙන ලදී: “... සහ මෙම ක්‍රමලේඛකයා සඳහා ක්ෂුද්‍ර පාලකය ක්‍රමලේඛනය කිරීමට අපට අවශ්‍ය වනු ඇත ... එය හරි - වෙනත් ක්‍රමලේඛකයෙක්!” ඊළඟට, මිතුරෙකු වෙත ගොස් සොයා බැලීමට යෝජනා කරන ලදී ගෙවන සේවාවසහ යනාදි. මෙම අරමුණු සඳහා ජාලයේ බෙදා හරින ලද මෘදුකාංගයේ ගුණාත්මකභාවය ද සිත් ඇදගන්නා සුළු නොවීය - ක්‍රියාකාරීත්වය සහ පරිශීලක අතුරුමුහුණතේ “වලාකුළු” යන දෙකෙහිම බොහෝ ගැටළු දක්නට ලැබුණි. වැඩසටහනක් භාවිතා කරන්නේ කෙසේද යන්න තේරුම් ගැනීමට බොහෝ විට බොහෝ කාලයක් ගත වේ - සරලම ක්රියාවන් සිදු කිරීමට පවා එය අධ්යයනය කළ යුතුය. වෙනත් වැඩසටහනකට දිගු කාලයක් හා උනන්දුවෙන් යමක් කළ හැකි නමුත්, පරිශීලකයා දැන ගන්නේ එම්කේ වෙත කිසිවක් ලියා නොමැති බව සම්පූර්ණ ස්ථිරාංග සම්පූර්ණ කර පසුව පරීක්ෂණ කියවීමෙන් පසුව පමණි. පහත ගැටළුව ද සිදු වේ: පරිශීලකයා සහාය දක්වන ස්ඵටික ලැයිස්තුවෙන් ඔහුගේ MK තෝරා ගැනීමට උත්සාහ කරයි, නමුත් එය ලැයිස්තුවේ නොමැත. මෙම අවස්ථාවෙහිදී, ඔබට වැඩසටහන භාවිතා කිරීමට නොහැකි වනු ඇත - අතුරුදහන් වූ MK ලැයිස්තුවට ඇතුළත් කිරීම, රීතියක් ලෙස, සපයනු නොලැබේ. ඊට අමතරව, බොහෝ අවස්ථාවලදී ක්‍රමලේඛකයාට MK වර්ගය තීරණය කළ හැකි බව සලකන විට ලැයිස්තුවෙන් පාලකයක් අතින් තෝරා ගැනීම අමුතු දෙයක් ලෙස පෙනේ. මේ සියල්ල පවසනුයේ පවතින නිෂ්පාදනවලට මඩ ගැසීමට නොව, මෙම ලිපියේ විස්තර කර ඇති Perpetuum M වැඩසටහන සඳහා පිටපතේ පෙනුමට හේතුව පැහැදිලි කිරීම සඳහා ය. ගැටළුව සැබවින්ම පවතින අතර, එය මූලික වශයෙන් ක්ෂුද්‍ර පාලක ලෝකයට ඔවුන්ගේ පළමු පියවර ගැනීම සඳහා මෙම “පවුර” ජය ගැනීමට සැමවිටම සමත් නොවන ආරම්භකයින් ගැන සැලකිලිමත් වේ. යෝජිත ස්ක්‍රිප්ට් වෙනත් වැඩසටහන් වල ඇති අඩුපාඩු සැලකිල්ලට ගනී. ඇල්ගොරිතමයේ ක්‍රියාකාරිත්වයේ උපරිම “විනිවිදභාවය” ක්‍රියාවට නංවා ඇත, ඉගෙනීම අවශ්‍ය නොවන අතිශය සරල පරිශීලක අතුරුමුහුණතක් වන අතර ව්‍යාකූල වීමට සහ “වැරදි දේ ක්ලික් කිරීමට” අවස්ථාවක් ඉතිරි නොවේ. අවශ්‍ය MK සහාය දක්වන ඒවා අතර නොමැති නම්, MK සංවර්ධකයාගේ වෙබ් අඩවියෙන් බාගත කළ ලියකියවිලි වලින් අවශ්‍ය දත්ත ලබා ගනිමින් ඔබට එහි විස්තරය ඔබම එකතු කළ හැකිය. තවද, වඩාත්ම වැදගත් දෙය නම්, ස්ක්‍රිප්ට් අධ්‍යයනය සහ වෙනස් කිරීම සඳහා විවෘතය. විවෘත කිරීමෙන් ඕනෑම කෙනෙකුට හැකිය පෙළ සංස්කාරකය, ඔබේ අභිමතය පරිදි එය අධ්‍යයනය කර සංස්කරණය කරන්න, පවතින කාර්යයන් ඔබේ රසයට වෙනස් කිරීම සහ නැතිවූ ඒවා එකතු කිරීම.

පිටපතේ පළමු අනුවාදය 2015 ජුනි මාසයේදී නිර්මාණය කරන ලදී. මෙම අනුවාදය ෆ්ලෑෂ් මතකය ලිවීම/කියවීම, වින්‍යාස බිටු සැකසීම සහ පාලක වර්ගය ස්වයංක්‍රීයව හඳුනාගැනීම සඳහා වන ක්‍රියාකාරකම් සහිත Atmel හි ATtiny සහ ATmega ශ්‍රේණි මයික්‍රොකොන්ට්‍රෝලර් සඳහා පමණක් සහය දක්වයි. EEPROM ලිවීම සහ කියවීම ක්‍රියාත්මක නොවේ. ස්ක්‍රිප්ටයේ ක්‍රියාකාරීත්වයට අතිරේකව සැලසුම් කර ඇත. : ලිවීම සහ කියවීම EEPROM එකතු කිරීම, PIC පාලක සඳහා සහය ක්‍රියාත්මක කිරීම යනාදිය මෙම හේතුව නිසා ස්ක්‍රිප්ට් එක තවම ප්‍රකාශයට පත් කර නැත.නමුත් කාලය නොමැතිකම නිසා සැලැස්ම ක්‍රියාත්මක කිරීම ප්‍රමාද වූ අතර හොඳම දේ බවට පත් නොවනු ඇත. යහපතෙහි සතුරා, පවතින අනුවාදය ප්‍රකාශයට පත් කිරීමට තීරණය කරන ලදී. දැනටමත් ක්‍රියාත්මක කරන ලද කාර්යයන් ප්‍රමාණවත් නොවේ නම්, කරුණාකර කලබල නොවන්න. මෙම අවස්ථාවේදී, ඔබට අවශ්‍ය කාර්යය ඔබම එකතු කිරීමට උත්සාහ කළ හැකිය. මම සඟවන්නේ නැත: මෙම ස්ක්‍රිප්ට් එක නිර්මාණය කිරීමේ අදහසටද අධ්‍යාපනික අර්ථයක් ඇත.ඇල්ගොරිතම තේරුම් ගෙන එයට ඔබේම දෙයක් එකතු කිරීමෙන් ඔබට MK ක්‍රමලේඛන මාදිලියේ ක්‍රියාකාරිත්වය වඩාත් හොඳින් අවබෝධ කර ගත හැකි වනු ඇත. අනාගතයේදී ඔබ කැඩී බිඳී ගිය මෝටර් රථයක් ඉදිරිපිට ගැහැණු ළමයෙකුගේ තත්වයට පත් නොවනු ඇත, කල්පනාකාරීව එහි අභ්යන්තරය දෙස බලා එය "වැඩ නොකරන්නේ මන්දැයි" නොතේරෙනු ඇත.

2. වැඩසටහන් මාදිලියේ MK අතුරුමුහුණත

පාලකය ක්‍රමලේඛන ප්‍රකාරයට දමා එය සමඟ මෙම ප්‍රකාරයේදී වැඩ කිරීමට විවිධ ක්‍රම කිහිපයක් තිබේ. ATtiny සහ ATmega මාලාවේ පාලකයන් සඳහා ක්රියාත්මක කිරීමට පහසුම, සමහර විට, SPI වේ. අපි එය භාවිතා කරන්නෙමු.

නමුත්, SPI උත්පාදනය කිරීමට අවශ්ය සංඥා සලකා බැලීමට පෙර, අපි වෙන් කිරීම් ගණනාවක් සිදු කරන්නෙමු. ක්ෂුද්‍ර පාලකයේ වින්‍යාස බිටු ඇත. මේවා ටොගල් ස්විචයන් වැනි දෙයකි, ව්‍යාපෘතියේ අවශ්‍යතාවයන්ට අනුකූලව ක්ෂුද්‍ර පරිපථයේ සමහර ගුණාංග වෙනස් කිරීමට ඔබට ඉඩ සලසයි. භෞතික වශයෙන්, මේවා ක්‍රමලේඛයක් ලියා ඇති ඒවා වැනි වාෂ්පශීලී නොවන මතක සෛල වේ. වෙනස නම් ඒවායින් ඉතා ස්වල්පයක් (ATmega සඳහා බයිට් තුනක් දක්වා) ඇති අතර ඒවා කිසිදු මතකයක ලිපින අවකාශයේ කොටසක් නොවේ. වින්‍යාස දත්ත ලිවීම සහ කියවීම MK ක්‍රමලේඛන මාදිලියේ වෙනම විධාන මගින් සිදු කෙරේ. දැන් සමහර වින්‍යාස බිටු SPI භාවිතා කිරීමේ හැකියාවට බලපාන බව සැලකිල්ලට ගැනීම වැදගත්ය. ඒවායේ සමහර අගයන් සමඟ, SPI භාවිතා කළ නොහැකි බව පෙනී යා හැකිය. ඔබ එවැනි ක්ෂුද්ර පාලකයක් හමු වුවහොත්, මෙම ලිපියේ යෝජනා කර ඇති ක්රමය උපකාරි නොවේ. මෙම අවස්ථාවේදී, ඔබට වෙනත් ක්‍රමලේඛන මාදිලියකට සහය දක්වන ක්‍රමලේඛකයේ වින්‍යාස බිටු වල සැකසුම් වෙනස් කිරීමට හෝ වෙනත් ක්ෂුද්‍ර පාලකයක් භාවිතා කිරීමට සිදුවනු ඇත. නමුත් මෙම ගැටළුව අදාළ වන්නේ භාවිතා කරන ලද MK වලට හෝ යමෙකු දැනටමත් අසාර්ථක ලෙස "සෙල්ලම් කර ඇති" අයට පමණි. කාරණය නම් නව MCUs SPI භාවිතය වළක්වන්නේ නැති වින්‍යාස බිටු සැකසුම් සමඟ එන බවයි. Perpetuum M වැඩසටහන සඳහා ක්‍රමලේඛක ස්ක්‍රිප්ටයේ පරීක්ෂණ ප්‍රතිඵල මගින් මෙය සනාථ වේ, එම කාලය තුළ විවිධ MK හතරක් (ATmega8, ATmega128, ATtiny13, ATtiny44) සාර්ථකව දැල්වී ඇත. ඔවුන් සියල්ලෝම අලුත් විය. වින්‍යාස බිටු වල ආරම්භක සැකසුම ලේඛනගත කිරීම සමග අනුකූල වූ අතර SPI භාවිතයට බාධාවක් නොවීය.

ඉහත කරුණු සැලකිල්ලට ගෙන, ඔබ පහත සඳහන් කරුණු කෙරෙහි අවධානය යොමු කළ යුතුය. SPIEN බිට් පැහැදිලිවම SPI භාවිතයට ඉඩ දෙයි හෝ ප්‍රතික්ෂේප කරයි, එබැවින් අපගේ නඩුවේදී එහි අගය සක්‍රීය විය යුතුය. RSTDISBL බිටුට ක්ෂුද්‍ර පරිපථයේ (පෙර තීරණය කර ඇති) එක් ප්‍රතිදානයක් "නැවත පිහිටුවීම" සංඥාවේ ආදානය බවට හැරවීමට හෝ එය හැරවීමට හැකියාව ඇත (මෙම බිටු වෙත ලියා ඇති අගය අනුව). අපගේ නඩුවේදී, "නැවත පිහිටුවීම" ආදානය අවශ්ය වේ (එය නොමැති නම්, SPI හරහා MK ක්රමලේඛන ආකාරය වෙත මාරු කිරීමට නොහැකි වනු ඇත). ඔරලෝසු සංඥාවේ මූලාශ්රය සඳහන් කරන CKSEL කාණ්ඩයේ බිටු ද ඇත. ඔවුන් SPI භාවිතය වළක්වන්නේ නැත, නමුත් ඒවා මතක තබා ගත යුතුය, මන්ද කිසිසේත් ඔරලෝසු ස්පන්දන නොමැති නම් හෝ ඔවුන්ගේ සංඛ්‍යාතය ලබා දී ඇති SPI වේගය සඳහා පිළිගත හැකි ප්‍රමාණයට වඩා අඩු නම්, හොඳ කිසිවක් සිදු නොවනු ඇත. සාමාන්‍යයෙන්, අභ්‍යන්තර RC දෝලකයක් ඇති නව MCU වල එය භාවිතා කිරීමට CKSEL කණ්ඩායම් බිටු වින්‍යාස කර ඇත. මෙය අපට හොඳින් ගැලපේ - අපගේ අමතර උත්සාහයකින් තොරව ඔරලෝසුව සපයනු ලැබේ. ක්වාර්ට්ස් අනුනාදකය පෑස්සීමට හෝ බාහිර උත්පාදකයක් සම්බන්ධ කිරීමට අවශ්‍ය නොවේ. නිශ්චිත බිටු වෙනස් සැකසුමකින් සමන්විත වේ නම්, ඔබට සැකසීමට අනුකූලව ඔරලෝසුව ගැන සැලකිලිමත් විය යුතුය. මෙම අවස්ථාවේදී, ක්වාර්ට්ස් අනුනාදකයක් හෝ බාහිර ඔරලෝසු උත්පාදක යන්ත්රයක් MCU වෙත සම්බන්ධ කිරීම අවශ්ය විය හැකිය. නමුත් මෙම ලිපියෙන් අපි මෙය කරන්නේ කෙසේද යන්න සලකා බලන්නේ නැත. මෙම ලිපියේ අඩංගු වැඩසටහන්කරණය සඳහා MK සම්බන්ධ කිරීමේ උදාහරණ සරලම අවස්ථාව සඳහා නිර්මාණය කර ඇත.

සහල්. 1. ක්‍රමලේඛන ආකාරයෙන් SPI හරහා දත්ත හුවමාරුව

දැන් අපි ATmega128A MK සඳහා ලියකියවිලි වලින් ලබාගත් රූපය 1 වෙත හැරෙමු. එය MK වෙත එක් බයිටයක් සම්ප්‍රේෂණය කිරීමේ ක්‍රියාවලිය සහ MK වෙතින් එක් බයිටයක් ලබා ගැනීමේ ක්‍රියාවලිය පෙන්වයි. මෙම ක්‍රියාවලි දෙකම, අප දකින පරිදි, ක්‍රමලේඛකයාගේ සිට ක්ෂුද්‍ර පාලකය වෙත එහි SCK ආදානයේදී සපයනු ලබන එකම ඔරලෝසු ස්පන්දන භාවිතා කරයි - ක්ෂුද්‍ර පරිපථයේ අල්මාරියක් වන අතර, ඒ සඳහා SPI ක්‍රමලේඛන මාදිලියේ එවැනි කාර්යභාරයක් පවරා ඇත. තවත් සංඥා රේඛා දෙකක් දත්ත ලබා ගැනීම සහ සම්ප්‍රේෂණය එක් ඔරලෝසු චක්‍රයකට බිට් එකක් සපයයි. MOSI ආදානය හරහා, දත්ත ක්ෂුද්‍ර පාලකයට ඇතුළු වන අතර, කියවීමේ දත්ත MISO ප්‍රතිදානයෙන් ලබා ගනී. SCK සිට MISO සහ MOSI දක්වා ඇද ඇති තිත් රේඛා දෙක සැලකිල්ලට ගන්න. MOSI ආදානයේදී සකසා ඇති දත්ත බිට් එක ක්ෂුද්‍ර පාලකය “ගිලන්නේ” කුමන මොහොතේද, සහ එයම තමන්ගේම දත්ත බිට් එකක් MISO ප්‍රතිදානයට සකසන්නේ කුමන මොහොතේද යන්න ඔවුන් පෙන්වයි. සෑම දෙයක්ම තරමක් සරල ය. නමුත් MK ක්‍රමලේඛන මාදිලියට ඇතුළු වීමට, අපට තවමත් RESET සංඥාවක් අවශ්‍ය වේ. පොදු GND වයර් සහ VCC බල සැපයුම ගැන ද අපි අමතක නොකරමු. සමස්තයක් වශයෙන්, SPI හරහා එහි ස්ථිරාංග ෆ්ලෑෂ් කිරීමට ක්ෂුද්‍ර පාලකයට සම්බන්ධ කළ යුත්තේ වයර් 6 ක් පමණක් බව පෙනේ. පහත අපි මෙය වඩාත් විස්තරාත්මකව විශ්ලේෂණය කරන්නෙමු, නමුත් දැනට අපි SPI හරහා ක්‍රමලේඛන මාදිලියේ MK සමඟ දත්ත හුවමාරුව බයිට් 4 ක පැකට් වලින් සිදු කරන බව එකතු කරන්නෙමු. එක් එක් පැකට්ටුවේ පළමු බයිටය මූලිකවම උපදෙස් කේතනය සඳහා සම්පූර්ණයෙන්ම කැපවී ඇත. දෙවන බයිටය, පළමුවැන්න මත පදනම්ව, විධාන කේතයේ අඛණ්ඩ පැවැත්මක් හෝ ලිපිනයේ කොටසක් විය හැකිය, නැතහොත් අත්තනෝමතික අගයක් තිබිය හැකිය. තුන්වන බයිටය ප්‍රධාන වශයෙන් ලිපින සම්ප්‍රේෂණය සඳහා භාවිතා කරයි, නමුත් බොහෝ උපදෙස් වල අත්තනෝමතික අගයක් තිබිය හැක. සිව්වන බයිටය සාමාන්‍යයෙන් දත්ත සම්ප්‍රේෂණය කරයි හෝ අත්තනෝමතික අගයක් ඇත. සිව්වන බයිටයේ සම්ප්රේෂණයට සමගාමීව, සමහර විධානයන් ක්ෂුද්ර පාලකයෙන් එන දත්ත ලබා ගනී. එක් එක් විධානය සඳහා විස්තර "SPI අනුක්‍රමික ක්‍රමලේඛන උපදෙස් කට්ටලය" නම් වගුවේ ඇති පාලක ලියකියවිලි වලින් සොයාගත හැකිය. දැනට, අපි සටහන් කරන්නේ පාලකය සමඟ සම්පූර්ණ හුවමාරුව බිට් 32 පැකට් අනුපිළිවෙලකින් ගොඩනගා ඇති අතර, ඒ සෑම එකක් තුළම ප්‍රයෝජනවත් තොරතුරු එක් බයිටයකට වඩා සම්ප්‍රේෂණය නොවේ. මෙය ඉතා ප්රශස්ත නොවේ, නමුත් සමස්තයක් ලෙස එය හොඳින් ක්රියා කරයි.

3. වැඩසටහන්කරණය සඳහා MK සම්බන්ධ කිරීම

SPI අතුරුමුහුණත සංවිධානය කිරීමට සහ එහි MISO ප්‍රතිදානයෙන් දත්ත කියවීමට අවශ්‍ය සියලුම සංඥා ක්ෂුද්‍ර පාලක යෙදවුම් වෙත සපයා ඇති බව සහතික කිරීම සඳහා, ක්‍රමලේඛකයෙකු නිර්මාණය කිරීම අවශ්‍ය නොවේ. මෙය වඩාත් පොදු USB-RS232TTL පරිවර්තකය භාවිතයෙන් පහසුවෙන් කළ හැකිය.

අන්තර්ජාලයේ ඔබට බොහෝ විට එවැනි පරිවර්තකයන් බාල බවත්, ඔවුන් සමඟ බරපතල කිසිවක් කළ නොහැකි බවත් තොරතුරු සොයාගත හැකිය. නමුත් බොහෝ පරිවර්තක මාදිලි සම්බන්ධයෙන්, මෙම මතය වැරදියි. ඔව්, සම්මත COM පෝට් එකකට සාපේක්ෂව ලබා ගත හැකි සියලුම යෙදවුම් සහ ප්‍රතිදානයන් නොමැති පරිවර්තක විකිණීමට ඇත (උදාහරණයක් ලෙස, TXD සහ RXD පමණි), වෙන් කළ නොහැකි සැලසුමක් ඇති අතර (ක්ෂුද්‍ර පරිපථය ප්ලාස්ටික් වලින් පුරවා ඇත - එයයි. එහි කටු කරා ළඟා විය නොහැක). නමුත් මේවා මිලදී ගැනීම වටින්නේ නැත. සමහර අවස්ථාවලදී, ඔබට වයර් සෘජුවම චිපයට පෑස්සීමෙන් අතුරුදහන් වූ වරාය යෙදවුම් සහ ප්රතිදාන ලබා ගත හැකිය. එවැනි “වැඩිදියුණු කළ” පරිවර්තකයක උදාහරණයක් රූප සටහන 2 හි පෙන්වා ඇත (චිප් පීඑල් -2303 - “” ලිපියේ එහි අල්ෙපෙනතිවල අරමුණ පිළිබඳ වැඩි විස්තර). මෙය ලාභම මාදිලි වලින් එකකි, නමුත් ගෙදර හැදූ මෝස්තරවල භාවිතා කරන විට එහිම වාසි ඇත. COM පෝට් එකක් වැනි අවසානයේ සම්මත නව-පින් සම්බන්ධකයක් සහිත සම්පූර්ණ විශේෂාංග සහිත ඇඩැප්ටර රැහැන් ද පුළුල් ලෙස පැතිරී ඇත. ඒවා සාමාන්‍ය COM වරායකින් වෙනස් වන්නේ TTL මට්ටම් සහ උරුමය සමඟ නොගැලපීමේදී පමණි මෘදුකාංගසහ සමහර පැරණි උපකරණ. PL-2303 හි පරිවර්තක හා සසඳන විට විවිධ ආන්තික පරීක්ෂණ වලදී CH34x චිපයේ රැහැන් වඩාත් විශ්වාසදායක සහ ස්ථාවර බව පෙන්නුම් කරන බව ද සටහන් කළ හැකිය. කෙසේ වෙතත්, සාමාන්‍ය භාවිතයේදී වෙනස නොපෙනේ.

USB-RS232TTL පරිවර්තකයක් තෝරාගැනීමේදී, ඔබ භාවිතා කරන මෙහෙයුම් පද්ධතියේ අනුවාදය සමඟ එහි ධාවකයේ ගැළපුම පිළිබඳවද අවධානය යොමු කළ යුතුය.

හතරේ උදාහරණය භාවිතා කරමින් ක්ෂුද්‍ර පාලකයක් සහ USB-RS232TTL පරිවර්තකයක් සම්බන්ධ කිරීමේ මූලධර්මය දෙස සමීපව බලමු. විවිධ මාදිලි MK: ATtiny13, ATtiny44, ATmega8 සහ ATmega128. රූප සටහන 3 එවැනි සම්බන්ධතාවයක සාමාන්ය රූප සටහන පෙන්වයි. RS232 සංඥා (RTS, TXD, DTR සහ CTS) නුසුදුසු ලෙස භාවිතා කරන බව දැනගැනීම ඔබ පුදුමයට පත් විය හැක. නමුත් ඒ ගැන කරදර නොවන්න: Perpetuum M වැඩසටහනට ඔවුන් සමඟ කෙලින්ම වැඩ කිරීමට හැකි වේ - ප්‍රතිදාන අගයන් සකසා ආදාන තත්වයන් කියවන්න. ඕනෑම අවස්ථාවක, CH34x සහ PL-2303 චිප් වල බහුලව භාවිතා වන USB-RS232TTL පරිවර්තක මෙම හැකියාව සපයයි - මෙය සත්‍යාපනය කර ඇත. වරායට ප්‍රවේශ වීමට සම්මත වින්ඩෝස් ක්‍රියාකාරකම් භාවිතා කරන බැවින් වෙනත් ජනප්‍රිය පරිවර්තක සමඟ ගැටළු ඇති නොවිය යුතුය.

සාමාන්ය රූප සටහනේ පෙන්වා ඇති ප්රතිරෝධක, ප්රතිපත්තිමය වශයෙන්, ස්ථාපනය නොකළ හැකි නමුත්, ඒවා ස්ථාපනය කිරීම තවමත් වඩා හොඳය. ඔවුන්ගේ අරමුණ කුමක්ද? පරිවර්තකයේ TTL යෙදවුම් සහ ප්‍රතිදානයන් සහ ක්ෂුද්‍ර පාලකයේ වෝල්ට් පහක බල සැපයුම භාවිතා කරමින්, එමඟින් තාර්කික මට්ටම් සම්බන්ධීකරණය කිරීමේ අවශ්‍යතාවයෙන් අපි මිදෙමු - සියල්ල දැනටමත් තරමක් නිවැරදි ය, මෙයින් අදහස් කරන්නේ සම්බන්ධතා සෘජු විය හැකි බවයි. නමුත් අත්හදා බැලීම් අතරතුර , ඕනෑම දෙයක් සිදු විය හැක.උදාහරණයක් ලෙස, නීචත්වයේ නීතියට අනුව, ඉස්කුරුප්පු නියනක් වැටිය නොහැකි ස්ථානයේ පමණක් වැටිය හැකි අතර, කෙටි පරිපථයක් කිසි විටෙකත් කෙටි පරිපථයක් නොවිය යුතුය, ඇත්ත වශයෙන්ම, ඕනෑම දෙයක් කළ හැකිය. "ඉස්කුරුප්පු නියනක්" බවට පත් වේ.මෙම නඩුවේ ප්‍රතිරෝධක සමහර විට ප්‍රතිවිපාක අඩු කරයි.ඔවුන්ගේ එක් අරමුණක් විය හැකි ප්‍රතිදාන ගැටුමක් තුරන් කිරීම වේ.කාර්‍යය නම් ක්‍රමලේඛනය අවසන් වූ පසු ක්ෂුද්‍ර පාලකය සාමාන්‍ය ක්‍රියාකාරී මාදිලියට යයි. MK හි සටහන් කර ඇති වැඩසටහනට අනුව, පරිවර්තකයේ (RTS, TXD හෝ DTR) ප්‍රතිදානයට සම්බන්ධ එහි පින් ද ප්‍රතිදානයක් බවට පත්වේ.මෙම අවස්ථාවේදී, සෘජුව සම්බන්ධ වූ ප්‍රතිදානයන් දෙකක් “සටන්” කළහොත් එය ඉතා නරක වනු ඇත. - විවිධ තාර්කික මට්ටම් සැකසීමට උත්සාහ කරන්න. එවැනි "අරගලයක" යමෙකු "අහිමි" විය හැකි නමුත් අපට එය අවශ්ය නොවේ.

ප්රතිරෝධක තුනේ අගයන් 4.3 KOhm මට්ටමින් තෝරා ඇත. පරිවර්තක ප්රතිදානය සහ ක්ෂුද්ර පාලක ආදානය අතර සම්බන්ධතා සඳහා මෙය අදාළ වේ. ප්‍රතිරෝධකවල නිරවද්‍යතාවය වැදගත් නොවේ: ඔබට ඔවුන්ගේ ප්‍රතිරෝධය 1 KOhm දක්වා අඩු කළ හැකිය හෝ එය 10 KOhm දක්වා වැඩි කළ හැකිය (නමුත් දෙවන අවස්ථාවේ දී, MK වෙත යන මාර්ගයේ දිගු වයර් භාවිතා කරන විට මැදිහත් වීමේ අවදානම වැඩි වේ). පරිවර්තක ආදානය (CTS) සහ ක්ෂුද්‍ර පාලක ප්‍රතිදානය (MISO) අතර සම්බන්ධය සඳහා, 100 Ohm ප්‍රතිරෝධයක් මෙහි භාවිතා වේ. භාවිතා කරන පරිවර්තකයේ ආදානයේ සුවිශේෂතා මගින් මෙය පැහැදිලි කෙරේ. පරීක්ෂණ අතරතුර, PL-2303 ක්ෂුද්‍ර පරිපථයේ පරිවර්තකයක් භාවිතා කරන ලද අතර, එහි යෙදවුම් සාපේක්ෂව අඩු ප්‍රතිරෝධයක් (ඕම් සිය ගණනක අනුපිළිවෙලින්) සමඟ ධනාත්මක බල සැපයුමට සම්බන්ධ කර ඇත. "ඇදීම බිඳ දැමීම" සඳහා එවැනි කුඩා ප්රතිරෝධයක් සහිත ප්රතිරෝධකයක් ස්ථාපනය කිරීමට සිදු විය. කෙසේ වෙතත්, ඔබ එය සම්පූර්ණයෙන්ම ස්ථාපනය කිරීමට අවශ්ය නොවේ. පරිවර්තකයේ මෙය සැමවිටම ආදානය වේ. එය මගක් බවට පත්විය නොහැක, එයින් අදහස් වන්නේ සිදුවීම්වල කිසිදු වර්ධනයක පිටවීමේ ගැටුමක් ඇති නොවන බවයි.

චිපයේ ඇනලොග්-ඩිජිටල් පරිවර්තකය බලගැන්වීම සඳහා වෙනම AVCC පින් එකක් තිබේ නම් (උදාහරණයක් ලෙස, ATmega8 හෝ ATmega128), එය පොදු VCC බල පින් එකට සම්බන්ධ කළ යුතුය. සමහර IC වල VCC power pin එකකට වඩා හෝ GND එකකට වඩා තිබේ. උදාහරණයක් ලෙස, ATmega128 හි GND පින් 3 ක් සහ VCC පින් 2 ක් ඇත. ස්ථීර සැලසුමක දී, එකම නමේ පින් එකිනෙක සම්බන්ධ කිරීම වඩා හොඳය. අපගේ නඩුවේදී, ක්‍රමලේඛනය අතරතුර, ඔබට එක් VCC සහ GND පින් එකක් භාවිතා කළ හැකිය.

මෙන්න ATtiny13 සම්බන්ධතාවය පෙනෙන්නේ කෙසේද යන්නයි. SPI හරහා ක්‍රමලේඛනය කිරීමේදී භාවිතා කරන පින් පැවරුම් රූපයේ දැක්වේ. ඡායාරූපය අසල ඇත්තේ තාවකාලික සම්බන්ධතාවයක් යථාර්ථයේ දී පෙනෙන ආකාරයයි.


සමහරු මෙය බැරෑරුම් නොවන බව පැවසිය හැකිය - රැහැන්වල සම්බන්ධතා. නමුත් ඔබත් මමත් සංවේදී මිනිසුන්. අපගේ ඉලක්කය වන්නේ ක්ෂුද්‍ර පාලකය ක්‍රමලේඛනය කිරීම, ඒ සඳහා අවම කාලයක් සහ වෙනත් සම්පත් වැය කිරීම මිස යමෙකු ඉදිරියේ ප්‍රදර්ශනය කිරීම නොවේ. ගුණාත්මක භාවය දුක් විඳින්නේ නැත. මෙම නඩුවේ "වයර් මත" ක්රමය බෙහෙවින් ඵලදායී හා යුක්ති සහගත ය. පාලකයේ ස්ථිරාංග දැල්වීම එක් වරක් ක්රියා පටිපාටියකි, එබැවින් එය ඉඟුරු වලින් ආවරණය කිරීමේ තේරුමක් නැත. පරිපථයෙන් (නිමි භාණ්ඩයේ) ​​පාලකය ඉවත් නොකර අනාගතයේදී ස්ථිරාංග වෙනස් කිරීමට අදහස් කරන්නේ නම්, උපාංගය නිෂ්පාදනය කිරීමේදී ස්ථාපනය කිරීමේදී මෙය සැලකිල්ලට ගනී. සාමාන්‍යයෙන් මේ සඳහා සම්බන්ධකයක් (RESET, SCK, MOSI, MISO, GND) ස්ථාපනය කර ඇති අතර, පුවරුවේ ස්ථාපනය කිරීමෙන් පසුව පවා MK දැල්විය හැකිය. නමුත් මේවා නිර්මාණාත්මක සතුටකි. අපි සරලම නඩුව සලකා බලමු.

දැන් අපි ATtiny44 MK වෙත යමු. මෙහි සෑම දෙයක්ම බොහෝ දුරට සමාන වේ. ඇඳීම සහ ඡායාරූපය මත පදනම්ව, ආරම්භකයකුට පවා සම්බන්ධතාවය සොයා ගැනීමට අපහසු නොවනු ඇත. ATtiny44 මෙන්, ඔබට ATtiny24 සහ ATtiny84 ක්ෂුද්‍ර පාලක සම්බන්ධ කළ හැකිය - මෙම තුන සඳහා පින් පැවරුම් සමාන වේ.


ක්‍රමලේඛනය සඳහා පාලකයක් තාවකාලිකව සම්බන්ධ කිරීම සඳහා තවත් උදාහරණයක් වන්නේ ATmega8 ය. මෙහි තවත් අල්ෙපෙනති ඇත, නමුත් මූලධර්මය එක හා සමානයි - වයර් කිහිපයක්, දැන් පාලකය එයට තොරතුරු “පුරවන්න” සූදානම්. පින් 13 වෙතින් එන ඡායාරූපයේ ඇති අමතර කළු වයරය ක්‍රමලේඛනයට සහභාගී නොවේ. MK ක්‍රමලේඛන මාදිලියෙන් පිටවීමෙන් පසු එය ශබ්ද සංඥාවක් ඉවත් කිරීමට සැලසුම් කර ඇත. මෙයට හේතුව "Perpetuum M" සඳහා ස්ක්‍රිප්ට් දෝෂහරණය කිරීමේදී වැඩසටහන එම්කේ වෙත බාගත කිරීමයි. සංගීත පෙට්ටිය.


බොහෝ විට එක් පාලකයක් විවිධ නිවාසවල පවතී. මෙම අවස්ථාවෙහිදී, එක් එක් සිද්ධිය සඳහා අල්ෙපෙනති පැවරීම වෙනස් ලෙස බෙදා හරිනු ලැබේ. ඔබේ පාලකයේ නිවාසය රූපයේ දැක්වෙන ආකාරයට සමාන නොවේ නම්, MK සංවර්ධකයාගේ වෙබ් අඩවියෙන් බාගත කළ හැකි තාක්ෂණික ලියකියවිලි වල අල්ෙපෙනතිවල අරමුණ පරීක්ෂා කරන්න.

පින්තූරය සම්පූර්ණ කිරීම සඳහා, "කකුල්" විශාල සංඛ්යාවක් සමඟ MK microcircuit සම්බන්ධ කිරීම දෙස බලමු. පින් 15 න් එන ෆොටෝ එකේ තියෙන අමතර කළු වයර් එකේ අරමුණ හරියටම ATmega8 එකේ වගේ තමයි.


සෑම දෙයක්ම ඉතා සරල බව ඔබට දැනටමත් ඒත්තු ගොස් ඇත. ක්ෂුද්‍ර පරිපථවල කටු ගණන් කරන්නේ කෙසේදැයි දන්නා ඕනෑම කෙනෙකුට (රවුමේ වාමාවර්තව ඇති ලකුණෙන්) එය තේරුම් ගත හැකිය. සහ නිරවද්යතාව ගැන අමතක කරන්න එපා. Microcircuits පිළිවෙලට මිනිසුන්ට ආදරය කරන අතර නොසැලකිලිමත් ලෙස සැලකීමට සමාව නොදේ.

මෘදුකාංග කොටස වෙත යාමට පෙර, USB-RS232TTL පරිවර්තක ධාවකය නිවැරදිව ස්ථාපනය කර ඇති බවට වග බලා ගන්න (වින්ඩෝස් උපාංග කළමනාකරු පරීක්ෂා කරන්න). ඔබ පරිවර්තකය සම්බන්ධ කරන විට දිස්වන අතථ්‍ය COM පෝට් අංකය මතක තබා ගන්න හෝ ලියන්න. මෙම අංකය ඔබට පහතින් කියවිය හැකි ස්ක්‍රිප්ටයේ පෙළට ඇතුළත් කිරීමට අවශ්‍ය වනු ඇත.

4. Script - "Perpetuum M" සඳහා ක්‍රමලේඛකයා

අපි "ක්‍රමලේඛකයාගේ" දෘඪාංග කොටස හඳුනා ගත්තෙමු. මෙය දැනටමත් සටනෙන් අඩකි. දැන් එය මෘදුකාංග කොටස සමඟ කටයුතු කිරීමට ඉතිරිව ඇත. ක්ෂුද්‍ර පාලකය සමඟ අන්තර්ක්‍රියා කිරීම සඳහා අවශ්‍ය සියලුම කාර්යයන් ක්‍රියාත්මක කරන ස්ක්‍රිප්ට් පාලනය යටතේ Perpetuum M වැඩසටහන මඟින් එහි කාර්යභාරය ඉටු කරනු ඇත.

ස්ක්‍රිප්ට් සහිත ලේඛනාගාරය perpetuum.exe වැඩසටහන පිහිටා ඇති එකම ෆෝල්ඩරය තුළට ඉවත් කළ යුතුය. මෙම අවස්ථාවේදී, ඔබ perpetuum.exe ගොනුව ධාවනය කරන විට, ස්ථාපිත ස්ක්‍රිප්ට් ලැයිස්තුවක් සහිත මෙනුවක් තිරය මත දිස්වනු ඇත, ඒ අතර “AVR MK ක්‍රමලේඛකයා” යන පේළිය ඇත (එය එකම එක විය හැකිය). අපට අවශ්‍ය රේඛාව මෙයයි.

පිටපත "MK Programmer AVR.pms" ගොනුවේ PMS ෆෝල්ඩරයේ පිහිටා ඇත. Windows Notepad වැනි සාමාන්‍ය පෙළ සංස්කාරකයක මෙම ගොනුව බැලීමට, අධ්‍යයනය කිරීමට සහ අවශ්‍ය නම් සංස්කරණය කිරීමට හැකිය. ස්ක්‍රිප්ට් භාවිතා කිරීමට පෙර, ඔබට බොහෝ විට වරාය සැකසුම් වලට අදාළ පෙළට වෙනස්කම් කිරීමට අවශ්‍ය වනු ඇත. මෙය සිදු කිරීම සඳහා, Windows Device Manager හි භාවිතා වන වරායේ නම පරීක්ෂා කර, අවශ්ය නම්, "PortName="COM4" යන පේළියට සුදුසු සංශෝධනයක් කරන්න; - අංක 4 වෙනුවට වෙනත් අංකයක් තිබිය හැක. එසේම, වෙනත් USB-RS232TTL පරිවර්තක ආකෘතියක් භාවිතා කරන විට, ඔබට සංඥා ප්‍රතිලෝම සැකසුම් වෙනස් කිරීමට අවශ්‍ය විය හැකිය ("ඉහළ" යන වචනයෙන් ආරම්භ වන ස්ක්‍රිප්ට් රේඛා). Perpetuum M වැඩසටහන (වරාය සමඟ වැඩ කිරීම සඳහා වන කාර්යයන් කොටස) සඳහා වන උපදෙස් වල එක් උදාහරණයක් භාවිතා කරමින් USB-RS232TTL පරිවර්තකය මඟින් සංඥා ප්‍රතිලෝම පරීක්ෂා කළ හැකිය.

MK_AVR උප ෆෝල්ඩරයේ සහය දක්වන පාලකයන් පිළිබඳ විස්තර සහිත ගොනු අඩංගු වේ. ඔබට අවශ්‍ය පාලකය ඔවුන් අතර නොමැති නම්, ඔබට ප්‍රතිසමයක් අනුගමනය කරමින් ඔබට අවශ්‍ය එක ඔබම එකතු කළ හැකිය. එක් ගොනුවක් නියැදියක් ලෙස ගෙන, පෙළ සංස්කාරකයක් භාවිතයෙන්, අවශ්‍ය දත්ත ඇතුළත් කරන්න, එය ඔබේ ක්ෂුද්‍ර පාලකය සඳහා වන ලේඛනයෙන් ලබා ගන්න. ප්රධාන දෙය නම් ප්රවේශම් වන්න, දෝෂ නොමැතිව දත්ත ඇතුල් කරන්න, එසේ නොමැති නම් MK වැඩසටහන්ගත නොකෙරේ, හෝ වැරදි ලෙස වැඩසටහන්ගත කරනු ලැබේ. මුල් පිටපත ක්ෂුද්‍ර පාලක 6ක් සඳහා සහය දක්වයි: ATtiny13, ATtiny24, ATtiny44, ATtiny84, ATmega8 සහ ATmega128. ස්ක්‍රිප්ට් සම්බන්ධිත පාලකය ස්වයංක්‍රීයව හඳුනාගැනීම ක්‍රියාත්මක කරයි - එය අතින් නියම කිරීමට අවශ්‍ය නොවේ. MK වෙතින් කියවන හැඳුනුම්කාරකය පවතින විස්තර අතර නොමැති නම්, පාලකය හඳුනාගත නොහැකි බවට පණිවිඩයක් දර්ශනය වේ.

ස්ක්‍රිප්ට් සහිත ලේඛනාගාරයේ ද අඩංගු වේ අමතර තොරතුරු. AVR controller inc ගොනු ෆෝල්ඩරයේ ඉතා ප්‍රයෝජනවත් සහ පුළුල් පාලක නිර්වචන ගොනු එකතුවක් අඩංගු වේ. MK සඳහා ඔබේම වැඩසටහන් ලිවීමේදී මෙම ගොනු භාවිතා වේ. තවත් ෆෝල්ඩර හතරක "MusicBox_..." එකලස් කිරීමේ භාෂාවෙන් වැඩසටහනක් සහ ATtiny13, ATtiny44, ATmega8 සහ ATmega128 සඳහා වෙන වෙනම MK වෙත බාගත කිරීමට සූදානම් ස්ථිරාංග සහිත ගොනු අඩංගු වේ. මෙම ලිපියේ යෝජනා කර ඇති පරිදි, ඔබ දැනටමත් මෙම MK වලින් එකක් වැඩසටහන්කරණය සඳහා සම්බන්ධ කර ඇත්නම්, ඔබට එය දැන් ෆ්ලෑෂ් කළ හැකිය - ඔබට සංගීත පෙට්ටියක් ලැබෙනු ඇත. මේ පිළිබඳ වැඩි විස්තර පහතින්.

ඔබ ස්ක්‍රිප්ට් මෙනුවේ “MK AVR ක්‍රමලේඛකයා” යන පේළිය තෝරාගත් විට, ස්ක්‍රිප්ට් එක ක්‍රියාත්මක වීමට පටන් ගනී. ඒ අතරම, එය වරාය විවෘත කරයි, ක්‍රමලේඛන ප්‍රකාරයට මාරු වීමට MK වෙත විධානයක් යවයි, සාර්ථක සංක්‍රාන්තිය පිළිබඳ MK වෙතින් තහවුරු කිරීමක් ලබා ගනී, MK හැඳුනුම්කාරකය ඉල්ලයි සහ පවතින ඒවා අතර එහි හඳුනාගැනීමෙන් මෙම MK පිළිබඳ විස්තරයක් සොයයි. විස්තර සහිත ගොනු. එය අවශ්ය විස්තරය සොයාගත නොහැකි නම්, එය අනුරූප පණිවිඩයක් පෙන්වයි. විස්තරයක් සොයාගතහොත්, ක්‍රමලේඛකයාගේ ප්‍රධාන මෙනුව විවෘත වේ. ඔබට එහි තිර රුවක් රූප සටහන 8 හි දැකිය හැකිය. වැඩිදුර අවබෝධය අපහසු නැත - මෙනුව ඉතා සරල ය.

ස්ක්‍රිප්ට් හි පළමු අනුවාදයේ, සම්පූර්ණ ක්‍රමලේඛකයෙකුගේ සමහර කාර්යයන් ක්‍රියාත්මක නොවේ. උදාහරණයක් ලෙස, EEPROM වෙත කියවීමට සහ ලිවීමට ක්‍රමයක් නොමැත. නමුත් ඔබ පෙළ සංස්කාරකයක් තුළ ස්ක්‍රිප්ට් විවෘත කළහොත්, ප්‍රධාන දෙය දැනටමත් එහි ක්‍රියාත්මක කර ඇති බවක් තිබියදීත්, එය ප්‍රමාණයෙන් ඉතා කුඩා බව ඔබට පෙනෙනු ඇත. මෙයින් ඇඟවෙන්නේ නැතිවූ කාර්යයන් එකතු කිරීම එතරම් අපහසු නොවන බවයි - භාෂාව ඉතා නම්‍යශීලී වේ, එය කුඩා වැඩසටහනක පොහොසත් ක්‍රියාකාරිත්වය ක්‍රියාත්මක කිරීමට ඔබට ඉඩ සලසයි. නමුත් බොහෝ අවස්ථා සඳහා, පවතින කාර්යයන් පවා ප්රමාණවත් වේ.

සමහර ක්‍රියාකාරීත්ව සීමාවන් ස්ක්‍රිප්ට් පෙළෙහි කෙලින්ම විස්තර කර ඇත:
//ක්‍රියාවට නැංවූ පටිගත කිරීම ශුන්‍ය ලිපිනයෙන් පමණි (දිගු කරන ලද කොටස් ලිපින වාර්තාව නොසලකා හරිනු ලැබේ, LOAD OFFSET - ද)
//HEX ගොනුවේ වාර්තාවල අනුපිළිවෙල සහ අඛණ්ඩතාව පරීක්ෂා නොකෙරේ
// චෙක්සම් පරීක්ෂා කර නැත
MK සඳහා ස්ථිරාංග කේතය ලබා ගන්නා HEX ගොනුවක් සමඟ වැඩ කිරීමට මෙය අදාළ වේ. මෙම ගොනුව දූෂිත වී නොමැති නම්, චෙක්සම් පරීක්ෂා කිරීමෙන් කිසිදු බලපෑමක් සිදු නොවේ. එය විකෘති වී ඇත්නම්, ස්ක්‍රිප්ට් භාවිතයෙන් එය හඳුනා ගැනීමට නොහැකි වනු ඇත. බොහෝ අවස්ථාවන්හීදී, ඉතිරි සීමාවන් හානියක් නොවනු ඇත, නමුත් ඔබ තවමත් ඒවා මතක තබා ගත යුතුය.

5. සංගීත පෙට්ටිය - ආරම්භකයින් සඳහා සරල ශිල්පයකි

ඔබට මෙම ක්ෂුද්‍ර පාලකයන්ගෙන් එකක් තිබේ නම්: ATtiny13, ATtiny44, ATmega8 හෝ ATmega128, ඔබට එය පහසුවෙන් සංගීත පෙට්ටියක් හෝ සංගීත කාඩ්පතක් බවට පත් කළ හැකිය. මෙය සිදු කිරීම සඳහා, අනුරූප ස්ථිරාංග MK වෙත ලිවීමට ප්රමාණවත්ය - ස්ක්රිප්ට් සමඟ එකම ලේඛනාගාරයේ "MusicBox_..." ෆෝල්ඩරවල පිහිටා ඇති එම හතරෙන් එකක්. ස්ථිරාංග කේත ".hex" දිගුව සමඟ ගොනු තුළ ගබඩා කර ඇත. එවැනි යාත්රාවක් සඳහා ATmega128 භාවිතා කිරීම, ඇත්ත වශයෙන්ම, ATmega8 මෙන් "මේද" වේ. නමුත් මෙය පරීක්ෂණ හෝ අත්හදා බැලීම් සඳහා, වෙනත් වචන වලින් කිවහොත්, අධ්‍යාපනික අරමුණු සඳහා ප්‍රයෝජනවත් විය හැකිය. Assembler හි වැඩසටහන් වල පාඨ ද අමුණා ඇත. වැඩසටහන් මුල සිටම නිර්මාණය කර නැත - A.V. බෙලොව්ගේ පොතේ සංගීත පෙට්ටි වැඩසටහන පදනමක් ලෙස ගන්නා ලදී. AVR ක්ෂුද්‍ර පාලකආධුනික ගුවන්විදුලි භාවිතයේ දී." මුල් වැඩසටහන සැලකිය යුතු වෙනස්කම් ගණනාවකට භාජනය වී ඇත:
1. MK හතරෙන් එකක් සඳහා අනුවර්තනය කර ඇත: ATtiny13, ATtiny44, ATmega8 සහ ATmega128
2. බොත්තම් ඉවත් කර ඇත - බලය සහ ශබ්ද විමෝචකයක් හැර වෙනත් කිසිවක් පාලකයට සම්බන්ධ කිරීම අවශ්‍ය නොවේ (තනු එකින් එක නිමක් නැති ලූපයකින් වාදනය වේ)
3. සංගීත රිද්මයේ බාධා ඉවත් කිරීම සඳහා එක් එක් සටහනේ කාලසීමාව සටහන් අතර විරාමයේ කාලසීමාව මගින් අඩු වේ.
4. අටවන තනුව සම්බන්ධ වී ඇත, පොත් අනුවාදයේ භාවිතා නොවේ
5. ආත්මීය සිට: ඇල්ගොරිතම ප්‍රශස්ත කිරීමට සහ තේරුම් ගැනීමට පහසු කිරීමට සමහර "වැඩිදියුණු කිරීම්"

සමහර තනු වලදී කෙනෙකුට අසත්‍යය සහ දළ දෝෂ පවා ඇසෙනු ඇත, විශේෂයෙන් “සිනහව” - මැද. නාද රටා කේත පොතෙන් ලබාගෙන ඇත (හෝ ඒ වෙනුවට, මුල් asm ගොනුව සමඟ පොතේ කර්තෘගේ වෙබ් අඩවියෙන් බාගත කර ඇත) සහ වෙනස් කර නොමැත. පෙනෙන විදිහට, තනු සංකේතනය කිරීමේදී දෝෂ තිබේ. නමුත් මෙය ගැටළුවක් නොවේ - සංගීතය සමඟ “මිත්‍රශීලී” ඕනෑම කෙනෙකුට එය පහසුවෙන් හඳුනාගෙන සියල්ල නිවැරදි කළ හැකිය.

ATtiny13 හි, 16-bit කවුන්ටරයක් ​​නොමැතිකම හේතුවෙන්, නෝට්ටු ප්රතිනිෂ්පාදනය කිරීම සඳහා 8-bit කවුන්ටරයක් ​​භාවිතා කිරීමට සිදු වූ අතර, එය සටහන් වල නිරවද්යතාවෙහි සුළු අඩුවීමක් ඇති විය. නමුත් මෙය කනට පෙනෙන්නේ නැති තරම්ය.

වින්‍යාස බිටු ගැන. ඔවුන්ගේ සැකසුම් නව ක්ෂුද්ර පාලකයේ තත්වයට අනුරූප විය යුතුය. ඔබගේ MK මීට පෙර කොහේ හරි භාවිතා කර ඇත්නම්, ඔබ එහි වින්‍යාස බිටු වල තත්වය පරීක්ෂා කළ යුතු අතර, අවශ්‍ය නම්, ඒවා නව ක්ෂුද්‍ර පාලකයේ සැකසුම් වලට අනුකූලව ගෙන එන්න. මෙම MK සඳහා වන ලියකියවිලි වලින් ඔබට නව ක්ෂුද්‍ර පාලකයේ වින්‍යාස බිටු වල තත්වය සොයාගත හැකිය ("ෆියුස් බිටු" කොටස). ව්යතිරේකය ATmega128 වේ. මෙම MCU සතුව M103C බිට් ඇත, එය පැරණි ATmega103 සමඟ අනුකූලතා මාදිලිය සක්‍රීය කරයි. M103C බිට් සක්‍රිය කිරීම ATmega128 හි හැකියාවන් බෙහෙවින් අඩු කරයි, සහ මෙම බිට් නව MK මත සක්‍රීය වේ. ඔබ M103C අක්‍රිය තත්වයකට නැවත සැකසිය යුතුය. වින්‍යාස බිටු හැසිරවීමට, ක්‍රමලේඛක ස්ක්‍රිප්ට් මෙනුවේ අනුරූප කොටස භාවිතා කරන්න.

සංගීත පෙට්ටියේ රූප සටහනක් ලබා දීමේ තේරුමක් නැත: එහි අඩංගු වන්නේ ක්ෂුද්‍ර පාලකයක්, බල සැපයුමක් සහ පීසෝ-ශබ්ද විමෝචකයක් පමණි. එම්කේ ක්‍රමලේඛනය කිරීමේදී අප කළ ආකාරයටම විදුලිය සපයනු ලැබේ. ශබ්ද විමෝචකය පොදු වයරය (පාලකයේ GND පින්) සහ MK පින් වලින් එකක් අතර සම්බන්ධ වී ඇති අතර, එම සංඛ්යාව වැඩසටහන් එකලස් කිරීමේ කේතය (*.asm) සමඟ ගොනුවේ සොයාගත හැකිය. වැඩසටහනේ ආරම්භයේ එක් එක් එම්කේ සඳහා පෙළක් අදහස් දැක්වීමේදී පේළියක් ඇත: " ශබ්ද සංඥාව pin XX හිදී සෑදී ඇත." ක්‍රමලේඛක ස්ක්‍රිප්ටය එහි වැඩ අවසන් වූ විට, ක්ෂුද්‍ර පාලකය ක්‍රමලේඛන මාදිලියෙන් ඉවත් වී සාමාන්‍ය ක්‍රියාකාරී මාදිලියට යයි. තනු වාදනය වහාම ආරම්භ වේ. ශබ්ද විමෝචකය සම්බන්ධ කිරීමෙන් ඔබට මෙය පරීක්ෂා කළ හැකිය. ඔබට ශබ්ද විමෝචකය හැර යා හැක. ක්‍රිස්ටල් ක්‍රමලේඛනය කිරීමේදී සම්බන්ධ වන්නේ ශ්‍රව්‍ය SPI විසින් භාවිතා නොකරන ලද පින් එකකින් පැමිණෙන්නේ නම් පමණි, එසේ නොමැතිනම් පින් එකෙහි ඇති අමතර ධාරිතාව ක්‍රමලේඛනයට බාධාවක් විය හැක.

කාර්යය: එක් LED එකක් පාලනය කිරීමට වැඩසටහනක් සංවර්ධනය කරමු. බොත්තම එබූ විට LED දැල්වෙන අතර මුදා හරින විට එය නිවී යයි.

පළමුව, අපි උපාංගයේ ක්‍රමානුරූප රූප සටහනක් සකස් කරමු. ඕනෑම බාහිර උපාංග ක්ෂුද්‍ර පාලකයට සම්බන්ධ කිරීමට I/O ports භාවිතා කරයි. සෑම වරායක්ම ආදාන සහ ප්‍රතිදානය ලෙස ක්‍රියා කිරීමේ හැකියාව ඇත. LED එක පෝට් එකකට සහ බොත්තම අනෙක් එකට සම්බන්ධ කරමු. මෙම අත්හදා බැලීම සඳහා අපි පාලකයක් භාවිතා කරමු Atmega8. මෙම චිපයේ I/O ports 3ක් අඩංගු වන අතර, 2-bit-bit 2ක් සහ 16-bit ටයිමරයක්/කවුන්ටරයක් ​​ඇත. එසේම නැවෙහි 3-නාලිකා PWM, 6-නාලිකා 10-bit ඇනලොග්-ඩිජිටල් පරිවර්තකය සහ තවත් බොහෝ දේ ඇත. මගේ මතය අනුව, ක්‍රමලේඛනයේ මූලික කරුණු ඉගෙන ගැනීම සඳහා ක්ෂුද්‍ර පාලකයක් විශිෂ්ටයි.

LED සම්බන්ධ කිරීම සඳහා අපි PB0 රේඛාව භාවිතා කරන අතර, බොත්තමෙන් තොරතුරු කියවීමට අපි PD0 රේඛාව භාවිතා කරමු. රූප සටහන රූප සටහන 1 හි දැක්වේ.

සහල්. 1

ප්රතිරෝධක R2 හරහා, ප්ලස් සැපයුම් වෝල්ටීයතාව ආදාන PD0 වෙත සපයනු ලැබේ, එය තාර්කික එක් සංඥාවකට අනුරූප වේ. බොත්තම වසා ඇති විට, වෝල්ටීයතාව ශුන්යයට පහත වැටේ, එය තාර්කික ශුන්යයට අනුරූප වේ. අනාගතයේදී, R2 පරිපථයෙන් බැහැර කළ හැකි අතර, එය අභ්යන්තර භාර ප්රතිරෝධකයක් සමඟ ප්රතිස්ථාපනය කිරීම, වැඩසටහනේ අවශ්ය සැකසුම් ඇතුල් කිරීම. LED එක ධාරා සීමා කරන ප්‍රතිරෝධක R3 හරහා PB0 වරායේ ප්‍රතිදානයට සම්බන්ධ කර ඇත. LED ආලෝකමත් කිරීම සඳහා, ඔබ PB0 රේඛාවට තාර්කික එක් සංඥාවක් යෙදිය යුතුය. උපාංගයට සංඛ්‍යාත ස්ථායිතාව සඳහා ඉහළ අවශ්‍යතා නොමැති බැවින් අපි 4 MHz හි අභ්‍යන්තර ප්‍රධාන ඔරලෝසු උත්පාදකයක් භාවිතා කරන්නෙමු.

දැන් අපි වැඩසටහන ලියන්නෙමු. මම වැඩසටහන් ලිවීමට ක්‍රමලේඛන පරිසරය භාවිතා කරමි AVR චිත්‍රාගාරයසහ WinAvr. AVR Studio විවෘත කරන්න, පිළිගැනීමේ කවුළුවක් දිස්වේ, "නව ව්‍යාපෘතියක් සාදන්න" බොත්තම ක්ලික් කරන්න, ඉන්පසු ව්‍යාපෘති වර්ගය තෝරන්න - AVR GCC, උදාහරණයක් ලෙස "cod1" ව්‍යාපෘතියේ නම ලියන්න, "ව්‍යාපෘති ෆෝල්ඩරය සාදන්න" සහ "සාදන්න" යන දෙකම පරීක්ෂා කරන්න. ආරම්භක ගොනුව" පිරික්සුම් කොටු , "ඊළඟ" බොත්තම ක්ලික් කරන්න, වම් කවුළුවෙහි "AVR සිමියුලේටරය" තෝරන්න, සහ දකුණු කවුළුවෙහි "Atmega8" ක්ෂුද්ර පාලක වර්ගය තෝරන්න, "Finish" බොත්තම ක්ලික් කරන්න, සංස්කාරකය සහ ව්යාපෘති ප්රවර්ග ගස විවෘත වේ - මූලික සැකසුම් සම්පූර්ණ කර ඇත.

පළමුව, බාහිර ගොනු ඇමිණීම සඳහා ක්‍රියාකරු භාවිතයෙන් Atmega8 සඳහා සම්මත විස්තර පෙළ එකතු කරමු: #ඇතුළත්

විධාන වාක්‍ය ඛණ්ඩය #ඇතුළත්

#ඇතුළත්<имя_файла.h>
#"filename.h" ඇතුලත් කරන්න

කෝණ වරහන්< и >ඇතුළත් කර ඇති සම්මත WinAvr ෆෝල්ඩරය තුළ මුලින්ම සෙවිය යුතු ගොනු ඇතුළත් කළ සම්පාදකයට දක්වන්න. ද්විත්ව උපුටා දැක්වීම් " සහ " ව්‍යාපෘතිය ගබඩා කර ඇති නාමාවලියෙහි සෙවීම ආරම්භ කරන ලෙස සම්පාදකයාට කියයි.

සෑම ක්ෂුද්‍ර පාලකයකටම තමන්ගේම ශීර්ෂ ගොනුවක් ඇත. ATMega8 සඳහා මෙම ගොනුව iom8.h ලෙස හැඳින්වේ, ATtiny2313 - iotn2313.h සඳහා. සෑම වැඩසටහනකම ආරම්භයේදීම, අප භාවිතා කරන ක්ෂුද්‍ර පාලකයේ ශීර්ෂ ගොනුව ඇතුළත් කළ යුතුය. නමුත් පොදු ශීර්ෂ ගොනුවක් ද ඇත io.h. පූර්ව සකසනය මෙම ගොනුව සකසන අතර, ව්‍යාපෘති සැකසීම් මත පදනම්ව, අපගේ වැඩසටහනේ අවශ්‍ය ශීර්ෂ ගොනුව ඇතුළත් වේ.

අප සඳහා, වැඩසටහනේ පළමු පේළිය මේ ආකාරයෙන් පෙනෙනු ඇත:

#ඇතුළත්

ඕනෑම C වැඩසටහනක් එක් ප්‍රධාන කාර්යයක් අඩංගු විය යුතුය. එය ප්රධාන වශයෙන් නම් කර ඇත. වැඩසටහන් ක්‍රියාත්මක කිරීම සෑම විටම ප්‍රධාන කාර්යය ක්‍රියාත්මක කිරීමත් සමඟ ආරම්භ වේ. ශ්‍රිතයකට ශීර්ෂයක් ඇත - int main(void) සහ ශරීරයක් - එය සීමිතයි curly වරහන් {}.

int ප්‍රධාන (ශුන්‍ය)
{
ක්රියාකාරී ශරීරය
}

අපි අපගේ කේතය ශ්‍රිතයේ ශරීරයට එක් කරන්නෙමු. ශ්‍රිත නාමයට පෙර ආපසු එන වර්ගය දක්වනු ලැබේ. ශ්‍රිතය අගයක් ලබා නොදෙන්නේ නම්, යතුර භාවිතා වේ හිස්.

int- මෙය 2-බයිට් නිඛිල අංකයකි, අගයන් පරාසය - 32768 සිට 32767 දක්වා

ශ්‍රිතයේ නමට පසුව, ශ්‍රිතය ඇමතූ විට එය වෙත ලබා දෙන පරාමිති වරහන් () හි දක්වා ඇත. ශ්‍රිතයට පරාමිති නොමැති නම්, මූල පදය භාවිතා වේ හිස්. කාර්යය ප්රධානවිධාන කට්ටලයක්, පද්ධති සැකසුම් සහ ප්රධාන වැඩසටහන් ලූපය අඩංගු වේ.

ඊළඟට අපි වරාය වින්යාස කරමු ඩීදොරටුවේ. වරාය මෙහෙයුම් ආකාරය තීරණය වන්නේ ලේඛනයේ අන්තර්ගතය අනුව ය DDRD(තොරතුරු මාරු කිරීමේ දිශා ලේඛනය). අපි මෙම ලේඛනයට “0x00” (0b0000000 - ද්විමය ආකාරයෙන්) අංකය ලියන්නෙමු; බොත්තම හැර වෙනත් කිසිවක් මෙම වරායට සම්බන්ධ නොවේ, එබැවින් අපි සම්පූර්ණ D වරාය ආදානයක් ලෙස වින්‍යාස කරමු. රෙජිස්ටර් (0-ආදාන, 1-ප්‍රතිදානය) එක් එක් බිට් එකකට අංක 0 හෝ 1 ලිවීමෙන් ඔබට port bit එක වින්‍යාසගත කළ හැක, උදාහරණයක් ලෙස DDRD = 0x81 (0b10000001) - වරාය D හි පළමු සහ අවසාන පේළි ක්‍රියා කරන්නේ ප්රතිදානය, ඉතිරිය ආදානය ලෙස. අභ්යන්තර භාර ප්රතිරෝධය ද සම්බන්ධ කළ යුතුය. PORTx ලේඛනය වරාය ආදාන මාදිලියේ ඇති විට අභ්‍යන්තර ප්‍රතිරෝධක සක්‍රිය හෝ අක්‍රිය කර තිබේද යන්න පාලනය කරයි. එතන ඒකක ලියමු.

වරාය සැකසීම බීපිටවීමට. වරාය මෙහෙයුම් ආකාරය තීරණය වන්නේ ලේඛනයේ අන්තර්ගතය අනුව ය DDRB. වරායට LED එකක් හැර වෙන කිසිවක් නැත බීසම්බන්ධ වී නැත, එබැවින් සම්පූර්ණ වරාය ප්‍රතිදානය ලෙස වින්‍යාසගත කළ හැක. මෙය සිදු කරනු ලබන්නේ ලේඛනයට ලිවීමෙනි DDRBඅංක "0xFF". ඔබ මුලින්ම එය ක්‍රියාත්මක කරන විට LED එක දැල්වීම වැළැක්වීමට, වරායට ලියන්න බීතාර්කික ශුන්ය. මෙය සිදු කරනු ලබන්නේ පටිගත කිරීමෙනි PORTB= 0x00;

අගයන් පැවරීම සඳහා, "=" සංකේතය භාවිතා කරන අතර එය පැවරුම් ක්‍රියාකරු ලෙස හැඳින්වේ, "සමාන" ලකුණ සමඟ පටලවා නොගත යුතුය.

වරාය වින්‍යාසය මේ ආකාරයෙන් පෙනෙනු ඇත:

DDRD = 0x00;
PORTD = 0xFF;
DDRB = 0xFF;
PORTB = 0x00;

අපි වැඩසටහනේ ප්රධාන ලූපය ලියන්නෙමු. අතර("ඉංග්‍රීසියෙන්") - මෙම විධානය ලූපයක් සංවිධානය කරයි, කොන්දේසිය සපුරාලන තෙක් ලූපයේ සිරුර බොහෝ වාරයක් පුනරාවර්තනය කරයි, එනම් වරහන් තුළ ප්‍රකාශනය සත්‍ය වන අතර. C හි, ප්‍රකාශනයක් ශුන්‍යයට සමාන නොවේ නම් සත්‍ය ලෙස ද, එය අසත්‍ය ලෙස ද සලකනු ලැබේ.

විධානය මේ වගේ ය:

අතරතුර (තත්වය)
{
ලූප් ශරීරය
}

අපගේ නඩුවේදී, ප්රධාන ලූපය සමන්විත වන්නේ එක් විධානයකින් පමණි. මෙම විධානය රෙජිස්ටර් පවරයි PORTBප්‍රතිලෝම කළ යුතු ලියාපදිංචි අගය PORTD.

PORTB = ~PIND; //D වරායෙන් අගය ගන්න, එය ප්‍රතිලෝම කර PORTB වෙත පවරන්න (PORTB වෙත ලියන්න)

// C ප්‍රකාශන දකුණේ සිට වමට කියවනු ලැබේ

PINDතොරතුරු ආදාන ලේඛනය. පාලකයේ බාහිර නිමැවුමෙන් තොරතුරු කියවීම සඳහා, ඔබ මුලින්ම පෝට් එකේ අපේක්ෂිත බිට් ආදාන මාදිලියට මාරු කළ යුතුය. එනම් රෙජිස්ටර් එකේ අදාල බිට් එකට ලියන්න DDRxශුන්ය. බාහිර උපාංගයකින් ඩිජිටල් සංඥාවක් මෙම පින් එකට සැපයිය හැක්කේ මෙයින් පසුවය. මීලඟට, මයික්රොකොන්ට්රෝලර් විසින් ලේඛනයෙන් බයිටය කියවනු ඇත PINx. අනුරූප බිටු වල අන්තර්ගතය වරායේ බාහිර පින් එකේ ඇති සංඥාවට අනුරූප වේ. අපගේ වැඩසටහන සූදානම් වන අතර මේ ආකාරයෙන් පෙනේ:

#ඇතුළත් int main (void) ( DDRD = 0x00; //port D - input PORTD = 0xFF; //load resistor එක සම්බන්ධ කරන්න DDRB = 0xFF; //port B - output PORTB = 0x00; //ප්‍රතිදානය 0 ලෙස සකසන්න (1 ) ( PORTB = ~PIND; //~ bitwise inversion ලකුණ ) )

අදහස් සී භාෂාවේ බහුලව භාවිතා වේ. ලියන්න ක්‍රම දෙකක් තියෙනවා.

/*අදහසක්*/
//අදහසක්

මෙම අවස්ථාවෙහිදී, සම්පාදකයා අදහස් දැක්වීමේ ලියා ඇති දේ කෙරෙහි අවධානය යොමු නොකරයි.

රූප සටහන 2 හි පෙන්වා ඇති පරිදි ඔබ එකම වැඩසටහන භාවිතා කර බොත්තම් 8 ක් සහ LED 8 ක් මයික්‍රොකොන්ට්‍රෝලර් වෙත සම්බන්ධ කරන්නේ නම්, එවිට වරායේ එක් එක් බිට් බව පැහැදිලි වනු ඇත. ඩීඑහි port bit එකට ගැලපේ බී. SB1 බොත්තම එබීමෙන්, HL1 දැල්වෙයි, SB2 බොත්තම එබීමෙන්, HL2 දැල්වෙයි, ආදිය.

රූපය 2

ලිපිය A.V. Belov විසින් පොතෙන් ද්රව්ය භාවිතා කළේය. "AVR උපාංග සංවර්ධකයින් සඳහා නිබන්ධනය"

MK හැදෑරීම ආරම්භ කළ යුත්තේ assembler එකෙන් බව මම වරක් දෙවරක් කීවෙමි. වෙබ් අඩවියේ සම්පූර්ණ පාඨමාලාවක් මේ සඳහා කැප කර ඇත (එය ඉතා අනුකූල නොවේ, නමුත් ක්රමයෙන් මම එය ප්රමාණවත් පෙනුමක් ලබා ගන්නෙමි). ඔව්, එය දුෂ්කර ය, ප්රතිඵලය පළමු දිනට නොලැබේ, නමුත් ඔබේ පාලකයේ සිදුවන්නේ කුමක්ද යන්න තේරුම් ගැනීමට ඔබ ඉගෙන ගනු ඇත. එය ක්‍රියා කරන ආකාරය ඔබ දැන ගනු ඇත, සහ වඳුරෙකු මෙන් වෙනත් පුද්ගලයින්ගේ මූලාශ්‍ර පිටපත් නොකර එය හදිසියේම ක්‍රියා කිරීම නැවැත්වූයේ මන්දැයි තේරුම් ගැනීමට උත්සාහ කරන්න. ඊට අමතරව, C ට Redneck කේතය නිර්මාණය කිරීම වඩාත් පහසු වන අතර එය වඩාත් නුසුදුසු මොහොතේදී පිච්ෆෝක් සමඟ එළියට එනු ඇත.

අවාසනාවකට, සෑම කෙනෙකුටම වහාම ප්රතිඵල අවශ්යයි. එබැවින් මම වෙනත් මාර්ගයකට යාමට තීරණය කළෙමි - C පිළිබඳ නිබන්ධනයක් සාදන්න, නමුත් ඔහුගේ යට ඇඳුම් පෙන්වමින්. හොඳ embedder ක්‍රමලේඛකයෙක් සෑම විටම ඔහුගේ දෘඪාංග කැබැල්ල අනවසරයෙන් එක පියවරක්වත් ගැනීමට ඉඩ නොතබමින් බෝල්ට් එකෙන් තදින් අල්ලාගෙන සිටී. ඉතින් මුලින්ම C කේතය ඇත, පසුව සම්පාදකය නිපදවන දේ සහ එය සැබවින්ම ක්‍රියා කරන ආකාරය :)

අනෙක් අතට, C හි ප්‍රබල කරුණ වන්නේ කේත අතේ ගෙන යා හැකි හැකියාවයි. ඇත්ත වශයෙන්ම, ඔබ සියල්ල නිවැරදිව ලියන්නේ නම්. වැඩ ඇල්ගොරිතම සහ ඒවායේ දෘඩාංග ක්‍රියාත්මක කිරීම ව්‍යාපෘතියේ විවිධ කොටස් වලට වෙන් කිරීම. ඉන්පසුව, ඇල්ගොරිතම වෙනත් ක්ෂුද්‍ර පාලකයකට මාරු කිරීම සඳහා, දෘඩාංග සඳහා සියලුම ඇමතුම් ලියා ඇති අතුරුමුහුණත් ස්තරය පමණක් නැවත ලිවීමට ප්‍රමාණවත් වනු ඇත, සහ සියලුම ක්‍රියාකාරී කේතය එලෙසම තබන්න. සහ, ඇත්ත වශයෙන්ම, කියවීමේ හැකියාව. C ප්‍රභව කේතය මුලින්ම බැලූ බැල්මට තේරුම් ගැනීමට පහසු වේ (නමුත් ... උදාහරණයක් ලෙස, කුමක් යොමු කළ යුතුද යන්න මට ප්‍රශ්නයක් නැත - එය C හෝ ASM :)), නමුත්, නැවතත්, සියල්ල නිවැරදිව ලියා තිබේ නම්. මෙම කරුණු කෙරෙහි ද අවධානය යොමු කරමි.

මගේ දෝශ නිරාකරණ පුවරුව පර්යේෂණාත්මක දෘඪාංගය ලෙස ක්‍රියා කරනු ඇති අතර එහි සියලුම උදාහරණවල සිංහයාගේ කොටස ස්ථාපනය කෙරේ.

AVR සඳහා පළමු C වැඩසටහන

සම්පාදකයක් තෝරාගැනීම සහ පරිසරය සැකසීම
AVR සඳහා විවිධ C සම්පාදක තිබේ:
මුලින්ම මේ IAR AVR C- AVR සඳහා හොඳම සම්පාදකයා ලෙස නියත වශයෙන්ම හඳුනාගෙන ඇත, මන්ද Atmel සහ IAR හි විශේෂඥයින් අතර සමීප සහයෝගීතාවයෙන් පාලකය නිර්මාණය කරන ලදී. නමුත් ඔබ සියල්ල සඳහා ගෙවිය යුතුය. තවද මෙම සම්පාදකය මිල අධික වාණිජ මෘදුකාංගයක් පමණක් නොව, එවැනි සැකසුම් ටොන් ගණනක් ඇති අතර එය සරලව සම්පාදනය කිරීමට විශාල උත්සාහයක් දරයි. මම ඇත්තටම ඔහු සමඟ මිත්‍රත්වයක් ගොඩනඟා ගත්තේ නැත; සම්බන්ධ කිරීමේ අදියරේදී අමුතු දෝෂ හේතුවෙන් ව්‍යාපෘතිය කුණු වෙමින් පැවතුනි (එය වක්‍ර ඉරිතැලීමක් බව පසුව මට වැටහුණි).

දෙවැන්න පැමිණේ WinAVR GCC- බලවත් ප්‍රශස්තිකරණ සම්පාදකයකි. සම්පුර්ණයෙන්ම විවෘත මූලාශ්‍රය, හරස් වේදිකාව, පොදුවේ ගත් කල, ජීවිතයේ සියලු ප්‍රීති. එය AVR ස්ටූඩියෝ වෙත පරිපූර්ණ ලෙස ඒකාබද්ධ වන අතර, ඔබට එහිම දෝෂහරණය කිරීමට ඉඩ සලසයි, එය ඉතා පහසු වේ. පොදුවේ, මම එය තෝරා ගත්තා.

ද ඇත CodeVision AVR Cයනු ඉතා ජනප්‍රිය සම්පාදකයකි. එහි සරල බව නිසා එය ජනප්‍රිය විය. මිනිත්තු කිහිපයකින් ඔබට එහි ක්‍රියාකාරී වැඩසටහනක් ලබා ගත හැකිය - ආරම්භක කේත විශාරදයා සියලු වර්ගවල දේවල් ආරම්භ කිරීම සඳහා ප්‍රමිතීන් ඉවත් කිරීමෙන් මෙයට බෙහෙවින් පහසුකම් සපයයි. ඇත්තම කිව්වොත්, මට ඒ ගැන සැකයි - වරක් මට මෙම සම්පාදකයා විසින් ලියන ලද වැඩසටහනක් විසුරුවා හැරීමට සිදු වූ විට, එය යම් ආකාරයක අවුල් සහගත බවක් මිස කේතයක් නොවේ. අනවශ්‍ය චලනයන් සහ මෙහෙයුම් වල භයානක ප්‍රමාණයක්, එහි ප්‍රතිඵලයක් ලෙස සැලකිය යුතු කේතයක් සහ මන්දගාමී ක්‍රියාකාරිත්වයක් ඇති විය. කෙසේ වෙතත්, සමහර විට මුල් ස්ථිරාංග ලියූ පුද්ගලයාගේ DNA වල දෝෂයක් ඇති විය හැකිය. අනික එයාට සල්ලි ඕන. IAR තරම් නොවේ, නමුත් සැලකිය හැකිය. සහ demo මාදිලියේ එය ඔබට 2kb ට වඩා වැඩි කේතයක් ලිවීමට ඉඩ නොදේ.
ඇත්ත වශයෙන්ම ඉරිතැලීමක් ඇත, නමුත් ඔබ සොරකම් කිරීමට යන්නේ නම්, එය IAR අර්ථයෙන් මිලියනයකි :)

ද ඇත රූප ශිල්පය AVR Cසහ මයික්‍රෝ සී microelectronics වලින්. මට එකක්වත් භාවිතා කිරීමට සිදු නොවීය, නමුත් එස්.ඩබ්ලිව්.ජී.ඉතා ප්රශංසා කරයි මයික්රොපැස්කල්, ඔවුන් පවසන්නේ, ඉතා පහසු වැඩසටහන් පරිසරයක් සහ පුස්තකාල. මම හිතන්නේ MicroC නරක නොවනු ඇත, නමුත් එය ද ගෙවනු ලැබේ.

මම කී පරිදි, මම තෝරා ගත්තා WinAVRහේතු තුනක් සඳහා: එය නොමිලේ, එය AVR ස්ටූඩියෝවට ඒකාබද්ධ වන අතර සියලු අවස්ථාවන් සඳහා ලියා ඇති සූදානම් කළ කේතය ටොන් ගණනක් ඇත.

එබැවින් AVR Studio සමඟ WinAVR ස්ථාපනය බාගන්න. ඊළඟට, ස්ටුඩියෝව මුලින්ම ස්ථාපනය කර ඇත, පසුව WinAVR ඉහළට රෝල් කර ප්ලගිනයක ආකාරයෙන් චිත්රාගාරයට අමුණා ඇත. WinAVR කෙටි මාර්ගයක් මත ස්ථාපනය කිරීම මම තරයේ නිර්දේශ කරමි, C:\WinAVR වැනි දෙයක්, මේ ආකාරයෙන් ඔබට මාර්ග සමඟ ඇති ගැටළු බොහොමයක් මග හැරෙනු ඇත.

ව්යාපෘතියක් නිර්මාණය කිරීම
එබැවින්, චිත්රාගාරය ස්ථාපනය කර ඇත, C ඉස්කුරුප්පු කර ඇත, යමක් වැඩසටහන් කිරීමට උත්සාහ කිරීමට කාලයයි. අපි සරලම, සරලම දේ සමඟ ආරම්භ කරමු. චිත්‍රාගාරය දියත් කරන්න, එහි AVR GCC සම්පාදකය ලෙස නව ව්‍යාපෘතියක් තෝරා ව්‍යාපෘතියේ නම ඇතුළත් කරන්න.

හිස් *.c ගොනුවක් සමඟ වැඩ ක්ෂේත්‍රයක් විවෘත වේ.

දැන් චිත්‍රාගාර පිටු සලකුණු වල මාර්ග ප්‍රදර්ශනය වින්‍යාස කිරීම හානියක් නොවේ. මෙය සිදු කිරීම සඳහා, යන්න:
මෙනු මෙවලම් - විකල්ප - සාමාන්‍ය - ගොනු ටැබ් සහ පතන ලැයිස්තුවෙන් "ගොනු නාමය පමණි" තෝරන්න. එසේ නොමැතිනම්, එය වැඩ කිරීමට නොහැකි වනු ඇත - ටැබය ගොනුවේ සම්පූර්ණ මාර්ගය අඩංගු වන අතර තිරය මත ටැබ් දෙකක් හෝ තුනකට වඩා වැඩි නොවේ.

ව්යාපෘති සැකසුම
පොදුවේ ගත් කල, සියලු පරායත්තතා විස්තර කර ඇති Make ගොනුවක් සෑදීම සම්භාව්ය ලෙස සැලකේ. ඒ වගේම ඒක හරි වෙන්න ඇති. නමුත් මට නම්, වැනි සම්පුර්ණයෙන්ම ඒකාබද්ධ වූ IDE සමඟ හැදී වැඩුණු uVisionහෝ AVR චිත්‍රාගාරයමෙම ප්රවේශය ගැඹුරින් ආගන්තුක ය. එබැවින්, මම එය මගේ ආකාරයෙන් කරන්නෙමි, සෑම දෙයක්ම ස්ටුඩියෝ භාවිතා කරයි.

ගියර් එකෙන් බොත්තම ඔබන්න.


මේවා ඔබේ ව්‍යාපෘති සැකසීම්, සහ වඩාත් නිවැරදි සැකසුම් Makefile ස්වයංක්‍රීයව උත්පාදනය කිරීම. පළමු පිටුවේ ඔබ ඔබේ MK ක්‍රියාත්මක වන සංඛ්‍යාතය ඇතුළත් කළ යුතුය. මෙය ෆියුස් බිටු මත රඳා පවතී, එබැවින් අපගේ සංඛ්යාතය 8000000Hz යැයි අපි උපකල්පනය කරමු.
ප්‍රශස්තිකරණ රේඛාව කෙරෙහි ද අවධානය යොමු කරන්න. දැන් තියෙන්නේ -Os - මේක තමයි size optimization. එය දැනට පවතින පරිදි තබන්න, එවිට ඔබට මෙම පරාමිතිය සමඟ සෙල්ලම් කිරීමට උත්සාහ කළ හැකිය. -O0 කිසිසේත්ම ප්‍රශස්තකරණයක් නොවේ.

ඊළඟ පියවර වන්නේ මාර්ග සැකසීමයි. පළමුවෙන්ම, ඔබේ ව්‍යාපෘති නාමාවලිය එහි එක් කරන්න - ඔබ එහි තෙවන පාර්ශවීය පුස්තකාල එකතු කරනු ඇත. ".\" මාර්ගය ලැයිස්තුවේ දිස්වනු ඇත.

Make ගොනුව උත්පාදනය කර ඇත, ඔබට එය ඔබගේ ව්‍යාපෘතියේ පෙරනිමි ෆෝල්ඩරය තුලින් බැලිය හැක, බලන්න සහ එහි ඇති දේ බලන්න.


දැනට එච්චරයි. සෑම තැනකම OK ක්ලික් කර මූලාශ්‍රය වෙත යන්න.

ගැටලුව සකස් කිරීම
ඩයෝඩයක සාමාන්‍ය දැල්වීම තවදුරටත් ක්‍රියා නොකරන බැවින් හිස් කඩදාසි පත්‍රයක් කිසියම් කපටි අදහසක් ක්‍රියාත්මක කිරීමට පෙළඹේ. අපි වහාම ගොනා අං වලින් ගෙන පරිගණකය සමඟ සම්බන්ධතාවය ක්‍රියාත්මක කරමු - මෙය මම කරන පළමු දෙයයි.

එය මේ ආකාරයට ක්‍රියා කරනු ඇත:
එකක් (කේතය 0x31) COM වරායට පැමිණි විට, අපි ඩයෝඩය සක්‍රිය කරන්නෙමු, ශුන්‍යයක් පැමිණි විට (කේතය 0x30) එය ක්‍රියා විරහිත වේ. එපමණක් නොව, සෑම දෙයක්ම බාධා කිරීම් මත සිදු කරනු ලබන අතර, පසුබිම් කාර්යය වන්නේ වෙනත් ඩයෝඩයක් දැල්වීමයි. සරල හා අර්ථවත්.

පරිපථය එකලස් කිරීම
අපි USB-USART පරිවර්තක මොඩියුලය ක්ෂුද්‍ර පාලකයේ USART pins වෙත සම්බන්ධ කළ යුතුය. මෙය සිදු කිරීම සඳහා, වයර් දෙකකින් ජම්පර් එකක් ගෙන එය හරස් අතට පයින් මත තබන්න. එනම්, අපි පාලකයේ Rx පරිවර්තකයේ Tx වෙත සම්බන්ධ කරමු, සහ පරිවර්තකයේ Tx පාලකයේ Rx වෙත සම්බන්ධ කරමු.

අවසානයේ රූප සටහන මෙසේය.


මම ඉතිරි අල්ෙපෙනති සම්බන්ධ කිරීම, බලය, හෝ යළි පිහිටුවීම සලකා බලන්නේ නැහැ, එය සම්මත වේ.

ලිවීමේ කේතය

මම සී භාෂාවේ විස්තරය ගැන විශේෂයෙන් සොයා නොබලන බව වහාම වෙන්කරවා ගැනීමට මට ඉඩ දෙන්න. මේ සඳහා සම්භාව්‍ය “C ක්‍රමලේඛන භාෂාව” සිට K&R සිට විවිධ අත්පොත් දක්වා විශාල ද්‍රව්‍ය ප්‍රමාණයක් ඇත.

මගේ ගබඩාවේ එවැනි ක්‍රමයක් මට හමු විය; මම වරක් මෙම භාෂාව හැදෑරීමට එය භාවිතා කළෙමි. එහි ඇති සෑම දෙයක්ම කෙටි, පැහැදිලි සහ කරුණකි. මම එය ක්රමයෙන් එකට එකතු කර මගේ වෙබ් අඩවියට ඇද දමමි.

සියලුම පරිච්ඡේද තවමත් මාරු කර නැති බව ඇත්ත, නමුත් මම හිතන්නේ එය වැඩි කාලයක් නොවේ.

මට එය වඩා හොඳින් විස්තර කළ හැකි යැයි සිතිය නොහැක, එබැවින් පුහුණු පා course මාලාවෙන්, සියුම් කරුණු පිළිබඳ සවිස්තරාත්මක පැහැදිලි කිරීමක් වෙනුවට, මම මෙම අත්පොතේ තනි පිටු වෙත සෘජු සබැඳි ලබා දෙන්නෙමි.

පුස්තකාල එකතු කිරීම.
පළමුවෙන්ම, අපි අර්ථ දැක්වීම් සමඟ අවශ්ය පුස්තකාල සහ ශීර්ෂ එකතු කරමු. සියල්ලට පසු, C යනු විශ්වීය භාෂාවක් වන අතර අපි AVR සමඟ විශේෂයෙන් වැඩ කරන බව ඔහුට පැහැදිලි කළ යුතුය, එබැවින් මූල කේතයේ රේඛාව ලියන්න:

1 #ඇතුළත්

#ඇතුළත්

මෙම ගොනුව ෆෝල්ඩරයේ පිහිටා ඇත WinAVRසහ එය පාලකයේ සියලුම රෙජිස්ටර් සහ වරායන් පිළිබඳ විස්තරයක් අඩංගු වේ. එපමනක් නොව, එහි සෑම දෙයක්ම කපටි, නිශ්චිත පාලකයකට බන්ධනය වන අතර, එය සම්පාදකය මගින් සම්ප්‍රේෂණය වේ. හදන්නපරාමිතිය තුළ ගොනුව MCUසහ මෙම විචල්‍යය මත පදනම්ව, මෙම විශේෂිත පාලකය සඳහා වන සියලුම වරායන් සහ රෙජිස්ටර් වල ලිපිනයන් පිළිබඳ විස්තරයක් සහිත ශීර්ෂ ගොනුවක් ඔබගේ ව්‍යාපෘතියට සම්බන්ධ කර ඇත. වාව්! එය නොමැතිව, එය ද හැකි ය, නමුත් එවිට ඔබට SREG හෝ UDR වැනි සංකේතාත්මක ලියාපදිංචි නාම භාවිතා කිරීමට නොහැකි වනු ඇති අතර ඔබට හිසරදයක් වනු ඇති "0xC1" වැනි එක් එක් ලිපිනය මතක තබා ගත යුතුය.

කණ්ඩායමම #ඇතුළත්<имя файла> ඔබේ ව්‍යාපෘතියට ඕනෑම ආකාරයක අන්තර්ගතයක් එක් කිරීමට ඔබට ඉඩ සලසයි පෙළ ගොනුව, උදාහරණයක් ලෙස, කාර්යයන් පිළිබඳ විස්තරයක් හෝ වෙනත් කේතයක් සහිත ගොනුවක්. විධානයට මෙම ගොනුව සොයාගත හැකි වන පරිදි, අපි අපගේ ව්‍යාපෘතියට යන මාර්ගය සඳහන් කළෙමු (WinAVR නාමාවලිය පෙරනිමියෙන් එහි ලියාපදිංචි කර ඇත).

ප්රධාන කාර්යය.
C වැඩසටහනක් සම්පුර්ණයෙන්ම කාර්යයන් වලින් සමන්විත වේ. ඔවුන් කූඩු කළ හැකි අතර ඕනෑම අනුපිළිවෙලකින් එකිනෙකාගෙන් කැඳවනු ලැබේ විවිධ ක්රම. සෑම කාර්යයකටම අවශ්‍ය පරාමිති තුනක් ඇත:

  • ආපසු ලැබෙන අගය උදා. sin(x) x හි සයින් අගය ආපසු ලබා දෙයි. ගණිතයේ වගේ, කෙටියෙන්.
  • සම්ප්රේෂණය කරන ලද පරාමිතීන් එකම X වේ.
  • ක්රියාකාරී ශරීරය.

සම්ප්‍රේෂණය කරන ලද සහ ආපසු ලබා දෙන සියලුම අගයන් දත්ත මත පදනම්ව යම් ආකාරයක විය යුතුය.

ඕනෑම C වැඩසටහනක් ශ්‍රිතයක් අඩංගු විය යුතුය ප්රධානප්‍රධාන වැඩසටහනට ඇතුල් වීමේ ස්ථානයක් ලෙස, එසේ නොමැතිනම් එය කිසිසේත් C නොවේ :). ගොනු මිලියනයකින් වෙනත් කෙනෙකුගේ ප්‍රභව කේතයේ ප්‍රධාන තිබීමෙන්, සෑම දෙයක්ම ආරම්භ වන වැඩසටහනේ ප්‍රධාන කොටස මෙය බව ඔබට තේරුම් ගත හැකිය. එබැවින් අපි මෙසේ අසමු.

1 2 3 4 5 int main(void) (ආපසු 0 ;)

int main(void) ( return 0; )

ඒක තමයි, මුලින්ම සරලම වැඩසටහනලියා ඇත, එය කිසිවක් නොකරන බව කමක් නැත, අපි දැන් ආරම්භ කර ඇත.

අපි මොනවද කළේ කියලා බලමු.
intප්‍රධාන කාර්යය ආපසු ලබා දෙන දත්ත වර්ගය මෙයයි.

ඇත්ත වශයෙන්ම, ක්ෂුද්ර පාලකයක ප්රධානප්‍රතිපත්තිමය වශයෙන් කිසිවක් ආපසු ලබා දිය නොහැකි අතර න්‍යායාත්මකව තිබිය යුතුය හිස් ප්රධාන (ශුන්ය), නමුත් GCC මුලින් නිර්මාණය කර ඇත්තේ PC සඳහා වන අතර එහිදී වැඩසටහනට අගය ආපසු ලබා දිය හැක මෙහෙයුම් පද්ධතියඅවසන් වූ පසු. එබැවින් GCC මත හිස් ප්රධාන (ශුන්ය)අවවාදයෙන් දිවුරනවා.

මෙය දෝෂයක් නොවේ, එය වැඩ කරනු ඇත, නමුත් මම අනතුරු ඇඟවීම් වලට කැමති නැත.

හිස්මෙම අවස්ථාවෙහිදී අපි ශ්‍රිතයට යවන දත්ත වර්ගය මෙයයි ප්රධානඒ නිසා පිටතින් එන කිසිවක් පිළිගත නොහැක හිස්- ව්යාජ එකක්. කිසිවක් සම්ප්‍රේෂණය කිරීමට හෝ ආපසු යැවීමට අවශ්‍ය නොවන විට stub එකක් භාවිතා වේ.

මෙන්න ඒගොල්ලො { } curly braces යනු ක්‍රමලේඛ වාරණයකි, මෙම අවස්ථාවෙහිදී ශ්‍රිතයක ශරීරය වේ ප්රධාන, කේතය එහි පිහිටා ඇත.

ආපසු- මෙය ප්‍රධාන ශ්‍රිතය අවසන් වූ පසු ලැබෙන ප්‍රතිලාභ අගයයි, මන්ද අපට int, එනම් සංඛ්‍යාවක් ඇති බැවින්, අපි අංකයක් ආපසු ලබා දිය යුතුය. මෙය තවමත් තේරුමක් නැති වුවද, මන්ද ... ක්ෂුද්‍ර පාලකය මත, අපට ප්‍රධාන සිට කොතැනකටවත් යා නොහැක. මම ශුන්‍ය ආපසු දෙනවා. කමක් නැති නිසා. නමුත් සම්පාදකය සාමාන්‍යයෙන් ස්මාර්ට් වන අතර මෙම නඩුව සඳහා කේතය උත්පාදනය නොකරයි.
කෙසේ වෙතත්, විකෘති නම්, සිට ප්රධානඔබට MK වෙත යා හැකිය - උදාහරණයක් ලෙස, ඇරඹුම් කාරක කොටසට වැටී එය ක්‍රියාත්මක කරන්න, නමුත් මෙය සංක්‍රාන්ති ලිපින නිවැරදි කිරීම සඳහා ස්ථිරාංග සමඟ පහත් මට්ටමේ ටින්කර් කිරීම අවශ්‍ය වේ. පහත ඔබ ඔබම දකින අතර එය කරන්නේ කෙසේද යන්න තේරුම් ගන්න. කුමක් සඳහා ද? මෙය තවත් ප්‍රශ්නයකි, 99.999% අවස්ථා වලදී මෙය අවශ්‍ය නොවේ :)

අපි ඒක කරලා ඉදිරියට ගියා. විචල්‍යයක් එකතු කරමු, අපට එය අවශ්‍ය නැත, එය නොමැතිව විචල්‍ය හඳුන්වා දීමෙන් පලක් නැත, නමුත් අපි ඉගෙන ගනිමු. ශ්‍රිතයක ශරීරය තුළ විචල්‍ය එකතු කළහොත් ඒවා දේශීය වන අතර පවතිනුයේ මෙම ශ්‍රිතයේ පමණි. ඔබ කාර්යයෙන් පිටවන විට, මෙම විචල්යයන් මකා දමනු ලබන අතර, RAM මතකය වඩාත් වැදගත් අවශ්යතා සඳහා වෙන් කරනු ලැබේ. .

1 2 3 4 5 6 int main(void) (අත්සන් නොකළ char i; ආපසු 0 ;)

int main(void) (අත්සන් නොකළ char i; return 0; )

අත්සන් නොකළයන්නෙන් අදහස් වන්නේ අත්සන් නොකළ බවයි. කාරණය නම්, ද්විමය නිරූපණයේදී, ලකුණට වඩාත්ම සැලකිය යුතු බිට් වෙන් කර ඇති අතර, එයින් අදහස් වන්නේ +127/-128 අංකය එක් බයිටයකට (චාල්) ගැලපෙන බවයි, නමුත් ලකුණ ඉවත දැමුවහොත් එය 0 සිට 0 දක්වා ගැලපේ. 255. සාමාන්යයෙන් ලකුණ අවශ්ය නොවේ. ඒ නිසා අත්සන් නොකළ.
මමයනු විචල්‍ය නාමයක් පමණි. තවත් බැහැ.

දැන් අපි වරායන් ආරම්භ කළ යුතුයි සහ UART. ඇත්ත වශයෙන්ම, ඔබට පුස්තකාලය රැගෙන සම්බන්ධ කර UartInit (9600) වර්ගයක් අමතන්න; නමුත් එවිට ඇත්තටම සිදුවූයේ කුමක්දැයි ඔබ නොදනී.

අපි මෙය කරන්නේ:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 int main(void ) ( අත්සන් නොකළ char i; # define XTAL 8000000L # define baudrate 9600L #bauddivider නිර්වචනය කරන්න (XTAL/(16*baudrate)-1)#define HI(x) ((x)>>8) #define LO(x) ((x)& 0xFF) UBRRL = LO(bauddivider) ; UBRRH = HI(bauddivider) ; UCSRA = 0 ; UCSRB = 1<< RXEN| 1 << TXEN| 1 << RXCIE| 0 << TXCIE; UCSRC = 1 << URSEL| 1 << UCSZ0| 1 << UCSZ1; }

int main(void) (අත්සන් නොකළ char i; #define XTAL 8000000L #define baudrate 9600L #define bauddivider (XTAL/(16*baudrate)-1) #define HI(x) ((x)>>8) #LO(define x) ((x)& 0xFF) UBRRL = LO(bauddivider); UBRRH = HI(bauddivider); UCSRA = 0; UCSRB = 1<

භයංකාර? ඇත්ත වශයෙන්ම, සැබෑ කේතයේ අවසාන පේළි පහක් පමණි. හැම දෙයක්ම, ඒ #නිර්වචනය කරන්නඑය පූර්ව සැකසුම් මැක්‍රෝ භාෂාවකි. Assemble වල තිබෙන දේවල්ම පාහේ, නමුත් වාක්‍ය ඛණ්ඩය තරමක් වෙනස්.

අවශ්‍ය සංගුණක ගණනය කිරීමේ ඔබේ සාමාන්‍ය මෙහෙයුම් සඳහා ඔවුන් පහසුකම් සපයනු ඇත. පළමු පේළියේ අපි ඒ වෙනුවට කියනවා XTALඔබට ආරක්ෂිතව 8000000 ආදේශ කළ හැකිය, සහ එල්- ප්‍රොසෙසරයේ ඔරලෝසු සංඛ්‍යාතය දිගු යැයි පවසමින් වර්ගය පිළිබඳ ඇඟවීම. ඒකමයි බෝඩ්රේට්- UART හරහා දත්ත සම්ප්රේෂණය කිරීමේ වාර ගණන.

bauddividerදැනටමත් වඩාත් සංකීර්ණයි, ඒ වෙනුවට පෙර සූත්‍රය භාවිතා කර ගණනය කරන ලද ප්‍රකාශනය ආදේශ කරනු ලැබේ.
හොඳයි හා එල්.ඕ.සහ HIඅඩු සහ ඉහළ බයිට් මෙම ප්‍රතිඵලයෙන් ගනු ලැබේ, මන්ද එය පැහැදිලිවම එක් බයිටයකට නොගැලපේ. තුල HI X (සාර්ව ආදාන පරාමිතිය) අට වතාවක් දකුණට මාරු කරනු ලැබේ, එහි ප්‍රතිඵලයක් ලෙස වඩාත් වැදගත් බයිටය පමණක් ඉතිරි වේ. සහ තුළ එල්.ඕ.අපි ටිකක් කරන්නෙමු 00FF අංකය සමඟ, එහි ප්‍රතිඵලයක් ලෙස අඩු බයිටයක් පමණක් ඉතිරි වනු ඇත.

ඉතින් කරපු හැම දෙයක්ම වගේ #නිර්වචනය කරන්නඔබට එය ආරක්ෂිතව ඉවත දැමිය හැකි අතර, කැල්කියුලේටරයක අවශ්‍ය සංඛ්‍යා ගණනය කර වහාම ඒවා UBBRL = .... යන රේඛාවලට ඇතුළත් කරන්න. සහ UBBRH =.....

පුළුවන්. එහෙත්! මේක කරන්න කිසිසේත්ම කළ නොහැක්කකි!

එය මේ ආකාරයෙන් හෝ ඒ ආකාරයෙන් ක්රියා කරනු ඇත, නමුත් ඔබට ඊනියා ඇත මැජික් අංක- කොතැනක හෝ නොදන්නා හේතූන් මත ලබාගත් අගයන්, ඔබ වසර කිහිපයකින් එවැනි ව්‍යාපෘතියක් විවෘත කළහොත්, මෙම අගයන් මොනවාදැයි වටහා ගැනීම ඉතා අපහසු වනු ඇත. දැන් පවා, ඔබට වේගය වෙනස් කිරීමට හෝ ක්වාර්ට්ස් සංඛ්‍යාතය වෙනස් කිරීමට අවශ්‍ය නම්, සියල්ල නැවත ගණනය කිරීමට සිදුවනු ඇත, නමුත් ඔබ කේතයේ අංක කිහිපයක් වෙනස් කර එය එයයි. සාමාන්‍යයෙන්, ඔබට කේත කරන්නෙකු ලෙස හංවඩු ගැසීමට අවශ්‍ය නැතිනම්, ඔබේ කේතය කියවීමට පහසු වන පරිදි, තේරුම් ගත හැකි සහ වෙනස් කිරීමට පහසු වන පරිදි සාදන්න.

එවිට සියල්ල සරල ය:
මෙම සියලුම "UBRRL සහ Co" UART සම්ප්‍රේෂකයේ වින්‍යාස ලේඛන වන අතර එමඟින් අපි ලෝකය සමඟ සන්නිවේදනය කරමු. දැන් අපි ඔවුන්ට අවශ්‍ය අගයන් පවරා ඇති අතර ඒවා අවශ්‍ය වේගය සහ ප්‍රකාරයට සකසා ඇත.

පටිගත කිරීමේ වර්ගය 1<පහත සඳහන් දේ අදහස් වේ: 1 ගෙන එය ස්ථානයේ තබන්න RXENබයිට් වලින්. RXENමේක තමයි රෙජිස්ටර් එකේ 4 වෙනි බිට් එක UCSRB, ඒ නිසා 1<ද්විමය අංකය 00010000 සාදයි, TXEN- මෙය 3 වන බිට්, සහ 1< 00001000 ලබා දෙනු ඇත. තනි "|" එය තරමක් ය හෝ, එසේ 00010000 | 00001000 = 00011000. එලෙසම, ඉතිරි අවශ්‍ය වින්‍යාස බිටු සකසා සාමාන්‍ය ගොඩට එකතු කරයි. ප්රතිඵලයක් වශයෙන්, එකතු කරන ලද සංඛ්යාව UCSRB හි සටහන් වේ. USART කොටසේ MK හි දත්ත පත්‍රිකාවේ වැඩි විස්තර විස්තර කර ඇත. ඒ නිසා අපි තාක්ෂණික විස්තර වලින් අවධානය වෙනතකට යොමු නොකරමු.

ඉවරයි, මොකද වුණේ කියලා බලන්න වෙලාව. සම්පාදනය මත ක්ලික් කර අනුකරණය ආරම්භ කරන්න (Ctrl+F7).

නිදොස් කිරීම
සියලුම ආකාරයේ ප්‍රගති තීරු හරහා දිව ගිය අතර, චිත්‍රාගාරය වෙනස් වූ අතර ප්‍රධාන කාර්යයට පිවිසෙන දොරටුව අසල කහ ඊතලයක් දිස් විය. මෙහි ප්‍රොසෙසරය දැනට ක්‍රියාත්මක වන අතර අනුකරණය විරාම කර ඇත.

කාරණය නම්, මුලදී, එය UBRRL = LO (bauddivider) රේඛාවේ විය; සියල්ලට පසු, අපට අර්ථ දක්වා ඇත්තේ කේතය නොවේ, නමුත් සරලව මූලික ගණනය කිරීම්, සිමියුලේටරය ටිකක් අඳුරු වන්නේ එබැවිනි. නමුත් දැන් ඔහුට වැටහුණා, පළමු උපදෙස අවසන් වී ඇති අතර ඔබ ගසට නැග්ගේ නම් I/O දසුන, USART කොටස වෙත ගොස් එහි ඇති UBBRL බයිටය දෙස බලන්න, අගය දැනටමත් පවතින බව ඔබට පෙනෙනු ඇත! 0x33.

තවත් පියවරක් ඉදිරියට ගෙන යන්න. අනෙක් ලේඛනයේ අන්තර්ගතය වෙනස් වන ආකාරය බලන්න. එබැවින් ඒවා සියල්ලම හරහා යන්න, මා ඔබට පැවසූ පරිදි සියලුම දක්වා ඇති බිටු සකසා ඇති අතර ඒවා සම්පූර්ණ බයිටය සඳහාම එකවර සකසා ඇති බවට අවධානය යොමු කරන්න. එය ආපසු පැමිණීමෙන් එහාට යන්නේ නැත - වැඩසටහන අවසන්.

විවෘත
දැන් simulation ශුන්‍යයට නැවත සකසන්න. එහි ක්ලික් කරන්න යළි පිහිටුවන්න (Shift+F5). විසුරුවා හරින ලද ලැයිස්තුව විවෘත කරන්න, දැන් ඔබට පාලකයේ සිදුවන්නේ කුමක්දැයි පෙනෙනු ඇත. බලන්න -> Disassembler. YYAAAAAA නොවේ!!! එකලස් කරන්නා!!! බිහිසුණු!!! සහ එය අවශ්ය වේ. ඒ නිසා පසුව, යම් දෙයක් වැරදී ගිය විට, ඔබ කේතය තුළ මෝඩ නොවී, සංසදවල කොර ප්රශ්න අසන්න එපා, නමුත් වහාම බඩට ගොස් ඔබ සිරවී සිටින්නේ කොතැනදැයි බලන්න. එහි බියජනක කිසිවක් නැත.

මුලින්ම මාලාවේ මුදුන් වනු ඇත:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 +00000000: 940C002A JMP 0x0000002A පැනීම +00000002: 940C0034 JMP 0x00000034 පැනීම +00000004: 940C0034 JMP 0x0000000: 940C0034 JMP 0x000000 MP 0x00000034 Jump +00000008: 940C0034 JMP 0x00000034 Jump +0000000A: 940C0034 JMP 0x00000034 පැනීම +0000000C: 3000000C: 940 JMPC0000000 + 0000000E: 940C0034 JMP 0x00000034 පැනීම +00000010: 940C0034 JMP 0x00000034 පැනීම +00000012: 940C0034 JMP 0x040004003040 J MP 0x00000034 Jump +00000016: 940C0034 JMP 0x00000034 Jump +00000018: 940C0034 JMP 0x00000034 Jump +0000001A: 3000001A: 3000001A: 940 JMP0000000 +000000 1C : 940C0034 JMP 0x00000034 Jump +0000001E: 940C0034 JMP 0x00000034 Jump +00000020: 940C0034 JMP 0x04000: 940C0034 JMP 0x040004 JMP 0x0000 0034 පැනීම +00000024: 940C0034 JMP 0x00000034 පැනීම +00000026: 940C0034 JMP 0x00000034 පනින්න +00000028: 340 JMPC30 පනින්න

00000000: 940C002A JMP 0x0000002A පැනීම +00000002: 940C0034 JMP 0x00000034 පැනීම +00000004: 940C0034 JMP 0x0000004: 940C0034 JMP 0x0000000 MP 0x00000034 Jump +00000008: 940C0034 JMP 0x00000034 Jump +0000000A: 940C0034 JMP 0x00000034 පැනීම +0000000C: 3000000C: 300 JMPC00000000 000000 0E : 940C0034 JMP 0x00000034 Jump +00000010: 940C0034 JMP 0x00000034 Jump +00000012: 940C0034 JMP 000000012: 940C0034 JMP 00004004040 JMP 0x0000 0034 Jump +00000016: 940C0034 JMP 0x00000034 Jump +00000018: 940C0034 JMP 0x00000034 පැනීම +0000001A: 3000001A: 3000001A: 94000001A: 940C0034 JMP +0000001C: 940C0034 JMP 0x00000034 පැනීම +0000001E: 940C0034 JMP 0x00000034 පැනීම +00000020: 940C0034 JMP 0x00000020: 940C0034 JMP 0x0000002 MP 0x000000 34 පැනීම +00000024: 940C0034 JMP 0x00000034 පැනීම +00000026: 940C0034 JMP 0x00000034 පනින්න +00000028: 30000028: 30000020 940

මෙය බාධා දෛශික වගුවයි. අපි පසුව එය වෙත ආපසු යන්නෙමු, නමුත් දැනට එය පවතින බව බලා මතක තබා ගන්න. පළමු තීරුව යනු විධානය පවතින ෆ්ලෑෂ් සෛලයේ ලිපිනයයි, දෙවැන්න විධාන කේතයයි, තෙවනුව විධාන සිහිවටනයයි, එකම එකලස් කිරීමේ උපදෙස්, තෙවනුව විධානයේ මෙහෙයුම් වේ. හොඳයි, ස්වයංක්‍රීය අදහස් දැක්වීම.
ඉතින්, ඔබ බැලුවහොත්, අඛණ්ඩ සංක්රමණයන් පවතී. JMP විධාන කේතය බයිට් හතරකි, එහි පිටුපසට ලියා ඇති පැනීමේ ලිපිනය අඩංගු වේ - පහත් ලිපිනයේ අඩු බයිටය සහ ජම්ප් විධාන කේතය 940C

0000002B: BE1F OUT 0x3F,R1 I/O ස්ථානයට පිටතට

0x3F ලිපිනයෙන් මෙම බිංදුව සටහන් කිරීම.ඔබ I/O view තීරුව දෙස බැලුවහොත්, ඔබට පෙනෙනු ඇත 0x3F ලිපිනය SREG ලේඛනයේ - පාලකයේ ධජ ලේඛනයේ ලිපිනය බව. එම. ශුන්‍ය කොන්දේසි මත වැඩසටහන ක්‍රියාත්මක කිරීමට අපි SREG නැවත සකසන්නෙමු.

1 2 3 4 +0000002C: E5CF LDI R28,0x5F වහාම පූරණය කරන්න +0000002D: E0D4 LDI R29,0x04 වහාම පූරණය කරන්න +0000002E: BFDE OUT 0x3E,R29 I/O ස්ථානයට පිටතට +0000002F වෙත +00000002F ස්ථානයට

0000002C: E5CF LDI R28,0x5F වහාම පූරණය කරන්න +0000002D: E0D4 LDI R29,0x04 වහාම පූරණය කරන්න +0000002E: BFDE OUT 0x3E,R29 I/O ස්ථානයට +0000002F වෙත පිටතට +0000002F: B8OFCD සිට OUTR0002 ස්ථානයට

මෙය ස්ටැක් පොයින්ටරය පූරණය කරයි. ඔබට සෘජුවම I/O රෙජිස්ටර් වෙත පැටවිය නොහැක, අතරමැදි ලේඛනයක් හරහා පමණි. එමනිසා, පළමුව LDI අතරමැදි, පසුව එතැන් සිට I/O දක්වා. මම ඔබට පසුව තොගය ගැන වැඩි විස්තර කියන්නම්. දැනට, මෙය RAM එක අවසානයේ එල්ලෙන ගතික මතක ප්‍රදේශයක් බවත් ලිපින සහ අතරමැදි විචල්‍ය ගබඩා කරන බවත් දැනගන්න. දැන් අපි අපේ තොගය ආරම්භ වන්නේ කොතැනින්ද යන්න පෙන්වා දී ඇත.

00000032: 940C0041 JMP 0x00000041 පැනීම

වැඩසටහනේ අවසානයට පනින්න, එහිදී අපට බාධා කිරීම් සහ එහිම තදින් ලූප් කිරීම තහනම් කර ඇත:

1 2 +00000041: 94F8 CLI Global Interrupt Disable +00000042: CFFF RJMP PC-0x0000 සාපේක්ෂ පැනීම

00000041: 94F8 CLI Global Interrupt Disable +00000042: CFFF RJMP PC-0x0000 සාපේක්ෂ පැනීම

මෙය ප්‍රධාන කාර්යයෙන් පිටවීම වැනි අනපේක්ෂිත අවස්ථාවන්හිදී ය. පාලකය එවැනි ලූපයකින් පිටතට ගෙන යා හැක්කේ දෘඪාංග යළි පිහිටුවීමකින් හෝ, බොහෝ විට, මුරකරුගෙන් යළි පිහිටුවීමෙනි. හොඳයි, නැත්නම්, මම ඉහත කී පරිදි, හෙක්ස් සංස්කාරකයේ මෙය නිවැරදි කර අපගේ හදවත කැමති ඕනෑම තැනකට යන්න. සංක්‍රාන්ති වර්ග දෙකක් ඇති බව සලකන්න: JMP සහ RJMP; පළමුවැන්න ලිපිනයකට සෘජු සංක්‍රමණයකි. එය බයිට් හතරක් අල්ලා ගන්නා අතර සම්පූර්ණ මතක ප්‍රදේශය හරහා කෙලින්ම පැනිය හැක. දෙවන වර්ගයේ සංක්රමණය RJMP - සාපේක්ෂ වේ. ඔහුගේ විධානය බයිට් දෙකක් ගනී, නමුත් ඔහු වත්මන් ස්ථානයේ සිට (ලිපිනය) පියවර 1024 ක් ඉදිරියට හෝ පසුපසට ගමන් කරයි. එහි පරාමිතීන් වත්මන් ලක්ෂ්‍යයෙන් ඕෆ්සෙට් පෙන්නුම් කරයි. එය බොහෝ විට භාවිතා වන නිසා ෆ්ලෂ් එකකින් අඩක් ඉඩක් ගනී, දිගු සංක්‍රාන්ති කලාතුරකින් අවශ්‍ය වේ.

1 +00000034: 940C0000 JMP 0x00000000 පැනීම

00000034: 940C0000 JMP 0x00000000 පැනීම

තවද මෙය කේතයේ ආරම්භයටම පැනීමකි. ආකාරයේ නැවත ආරම්භ කිරීම. සියලුම දෛශික මෙහි පනින බව ඔබට පරීක්ෂා කළ හැකිය. මෙයින් නිගමනය වන්නේ ඔබ දැන් බාධා කිරීම් සක්‍රීය කරන්නේ නම් (ඒවා පෙරනිමියෙන් අක්‍රිය කර ඇත) සහ ඔබේ බාධාව ඇති නමුත් හසුරුවන්නෙකු නොමැති නම්, මෘදුකාංග යළි පිහිටුවීමක් සිදුවනු ඇත - වැඩසටහන නැවත ආරම්භයට ගෙන යනු ඇත.

ප්රධාන කාර්යය. සෑම දෙයක්ම සමානයි, ඔබ එය විස්තර කිරීමට පවා අවශ්ය නැත. ලේඛනවලට ඇතුළත් කර ඇති දැනටමත් ගණනය කර ඇති අංකය දෙස බලන්න. සම්පාදක ප්‍රොසෙසරය ගල් වේ!!! එබැවින් "මැජික්" සංඛ්යා නැත!

1 2 3 4 5 6 7 8 9 10 11 12 <

00000036: E383 LDI R24,0x33 වහාම පූරණය කරන්න +00000037: B989 OUT 0x09,R24 I/O ස්ථානයට පිටතට 15: UBRRH = HI(bauddivider); +00000038: BC10 OUT 0x20,R1 I/O ස්ථානයට පිටතට 16: UCSRA = 0; +00000039: B81B OUT 0x0B,R1 I/O ස්ථානයට පිටතට 17: UCSRB = 1<

මෙන්න දෝෂය:

1 2 3 +0000003E: E080 LDI R24.0x00 වහාම පූරණය කරන්න +0000003F: E090 LDI R25.0x00 වහාම පූරණය කරන්න +00000040: 9508 RET උපසිරැසි ආපසු

0000003E: E080 LDI R24.0x00 වහාම පූරණය කරන්න +0000003F: E090 LDI R25.0x00 වහාම පූරණය කරන්න +00000040: 9508 RET උපසිරැසි ආපසු

ප්‍රශ්නය නම්, සම්පාදකය එවැනි මුදුන් එකතු කරන්නේ ඇයි? අනික මේක Return 0 ට වඩා වැඩි දෙයක් නෙවෙයි, අපි ශ්‍රිතය int main(void) ලෙස නිර්වචනය කළා, ඒ නිසා අපි තවත් බයිට් හතරක් නිකරුණේ නාස්ති කළා :) තවද ඔබ void main(void) කළහොත් RET පමණක් ඉතිරි වනු ඇත, නමුත් අනතුරු ඇඟවීමක් දිස්වනු ඇත. , අපගේ ප්රධාන කාර්යය කිසිවක් ආපසු නොදෙන බව. පොදුවේ, ඔබ කැමති පරිදි කරන්න :)

දුෂ්කර? පෙනෙන විදිහට නැහැ. Disassembler මාදිලියේ පියවරෙන් පියවර ක්‍රියාත්මක කිරීම ක්ලික් කර ප්‍රොසෙසරය තනි උපදෙස් ක්‍රියාත්මක කරන ආකාරය, රෙජිස්ටර් වලට කුමක් සිදුවේද යන්න බලන්න. විධාන හරහා චලනය සහ අවසාන ලූප සිදු වන්නේ කෙසේද?

දින දෙකකින් ඉදිරියට...

අක්රිය:
ඇලෙක්සි78මම මගේ වෙබ් අඩවිය සහ සංසදය සැරිසැරීමට පහසු කරන Firefox සඳහා ප්ලගිනයක් නිර්මාණය කළෙමි.
සාකච්ඡාව සහ බාගත කිරීම,


නවීන ආධුනික ගුවන් විදුලිය ක්ෂුද්‍ර පාලක නොමැතිව පරිකල්පනය කළ නොහැකි අතර මෙය පැහැදිලිය. මෑත දශකවලදී, විවිධ නිෂ්පාදකයින්ගේ ක්ෂුද්ර පාලකයන් මානව ක්රියාකාරිත්වයේ විවිධ ක්ෂේත්රවල පුළුල් ලෙස පැතිර ඇත. ඒවා බොහෝ විට වඩාත්ම අනපේක්ෂිත උපාංග සහ මෝස්තර වලින් සොයාගත හැකිය. ඔබත් මමත් අප අවට ක්‍රියාවලීන්ගේ පරිගණකකරණය සහ ස්වයංක්‍රීයකරණය දකිනවා. සත්‍යය නම් ක්‍රමලේඛනයේ මූලික කරුණු පිළිබඳ දැනුමක් නොමැතිව නවීන තරඟකාරී උපාංග නිර්මාණය කිරීම පාහේ කළ නොහැක්කක් වී ඇති බවයි.

ඔබ මෙම ලිපිය කියවන්නේ නම්, මයික්‍රොකොන්ට්‍රෝලර් ක්‍රියා කරන ආකාරය තේරුම් ගැනීමට ඔබට ආශාවක් ඇති අතර බොහෝ විට ප්‍රශ්න තිබිය හැකිය:

4. මා අධ්‍යයනය කළ යුතු සාහිත්‍යය කුමක්ද?

මෙම ප්රශ්නවලට පිළිතුරු දීමට උත්සාහ කරමු.

1. රැකියාව සඳහා මා තෝරාගත යුත්තේ කුමන ක්ෂුද්‍ර පාලකයද?

8-bit microcontrollers ගුවන්විදුලි ආධුනිකයන් අතර ඉතා ජනප්රියයි. PICමයික්‍රොචිප් තාක්ෂණය සහ AVR Atmel, 16-bit MSP430 TI වෙතින්, මෙන්ම 32-bit microcontrollers, architectures ARM.

කර්මාන්තයේ දී, තරමක් වෙනස් ලෙස, විශාල ආන්තිකයකින් පළමු ස්ථානය අත්පත් කර ගනී රෙනේසස් ඉලෙක්ට්රොනික්දෙවැන්න මත නිදහස් පරිමාණ, තුන්වෙනිදා සැම්සුන්, එහෙනම් යන්න මයික්රොචිප්සහ ටී.අයි., පසුව ඉතිරි සියල්ල.
ජනප්‍රියත්වය තීරණය වන්නේ මිල සහ ලබා ගැනීමේ හැකියාව අනුව ය; තාක්ෂණික තොරතුරු ලබා ගැනීමේ හැකියාව සහ මෘදුකාංග ආධාරක පිරිවැය සැලකිය යුතු කාර්යභාරයක් ඉටු කරයි.

අපි 8-bit AVR ක්ෂුද්‍ර පාලක, පවුල් අධ්‍යයනය කරන්නෙමු ATMEGA 8 සහ 16 ශ්‍රේණි. තේරීම තීරණය කරන ලද්දේ නැවතත්, ප්රවේශ්යතාව, බොහෝ ආධුනික වර්ධනයන් සහ අධ්යාපනික ද්රව්ය විශාල ප්රමාණයක් තිබීමෙනි. මෙම පවුලෙහි විවිධාකාර වූ අංගෝපාංග සහ ක්‍රියාකාරීත්වය පැවතීම.

2. තෝරාගත් ක්ෂුද්‍ර පාලකය ක්‍රමලේඛනය කිරීමට මා භාවිතා කළ යුත්තේ කුමන සංවර්ධන පරිසරයද?

AVR සඳහා විවිධ ඒකාබද්ධ සංවර්ධන පරිසරයන් (IDE, Integrated Development environment) නිර්මාණය කර ඇත.
IDEමෘදුකාංග සංවර්ධනය සඳහා ක්‍රමලේඛකයින් විසින් භාවිතා කරන මෘදුකාංග පද්ධතියකි, ඒවාට ඇතුළත් වන්නේ:
පෙළ සංස්කාරකය,
සම්පාදක සහ/හෝ පරිවර්තක,
එකලස් කිරීමේ ස්වයංක්‍රීය මෙවලම්,
නිදොස්කරණය

වඩාත් පොදු ඒවා AVRStudio, ATmelStudio, WINAVR, CodeVision, IAR Embedded Workbench.
වැඩසටහන් ලිවීම සඳහා, අපි නොමිලේ භාවිතා කරන්නෙමු IDE ATmelStudio අනුවාදය 6සහ ඉහළ.
ලියාපදිංචි වීමෙන් පසු ඔබට නිල වෙබ් අඩවියෙන් Atmel Studio බාගත කළ හැකිය (ලියාපදිංචිය සම්පූර්ණයෙන්ම නොමිලේ වන අතර ඔබට කිසිවක් කිරීමට බැඳී නැත!)

ATmelStudio ඔබට Assembler සහ SI යන දෙකෙහිම ව්‍යාපෘති නිර්මාණය කිරීමට සහ වැඩසටහන් ලිවීමට ඉඩ සලසයි.

මුලදී, ප්රශ්නය සෑම විටම: ඵලදායී වැඩසටහන් ලිවීම සඳහා මා තෝරාගත යුතු ක්රමලේඛන භාෂාව කුමක්ද?

මගේ පිළිතුර සරලයි: ඔබට අවම වශයෙන් භාෂා දෙකකින් ලිවීමට හැකි විය යුතුය: එකලස් කිරීම සහ SI. ඔබට වේගවත් සහ සංයුක්ත උපස්ථිති සහ මැක්‍රෝ සහ විවිධ උපාංග ධාවක ලිවීමට අවශ්‍ය වූ විට එකලස් කිරීමේ භාෂාව අවශ්‍ය වේ. එහෙත්, ඔබ සංකීර්ණ ඇල්ගොරිතම මත ගොඩනගා ඇති විශාල ව්යාපෘතියක් නිර්මාණය කිරීමට අවශ්ය වූ විට, SI පිළිබඳ දැනුමක් නොමැතිව, විශේෂයෙන් දෝශ නිරාකරණය කිරීමේ ක්රියාවලියේදී බොහෝ කාලයක් වැය කළ හැකි අතර, එය වෙනත් වේදිකාවකට මාරු කිරීමට ආශාවක් තිබේ නම්, උදාහරණයක් ලෙස PIC18 , හෝ STM, එය විසඳිය නොහැකි ගැටලුවක් බවට පත් විය හැක.
මීට අමතරව, දෘඪාංග පරිගණක වේදිකාවන් දැන් දර්ශනය වී ඇත Arduino, වැඩ කිරීමට SI++ භාෂාව පිළිබඳ දැනුමක් අවශ්‍ය වේ.
එබැවින්, අපි එකලස් කරන්නා සහ SI යන දෙකෙහිම වැඩසටහන් ලියන්නෙමු.

පෑස්සුම් යකඩ හෝ බ්‍රෙඩ්බෝඩ් භාවිතා නොකර ඔබේ කාර්යයේ ප්‍රති result ලය පැහැදිලිව දැකීමට, වැඩසටහන ස්ථාපනය කරන්න ප්රෝටියස්.

3. පාලකය ෆ්ලෑෂ් කරන්නේ කෙසේද, සහ ඔවුන් සමඟ පහසු වැඩ සඳහා අවශ්ය අමතර උපාංග සහ උපාංග මොනවාද?

අපි Datagorian භාවිතා කරනවා. ඊට අමතරව, ඔබට වෝල්ට් 5 ක නිමැවුම් වෝල්ටීයතාවයක් සහිත බ්‍රෙඩ්බෝඩ් සහ බල සැපයුමක් මිලදී ගැනීමට අවශ්‍ය වනු ඇත. 5-වෝල්ට් zener diode භාවිතා කිරීමෙන් ඔබට එය අඩු රැලි සහිත බල සැපයුමක් ලෙස භාවිතා කළ හැකිය.
සමහර විට, කාලයත් සමඟ, ඊගෝර් සහ මම දෝශ නිරාකරණ පුවරුවක් එකලස් කිරීම සඳහා ව්යාපෘතියක් යෝජනා කරනු ඇත.

4. මා අධ්‍යයනය කළ යුතු සාහිත්‍යය කුමක්ද?

නමුත්, උදාහරණයක් ලෙස:
එකලස් කිරීමේදී AVR හි ප්‍රායෝගික වැඩසටහන්කරණය. රෙවිච්, 2011
1000 සහ එක් ක්ෂුද්‍ර පාලක පරිපථයක් Vol. 1-2. Ryumik, 2010-2011
AVR MK පොතේ 1-2 ප්‍රායෝගික උපාංග 10 ක්. Kravchenko, 2008-2009
AVR MK භාවිතා කරන උපාංග සංවර්ධකයෙකු සඳහා නිබන්ධනයක්. බෙලෝව්, 2008
MK AVR පවුල් Tiny සහ Atmega. Efstifeev, 2008
CodeVisionAVR. ආරම්භකයින් සඳහා මාර්ගෝපදේශයකි. ලෙබෙදෙව්, 2008
උපාංග, තයිරිස්ටර, රිලේ වල ක්ෂුද්‍ර සකසනය පාලනය කිරීම. බෙලෝව්, 2008
ඇනලොග් අතුරුමුහුණත් MK. ස්ටුවර්ඩ්, බෝල්, 2007
අපි AVR MK මත උපාංග සාදන්නෙමු. බෙලෝව්, 2007
ආධුනික ගුවන්විදුලි පුහුණුවීම්වලදී MK AVR. ATTINY2313 සම්පූර්ණ විශ්ලේෂණය. බෙලෝව්, 2007
MK සමඟ ජාල සහ අන්තර්ජාල දත්ත හුවමාරුව. යන්න, 2007
MK AVR ආරම්භකයින් සඳහා වැඩමුළුව. හාර්ටොව්, 2007
AVR යෝජනා ක්‍රම, ඇල්ගොරිතම, වැඩසටහන් යෙදීම. බරනොව්, 2006
AVR ක්ෂුද්‍ර පාලක. හඳුන්වාදීමේ පාඨමාලාව. මෝටන්, 2006
AVR භාවිතයෙන් මිනුම්, පාලනය සහ නියාමනය. ට්‍රම්ප්, 2006
AVR සහ PIC MK සඳහා C භාෂාවෙන් වැඩසටහන්කරණය. Shpak, 2006
MK මත උපාංග සැලසුම් කිරීම. බෙලෝව්, 2005
MK - එය සරලයි, වෙළුම් 1-3. Frunze, 2002-2003
C Programming Language, 2nd සංස්කරණය. කර්නිගන්, රිචී, 2009
S. Prokopenko භාෂාවෙන් ATMEL ක්ෂුද්‍ර පාලක ක්‍රමලේඛනය, 2012

5. අන්තර්ජාලයේ ඔබට ප්‍රශ්න ඇසීමට සහ නිශ්චිත පිළිතුරු ලබා ගත හැක්කේ කොතැනින්ද?

ක්ෂුද්‍ර පාලක පිළිබඳ මාතෘකා එක් ආකාරයකින් හෝ වෙනත් ආකාරයකින් ස්පර්ශ කරන අපගේ හෝ වෙනත් ඕනෑම සංසදයකින් ඔබට ප්‍රශ්න ඇසීමට හැකිය. සංසදවල ප්‍රධානතම දෙය නම් පැහැදිලිව පිළිතුරු ලබා ගැනීම සඳහා ප්‍රශ්න නිවැරදිව සකස් කිරීමයි. වියුක්ත ප්‍රශ්න පිළිගන්නේ නැත, බොහෝ විට ඔබට පිළිතුරක් වෙනුවට දරුණු විවේචන ලැබෙනු ඇත, නැතහොත් ඔබේ ප්‍රශ්නයට පිළිතුරු නොලැබෙනු ඇත!

දැන් අපි අපගේ ප්‍රියතම ATMEGA 8 ක්ෂුද්‍ර පාලකය දෙස සමීපව බලමු

8-බිට්, ඉහළ කාර්ය සාධනය, අඩු බලැති AVR ක්ෂුද්‍ර පාලකය
ප්‍රගතිශීලී RISC ගෘහ නිර්මාණ ශිල්පය
ඉහළ කාර්ය සාධන උපදෙස් 130 ක්, බොහෝ උපදෙස් එක් ඔරලෝසු චක්‍රයක් තුළ ක්‍රියාත්මක වේ
32 8-bit පොදු කාර්ය ලේඛන
සම්පූර්ණයෙන්ම ස්ථිතික මෙහෙයුම
කාර්ය සාධනය 16 MIPS වෙත ළඟා වේ (16 MHz ඔරලෝසු වේගයකින්)
බිල්ට්-2-චක්‍ර ගුණකය

වාෂ්පශීලී නොවන වැඩසටහන සහ දත්ත මතකය
පද්ධතිය තුළ ස්වයං-වැඩසටහන් කළ හැකි ෆ්ලෑෂ් මතකයේ 8 KB
මැකීමේ/ලිවීමේ චක්‍ර 1000ක් සපයයි
ස්වාධීන අගුළු බිටු සහිත අතිරේක ඇරඹුම් කේත අංශය
එකවර කියවීමේ/ලිවීමේ මාදිලිය සපයයි (කියවන අතරතුර-ලියන)
බයිට් 512 EEPROM
මැකීමේ/ලිවීමේ චක්‍ර 100,000ක් සපයයි
1 KB on-chip SRAM
පරිශීලක මෘදුකාංග ආරක්ෂා කිරීම සඳහා වැඩසටහන්ගත කළ හැකි අගුලු දැමීම

කාවැද්දූ පර්යන්ත
වෙනම prescaler සහිත 8-bit ටයිමරයක්/කවුන්ටර දෙකක්, එකක් සංසන්දනය කිරීමේ මාදිලිය සහිතයි
වෙනම prescaler සහ ග්‍රහණය කර සංසන්දනය කිරීමේ මාතයන් සහිත එක් 16-bit ටයිමරයක්/කවුන්ටරයක්
වෙනම උත්පාදක යන්ත්රයක් සහිත රියල් ටයිම් කවුන්ටරය
PWM නාලිකා තුනක්
8-නාලිකා A/D පරිවර්තකය (TQFP සහ MLF)
10-bit නිරවද්‍යතාවයකින් යුත් නාලිකා 6 ක්
6-නාලිකා ඇනලොග්-ඩිජිටල් පරිවර්තකය (PDIP පැකේජය තුළ)
10-bit නිරවද්‍යතාවයකින් යුත් නාලිකා 4 ක්
8-bit නිරවද්‍යතාවයකින් යුත් නාලිකා 2 ක්
බයිට්-නැඹුරු 2-වයර් අනුක්‍රමික අතුරුමුහුණත
වැඩසටහන්ගත කළ හැකි අනුක්‍රමික USART
අනුක්‍රමික අතුරුමුහුණත SPI (මාස්ටර් / වහල්)
වෙනම බිල්ට් ඔස්කිලේටරය සහිත වැඩසටහන්ගත කළ හැකි මුරකරු ටයිමරය
බිල්ට් ඇනලොග් සංසන්දනකය

විශේෂ ක්ෂුද්ර පාලක කාර්යයන්
Power-on reset සහ programmable brownout අනාවරණය
තනා ඇති ක්‍රමාංකනය කරන ලද RC දෝලනය
අභ්යන්තර සහ බාහිර බාධා කිරීම් මූලාශ්ර
අඩු පරිභෝජන ක්‍රම පහක්: Idle, Power-save, Power-down, Standby සහ ADC ශබ්දය අඩු කිරීම

I/O කටු සහ නිවාස
වැඩසටහන්ගත කළ හැකි I/O රේඛා 23ක්
28-pin PDIP පැකේජය, 32-pin TQFP පැකේජය, සහ 32-pin MLF පැකේජය

ක්රියාකාරී වෝල්ටීයතා
2.7 - 5.5 V (ATmega8L)
4.5 - 5.5 V (ATmega8)

මෙහෙයුම් සංඛ්යාතය
0 - 8 MHz (ATmega8L)
0 - 16 MHz (ATmega8)

ATMEGA16 සහ 8 අතර වෙනස්කම්
පද්ධතිය තුළ ස්වයං-වැඩසටහන් කළ හැකි ෆ්ලෑෂ් මතකයේ 16 KB

JTAG අතුරුමුහුණත (IEEE 1149.1 අනුකූල)
පර්යන්ත පරිලෝකන හැකියාව JTAG ප්‍රමිතියට අනුකූල වේ
කාවැද්දූ නිදොස්කරණය සඳහා පුළුල් කළ සහාය
JTAG අතුරුමුහුණත හරහා ක්‍රමලේඛනය: ෆ්ලෑෂ්, EEPROM මතකය, ජම්පර් සහ අගුළු බිටු

නාලිකා හතරක් PWM/PWM

8-නාලිකා 10-bit ඇනලොග්-ඩිජිටල් පරිවර්තකය
8 අසමතුලිත නාලිකා
අවකල නාලිකා 7 (TQFP පැකේජය පමණි)
1x, 10x හෝ 200x ක්‍රමලේඛගත කළ හැකි ලාභයක් සහිත අවකල නාලිකා 2ක් (TQFP පැකේජය පමණි)

අඩු පරිභෝජන ක්‍රම හයක්: Idle, Power-save, Power-down, Standby, Extended Standby සහ ADC ශබ්දය අඩු කිරීම

වැඩසටහන්ගත කළ හැකි I/O රේඛා 32ක්

40-pin PDIP පැකේජය සහ 44-pin TQFP පැකේජය

AtmelStudio

ඔබ දැන් ආරම්භ කරන්නේ නම්, ඔබට atmel.com නිල පිටුවෙන් AtmelStudio වැඩසටහන බාගත කර ස්ථාපනය කළ යුතුය.
AtmelStudio වැඩසටහන ස්ථාපනය කිරීමෙන් පසු, ඔබට ව්යාපෘතියක් නිර්මාණය කිරීම ආරම්භ කළ හැකිය.
ව්යාපෘතිය- සම්පාදනය කිරීමෙන් පසු, මයික්‍රොකොන්ට්‍රෝලර් මතකයට ඔබ ලිවීම, නිදොස් කිරීම සහ ෆ්ලෑෂ් කරන ඔබේ වැඩසටහන මෙයයි.

ව්යාපෘතියක් නිර්මාණය කිරීම සඳහා, ඔබ වැඩසටහන විවෘත කළ යුතුය, පහත තිර සුරැකුම දිස්වනු ඇත,

සහ ව්‍යාපෘති නිර්මාණය කිරීමේ පිටුව විවෘත වේ

නව ව්යාපෘතියක් නිර්මාණය කිරීම සඳහා, ඔබ ක්ලික් කළ යුතුය "නව ව්යාපෘතිය..."
මෙම අවස්ථාවේදී, ඔබට ක්‍රමලේඛන භාෂාව, ව්‍යාපෘතියේ නම, එහි පිහිටීම, ව්‍යාපෘති ගොනු සහිත පැකේජයේ නම සහ වෙනත් හරස් ව්‍යාපෘතිවල තවදුරටත් භාවිතා කිරීම සඳහා නාමාවලියක් සෑදීමේ හැකියාව තෝරා ගත හැකි නව කවුළුවක් විවෘත වේ. . අපි එකලස් කිරීමේදී වැඩසටහන් කරන ව්‍යාපෘතියක් නිර්මාණය කිරීම සඳහා, අපි තෝරාගත යුතුය - එකලස් කරන්නා, ඊට පසු අපි ව්‍යාපෘතියේ නම, එහි පිහිටීම වෙනස් කර තෝරන්න හරි.

පහත කවුළුව දිස්වනු ඇත

තෝරා "megaAVR, 8-bit"සහ අපට අවශ්ය ක්ෂුද්ර පාලකය සොයා ගන්න, අපි තෝරා ගත්තා ATmega8.තිර සුරැකුමෙහි දකුණු පැත්තේ, මෙම ක්ෂුද්ර පාලකය සමඟ වැඩ කරන උපාංග ලැයිස්තුවක් දිස්වේ, ඉන් එකක් අපට සම්බන්ධ කළ හැකිය. තෝරා හරි.

පෙළ සංස්කාරක පිටුව දිස්වේ, එමඟින් ඔබට වැඩසටහන සංස්කරණය කිරීමට සහ දෝෂහරණය කිරීමට ඉඩ සලසයි. පිටුව හිස්ව ඇති අතර, නිර්මාණය කරන ලද වේලාව සහ දිනය සහ ව්‍යාපෘති ගොනුවේ නම, පරිශීලක නාමය දක්වා ඇත. අමතර I/O උපාංග කවුළුවක් සහ වැඩසටහන් සම්පාදන වාර්තා කවුළුවක් ඇත. දැන් අපි


අපිට Assembler එකේ program කරන්න පුළුවන්.
SI භාෂාවෙන් ක්‍රමලේඛනය සඳහා ව්‍යාපෘතියක් එකම ආකාරයකින් නිර්මාණය වේ.

ආයුබෝවන්, MySku පදිංචිකරුවන්! අපගේ සමාලෝචනයේ වීරයා වන්නේ Atmega8A-16PU ක්ෂුද්‍ර පාලකයයි. CodeVisionAvr ඒකාබද්ධ සංවර්ධන පරිසරය තුළ මෙම ක්ෂුද්‍ර පාලකය ක්‍රමලේඛනය කිරීම ගැන මම ඔබට කියමි, අපි LED එක බැබළෙන්නෙමු, මෙම පරිසරයේ වැඩ කිරීමේ වාසි සහ අවාසි අපි සලකා බලමු. සමහරවිට අනාගතයේදී මෙය දැනටමත් "ජනප්රිය" Arduino සඳහා විකල්පයක් ලෙස සේවය කරනු ඇත. ඔබ උනන්දුවක් දක්වන්නේ නම්, කැපීමට යන්න.

පූර්විකාව.
මම MK සමඟ මගේ දැන හඳුනා ගැනීම ආරම්භ කළේ Arduino සමඟිනි. මම LED එක blink කරලා, විවිධ සංවේදක සහ පලිහ සම්බන්ධ කරලා, විවිධ ව්‍යාපෘති හැදුවා. හැම දෙයක්ම වැඩ කළා, මම සෑහීමකට පත් වුණා, නමුත් මට තවත් දෙයක් අවශ්යයි. Atmega8A සම්බන්ධ වන එක් ව්‍යාපෘතියක් මට හමු විය, ඒ සඳහා මට ස්ථිරාංග ලිවීමට අවශ්‍ය වේ. "නිරුවත්" එම්කේ වැඩසටහන් කිරීමේ ක්රියාවලිය අධ්යයනය කිරීමට මා තල්ලු කළේ ඔහුය.
ඉතින්, අපට Atmel, AVR Atmega8A පවුලෙන් ක්ෂුද්‍ර පාලකයක් ඇත.

පිරිවිතර:


පින්අවුට්:


මෙන්න
දැන් ක්‍රියාත්මක කිරීම සහ ක්‍රමලේඛනය සඳහා ඔබ එය රූප සටහනට අනුව ක්‍රමලේඛකයාට සම්බන්ධ කළ යුතුය:

අවාසනාවකට, මම සපත්තු සාදන්නෙකු හා සමානයි - බූට් නොමැතිව, දැන් මා අතේ ක්‍රමලේඛකයෙකු නොමැත, එබැවින් නිමි ස්ථිරාංග ක්ෂුද්‍ර පාලකයට පැටවීමට සහ ෆියුස් වින්‍යාස කිරීමට මම Arduino UNO භාවිතා කරමි. ඔබට අවශ්‍ය වන්නේ Arduino IDE උදාහරණ ෆෝල්ඩරයෙන් “Arduinoisp” ස්කීච් එක බාගත කර රූප සටහනට අනුව එය සම්බන්ධ කරන්න:


කෙසේ වෙතත්, මෙම විසඳුම සැලකිය යුතු අඩුපාඩුවක් ඇත, මම ටිකක් පසුව කතා කරන්නම්. අපි CodeVisionAvr හි වැඩසටහනක් ලිවීම ආරම්භ කිරීමට පෙර (මෙතැන් සිට CvAvr ලෙස හැඳින්වේ), අපගේ ක්ෂුද්‍ර පාලකය ක්‍රියා කරන්නේ කුමන සංඛ්‍යාතයකින්ද යන්න තීරණය කළ යුතුය. පෙරනිමියෙන්, කර්මාන්තශාලාවේ සිට, අපගේ වීරයා අභ්‍යන්තර rc උත්පාදක යන්ත්‍රයකින් 1 MHz සංඛ්‍යාතයකින් ක්‍රියා කරයි (2, 4 සහ 8 MHz වෙත නැවත සැකසීමේ හැකියාව සමඟ). අභ්යන්තර rc උත්පාදක යන්ත්රය යම් යම් තත්වයන් යටතේ (නිශ්චිත වෝල්ටීයතාව, උෂ්ණත්වය) කර්මාන්තශාලාවේ ක්රමාංකනය කර ඇති බැවින්, "ක්ෂේත්ර" තත්වයන් තුළ එහි ක්රියාකාරිත්වයේ නිරවද්යතාව 3% සිට 10% දක්වා වෙනස් විය හැක. ඉහළ කාල නිරවද්‍යතාවයක් අවශ්‍ය නොවන කාර්යයන් සඳහා, මෙය නොසලකා හැරිය හැකිය; වෙනත් අවස්ථාවල දී, බාහිර ක්වාර්ට්ස් භාවිතා කිරීම වඩා හොඳය. මගේ ව්‍යාපෘතියේදී මම 8 MHz සංඛ්‍යාතයකින් බාහිර ක්වාර්ට්ස් භාවිතා කළෙමි. දැන් අපි බාහිර ක්වාර්ට්ස් වලින් වැඩ කිරීමට අවශ්ය බව MC වෙත "පැහැදිලි" කළ යුතුය. මෙය සිදු කරනු ලබන්නේ ෆියුස් වෙනස් කිරීමෙනි. එය සරලව කිවහොත්, මෙය මවු පුවරුවක මෙන් BIOS වැනි දෙයකි, එහිදී ඔබ එහි මෙහෙයුම් මාතයන් දක්වයි; ඒ හා සමානව, සංඛ්‍යාතයට අමතරව එය ක්‍රියාත්මක විය යුතු මාතයන් මොනවාදැයි අපි MK ට කියමු. සියලුම තොරතුරු වාෂ්පශීලී නොවන මතකයේ ගබඩා කෙරේ.
ස්පොයිලර් යටතේ ස්ථිරාංග විලයනය කිරීම ගැන මම ඔබට කියමි; එය කරන්නේ කෙසේදැයි දන්නා අයට තවදුරටත් අනුචලනය කළ හැකිය.

අමතර තොරතුරු

මෙම එකම ෆියුස් ලියාපදිංචි කරන්නේ කෙසේද?! මේ සඳහා මම AvrDude වැඩසටහන භාවිතා කළෙමි, එය නොමිලේ වන අතර අන්තර්ජාලයේ පහසුවෙන් සොයාගත හැකිය. අපේක්ෂිත සංඛ්‍යාතයට අනුකූලව ෆියුස් නිවැරදිව සැකසීමට, දත්ත පත්‍රිකාව දෙස බලන්න, නැතහොත් ඔබට සරල එකක් භාවිතා කළ හැකිය.
අපි පින්තූරයේ ඇති පරිදි පරාමිතීන් සකස් කරමු.


මෙහි සෑම දෙයක්ම සරලයි:
ඔරලෝසු මූලාශ්රය - බාහිර ක්වාර්ට්ස් සිට සංඛ්යාතය (බාහිර ස්ඵටික 3 - 16 Mhz) සකසන්න.
ආරම්භක වේලාව - RESET ඉවත් කිරීමෙන් හෝ බලය යෙදවීමෙන් පසු MC ආරම්භක වේගය (16K CK + 4.1ms වේගවත්).
කොටුව සලකුණු කරන්න: Ext. ඔරලෝසුව/RC Osc./අඩු සංඛ්‍යාත. ස්ඵටික: අභ්යන්තර ධාරිත්රක සක්රිය කරන්න (36 pF)
අභ්‍යන්තර R/C Osc.: පරීක්ෂා නොකර තබන්න! බාහිර ස්ඵටික: සම්පූර්ණ පැද්දීම සබල කරන්න (>8 MHz සඳහා අවශ්‍ය වේ).
මේ අනුව, අපට අඩු ෆියුස් 0xEF සහ ඉහළ ෆියුස් 0xC9 ලැබුණි. නියමයි, වැඩේ බාගයක් ඉවරයි. දැන් අපි Microcontroller එක Arduino UNO එකටත් Arduino එක පිළිවෙලින් පරිගණකයටත් සම්බන්ධ කරනවා. විධාන රේඛාව දියත් කරන්න, AvrDude සමඟ ෆෝල්ඩරය වෙත යන්න. ඊළඟට, පේළිය ඇතුල් කරන්න: avrdude -C avrdude.conf -c avrisp -P COM13 -b 19200 -p m8 -U lfuse:w:0xef:m -U hfuse:w:0xc9:m
පින්තූරයේ පෙනෙන්නේ මෙයයි:


ඔබ ඇතුළු කළ පේළිය විග්‍රහ කරමු:
avrisp යනු අපගේ Arduino වැනි ක්‍රමලේඛක වර්ගයකි
COM13 යනු පද්ධතිය තුළ අපගේ Arduino හඳුනා ගන්නා com port අංකයයි (ඔබගේ නඩුවේදී ඔබ එය උපාංග කළමනාකරු තුළ සොයා බැලිය යුතුය)
19200 - com වරාය වේගය, එලෙසම තබන්න
m8 - අපගේ MK යනු Atmega8 බව දක්වන්න
-U lfuse:w:0xef:m -U hfuse:w:0xc9:m - අපගේ Low Fuse 0xEF සහ High Fuse 0xC9 මෙහි දක්වා ඇත
වෙන්න කරුණාකර ප්‍රවේශම් වන්න!!, වැරදි ලෙස නිශ්චිතව දක්වා ඇති ෆියුස් MK ගඩොල් බවට පත් වීමට හේතු විය හැක (එය යථා තත්ත්වයට පත් කිරීමට අපට රබන් සමඟ නැටුම් අවශ්ය නොවේ).
අපි “Enter” ඔබන්න, ප්‍රතිදානයේදී අපට පින්තූරයේ මෙන් ප්‍රති result ලය ලැබේ:


ක්‍රියාවලියේදී කිසිදු දෝෂයක් නොපෙන්වන්නේ නම්, කාර්යය සිදු කරනු ලැබේ, අපගේ ක්ෂුද්‍ර පාලකය දැන් බාහිර ක්වාර්ට්ස් වලින් ක්‍රියා කරයි.
ඔබට ෆියුස් ගැන ඉතා විස්තරාත්මකව කියවිය හැකි අතර Google හි සෙවීමෙන්ද ඔබට කියවිය හැකිය.


දැන් අපි වැඩසටහන්කරණය ආරම්භ කිරීමට සූදානම්. මා වෙනුවෙන්, මම CvAvr සංවර්ධන පරිසරය තෝරා ගත්තෙමි. ක්‍රමලේඛන භාෂාව Arduino ට වඩා වෙනස් වනු ඇත; CvAvr හි එය C වැනි ය. අපි අපේ පළමු Blink ලියමු.
පරිසරය ස්ථාපනය කර දියත් කිරීමෙන් පසුව, අපි Project Creation Wizard භාවිතා කරන්නෙමු. "ගොනුව" - "නව" - "ව්‍යාපෘතිය" තෝරන්න. අපි විශාරදයා භාවිතා කරන්නේ දැයි විමසූ විට, අපි ස්ථිර ලෙස පිළිතුරු දෙමු. ඉලක්ක AVR චිප් වර්ගය: AT90, ATtity, ATmega.
ව්‍යාපෘති විශාරද පෙනුම මෙයයි:


චිප් පටිත්තෙහි, ATmega8A, ඔරලෝසු 8.000000 Mhz තෝරන්න. වරාය පටිත්ත වෙත යන්න. අපගේ LED pinout - PB0 අනුව ක්ෂුද්‍ර පාලකයේ පින් 14 වෙත සම්බන්ධ වේ. ටැබය මත, Port B තෝරන්න, Bit 0 IN සිට OUT වෙත මාරු කරන්න, i.e. අපි අපගේ ක්ෂුද්‍ර පාලකයේ 14 වන පාදයේ මෙහෙයුම් ආකාරය නිමැවුමට මාරු කරමු.


මෙය ස්වාමියාගේ කාර්යය සම්පූර්ණ කරයි. "වැඩසටහන" තෝරන්න - "උත්පාදනය කරන්න, සුරකින්න සහ පිටවන්න". අපි අපගේ ව්‍යාපෘතිය සුරකිමු, උදාහරණයක් ලෙස, Blink නමින්.

මේ වගේ පාවහන් රෙද්දක් ගමු

/*******************************************************
විසින් මෙම වැඩසටහන නිර්මාණය කරන ලදී
CodeWizardAVR V3.12 උසස්
ස්වයංක්රීය වැඩසටහන් උත්පාදක යන්ත්රය
චිප් වර්ගය: ATmega8A
වැඩසටහන් වර්ගය: යෙදුම
AVR Core ඔරලෝසු සංඛ්‍යාතය: 8.000000 MHz
මතක ආකෘතිය: කුඩා
බාහිර RAM ප්රමාණය: 0
දත්ත තොගයේ තරම: 256
*******************************************************/
#ඇතුළත්
#ඇතුළත්
// ඔබගේ ගෝලීය විචල්‍යයන් මෙහි ප්‍රකාශ කරන්න

හිස් ප්රධාන (ශුන්ය)
{
// ඔබේ දේශීය විචල්‍යයන් මෙහි ප්‍රකාශ කරන්න

// ආදාන/ප්‍රතිදාන වරායන් ආරම්භ කිරීම
// Port B ආරම්භ කිරීම
// කාර්යය: Bit7=Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=Out
DDRB=(0<// තත්වය: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=0
PORTB=(0<

// Port C ආරම්භ කිරීම
// කාර්යය: Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
DDRC=(0<// තත්වය: Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T
PORTC=(0<

// වරාය D ආරම්භ කිරීම
// කාර්යය: Bit7=Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
DDRD=(0<// තත්වය: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T
PORTD=(0<

// ටයිමර්/කවුන්ටරය 0 ආරම්භ කිරීම

// ඔරලෝසු අගය: ටයිමර් 0 නතර විය
TCCR0=(0<TCNT0=0x00;

// ටයිමර්/කවුන්ටරය 1 ආරම්භ කිරීම
// ඔරලෝසු මූලාශ්‍රය: පද්ධති ඔරලෝසුව
// ඔරලෝසු අගය: Timer1 නතර විය
// මාදිලිය: සාමාන්‍ය top=0xFFFF
// OC1A ප්‍රතිදානය: විසන්ධි විය
// OC1B ප්‍රතිදානය: විසන්ධි විය
// Noise Canceller: Off
// Falling Edge මත ආදාන ග්‍රහණය
// Timer1 පිටාර ගැලීම බාධාව: අක්‍රියයි
// ආදාන ග්‍රහණ බාධාව: අක්‍රියයි
// තරඟ බාධාවක් සසඳන්න: අක්‍රියයි
// B Match බාධාව සසඳන්න: අක්‍රියයි
TCCR1A=(0<TCCR1B=(0<TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

// ටයිමර්/කවුන්ටරය 2 ආරම්භ කිරීම
// ඔරලෝසු මූලාශ්‍රය: පද්ධති ඔරලෝසුව
// ඔරලෝසු අගය: Timer2 නතර විය
// මාදිලිය: සාමාන්‍ය top=0xFF
// OC2 ප්‍රතිදානය: විසන්ධි විය
ASSR=0<TCCR2=(0<TCNT2=0x00;
OCR2=0x00;

// ටයිමර්(ය)/කවුන්ටරය(ය) බාධා(ය) ආරම්භ කිරීම
TIMSK=(0<

// බාහිර බාධා(ය) ආරම්භ කිරීම
// INT0: අක්‍රියයි
// INT1: අක්‍රියයි
MCUCR=(0<

//USART ආරම්භ කිරීම
// USART අබල කර ඇත
UCSRB=(0<

// Analog Comparator ආරම්භ කිරීම
// Analog Comparator: Off
// Analog Comparator ගේ ධනාත්මක ආදානය වේ
// AIN0 පින් එකට සම්බන්ධයි
// Analog Comparator ගේ ඍණ ආදානය වේ
// AIN1 පින් එකට සම්බන්ධයි
ACSR=(1<SFIOR=(0<

//ADC ආරම්භ කිරීම
//ADC අබල කර ඇත
ADCSRA=(0<

// SPI ආරම්භ කිරීම
// SPI අක්‍රීය කර ඇත
SPCR=(0<

// TWI ආරම්භය
// TWI ආබාධිතයි
TWCR=(0<

අතර (1)
{


මෙහි කරදර වීමට කිසිවක් නැත; ව්‍යාපෘතිය මඟින් වරාය, ටයිමර්, බාධා කිරීම්, USART, Analog Comparator, ADC, SPI සහ සම්බන්ධිත පුස්තකාලවල මෙහෙයුම් ආකාරය නියම කරයි. කෙටියෙන් කිවහොත්, අපි විශාරදයේ සඳහන් කර ඇති සියලුම පරාමිති, වරායන් සහ චිප් හැර අනෙක් සියල්ල පෙරනිමියෙන් වින්‍යාස කර ඇත. අපි (1) (වැඩසටහන් පෙළ) තුළ ප්‍රධාන වැඩසටහන් ලූපය ලියන්නෙමු. නිසා අපි PB0 (පාද 14) සමඟ වැඩ කරමින් සිටිමු, වැඩසටහන් ලූපයේ අපි ලියන්නෙමු:
අතර (1)
{
PORTB.0=1;
ප්‍රමාද_ms(1000);
PORTB.0=0;
ප්‍රමාද_ms(1000);
}
මෙන්න අපි PB0 ඉහළට සකසන්න, තත්පර 1 ක් රැඳී සිට පහළට සකසන්න, පසුව චක්රය නැවත සිදු වේ. ව්‍යාපෘතියේ මුලට පුස්තකාලය ඇතුලත් කිරීමට අමතක නොකරන්න #ඇතුළත් කරන්න . අපගේ වැඩසටහන සූදානම්!!! ඔබට පෙනෙන පරිදි, සෑම දෙයක්ම ඉතා සරල ය. දැන් "ව්‍යාපෘතිය" - "සියල්ල ගොඩනඟන්න" තෝරන්න. කිසිදු දෝෂයක් සිදු නොකළේ නම්, අපි විශාරදයාගේ වාර්තාව දකිමු:

අපගේ වැඩසටහනේ විශාලත්වය බයිට් 198 ක් වූ අතර මයික්‍රෝන මතකයෙන් 2.4% ක් ලබා ගත්තේය.
ඊළඟට අපි රූප සටහන එකලස් කරමු:


දැන් අපගේ ව්යාපෘතිය සමඟ ෆෝල්ඩරය වෙත යන්න, "Debug" ෆෝල්ඩරය වෙත යන්න, ඉන්පසු "Exe", hex දිගුවක් සහිත ගොනුවක් තිබේ. මගේ නඩුවේ එය blink.hex වේ.
අවසාන පියවරක් ඉතිරිව ඇත. මෙම ගොනුව AvrDude සමඟ ෆෝල්ඩරයට පිටපත් කරන්න. අපි නැවතත් විධාන රේඛාව දියත් කරමු, අපගේ ෆෝල්ඩරය වෙත යන්න. රේඛාව ඇතුල් කරන්න avrdude -C avrdude.conf -c avrisp -P COM13 -b 19200 -p m8 -U flash:w:blink.hex
පින්තූරයේ පෙනෙන්නේ මෙයයි:


සියල්ල නිවැරදිව ඇතුළත් කර ඇත්නම්, "Enter" ඔබන්න


සුභ පැතුම්! කාර්යය නිමයි, LED ඔබ වෙනුවෙන් සතුටින් දැල්විය යුතුය :)
නිගමනය.
අවසාන වශයෙන්, Arduino වැනි ක්‍රමලේඛකයාගේ අවාසිය ගැන මට පැවසීමට අවශ්‍යයි; CvAvr එයට සහාය නොදක්වයි. උදාහරණයක් ලෙස, AVRISP mkII අතේ තිබීම, ඔබට ෆියුස් ෆ්ලෑෂ් කර CodeVisionAvr වෙතින් වැඩසටහන බාගත කළ හැකිය. මාර්ගය වන විට, homebrew ක්‍රමලේඛකයා ද AvrDude චිත්‍රක අතුරුමුහුණත භාවිතා කිරීම ප්‍රතික්ෂේප කළ අතර විධාන රේඛාවෙන් පමණක් ක්‍රියා කළේය.
මම CodeVisionAvr ඉතා ඉක්මනින් හදුනාගත්තා; අන්තර්ජාලය පෙළ සහ වීඩියෝ පාඩම් වලින් පිරී ඇත. සති කිහිපයකින් මම දෘඩාංග PWM, බාධා කිරීම්, ටයිමර්, බොත්තම් සමඟ වැඩ කිරීම සහ ග්‍රැෆික් සංදර්ශකයක් සම්බන්ධ කිරීම ප්‍රගුණ කළෙමි. විශේෂයෙන්, මට මගේ ව්‍යාපෘතියේ කොටසක් කිරීමට සිදු විය: Atmega8 හි දෘඩාංග 16-bit PWM සංවිධානය කිරීම, එය පාලනය කිරීමට බොත්තම් 2 ක් සම්බන්ධ කිරීම සහ එහි මෙහෙයුම් මාතයන් ග්‍රැෆික් සංදර්ශකය මත ප්‍රදර්ශනය කිරීම, මම පහසුවෙන් කළෙමි :) මෙන්න ඡායාරූප කිහිපයක්:

අමතර තොරතුරු





Arduino හා සසඳන විට ප්රතිඵල:
+ CvArv තේරුම් ගැනීම අපහසු නැත මන්ද ව්යාපෘති නිර්මාණය කිරීමේ විශාරදයෙක් ඇත;
+ ප්ලග්-ඉන් පුස්තකාල තිබේ නම්, ඒවා ප්‍රමාණවත්ය;
+ වේගවත් සම්පාදනය;
+ ප්‍රෝටියුස් හි ව්‍යාපෘතියක් අනුකරණය කිරීමේ හැකියාව මෙන්ම ගොඩනඟන ලද නිදොස්කරණය භාවිතයෙන් එය නිදොස් කිරීමේ හැකියාව;
+ වැඩසටහනේ විශාලත්වය කිහිප ගුණයකින් කුඩා වේ. ස්ටෑන්ඩර්ඩ් බ්ලින්ක් අපට බයිට් 198ක් ගෙන, Arduino IDE 1084 Bytes + 2 KB bootloader හි සමාන සටහනක්;
+ Arduino මත සිදු කළ නොහැකි මාදිලි ක්‍රියාත්මක කිරීමේ හැකියාව. උදාහරණයක් ලෙස, 16-bit PWM (සාමාන්‍යයෙන්, එය Arduino මත කළ හැකි නමුත් "කිහිලිකරු" සමඟ පමණි);
+ Arduino අතිරික්ත වන ඔබේ ව්‍යාපෘති සඳහා ATtiny, ATmega microcontrollers භාවිතා කිරීමේ හැකියාව;
- තවමත්, Arduino සමඟ MK ප්‍රගුණ කිරීම ආරම්භකයකුට වඩා හොඳය;
- ක්‍රමලේඛන භාෂාව Arduino සැකසුම් වලට වඩා වෙනස් ය;
- Arduino සඳහා තවත් පුස්තකාල තිබේ;
- CodeVisionAvr යනු ගෙවුම් වැඩසටහනකි, සීමාවන් සහිත නිදහස් අනුවාද ඇත;
CodeVisionAvr හි “නිරුවත්” ක්ෂුද්‍ර පාලකය ක්‍රමලේඛනය කිරීමෙන්, මම බොහෝ අත්දැකීම් ලබා ගත්තෙමි. ටයිමර්, රෙජිස්ටර්, මෙහෙයුම් මාතයන්, ගෘහ නිර්මාණ ශිල්පය, දත්ත පත්‍රිකා කියවීම ඔබේ කුසලතා වැඩි කරයි, ඔබේ සීමාවන් පුළුල් කරයි සහ ක්ෂුද්‍ර පාලක සමඟ වැඩ කිරීමේ නව අංග විවෘත කරයි.
ප්‍රසාද දීමනාවක් ලෙස, මම ග්‍රැෆික් LCD සංදර්ශකය සොයාගෙන ටිකක් වාදනය කරන විට ඡායාරූප කිහිපයක් අමුණමි.





පී.එස්. මට ලිවීමට අවශ්‍ය තවත් බොහෝ දේ ඇත, නමුත් මෙය සමාලෝචනයක් නොව විශාල ලිපියක් වනු ඇත. මගේ නිපුණතාවය තුළ, පුද්ගලිකව හෝ අදහස් දැක්වීමේදී ප්‍රශ්නවලට පිළිතුරු දීමට මම සූදානම්. ඔබට AVR හි බොහෝ පාඩම් නැරඹිය හැකිය.

ඉහල