قررت أن أكتب البرنامج تلقائيا إغلاق الأبواب في وحدة سكن بعد 24:00 ضابط دقيق.
في الحقيقة واجهت عدد كبير من المزالق, ومنذ المواد من أجل إزالة الحجارة وجدت, ولكن فقط متعلم الرهان المواد على المواقع الأجنبية وصلت إلى الإجراءات الصحيحة, و الآن بعد أن كنت تصف. آليات العمل لن تصف. لا يوجد شيء معقد. أهم في رأيي من الصعب بالنسبة لي كمبتدئ سوف يكون الموضحة في هذه المقالة.
وظيفة : جعل متزامنة على مدار الساعة, العمل من بطارية واحدة من نوع CR2032 مع حقيقة أن النادي يحتاج إلى النوم حلو النوم وعدم تناول العسل بالنسبة لنا الحالي, و عندما 0:00 الضابط دقيق استيقظت غيرت الدولة الساقين (أعطى دفعة وحدة و ضع في صفر هـ. تحولت القلعة) و في 6:00 عدت فتحت, و ذهبت إلى السرير. مشاهدة إذا كان هذا العمل لا خلف غير واحد dolinecount. تخيل العواقب إن الآلية التي تعمل منذ سنوات, وفي الصباح لا تذهب خارج.
لذا دعونا نبدأ. لدي MK Atmega16a-pu (في الواقع تقريبا نفس Atmega16) و مع ذلك كله ستدار. لتمكين وضع غير متزامن نحن بحاجة ليس فقط رمز البرنامج, ولكن اشترى في الإذاعة السوق الكوارتز مرنان 32 768 هرتز انا اكتب “المباراة”, يمكن شراء أي نوع. تحتاج إلى الاتصال إلى دبابيس 28 و 29 على الموقع.
لذا ملحوظ دبابيس 12 و 13, وأضاف الاستقرار يمكنك الاتصال الكوارتز 4 MHz. ووضع فتيل بت الخارجية مذبذب 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 سيتم تشغيل سنة واحدة بدون بديل و تغذيتها. إذا قمت بتوصيل مصدر طاقة آخر, على سبيل المثال اثنين من ضعف بطارية, مع 2500 أمي ثم يمكنك أن تتخيل كم مخطط العمل
في قانون بلدي كل شيء وصفها, لذا رأيت عندما خرج من النوم. الإشارة ليست في 24:00 و 6:00, و حتى تشعر كل شيء واضح. Что-бы изменить программу и сделать ее полностью работоспособной нужно чуть-чуть подправить код. ولكن أعتقد أنه لن يكون من الصعب.
بالتوفيق ! أتمنى أني ساعدتك !
تم استخدامه: Atmel Studio 6.0, khazama avr مبرمج, مبرمج - usbasp.