ATMEL AVR микроконтролери - първи стъпки

Тук е мястото да споделим полезна техническа информация

ATMEL AVR микроконтролери - първи стъпки

Мнениеот Gogo55 » 02 Фев 2010 02:43

В тази тема ще опиша максимално кратко, доколкото е възможно усвояването на 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. Всяка една програма за контролера започва точно с настройка на портовете. Ние трябва да определим кои канали/крачета/ ще работят като вход и кои като изход. По подразбиране всичките канали са включени на вход на нов контролер, но ние винаги можем да ги сложим и на изход ако решим. В общи линии това са първоначалните сведения за всеки един микроконтролер.
Следващо мнение - писане на първата ни програма.
Gogo55
Администратор
 
Мнения: 523
Регистриран на: 30 Яну 2010 05:17

Re: ATMEL AVR микроконтролери - първи стъпки

Мнениеот Gogo55 » 02 Фев 2010 02:53

На долната "снимка" горното мнение, ама описано по друг начин :lol:
Прикачени файлове
Mikrokontroler.jpg
Mikrokontroler.jpg (48.71 KiB) Прегледано 16533 пъти
Gogo55
Администратор
 
Мнения: 523
Регистриран на: 30 Яну 2010 05:17

Re: ATMEL AVR микроконтролери - първи стъпки

Мнениеот Gogo55 » 02 Фев 2010 03:21

Три страшни думички:изходен код/АСМ/, асамблер,компилация...
Сигурно ни писна от АЛУ,ПЗУ,портове за вход/ изход и т.н. дето учихме от общото устроиство на микроконтролера в горното мнение....
Ние искаме да пишем програма,да я зашиваме в микроконтролера и да се радваме на нейната дълга и безотказна работа во веки веков!
Сега ще разберем как става това.
Наи напред какво ще ни трябва за да можем да направим това:
1.Редактор за писане на текста на програмата.Всичко започва от там че ние трябва наи напред да напишем изходния код на програмата,тоест да създадем фаил с изходния код.Този фаил може да има всякво разширение,но тъи като ще пишем програмата на асамблер то тогава разширението ни ще бъде .asm
2.Компилатор-за да преведе изходния код в машинен език.Това е една програма която взима това което е написъл програмиста на асамблер и прави от него изпълнителен фаил-hex фаил.Разбира се в нашия случаи компилатора създава не изпълнителен фаил,а фаил с машинен код които фаил ние ще зашием в микроконтролера.Този вид фаилове имат разширение .hex.Компилатора също така добавя от него си и един друг фаил ХХХХХ.def.inc. Като ХХХХХ е името на дадения микроконтролер за които е написана програмата и се намира в папка Apnotes на самия компилатор.
3.Деваис със който ще съединим микроконтролера с компютъра-именува се това нещо „програматор”.
4.Програма която ще управлява прошивката HEX-файла в микроконтролера-намира се в папка apnotes която присъства във всички компилатори по принцип-за контролера AT90S2313-това е фаила 2313def.inc
В общии линии много неща ще са ни нужни-хахаха.Щем нещем трябва си ги набавим тези „инструменти”.
Редактор-изходния код на програмата се пише в стандартния виндовски нотепад,както и във много други програми специално за това създадени като например AVRstudio и т.н.

Написваме програмата в AVRStudio
-отварям авр студио
-нов проект –записвам го с име в папка на декстопа примерно
-избирам микроконтролера
-пиша програмата
-с Ф7 компилирам-бутон има също над горния ляв ъгъл на прозореца за писане на програмата.
-след компилацията излиза доло обяснение какво е станало, и в папката има вече хех фаила ,както и още няколко други фаила.
-включваме програматора с микроконтролера към компютъра и зашиваме хех фаила в контролера.готови сме:) , радваме се празнуваме и черпим
Гого55 една бира!
-Всеки един микроконтролер си има специален фаил спецаилно за него написан от фирмата му-например за Атмелските контролери фаила е с раширение .def.inc ,като пред раширението е името на контролера.
Там изглежда, или може би най-вероятно в този фаил има указания написани за това кой крак как се казва, за портовете на вход и изход и т.н.,другите специализирани подробности.
Винаги първия ред/заглавния/ от всяка една програма .asm, започва с вида на самия микроконтролер които ще се управлява от програмата.
Ако контролера е включен в компилатора, то тогава се започва заглавния ред така:
.include "2313def.inc"
Примерно в AVR studio или в подобните му.
И така с заглавния фаил,и ред се разбрахме че без тях не може, и мързи ни, или не, трябва да ги напишем.
Надоло можем да пишем вече текста на програмата.
Пишем нещо от рода на:
ldi R16,5 ;зареди константа в регистрите
ldi R17,7
and R16,R17 ;логическо «И» на два регистъра
nop
Забелязваме че синтаксиса на асамблера не иска никакви знаци след дадена команда.Но всяка команда задължително трябва да се пише на нов ред.Закът „;” /точка и запетая/,който в много езици означава край на командата,в асамблера се използва за коментиране-значи по просто казано-всички символи и знаци след този знак и до прехода на нов ред се игнорират от компилатора.Правим устроиство”Бягаща светлина” с микроконтролера
Започваме практически занятия по контролера:
Сега ще ви разкажа как да си направим устроиство „Бягаща светлина” от 8 светодиода практически от нищо и за 10 мин.
Ще направим това устроиство разбира се с микроконтролер,разбира се с AT90S2313 или тини2313,за къде сме без него:)
Няма да е лошо да си издърпате даташиита на този контролер.
Всичко е на ханглииски от начало до края в даташиита,така че ако в училище сте учили китаиски, или някъв друг език сигурно ще имате проблеми.Другите да четат разбира се и по малко да се озаряват от божествената светлина на знанието и науката:)...
По натам за да прочетете написаното по надоло от вас се иска само знание по Български език, както беше до сега,и затова мисля че ще могат да четат всички който са изучавали този сравнително наи-древен език от новата история на света.Маи че това са болшинството от четящите:).
Сега е момента да благодарим на братята руснаци от радиокот.ру!!!

Схема
Трябва ни на този момент единствено програмата PROTEUS-гуглим по нета и си я намираме, без значение коя версия.
Започваме с рисуването на схемата в протеус:
Прикачени файлове
migalka.jpg
migalka.jpg (147.12 KiB) Прегледано 16531 пъти
Gogo55
Администратор
 
Мнения: 523
Регистриран на: 30 Яну 2010 05:17

Re: ATMEL AVR микроконтролери - първи стъпки

Мнениеот Gogo55 » 02 Фев 2010 03:33

От горе на микроконтролера има малко светодиоди и резистори.А защо ли ни са светодиодите-ми те ще светят сигурно,а защо са резисторите-те ще греят :lol: , не, сериозно сега те са нужни за да ограничават тока минаващ през светодиодите.Иначе светодиодите ще вземат да изгърмят.
Обикновенните светодиоди/не с повишена яркост/,употребяват около 10-20ма.Взимаме числото 15 като средно.
Напрежението на изхода от контролера-5В,пад на напрежение на всеки светодиод-около 1,5 волта/в зависимост от цвета с които свети от 1,3 до 1,7В/.
Значи на резистора остава 5-1,5=3,5В.
Изчисляваме по закона на Ом съпротивлението на резистора:3,5V/0,015А=233ома /които е пропуснал в 6 клас да учи, сега може да гугли за закона на ОМ/.
Ние ще вземем малко с резерв-значи 300ома,но може и 330 ома,може и 470 ома та чак до 1Ком квито имаме под ръка.
Всеки от светодиодите е включен към канала вход/изход на контролера.Всичките тези канали са от порт В.За това ни говорят имената на изходите:РВ0,РВ1,...РВ7.
Забелязваме че почти всички канали на порта имат и допълнителни имена,които са написани отстрани.Тези имена се отнасят към алтернативни функции на дадения канал.Например РВ5,РВ6 и РВ7 имат алтернативна функция на входове за последователен интерфес SPI,чрез който се включва програматора.Но дадената функция се активира само в режим на програмиране,а в останалото време тези канали могат да изпълняват всяка една друга функция или работа.
Порт D в нашия случаи е останал не включен към никъде-имами се още крачета които нещо не правят.Това ще е само временно.Ние по натам обезателно ще включим към свободния порт разни неща.Към изходите XTAL1 и XTAL2 се включва кварцов резонатор/кварц/.Тои отговаря за генерирането на тактовата честота на самия контролер.При нашия контролер максималната тактова честота на която може да работи е 10Мхц.Погледнато от гледна точка на домашните компютри който работят на над 2000Мхц/2GHz/, тези 10Мхц са нищо,но погледнато спрямо задачата която ще изпълнява сега контролера, тези 10 Мхц са даже много:) ,всичко в този свят е относително,или както казваше един мои приятел мога и с 200лв да изкарам месеца мога и с 2000лв :lol: ...
Между изходите на кварца и минуса има кондензатори по 22пкф та чак до 33пкф, но и при 120пкф пак много от МК си работят.Те са нужни и е сложно да се обясни защо са нужни.При някои контролери няма нужда от кондензатори обаче,а при други си има вътрешено вграден генератор на тактова честота примерно при тини2313, и няма нужда от външен кварц,или външен генератор.
Напрежение за захранване на схемата е 5В,то се подава на веригата Vcc и GND съответно „+ плюс” и „- минус„
Е сега вече може да програмираме-демек да пишем програмата....
Gogo55
Администратор
 
Мнения: 523
Регистриран на: 30 Яну 2010 05:17

Re: ATMEL AVR микроконтролери - първи стъпки

Мнениеот Gogo55 » 02 Фев 2010 03:56

Настроика на портовете вход-изход
Така ,всяка една програма започва с настройки на портовете.Но винаги най-напред трябва да кажем че започваме текста на програмата и да назначим адрес в ПЗУ за първата команда,затова пишем:
.include "2313def.inc"
.cseg
.org 0
CSEG – означава начало на програмния сегмент
ORG - задава начален адрес. В дадения случаи е = 0.
Освен програмния сегмент,има и сегмент на данните-DSEG.
В него се инициализира оперативната памет.Но за това ще говорим по натам.
И така,като знаем в нашия контролер има 16 РОН/регистри с общо предназначение/:
R16…R31.С всеки един от тях може да правим каквото си искаме.Просто пълна анархия!Разбира се не е препоръчително да се злоупотребява с количеството на използваните регистри.Това много усложнява писането на програмата.Обикновенно се използват 4-5 регистра-толкоз са необходими в този момент.Останалото в оперативната памет /ОЗУ/.
За да не се бъркаме си ги именуваме както си решим тези регистри:Temp,Temp1,…Temp4.Прави се това така:До началото на програмния сегмент е необходимо да се напише примерно това:
.def Temp=R16
.def Temp1=R17
и т.н.
пишем:
.include "2313def.inc"

.def Temp=R16
.def Temp1=R17
.def Temp2=R18
.def Temp3=R19
.def Temp4=R20
.cseg
.org 0
Това е всичко,сега ще ни стане вече по лесно...
Сега ще настроим портовете.Всеки един порт на вход-изход се състои от няколко канала.Всеки канал може да бъде настроен на вход или изход.В нашия контролер има два порта:
PortB - 8 канала (към тях са включени светодиодите)
PortD - 7 канала (към тях нищо не е включено)
Портовете са устроени много хитроумно. За работа с всеки порт се исползват три регистъра:
PortX
PinX
DDRX
(където X – е буква на порта, например PortB, PinD и т.н.)
PortX съдържа информация,предназначена за изход.
PinX съдържа въведената информация.
DDRX съдържа информация за това кой канал е настроен на вход и кой на изход.
Съответно,ако кажем,РХ3 е настроен на вход,то тогава е безполезно да се пише каквото и да било в 3-я бит на PortX,защото то няма да бъде изведено.
И обратно,ако например РХ5 е настроен на изход,то когато и да прочетем в 5-я бит на PinD,винаги ще виждаме 0.
То тогава ,DDRX определя,грубо казано,кой крак на микросхемата ще бъде включен към PinX,и кой към PortX:
0-вход
1-изход на порта-сложна работа еййй....
В нов контролер ,всичките канали са настроени на вход.
Ние трябва да настроим целия порт В на изход.Това значи че всичките битове DDRBтрябва да са равни на 1.Значи в DDRB трябва да се запише „11111111”.
Ние не можем направо да запишем константата в регистър,който не е РОН.Но ние можем да въвъдем значението от РОН в този регистър.
Запознаваме се с първите оператори:
Out-оператор за извеждане на данни от РОН в други регистри
Пример:
out DDRB,Temp1
ldi-оператор за присвояване на константа РОН
примери:
ldi Temp1,14-присвояваме десетична константа /14/
ldi Temp1,0x0E-присвояване на двоична константа/00001110/
Значи,операцията по настроики на портовете се състои от две стъпки:
1.Присвояваме на РОН константа
2.Извеждаме данните от РОН в DDRx
.include "2313def.inc"

.def Temp=R16
.def Temp1=R17
.def Temp2=R18
.def Temp3=R19
.def Temp4=R20

.cseg
.org 0
ldi Temp, 0b11111111 ;присвояване на константа-единиците правят всичките 8 ;крачета от порт В на изход с +5V.
out DDRB,Temp ;изход
това е!Портовето са настроени.
Сега може да въведем някво число и да проверим как работи нашта схема.
Въвеждаме двоичното число 11010010
.cseg
.org 0

ldi Temp, 0b11111111 ;присвояване на константа
out DDRB,Temp ;изход

;въвеждаме числото 11010010 на светодиодите-където има 1 ще има +5V на даденото краче и по него тоците ще отидат в дадения светодиод които пък ще светне за радост и наслада на окото.

ldi Temp,0b11010010 ;присвояване на константа
out PortB,Temp ;изход на индикация
Компилираме,шием,гледаме умно.Трябва да светнат съответните светодиоди.
Такаааа, компилираме-какво ли значеше тази думичка?Има я описана нагоре-за нея ни трябва програмата AVR Studio отиваме в саита на атмел, дърпаме и инсталваме на компа.
След това за които го мързи да търси как се работи с нея:
Написваме програмата в AVRStudio или нотепад.
-отваряме авр студио
-нов проект –записвам го с име в папка на декстопа примерно че по лесно се помни де сме го запратили
-избираме микроконтролера- AT90S2313,не тини2313 защото тини2313 го няма в по старите версии на протеуса за симулацията!
-пишем "програмата" в авр студио,или ако сме я писали в нотепад правим копи и пасте от нотепада в авр студио
-с Ф7 компилирам, бутон за компилация има също над горния ляв ъгъл на прозореца за писане на програмата.
-след компилацията излиза доло обяснение какво е станало, и в папката има вече хех фаила ,както и още няколко други фаила.
-шием-това е програмиране на микроконтролера със програматор/на жаргон се казва зашивам микроконтролера/, но сега ние просто ще симулираме нашта програма "мигалка" в протеуса и програматор няма да ни трябва.Ще гледаме умно в монитора кои диод ще свети и кои няма да свети.
-отваряме протеус със предварително нарисуваната схема
-за да тръгне да работи програмата ни в протеуса трябва да заредим хех фаила в микроконтролера след като сме начертали схемата в протеус-това става с десен клик върху 2313 и опен на папката където е нашия скъпоценен хех фаил :).
-натискаме плаи в протеуса,програмата тръгва да се изпълнява,а ние и се радваме.
Gogo55
Администратор
 
Мнения: 523
Регистриран на: 30 Яну 2010 05:17

Re: ATMEL AVR микроконтролери - първи стъпки

Мнениеот Gogo55 » 02 Фев 2010 04:20

;това е изходния код .asm на програмата-ако на някои му е било трудно ;) да го
;напише сам следваики напътсвията от горното мнение,то може направо да го копи и пастне
; в авр студио или нотепад и да го компилира за да получи заветния .hex

;##########################################################
;##### Начало на програмата ################################

.include "2313def.inc"

.def Temp=R16
.def Temp1=R17
.def Temp2=R18
.def Temp3=R19
.def Temp4=R20

.cseg
.org 0

ldi Temp, 0b11111111 ;присвояване на константа-крачета от порт В на изход
out DDRB,Temp ;изход-порт В е изход

;въвеждаме числото 11010010 на светодиодите

ldi Temp,0b11010010 ;присвояване на константа-1 показва
;кой диоди от 8-те ще светят

out PortB,Temp ;изход на индикация
;###################################################################
;### Край на програмата #############################################
; а на снимката по доло се вижда какво трябва да светне в протеуса
Прикачени файлове
migalka simulazia.jpg
migalka simulazia.jpg (113.48 KiB) Прегледано 16528 пъти
Gogo55
Администратор
 
Мнения: 523
Регистриран на: 30 Яну 2010 05:17

Re: ATMEL AVR микроконтролери - първи стъпки

Мнениеот Gogo55 » 16 Май 2010 19:17

След доста дълго прекъсване, и няколко запитвания дойде време да продължа и тази тема, сега продължаваме с програматор с които вече ще можем да програмираме микроконтролерите на атмел.През моита практика съм правил няколко програматора но само един от тях беше хем пределно лесен и бърз за направа, хем работи безотказно вече 4 години-този съм го правил през март 2006г. и следователно вече се е доказал във времето.Като сложност и цена на елементите е напълно във възможностите на всеки един ученик :) .
Линка на братушката със пълното описание е:
http://avr.nikolaew.org/progr.htm
А аз ще сложа снимки които съм правил при направата на този програматор.Както се вижда от снимките съм драснал платката набързо и с маркер защото си нямах на идея дали ще работи и как ще работи, и после по стар български обичаи си остана на платка без кутия вече 4 години :) , разбира се това че е без кутия толкова време по никакъв начин не пречи да си върши работата перфектно.Едно програмиране на атмел става за не повече от 10 сек .
Прикачени файлове
1.progr.JPG
2.progr.JPG
3.progr.JPG
4.progr.JPG
5.progr.JPG
Gogo55
Администратор
 
Мнения: 523
Регистриран на: 30 Яну 2010 05:17

Re: ATMEL AVR микроконтролери - първи стъпки

Мнениеот Gogo55 » 22 Дек 2010 00:43

Поради наличието на интерес и няколкото въпроса който получих продължавам със темата.Сега ще опиша едно възможно най просто мигане как може да се направи на .асм.Както се вика от детската градина отиваме към забавачницата :) .При горното ми мнение където имаше само светкане на светодиод имаше някои които не можеха да го компилират, или имаха проблем с чертането в протеуса на дадената схема , затова тук при тази задачка ще кача целия проект като .рар-който срещне проблем просто го дърпа,гледа и се радва на мигането на светодиода.Разбира се първо е по добре да се опита сам да направи всичко от написването в нотепада през компилацията в АВР студио и накрая симулацията в протеуса така както е описано в горните мнения.
Самият най-велик сорс със подробно обяснение на всяка една команда от програмата:
;##################################################
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++
;Tuk pisem obsti pikazki za programata-primerno: +
;Ime-Migalka +
;MK-AT90S2313 +
;Avtor-....... +
;Opisanie-Migame edin svetodiod +
;Data-21.XII.2010 +
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++


.include "2313def.inc" ;zaglaven fail za kompilatora-koi 4ip ste se polzva


.def Temp=R16 ;imenuvame si registrite koito ste polzvame
.def Temp1=R17 ; R16-R20,
.def Temp2=R18 ;Temp-Temp4 - 5 broia
.def Temp3=R19
.def Temp4=R20

.cseg ;na4alo na programata
.org 0 ;zadava na4alen adres tuk e =0

ldi Temp,0b11111111 ;nastroika na vsi4ki kra4eta ot port B na izxod
out DDRB,Temp ;port B e na izxod

Begin: ldi Temp,0b00000001 ;svetkame parvia svetodiod-na parvoto kra4e ot PortB puskame +5V
out PortB,Temp ;Port B e na izxod

ldi Temp1,0 ;zadarjame-toest da sveti svetodioda
;za zelta prisvoiavame na temp1 stoinost 0
;ili drugo 4islo ot 0 do 255
ldi Temp2,0 ;sastoto no ve4e s Temp2
ldi Temp3,8 ;sastoto s Temp3

;loop-tova e metka
Loop1: dec Temp1 ;namaliava Temp1 s 4isloto 1 to stava -1/10/
;ili 255

brne Loop1 ;brne-otiva na metka loop1 ako rezultata ne e 0
dec Temp2 ;ako e 0 to prodaljava nadodlo po programata
brne Loop1 ;taka po tozi na4in to broi taktove-minava vreme
dec Temp3
brne Loop1



ldi Temp,0b00000000 ;na vsi4ki kra4eta da stane 0-toest da ugasne svetodioda

out PortB,Temp ;da se izpalni ot Port B

ldi Temp1,0 ;prisvoiavame 0 na Temp1
ldi Temp2,0 ;Prisvoiavame 0 na Temp2
ldi Temp3,8 ;Prisvoiavame 8 na Temp3


Loop2: dec Temp1 ;namaliavame Temp1 s 1-broim vreme za pauzata
brne Loop2
dec Temp2
brne Loop2
dec Temp3
brne Loop2
rjmp Begin ;da otide na Begin=programata zapo4va otna4alo s Begin
;########################################################
Обясненията срещу всяка една команда във сорс кода съм ги написъл нарочно на маимуница защото моето АВР студио ми се разсърди и нещеше да показва кирилица-това е да може просто да си направите копи и пасте в студиото без да се притеснявате че кирилицата ще стане на ?????/питанки/.

Вересията на протеуса чрез която съм симулирал програмката е 7.7 СП2
Сега накратко за няколкото особености при всеки един МК на Атмел:
1.Ресета при атмелите-крачето ресет или казано пин1 ако не се използва от програмата за нещо си, то трябва винаги и по закон божи да бъде подпряно със резистор 5К до 10К към +5V, успоредно на този резистор е препоръчително, но не задължително да има един диод от рода на 1N4148, и отделно към маса да има и един кондензатор със стоиност от 100н.-справка виж схемата.
2.Същото това краче ресет изпълнява същата функция както и копчето ресет на вашия компютър-ако се даде на маса чрез бутон/който бутон можем да сложим по желание/ то веднагически се спира деиствието на програмата и всичко "угасва" докато държим бутона натиснат.След като отпуснем бутона програмата тръгва от начало.
3.Особеност е външния кварцов резонатор или казано по просто кварц.Той се включва към крачета 4 и 5 на дадения МК, и задължително чрез два малки кондера със стоиност от 18пкф до33пкф се дава на маса-виж схемата.При Този МК нямаме вътрешен кварцов резонатор и затова трябва задължително да сложим външен.При всички по нови модели имаме вътрешен кварцов резонатор при които можем да определяме даже и на каква честота да работи примерно на 1МХц, 4МХЦ, или на 8МХц и тогава няма нужда от външен кварц, освен при някои по специфични случай. Примерно часовник или друга програма при която ни трябва точно определена дължина на един такт при което ни трябва тактова честота която да е строго специфична-примерно тогава си избираме външен кварцов резонатор на 13.53125МХц. и от неговата честота зависи с каква бързина ще се изпълнява програмата. Отделно във всеки един Атмел имаме таимери и други видове програмни бъзикни и улеснения чрез които програмно също можем да определяме дадено избрано от нас точно време, или честота.Тук чрез външния кварц можем да приложим една малка хитрост-чрез промяна на честотата на кварца можем да променяма скороста на изпълнения на програмата-в този случаи честотата на мигане на светодиода :) . Тази същата честота можем да променяме и чрез стоиностите които сме задали за Темп1,2,3, или даже без да се срамуваме можем да премахнем, или да си добавим още Темп със стоиности по желание :) и така докато получим нужната ни честота на мигане на този светодиод.
Прикачени файлове
snim migalka.jpg
Migalka.rar
(30.02 KiB) 500 пъти
Gogo55
Администратор
 
Мнения: 523
Регистриран на: 30 Яну 2010 05:17

Re: ATMEL AVR микроконтролери - първи стъпки

Мнениеот alek0630 » 23 Дек 2010 00:04

Здравей
От много време си търся нещо за абсолютно начинаещи и смятам че това ми оправда очакванията на 100%.
Статията е много добре написана и наистина се разбира какво е то МК и как се яде :)

Като си поиграх малко с кода които си пуснал последно установих че ако дам на Temp1 стойност 5 не е същото да дам на Temp3 стойност 5.При задаване на Temp3,5 а на останалите 0 то светодиода мига значително по бързо ???
Любопитно ми е как можем да пускам светлините с натискане на бутон а не с пускане на +5V .
Може ли да разясниш как точно можем да сметнем точно време 2сек. да свети диода и 1500 милисекунди пауза. ( ПРИМЕРНО )
Благодаря
alek0630
новак
 
Мнения: 2
Регистриран на: 19 Дек 2010 12:25

Re: ATMEL AVR микроконтролери - първи стъпки

Мнениеот Gogo55 » 24 Дек 2010 23:35

Трябва да пиша последователно в тази тема защото се води учебна.Така като гледам вече съм прескочил някои неща.Отделно че за копчетата трябва да изпиша още поне две три мнения докато дойде и техния ред.Ще караме последователно защото иначе ще стане още по-голяма обърка.Тези дни като остана по свободен ще продължа с писанията и така докато стигнем до копчетата без да прескачаме ценна информация.
Gogo55
Администратор
 
Мнения: 523
Регистриран на: 30 Яну 2010 05:17

Следваща

Назад към Книги и информация

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 0 госта