Ich beschloss, schreiben Sie ein Programm zur automatischen schließen der Tür in den Block der Herberge nach 24:00 mikrocontroller.
Eigentlich begegnete ich einer riesigen Menge Fallstricke, und so wie der Artikel, um zu entfernen, die Steine habe ich nicht gefunden, und nur mit dieser Methode die bessere Wahl und Artikel auf fremde Internetseiten erreicht werden die richtigen Maßnahmen, die Sie jetzt und beschreiben. Die Mechanismen für die Arbeit, die ich nicht zu beschreiben. Nichts dort komplexen. Das ist meiner Meinung nach schwierigste für mich als Anfänger wird in diesem Artikel beschrieben.
Aufgabe : Machen asynchrone Uhr, die arbeiten werden von einer Batterie des Typs CR2032 trotz der Tatsache, dass der MK muss schlafen süßen Schlaf und nicht zu teuer für uns Stromstärke, und wenn es 0:00 mikrocontroller wachte geändert Zustand der Beine (gab den Impuls Einheit und stellte Sie in die null zu E. Schloss провернулся) und in 6:00 morgen wieder geöffnet, und legte sich schlafen. Uhr dabei arbeiten mussten nicht schleppende nicht auf eine долисекунду. Stellen Sie die Folgen, wenn der Mechanismus funktioniert seit Jahren, wird morgen nicht auf die Straße zu gehen.
Also fangen wir an. Ich habe einen MK Atmega16a-pu (eigentlich fast unterscheidet sich nicht von der Atmega16) und mit ihm die gesamte Schaltung gesteuert wird. Um Sie zu aktivieren der asynchrone Modus ist notwendig, nicht nur den Code, aber und kaufte auf dem Radiomarkt Quarz-Resonator auf 32 768 Hz ich habe es “Match”, kaufen können eine beliebige Art. Schließen Sie ihn an den Pins 28 und 29 nach даташиту.
So-ich bezeichnet Pins 12 und 13, für mehr Stabilität an diese können Sie auf Quarz 4 MHz. Und setzen фьюзы auf der externen RC-generator, aber es ist nach Ihrem Geschmack und Bedarf. Aber die Tatsache, dass die Schaltung wird stabiler und richtiger ist es genau.
Nun, es scheint, alles, was auf der technischen Seite. Gehen Sie auf Programm.
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 мкА (микро а не мили, не путать). } } } |
Solche Aktionen haben wir spärlich Stromverbrauch, nach meinen Berechnungen eine Batterie 220mA СR2032 arbeiten ein Jahr ohne Ersatz-und aufladen. Wenn Sie ein anderes Netzteil, zum Beispiel zwei AA-Batterien, mit 2500 MA dann können sich vorstellen, wie die Schaltung funktioniert
In meinem Code das Programm alles so beschrieben, damit haben Sie gesehen, als er aus dem Schlaf. Das Signal wird nicht in 24:00 und 6:00, und damit war alles deutlich zu sehen ist,. Что-бы изменить программу и сделать ее полностью работоспособной нужно чуть-чуть подправить код. Aber ich denke, Sie ist nicht schwer.
Viel Glück ! Ich hoffe ich konnte helfen !
Wurden in der Arbeit: Atmel Studio 6.0, khazama avr programmer, Programmer - usbasp.