Me decidí a escribir un programa para el cierre automático de las puertas en el bloque de los paradores de 24:00 el microcontrolador.
En realidad me encontré gran cantidad de escollos, y así como artículos para eliminar las piedras no he encontrado, y sólo el método científico тыка y artículos en el extranjero sitios que llegó a la acción correcta, que ahora y a describir. Los propios mecanismos de trabajo yo no voy a describir. No hay nada allí complejo. Es mi opinión difícil para mí como un principiante se describe en este artículo.
El trabajo : Hacer asincrónicos reloj, que se van a trabajar de una pila tipo CR2032 que el microcontrolador debe dormir dulce de dormir y no comer es caro para nosotros la fuerza de la corriente, y cuando llega la 0:00 el microcontrolador se despierta cambiaba el estado de las patas (daba impulso a la unidad y ponía a cero para el. el castillo de провернулся) y en 6:00 mañana de vuelta abría, y se iba a dormir. El reloj en este trabajo se deben a la par que una долисекунду. Imagine las consecuencias de ello, si el mecanismo funcionará años, se puede ser y por la mañana no salir a la calle.
Así que vamos a ello. Tengo un mk Atmega16a-pu (en realidad casi no se distingue del Atmega16) y con él, todo el esquema será manejado. Para activar el modo asincrónico es necesario no sólo el código, pero, y el comprado en el radiomercado Resonador de cuarzo en 32 768 Hz tengo el tipo de “el partido de la”, puede comprar cualquier tipo de. Es necesario conectar a los pines 28 y 29 por даташиту.
Lo mismo he designado pines 12 y 13, para mayor estabilidad, puede conectar el cuarzo en 4 Mhz. Y exponer фьюзы en el exterior de la RC generador, pero eso es a su gusto y necesidad. Pero lo que el esquema se hace más profundo y más correcto es exactamente.
Bueno como todos los que por la parte técnica de la. Pasamos al programa.
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 мкА (микро а не мили, не путать). } } } |
Estas acciones hemos realizado un pequeño consumo de electricidad, según mis cálculos, una batería de 220mA СR2032 tendría que trabajar un año sin reemplazo y de la carga. Si conecta una fuente de alimentación, por ejemplo, dos gastos de la batería, con 2500 ma lo mismo puede imaginar cómo el esquema funcionará
En mi código del programa, los describe así, para que usted vio cuando salió de un sueño. La señal no se presenta en 24:00 y 6:00, y para que todo era muy claro. Para cambiar el programa y para hacer plenamente operativo necesita modificar ligeramente el código. Pero creo que te será muy fácil.
Buena suerte ! Espero que te he ayudado !
Se utilizaron en el trabajo: Atmel Studio 6.0, khazama avr programmer, programador - usbasp.