В тази тема ще опиша максимално кратко, доколкото е възможно усвояването на AVR микроконтролери за новаци. Голяма част от инфото, което ще публикувам надолу е от мои стари записки, които съм събирал и превеждал с годините от най-различни "чуждестрански" интернет източници и накрая съм го стиковал в няколко word документа, по които аз лично съм усвоявал тези микроконтролери преди години.Текста надолу е мой свободен превод на най-различни копвани от "къде ли не" статии, с вкарвани от мене си допълнения, както и изрязване на части от оригиналните текстове, с цел да бъде максимално и лесно разбираем за мен си когато съм се мъчел да усвоя тези микроконтролери и най-вече да е на Българки език.До сега изобщо не съм си и помислял че ще го публикувам някъде, но направата на този форум даде тласъка за публикуването на тази тема.
Ако някой, някога реши да прави copy и paste, то нека да сложи линк към тази тема .И така, сега по същество да гризнем малко теория:
Най-напред що е то микроконтролер и как се яде?
Микроконтролера е една малка и хитра интегрална схема с много крачета. В нея има почти цял компютър с всичките му там нужни и ненужни неща, така че да може да работи самостоятелно. Какви са тези неща:
-процесор
-оперативна памет-ОЗУ -SRAM
-постоянна памет-ПЗУ-FLASH и EEPROM
-генератор на тактова честота-GCK
-таймери-броячи
-портове за вход/изход
-последоватен интерфейс
-и още много други неща според вида на МК
Например в микроконтролера може да има АЦП--Аналого цифров преобразовател, ЦАП наобратно и други неща. За пример взимаме микроконтролера на Атмел, може и на PIC но пика ще е за друга тема .
За да разберем как работи контролера трябва да знаем какво има вътре в него.
Най-главния елемент на всеки един процесор е аритметико-логическото-устроиство АЛУ/ALU(ariphmetic-logical unit). /В него се провеждат всички логически и аритметически операции над числата. Контролера, както и всяка една друга цифрова система работи с двоични числа. Този контролер, който сега ще разглеждаме- AT90S2313, или ATtiny2313 работи с 8 разрядни двойчни числа,с други думи той е 8 битен.Демек по BG АЛУ може да захване две 8-битни думи, да направи с тях някаква аритметическа или логическа операция и да изплюе отговора-също 8-битна дума.
Въпрос: Какви биват аритметичните и логичните операции и какво е това?
Аритметичните операции са умножение,четене и сравнение.
Логичните операции-това са операции от логиката на алгебрата. Ето някои от тях ”И”,”ИЛИ”,”НЕ”,”ИЗКЛЮЧВАЩО НЕ”,премести в ляво,премести в дясно.
Също съществуват операции, които не са нито логически,нито аритметически: нулирай в „О”,установи в „1” и т.н.
За да произведе операция АЛУ трябва да вземе от някъде две числа. Да изпълни операцията и трябва да сложи някъде отговора. За тази цел служат регистрите с общо назначение- РОН.
Те тук са 16. Всеки регистър е клетка от памет с обем 8 бит или 1 байт. Точно в тях се съхраняват числата с които работи АЛУ.
За всяка команда,която изпълнява АЛУ,трябва да се покажат тези регистри, с които той в дадения момент работи.
Пример:
Add R16,R17-сложи значението на регистрите R16 и R17 и сложи отговора в R16
Sub R16,R18-прочети отR16,R18и сложи отговора в R16
And R24,R17-направи операция „И” с R24 и R17,отговора в-R24
Eor R16,R24-направи „изключващо ИЛИ” с R16 и R24,отговора-в R16.
Както се забелязва отговора винаги се намира в този регистър, който е назован първи.
Разбира се старото съдържание на регистъра при това деиствие се изтрива. Ако е нужно да се запази първоначалното съдържание на регистъра, то преди операцията трябва да се копира в някой друг регистър. Друг начин няма/сори майна/.
Оператор за копиране-mov
Пример
Mov R16,R17
Add R17,R24
освен РОН, на схемата има и ОЗУ-оперативна памет на контролера. За какво е тя? За да съхранява данни при изпълнение на програмата. Регистри има-общо 16. За пълноценна работа те са недостатъчно. В регистрите се съхраняват обикновенно само тези данни, които ще се използват непосредствено сега. Всичко останало е удобно да се сложи в паметта. По-нататък ще поговорим за такива неща, като стек, указатели и др. неизвестни ни думички.
И така от къде АЛУ взима данни за изчисляване-разбрахме.
А сега ще разберем от къде взима команди.
Всичко е много просто!
За това съществува регистър на командите. В този регистър постепенно се въвеждат командите на програмата, която програма ще се изпълнява от контролера. Тези команди се отнасят за целия контролер, а не само за АЛУ.
За да разбере точно коя команда да изпълни АЛУ постоянно гледа в регистъра на командите за предмет, иначе казано търси има ли нещо там за него? В момента, в които види че има команда за него, то се мъчи да я изпълни веднага. В регистъра на командите,командите пристигат от програмната памет. Програмната памет-това е ПЗУ/постоянно запомнящо устроиство/, в което на всеки адрес е записана една команда. Заедно всичките тези команди съставляват програмата и те са записани в такава последователност , в каквато стоят в програмата. За да се достави команда от ПЗУ, трябва да му се каже адреса на клетката памет, в която лежи тази команда. В отговор ПЗУ изважда съдържанието на тази клетка. Командите се записват в клетките в такава последователност, в каквато стоят в програмата. За това,че да се взимат последователно камандите една по една, трябва просто всеки път да се добавя към адреса „1”. Именно с това се занимава и „брояча на командите”. Разбира се програмата изпълняваща се вътре в самия контролер, ако не е свързана с външния свят просто на никои никога няма да е нужна. За пълноценна работа на контролера е нужно да обменя данни с външния свят. За тази работа има „портове вход/изход”. Порт-това е пачка еднобитни канали, всеки от който може да бъде независимо настроен кефти на вход,к ефти на изход. В контролера AT90S2313 има два порта за вход и изход-порт В и порт D. Порт В се състои от 8 канала,порт D от 7 канала. Тази глупост на порт D се обяснява с недостига на крачета на микроконтролера. Просто разработчиците са искали да бъде всичко в този 20 краков/или пинов /по ханглийски/ корпус и затова са отрязали един крак от порт D. Всяка една програма за контролера започва точно с настройка на портовете. Ние трябва да определим кои канали/крачета/ ще работят като вход и кои като изход. По подразбиране всичките канали са включени на вход на нов контролер, но ние винаги можем да ги сложим и на изход ако решим. В общи линии това са първоначалните сведения за всеки един микроконтролер.
Следващо мнение - писане на първата ни програма.