| Микроконтролери и електроника http://mcu-bg.com/mcu_site/ |
|
| Atmega168 Събуждане с външно прекъсване http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=10217 |
Страница 1 от 1 |
| Автор: | klez [ Нед Юни 10, 2012 8:38 pm ] | |||||||||
| Заглавие: | Atmega168 Събуждане с външно прекъсване | |||||||||
Здравейте правя си в момента Power On/Off бутона на джаджата но имам проблеми със събуждането му. За спиране/пускане ползвам хардуерен бутон който е закачен на един от External Interrupt пиновете. кода за неговия Interrupt vector е следният:
В общи линии като натиснеш Power бутона и го задържиш известно време shutdown_timer стига до 50 (ако пуснеш бутона, тази променлива се нулира извън interrupt vector-а). И изпълнява кода който е в IF-а. Sleep режима е: POWER-DOWN След като заспи не мога да го събудя. Въпросите ми са... 1. когато натисна Power бутона ако контролера е в Sleep режим, от къде се изпълнява INT вектора, от там до където е стигнал (sleep_mode() функцията) или се извиква отначало интеръпт вектора. 2. трябва ли да реинициализирам TWI, SPI и т.н. интерфейсите при събуждане или мога просто да продължа от където съм стигнал (т.е. регистрите нулират ли се... би трябвало да се запазват доколкото успях да прочета) |
||||||||||
| Автор: | Cino [ Нед Юни 10, 2012 11:20 pm ] |
| Заглавие: | Re: Atmega168 Събуждане с външно прекъсване |
http://www.avrfreaks.net/index.php?name ... c&p=929272 http://www.avrfreaks.net/index.php?name ... 95&start=0 от тези линкове се вижда че има и други ентусиати които го правят. Но не се прави така, заспиване/събуждане в самото прекъсване за заспиване/събуждане. В линковете се казва че поради хардуерното сваляне на глобалното разрешение на прекъсванията когато се влезе в прекъсване при AVR, събждане в последствие е невъзможно, ако се заспи там. Трябва да е от друго прекъсване за събуждане , само при условие че са разрешени вградени интеръпти, и текущото е спряно преди заспиване ( иначе се препълва стека и се събуждаш с ресет ). Другото , какво прави този delay_ms(100) в прекъсването, то докато е натиснат бутона преди заспиване не се прави нищо друго 5 секунди , по тази логика по-добре веднага с натискането да го приспиш |
|
| Автор: | klez [ Пон Юни 11, 2012 8:24 am ] |
| Заглавие: | Re: Atmega168 Събуждане с външно прекъсване |
Благодаря за отговора ще разгледам темите Това ми е първия опит да приспивам MCU и бях убеден че съм допуснал хиляди грешки |
|
| Автор: | klez [ Пон Юни 11, 2012 1:33 pm ] |
| Заглавие: | Re: Atmega168 Събуждане с външно прекъсване |
П.С. Прегледах го, доста неща ми се изясниха сега покрай приспиването/събуждането на контролерчетата. Благодаря ти още веднъж, Cino, аз доста търсих из Avrfreaks но точно на тези теми не съм попаднал явно. |
|
| Автор: | marcuka68 [ Вто Юни 26, 2012 10:34 am ] |
| Заглавие: | Re: Atmega168 Събуждане с външно прекъсване |
Е то темата май е приключена вече, ама да ти споделя аз как го правя за един проект, с който си играя вкъщи. За сега работи само на симулация, което ще рече, че е повече концептуално, отколкото изпробвано - използвам тайни13А и прекъсването PCINTX - Pin Change, което е налично на доста крачета. - засичам натискане и отпускане на бутона, с една функция, със съответните закъснения. Тогава разрешавам прекъсването и заспивам. В самото прекъсване няма код, използвам го само за събуждане. Гледам, че май и ти на WIN AVR пишеш, там има и EMPTI_INTERRUPT(), което спестява код и е удобно за случая. - след събуждане на контролера от Pin Change, забранявам това прекъсване, чакам със същата функция за обработване на натискане и пускане на бутона, за да не заспи пак контролерът. |
|
| Автор: | a_stankov [ Вто Юни 26, 2012 12:54 pm ] |
| Заглавие: | Re: Atmega168 Събуждане с външно прекъсване |
Все се чудя, имали нещо да става по нормалния начин при ATMEL. Това да го приспиш и да не можеш да го събудиш после. При пикльовците е къде по-лесно, събужда се точно след sleep инструкцията, независимо какво е предизвикало събуждането. Изпълнява една празна инструкция и после газ на музиката т.е. на кода |
|
| Страница 1 от 1 | Часовете са според зоната UTC + 2 часа [ DST ] |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|