ПредишенСледващото

По-нататъшното развитие на AVR автоматичен ароматизатор на въздуха фитила на freshmatic

Моята версия на най-известните подобрения освежител микроконтролер Atmel ATtiny13A.

Прецизиране е да се свържете с администратора отговор на сензора към родната схема с помощта на тях двигател с ремъчни, светодиоди и това е свързан само към захранването. Има брояч аларми, за да предупреждават за приближаването на течността в резервоара към своя край.


Преминаването на освежители за въздух, за да бъде в изключено положение.

освежител за алгоритъма работи става:
1. Ако отговорът на сензора е потвърдено, че предишната операция беше преди време (по подразбиране е 15 минути)
2. Бременната пауза (по подразбиране 16 секунди), светодиодът мига за информация,
3. Натиснете цилиндър клапан с освежител.

По-нататъшното развитие на AVR автоматичен ароматизатор на въздуха фитила на freshmatic

Добавен е бутон, който можете да отмените операцията по време на фаза 2 или започнете операцията по всяко време.
Също така, с помощта на своите определени настройки и направи брояча за нулиране.

Програмата включва брояч операции и максималния брой задействания на контейнер (по подразбиране 2300).
На уеб сайта на производителя показва приблизителната стойност - 2400.
Първият балон работил някъде в 2340 позитиви.

Стойност, разделена на 10 и се съхранява в EEPROM. След промяната на цилиндъра варира памет клетка, за да се увеличи живота й.

калибриране на вътрешния осцилатор от OSCCAL (взети когато EEPROM клетката 0) е направена за повече или по-малко точна позоваване време, с оглед на честотата, съответстваща - 2,621,440.
Смята се, в преливане прекъсне таймер 0 (работи 10 пъти в секунда).

Бутон обработват PCINT0 да промените ПИН статус, таймерът се използва допълнително да се забавя, за премахване на контакт отпадане.

Сензор - инфрачервен светодиод и фотодиод, с лице един към друг по-горе купата на мивка. фотодиод износени тръби за да се изключи неверни положителни резултати. Предизвикана от пресечната точка на лъча.
Реших да опитам този метод, но е възможно да се свърже датчика за движение.
Задействане INT0 - на падащ фронт.

Native батерии се използват за да пести енергия, когато контролерът е изключен светлината.
Програмата е написана на C в Atmel Studio 6.1.

Ами след това изчакайте за изненади. Мога да ви кажа за това, как ще бъде.
Да предположим, че, както вие казвате, вашият MinRepeatTime е 0. без атомна прехвърлянето в DoNow функции има низ MinRepeatTime = EEPROM_read (EPROM_MinRepeatTime) * 60;
Кой ще бъде равна на новия MinRepeatTime изчислена стойност - това няма значение, нека 0x0100. Важно е, че назначението се случва без атомно, байт "за 2 допускане": 01 и 00. Сега гледам ръката ми: след възлагането на старши
прекъсват настъпили 01 байта. Тъй като нашата "nedoprisvoennaya» MinRepeatTime сега се предполага, че е 0x0100, а след това прекъсване ще бъде изпълнена линия ако (MinRepeatTime) MinRepeatTime--; и MinRepeatTime все още ще 0x0100 - 1 = 0x00FF. След това прекъсване "успешно" приключи и контрол датира DoNow. Там ще се случи на крайния трагедията: променлива MinRepeatTime prisobachit ниско байт и тя ще бъде равна на 0x0000.

Вие разбирате, че броят на контингента и ситуацията може да бъде по-стръмен.

PS. Между другото, описан случай - не е единствената изненада. В оптимизатор може обикновено разхвърлян да управлява променлива MinRepeatTime - например, прави я или zaoptimiztrovat неузнаваемост получи, защото на оптимизатор не знае ли какво се използва някъде другаде по съвсем различен "поток" - е прекъснат (особено ако водачът ще бъде в друг файл) , Вие не кажа компилатор променлива MinRepeatTime думата на летлив. «Тази променлива не е оптимизирана"

Вижте по-долу, тя е била замислена.

Първият е изпълнен с ниски байт променлива, и дори ако за запълване на високо байт ще прекъсне отговор и намаляване на променлива, тя не е за това няма да бъдат засегнати.

Аха. За версията на компилатора 123454321FF, че ще бъде така. По-дълга версия 23454321AA - Можете да се гарантира, че компилаторът ще бъде същото?
И когато все още пишат летливо - тази цел ще продължи. )

Отчасти, това не е специално опакован - памет не е достатъчно.
Бил съм на асемблер прекъсне пренаписана за да се поберат в килобайти ...

EasyEDA: Free Cloud CAD

На живо сега

Свързани статии

Подкрепете проекта - споделете линка, благодаря!