Двухканальное устройство управления освещением (диммер) для бытового светильника

Курсовой проект - Физика

Другие курсовые по предмету Физика

n Temp, ADCH; Иначе производится очередное измерение напряжения. В расчет принимаются только старшие 8 бит АЦП.

rjmp ADCSampling

ADCExit:

cbr rOutChannels, (1<<bChannel1) + (1<<bChannel2); Принудительное выключение каналов при

out pMainOut, rOutChannels; достижении максимально допустимого числа измерений.

clr rCh1OffTime

clr rCh2OffTime

; ******************Выполнение общих процедур для обоих каналов*******************

sbrs reSystemBits, ebOwnersAtHome; При включенном режиме Имитация Присутствия Хозяев (ИПХ)

rjmp Channel1Processing

lds Temp, mOwnersAtHomeSeconds; каждые 10мс происходит декремент счетчика этого режима.

dec TempmOwnersAtHomeSeconds, TempExitOwnersAtHome Temp, 100

; ldi Temp, 5; уменьшение таймаута для ускорения тестирования

sts mOwnersAtHomeSeconds, TempTemp, mOwnersAtHomeMinutesTempmOwnersAtHomeMinutes, TempExitOwnersAtHomeTemp, 60mOwnersAtHomeMinutes, TempTemp, mOwnersAtHomeSharedCellTempmOwnersAtHomeSharedCell, TempExitOwnersAtHome; Как только счетчик отсчитает заданный интервал,rBit1, bIsChannel1On; происходит включение,OwnersAtHomeToOffState; или выключение обоих каналов,rBit1, (1<<bSoftTurnCh1) + (1<<bSoftTurnCh2) + (1<<bIsChannel1On) + (1<<bIsChannel2On) + (1<<bBrightVectorCh1) + (1<<bBrightVectorCh2) reSystemBits, (1<<ebPowerStateCh1) + (1<<ebPowerStateCh2); Если во время включения произойдет сбой питания, то после его восстановления каналы включаться.

lds Temp, meOwnersAtHomeOnPeriod; Если режим случайного выбора значений функции ИПХ не выбран,

sbrs reUserBits1, ebRandomOAH

rjmp OwnersAtHomeSharedCellWrite; то таймер будет отсчитывать заранее заданное значение длительности включенного состояния.

rcall RandomNumber8bit; Если выбран, то формируется случайное значение яркости.

cpi Temp, cMinBrightOAH; Если случайная яркость оказывается меньше cMinBrightOAH (примерно 25% от максимальной яркости),

brsh PC+2

ldi Temp, cMinBrightOAH; она становится равной cMinBrightOAH.

; ldi Temp, 150; заглушка режима случайного выбора яркости функции ИПХ, позволяющая задать требуемую яркость

sts meOwnersAtHomeBright, Temp

rcall RandomNumber8bit; Затем формируется случайное значение длительности работы во включенном состоянии.

cpi Temp, (cMaxDurationOAH + 1); Если случайная длительность превышает (cMaxDurationRndOAH + 1) (240 минут),

brlo PC+2

ldi Temp, cMaxDurationOAH; она заменяется на cMaxDurationRndOAH.

; ldi Temp, 4; заглушка режима случайного выбора длительности включенного состояния функции ИПХ

rjmp OwnersAtHomeSharedCellWrite; После этого происходит запись длительности в соответствующую ячейку памяти.

OwnersAtHomeToOffState:

lds Temp, meOwnersAtHomeOffPeriod;

sbrs reUserBits1, ebRandomOAH; Если режим случайного выбора яркости\длительностей в функции ИПХ включен,

rjmp OwnersAtHomeSetOffState

rcall RandomNumber8bit; происходит выбор случайного значения длительности выключенного состояния.

cpi Temp, (cMaxDurationOAH + 1); Если случайная длительность превышает (cMaxDurationRndOAH + 1) (240 минут),

brlo PC+2

ldi Temp, cMaxDurationOAH; она заменяется на cMaxDurationRndOAH.

; ldi Temp, 4; заглушка режима случайного выбора длительности выключенного состояния функции ИПХ

OwnersAtHomeSetOffState:

cbr rBit1, (1<<bIsChannel1On) + (1<<bIsChannel2On); При переходе в выключенное состояние для обоих каналов сбрасываются признаки включенного состояния

sbr rBit1, (1<<bSoftTurnCh1) + (1<<bSoftTurnCh2); и дается команда плавного выключения.

OwnersAtHomeSharedCellWrite:

sts mOwnersAtHomeSharedCell, Temp; Запись длительности включенного или выключенного состояния в ячейку оперативной памяти.

ExitOwnersAtHome:

; ******************Обработка первого канала****************************Processing: rBit1, bSoftTurnCh1; Если бит установлен, значит надо выполнить

rjmp CheckButton1; включение или выключение канала.

sbrs rBit1, bIsChannel1On; Если канал включен,

rjmp SoftTurnOffCh1; происходит его плавное выключение.

lds Temp, meOwnersAtHomeBright; При включении канала в режиме ИПХ,

sbrc reSystemBits, ebOwnersAtHome

rjmp CompareBrightnessCh1

lds Temp, meLastBright1_1; а также в обычном первом

sbrc reSystemBits, ebChannel1ModeTemp, meLastBright1_2; или втором режиме1:

cp Temp, rBrightnessCh1; происходит плавное нарастание яркости до тех пор,

brne SoftTurnOnCh1; пока ее текущее значение не сравняется с заданным (для режима ИПХ) или предыдущим (для первого или второго режима).

SoftTurnOnCh1Completed:

cbr rBit1, 1<<bSoftTurnCh1; Как только это произойдет, сбрасывается признак плавного режима,

sbr reSystemBits, 1<<ebPowerStateCh1; устанавливается признак включенного состояния,

ldi rButton1HoldTime, 255; и начинается ожидание момента отпускания кнопки.

lds Temp, meBrightnessMaxCh1; Если текущая яркость

cp rBrightnessCh1, Temp; больше или равна максимально допустимой,

brlo PC+2

cbr rBit1, 1<<bBrightVectorCh1; вектор изменения яркости направляется в сторону ее уменьшения.

rjmp GoOutCh1; Состояние кнопки опрашивается в следующем цикле чтобы учесть изменившееся состояние битов.

SoftTurnOnCh1:; Плавное увеличение яркости при включении канала.

lds Temp, meTurnOnSpeedMode1Ch1; Загрузка длительности нарастания яркости, заданной для первого

sbrc reSystemBits, ebChannel1ModeTemp, meTurnOnSpeedMode2Ch1; или второго режима. rSoftTurnSpeedCh1; Инкремент счетчика импульсов, определяющего скорость изменения яркости.

cp Temp, rSoftTurnSpeedCh1; Если значение счетчика еще не сравнялось с заданной длительностью,

brne ExitSoftTurnOnCh1; то выйти из процедуры, оставив текущую яркость неизменной.

clr rSoftTurnSpeedCh1; Если сравнялось, то сбросить счетчик,

inc rBrightnessCh1; и увеличить текущую яркость на единицу.

ExitSoftTurnOnCh1:

rjmp GoOutCh1; Во время плавного включения кнопка не опрашивается.

SoftTurnOffCh1:; Плавное уменьшение яркости при выключении канала.

cbr reSystemBits, 1<<ebPowerStateCh1; Сброс признака включенного состояния (чтобы канал не включился в случае прерывания питания во время плавного выключения канала).

sbrs rBit1, bTurnOffStartedCh1; При втором способе автоотключения яркость нужно снизить до значения, указанного в регистре rSoftOffBrightCh1.

clr rSoftOffBrightCh1; Если же автоотключение не активно, яркость нужно снизить до нуля.

cp rBrightnessCh1, rSoftOffBrightCh1; Если яркость еще не сравнялась

breq SoftTurnOffCh1Completed; с заданным значением,

lds Temp, meTurnOffSpeedMode1Ch1reSystemBits, ebChannel1ModeTemp, meTurnOffSpeedMode2Ch