Подробно на русском (расписал как смог
)
:МК кристалла: ATmega8(L), 1МГц (для экономии питания).
МК буфера (в Столбе c Буфером):
?- Перед каждым миганием/свечением/дыханием светодиода происходит проверка:
-- вольтажа питания (если меньше нормы, необходимой для достойной яркости светодиода - то "красиво умереть" и ждать, пока вольтаж не станет выше нормы),
-- "заряда кристалла" (если заряд кончился (равен нулю), то "красиво умереть" и ждать, пока "заряд кристалла" не будет равен нулю).
("заряд кристалла" ограничен определённым значением, т.е. он не бесконечен; его максимальное значение можно легко поменять в коде, его минимальное значение = 0)
- "Красиво умереть" - это относительно быстрое (не больше минуты), но привлекающее внимание угасание светодиода. Т.е. как-будто кончилось топливо в машине и она кашляет, бьётся в конвульсиях (проявите фантазию
).
- Сразу после включения светодиод (плюс которого находится на ножке МК PB0) начинает мигать 1 раз в полсекунды, "технически", так сказать, в ожидании какой-нибудь перемычки.
(перемычка = ножка МК с подтягивающим резистором закороченная на минус)
- Максимальная яркость светодиода при мигании/свечении/дыхании зависит от "заряда кристалла" (должно быть 2-4 уровня яркости; чем меньше "заряд кристалла" - тем меньше максимальная яркость.
- Если появилась перемычка ножки PD0 - светодиод Медленно дышит. При этом "заряд кристалла" уменьшается со скоростью "в Экране", т.е.: минус 1 единицу энергии ("заряда кристалла") за 4 секунды реального времени.
- Если появилась перемычка ножки PD1 - светодиод светится. При этом "заряд кристалла" уменьшается со скоростью "в Бижутерии", т.е.: минус 1 единицу энергии ("заряда кристалла") за 1 секунду реального времени.
- Если появилась перемычка ножки PD2 - светодиод Быстро дышит. При этом "заряд кристалла" увеличивается со скоростью "в Столбе", т.е.: плюс 2 единицы энергии ("заряда кристалла") за 1 секунду реального времени.
- Если появились перемычки ножек PD2 и PD3 - светодиод Быстро дышит. При этом "заряд кристалла" увеличивается со скоростью "в Столбе c Буфером", т.е.: плюс 3 единицы энергии ("заряда кристалла") за 1 секунду реального времени.
(при этом в столбе должен стоять ещё 1 МК (он же "буфер"), который имеет свой максимальный "заряд кристалла". МК-буфер заряжается со скоростью "в Столбе", и отдаёт свой "заряд кристалла" вставленному в столб кристаллу. Когда "заряд кристалла" МК-буфера кончается, то вставленный в столб кристалл продолжает заряжаться со скоростью "в Столбе"; буфер не заряжается, пока кристалл вставлен в столб, где находится этот буфер)
- Если появились перемычки ножек PD2, PD3 и PD4 - светодиод Быстро дышит. При этом "заряд кристалла" увеличивается со скоростью "в Мастерском Столбе", т.е. сначала секундная задержка/ожидание (защита от случайного замыкания), а потом моментально сделать "заряд кристалла" максимальным, какой возможен для данного кристалла.
- Если появились перемычки ножек PD0 и(ли) PD1 и(ли) PD2 и(ли) PD3 и(ли) PD4 (т.е. если появились перемычки двух и более ножек, которые не описаны выше, либо если появились перемычки ножек PD3 и PD4, но без PD2 - значит кристалл взяли мокрыми руками/уронили в воду/пытаются читирить/т.п.) - светодиод "Быстро Прогорает".
- Если кристалл вынули из Экрана, не разгадав секрет (т.е. ранее была перемычка ножки PD0, а теперь нет, при этом ранее так же была перемычка ножки PD5, а теперь нет) - "заряд кристалла" моментально в ноль, а т.к. за этим последует проверка "заряда кристалла", то это равносильно "красиво умереть".
(когда кристалл только включили, секрет по умолчанию разгадан. Когда кристалл вставляют в Экран (перемычка ножки PD0), то тогда начинаются постоянные проверки разгадан ли секрет (есть ли перемычка ножки PD5) - если есть, значит секрет разгадан; если нет - значит не разгадан. Т.е. изменить значение
разгаданности секрета можно только если кристалл находится в Экране и больше нигде. А прочитать (но не изменить) это значение (т.е. понять разгадан ли секрет) можно только в состоянии "Снаружи".)
- Состояние "Снаружи" - это когда нет перемычек (кроме, возможно, перемычки ножки PD5 - секрета). В этом состоянии сначала 1 раз проверяется был ли разгадан секрет (была ли перемычка ножки PD5), а потом светодиод светит максимально ярко (но максимальная яркость ограничивается "зарядом кристалла"), возможно, пульсируя. При этом "заряд кристалла" уменьшается со скоростью "Быстро Прогорает", т.е.: минус 300 единиц энергии ("заряда кристалла") за 1 секунду реального времени. Если же проверка был ли разгадан секрет (была ли перемычка ножки PD5) показала, что секрет не был разгадан, то "заряд кристалла" моментально в ноль, а т.к. за этим последует проверка "заряда кристалла", то это равносильно "красиво умереть".
- Если появились перемычки ножек PD0 и PD5 (т.е. если кристалл в Экране и секрет разгадан), то светодиод Быстро дышит. При этом "заряд кристалла" уменьшается со скоростью "в Бижутерии", т.е.: минус 1 единицу энергии ("заряда кристалла") за 1 секунду реального времени.
- Если появились перемычки ножек PD2 или (PD2 и PD3) или (PD2, PD3 и PD4) (т.е. если кристалл в любом из Столбов) и при этом "заряд кристалла" максимальным, какой возможен для данного кристалла - то светодиод светится максимально ярко, возможно, пульсируя.
Если остались вопросы - задавайте, я себе эту картину представляю полностью.
P.S.- в идеале написать это
и на asm,
и на Си (
asm мне всё-таки больше понятен), но я буду рад любому варианту (asm/Си).
P.S.S.- пишите, пожалуйста, в коде как можно больше комментариев: чем их будет больше - тем понятнее будет где за что отвечает и тем меньше я буду что-то уточнять...