我决定写了个程序来自动关闭的大门,该股的宿舍之后 24:00 微控制.
事实上我面临一个巨大的数陷阱的, 既然条款,以便消除这些石头我找到了, 但只有一个受过教育的赌注以及条款是关于外国网站达到了正确的行动, 现在你描述. 该机制的工作,我将不一一说明. 没有什么复杂的. 大多数在我看让我很难作为一个初学者将这篇文章.
工作 : 让异步的时钟, 工作从一个电池类型CR2032一个事实,那就是,MC需要睡甜美的睡眠和不是吃的蜂蜜是我们目前的, 及时候 0:00 在微控制醒来改变国家的腿 (这推动了联检组和电子零. 城堡转) 在 6:00 我回去打开, 上床睡觉. 看如果这工作不的幕后不一dolinecount. 想象的后果的机制的运作多年, 到了早上不能去外面.
因此,让我们开始. 我有一个MK Atmega16a pu (事实上几乎一样,Atmega16) 和这整个计划将管理. 使 异步模式 我们不仅需要的软件代码, 但是购买的无线电市场 石英共鸣 32 768 赫兹 我的类型 “比赛”, 可以买任何种类. 你必须把它夹住了 28 和 29 关于该网站.
所以我做了记号的针 12 和 13, 为了增加稳定就是你可以联系的石英 4 兆赫. 和确定引信的双边投资条约对外RC振荡器,, 但那是根据你的品味和需要. 但实际上,该制度将成为更稳定和纠正确.
嗯,似乎所有的技术方面. 我们现在去方案.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
/* * GccApplication1.cpp * * Created: 24.01.2022 15:39:08 * Author: Sokol */ #define F_CPU 1000000 // внутри МК процессор работает с частотой 1 мГц что равно 1 000 000 Гц. Указываем это, но не обязательно. #include <avr/io.h> //стандартная библиотека мк. #include <avr/sleep.h> //подключаем библиотеку сна #include <avr/delay.h> //подключаем задержки #include <avr/interrupt.h> //подключаем прерывания #define SLEEP_MODE_PWR_SAVE (_BV(SM0) | _BV(SM1)) //Заменяем фразу SLEEP_MODE_PWR_SAVE на (_BV(SM0) | _BV(SM1)) , чтобы потом было легче. volatile unsigned char second=0, minute=0, hour=0; //Инициализируем переменные ISR(TIMER2_COMP_vect) //Описываем вектор для нашего асинхронного прерывания (что будет выполняться кварцем.) { second++; if (second == 60) { PORTA = 0x01; //Выставляем в логическую единицу на пин 0. sleep_disable(); // Когда пройдет одна минута прерывание так сказать ущепнет МК, и он проснется сам ! (питание будет в районе 1 мА) second=0; minute++; if (minute==60) { minute=0; hour++; if (hour==24) { hour=0; } } } } int main(void) { DDRA = 0x01; asm("cli"); //Обязательно запрещаем прерывания //Стандартная постановка битов в МК для активации ухода в Асинхронный режим. ASSR |=(1<<AS2); while(ASSR != (0b00001000)) { asm("nop"); } TCCR2 |= (1<<CS21)|(1<<CS22)|(1<<WGM21); OCR2 = 127; TIMSK |= (1<<OCIE2); TIFR = 0; //Постановку окончили. (более детально про установку в асинхрон. можно найти в Даташите.) set_sleep_mode(SLEEP_MODE_PWR_SAVE); //Выбираем тип сна, в нашем случае это будет Power-Saver. sleep_enable(); //Выставляем соответствующие биты в МК. asm("sei"); //Разрешаем прерывания. Обязательно! _delay_ms(1000); //Делаем задержку для того чтобы Кварцевый резонатор (часовой) 32 768 Гц включился в асинхрон.режим. Это обязательно !. Число может быть и 500. Но я выбрал именно одну секунду. Для стабильности. while(1) { for(int a=0; a < 500; a++) // Тут все на ваше усмотрение что сделать до того как МК уйдет в сон. { asm ("nop"); } PORTA = 0x00; //Выставляем пин в логический ноль, чтобы лампочка один раз мигнула когда выйдет из сна if (second == 2) //Когда будет 2 секунды уйдем в сон. { sleep_cpu(); // Уход в сон. Снижение потребления энергии у меня не превышает 35 мкА (микро а не мили, не путать). } } } |
这种行动,我们已作出的微薄使用的电力, 根据我的计算、电池和220mA CR2032将在一年而未予替换和补给. 如果你把能量源, 例如两节双a电池, 与 2500 妈妈然后你就可以想象一下如果该计划将工作
在我的代码中所描述的那样,, 所以你看到的时候他就睡觉. 信号不在 24:00 和 6:00, 这样你感觉一切都很清楚. Что-бы изменить программу и сделать ее полностью работоспособной нужно чуть-чуть подправить код. 但我认为这将不难做到.
祝你好运 ! 希望我帮你 !
是用来: Atmel的工作室 6.0, khazama avr的程序员, 程序员 - usbasp.