У овом пројекту ћемо дизајнирати једноставан будилник помоћу АТМЕГА32 тајмера. Микроконтролер АТмега32А има 16-битни тајмер, а ми ћемо тај тајмер користити за бројање секунди и развој дигиталног сата.
Сви дигитални сатови имају кристал који је срце сата. Овај кристал није присутан само у сату већ је присутан у свим рачунарским системима у стварном времену. Овај кристал генерише тактове који су потребни за прорачун времена. Иако постоје неки други начини за добивање импулса такта, али због тачности и веће фреквенције већина преферира сат заснован на кристалима. Повезаћемо кристал на АТМЕГА32 ради добијања тачног сата.
Компоненте потребне
Хардвер: АТмега32 микроконтролер, кристал 11.0592МХз, кондензатор 22пФ (2 комада), напајање (5в), АВР-ИСП ПРОГРАМЕР, ЈХД_162АЛЦД (16к2 ЛЦД), кондензатор 100уФ (повезан преко напајања), тастери (четири комада), отпорник 10КΩ (шест комада), 100нФ кондензатор (четири комада), три пинска прекидача (2 комада), 2Н2222 транзистор, зујалица, 200Ω отпорник.
Софтвер: Атмел студио 6.1, прогисп или фласх магиц.
Шема и радно објашњење
За тачно подешавање времена, повезали смо кристал од 11,0592 МХз за сат. Сада за онемогућавање интерног сата АТМЕГА-е морамо променити ЊЕГОВЕ НИСКЕ ОСИГУРАЧЕ. Запамтите да не додирујемо битове високих осигурача како би ЈТАГ комуникација и даље била омогућена.
Да бисмо АТМЕГА-и рекли да онемогући интерни сат и да ради на спољном, морамо поставити:
БАЈТ КОРИШЋЕЊА = 0кФФ или 0б11111111.
У круг ПОРТБ од АТМЕГА32 повезан је на порт за пренос података ЛЦД. Овде треба имати на уму да онемогућите ЈТАГ комуникацију у ПОРТЦ-у АТМЕГА-е променом бајтова високог осигурача, ако желите да ПОРТЦ користите као нормалан комуникациони порт. На ЛЦД екрану од 16к2 има 16 пинова ако постоји црно светло, а ако нема позадинског светла биће 14 пинова. Може се напајати или оставити игле задњег светла. Сада у 14 пинова постоји 8 пинова за податке (7-14 или Д0-Д7), 2 пина за напајање (1 и 2 или ВСС & ВДД или гнд & + 5в), трећи пин за контролу контраста (ВЕЕ - контролише колико дебели знакови треба да буду приказано) и 3 контролна клина (РС & РВ & Е)
У кругу можете приметити да сам узео само два контролна клина. Ово даје флексибилност бољег разумевања, контрастни бит и РЕАД / ВРИТЕ се не користе често, тако да могу бити кратко спојени на масу. Ово ЛЦД поставља у највећи контраст и режим читања. Само треба да контролишемо ЕНАБЛЕ и РС пинове да би у складу са тим слали знакове и податке.
Конекције које се раде за ЛЦД дате су у наставку:
ПИН1 или ВСС на масу
ПИН2 или ВДД или ВЦЦ до + 5в снаге
ПИН3 или ВЕЕ на земљу (даје максимални контраст најбољи за почетнике)
ПИН4 или РС (Избор регистра) на ПД6 од уЦ
ПИН5 или РВ (читање / писање) на масу (ставља ЛЦД у режим читања олакшава комуникацију за корисника)
ПИН6 или Е (Омогући) на ПД5 од уЦ
ПИН7 или Д0 до ПБ0 од уЦ
ПИН8 или Д1 до ПБ1 од уЦ
ПИН9 или Д2 до ПБ2 од уЦ
ПИН10 или Д3 до ПБ3 од уЦ
ПИН11 или Д4 до ПБ4 од уЦ
ПИН12 или Д5 до ПБ5 од уЦ
ПИН13 или Д6 до ПБ6 од уЦ
ПИН14 или Д7 до ПБ7 од уЦ
У кругу можете видети да смо користили 8-битну комуникацију (Д0-Д7), међутим то није обавезно, можемо користити 4-битну комуникацију (Д4-Д7), али са 4-битним комуникацијским програмом постаје помало сложен. Дакле, као што је приказано у горњој табели, повезујемо 10 пинова ЛЦД-а на контролер у којем су 8 пинова пинови за податке и 2 пина за контролу.
Прекидач један је за омогућавање подешавања функције између аларма и времена. Ако је пин низак, можемо подесити време аларма притиском на дугмад. Ако су високи тастери за подешавање само ВРЕМЕНА. Овде су присутна ЧЕТИРИ тастера, први је за повећање МИНУТА у аларму или времену. Друго је за смањење МИНУТА у аларму или времену. Треће је за повећање САТА у аларму или времену. ЧЕТВРТО је за смањење САТИ у аларму или времену.
Овде присутни кондензатори служе за поништавање ефекта одбијања тастера. Ако се уклоне, контролер може бројати више од сваког пута када се притисне дугме. Отпорници повезани за пинове служе за ограничавање струје када се притисне дугме за спуштање клина на земљу.
Кад год се притисне дугме, одговарајући пин регулатора се спушта на земљу и самим тим контролер препознаје да је одређено дугме притиснуто и предузима се одговарајућа радња.
Пре свега, сат који овде бирамо је 11059200 Хз, дељењем са 1024 добија се 10800. Дакле, за сваку секунду добијемо 10800 импулса. Дакле, покренућемо бројач са 1024 предкалирача да бисмо добили бројач на 10800 Хз. Друго, користићемо режим ЦТЦ (Цлеар Тимер Цоунтер) за АТМЕГА. Биће 16-битни регистар у коме можемо да сачувамо вредност (упоредимо вредност), када бројач броји до вредности упоређивања која је постављена да генерише прекид.
Вредност упоређивања поставићемо на 10800, тако да ћемо у основи имати ИСР (Интеррупт Сервице Рутине за свако поређење) за сваку секунду. Дакле, искористићемо ову благовремену рутину да добијемо сат који нам је био потребан.
СМЕЂА (ВГМ10-ВГМ13): Ови битови служе за одабир начина рада за тајмер.
Сада, пошто желимо режим ЦТЦ са упоредном вредношћу у бајту ОЦР1А, само морамо поставити ВГМ12 на један, а преостали су преостали јер су подразумевано нула.
ЦРВЕНА (ЦС10, ЦС11, ЦС12): Ова три бита служе за одабир предскалара и тако добијање одговарајућег бројача сата.
Будући да желимо 1024 као предкалирање, морамо да поставимо и ЦС12 и ЦС10.
Сада постоји још један регистар који бисмо требали узети у обзир:
ЗЕЛЕНО (ОЦИЕ1А): Овај бит мора бити постављен за добијање прекида на упоредном поклапању између вредности бројача и вредности ОЦР1А (10800) које смо поставили.
Вредност ОЦР1А (вредност за упоређивање бројача), уписана је у горњи регистар.
Објашњење програмирања
Рад будилника објашњен је корак по корак у доњем коду:
#инцлуде // заглавље да би се омогућила контрола протока података преко пинова #дефине Ф_ЦПУ 1000000 // казивање учесталости кристалне фреквенције контролера #инцлуде