Двухканальное устройство управления освещением (диммер) для бытового светильника
Курсовой проект - Физика
Другие курсовые по предмету Физика
тие кнопки,
lds Temp, meMinBrightDelayCh1; то надо сбросить
sts mBrightMinCounterCh1, Temp; счетчик времени удержания минимальной яркости на исходное значение.
lds Temp, meMaxBrightDelayCh1; То же для
sts mBrightMaxCounterCh1, Temp; счетчика времени удержания максимальной яркости.
sbrc reUserBits1, ebBrightDirModeCh1; При ebBrightDirModeCh1=1 происходит
rjmp InvertBrightVectorCh1; смена направления изменения яркости, чтобы при следующем нажатии кнопки яркость изменялась в противоположную сторону.
lds Temp, meBrightnessMinCh1; При ebBrightDirModeCh1=0 rBrightnessCh1, Temp; направление изменения яркости сменится на противоположное только в том случае,
breq InvertBrightVectorCh1; если в момент отпускания кнопки яркость находилась на минимальном
lds Temp, meBrightnessMaxCh1; или максимальном значении. Это нужно для того чтобы
cp rBrightnessCh1, Temp; исключить задержку изменения крайнего значения яркости
breq InvertBrightVectorCh1; при следующем нажатии кнопки.
rjmp IsChannel1On
InvertBrightVectorCh1:; Смена направления изменения яркости на противоположное.
mov Temp, rBit1rBit1, 1<<bBrightVectorCh1Temp, bBrightVectorCh1rBit1, 1<<bBrightVectorCh1 IsChannel1On
TurnCh1On:
sbr rBit1, (1<<bIsChannel1On) + (1<<bSoftTurnCh1) + (1<<bBrightVectorCh1); При включении канала устанавливаются признаки включенного канала, плавного включения, вектор яркости направляется в сторону увеличения.
clr rBrightnessCh1; Яркость увеличивается, начиная с нуля.
rjmp Channel2ProcessingOff:reSystemBits, ebOwnersAtHome; В режиме ИПХOwnersAtHomeNotSetCh1rBit1, (1<<bIsChannel1On) + (1<<bIsChannel2On); любое кратковременное нажатие кнопкиrBit1, (1<<bSoftTurnCh1) + (1<<bSoftTurnCh2); выключает оба канала,reSystemBits, (1<<ebOwnersAtHome) + (1<<ebPowerStateCh1) + (1<<ebPowerStateCh2); а также сам режим.GoOutCh1:rBit1, (1<<bIsChannel1On) + (1<<bTurnOffStartedCh1); При выключении канала флаг автоотключения сбрасывается. rBit1, 1<<bSoftTurnCh1
rjmp GoOutCh1
IsChannel1On:; Данная процедура позволяет выполнять действия, требующие включенного
sbrs rBit1, bIsChannel1On; состояния канала при неактивном состоянии плавного включения/выключения.
rjmp Channel2Processing
sbrc reSystemBits, ebOwnersAtHome; Режим ИПХ не требует выполнения последующих команд
rjmp GoOutCh1; (запоминание яркости и режим автоотключения).
lds Temp, mSaveBrightDelayCh1
dec Temp; Декремент таймера запоминания яркости.
sts mSaveBrightDelayCh1, Temp
brne ExitSaveBrightDelayCh1; Как только истечет время таймаута (2,5 сек.), текущая яркость текущего режима будет запомнена в eeprom.
sbrc rBit1, bTurnOffStartedCh1; Но если канал находится в состоянии автоотключения,
rjmp ExitSaveBrightDelayCh1; яркость не запоминается.
sbrc reSystemBits, ebChannel1Mode
rjmp SaveBrightnessMode2Ch1
sbrc reUserBits2, ebSaveBrightM1Ch1; Также яркость не запоминается
sts meLastBright1_1, rBrightnessCh1
rjmp ExitSaveBrightDelayCh1; если это было запрещено пользователем.
SaveBrightnessMode2Ch1:reUserBits2, ebSaveBrightM2Ch1meLastBright1_2, rBrightnessCh11:
rcall TurnOffTimeoutCh1; Из-за малого допустимого смещения команд типа brne (максимум 64 байта) приходится использовать вызов подпрограммы.
GoOutCh1:ZH, HIGH (2*BrightnessTable)ZL, LOW (2*BrightnessTable)ZL, rBrightnessCh1; Значение регистра rBrightness задает величину смещения Temp, 0; в таблице яркости.
adc ZH, Temp
lpm rCh1OffTime, Z; Загрузка в регистр rCh1OffTime условного значения времени через которое канал должен быть погашен.
; ****************Обработка второго канала********************************Processing:rBit1, bSoftTurnCh2CheckButton2rBit1, bIsChannel2OnSoftTurnOffCh2Temp, meOwnersAtHomeBrightreSystemBits, ebOwnersAtHomeCompareBrightnessCh2Temp, meLastBright2_1reSystemBits, ebChannel2ModeTemp, meLastBright2_2:Temp, rBrightnessCh2SoftTurnOnCh2Completed:rBit1, 1<<bSoftTurnCh2reSystemBits, 1<<ebPowerStateCh2rButton2HoldTime, 255Temp, meBrightnessMaxCh2rBrightnessCh2, TempPC+2rBit1, 1<<bBrightVectorCh2GoOutCh2:Temp, meTurnOnSpeedMode1Ch2reSystemBits, ebChannel2ModeTemp, meTurnOnSpeedMode2Ch2rSoftTurnSpeedCh2Temp, rSoftTurnSpeedCh2ExitSoftTurnOnCh2rSoftTurnSpeedCh2rBrightnessCh2:GoOutCh2:reSystemBits, 1<<ebPowerStateCh2rBit1, bTurnOffStartedCh2rSoftOffBrightCh2rBrightnessCh2, rSoftOffBrightCh2SoftTurnOffCh2CompletedTemp, meTurnOffSpeedMode1Ch2reSystemBits, ebChannel2ModeTemp, meTurnOffSpeedMode2Ch2rSoftTurnSpeedCh2Temp, rSoftTurnSpeedCh2ExitSoftTurnOffCh2rSoftTurnSpeedCh2rBrightnessCh2:GoOutCh2Completed:rBit1, 1<<bSoftTurnCh2rBit1, bTurnOffStartedCh2rBit1, 1<<bIsChannel2OnrButton2HoldTime, 255GoOutCh2:pKeyboardIn, sbChannel2Button2IsOffTemp, 255mSaveBrightDelayCh2, TempResetAutoOffTimerCh2rButton2HoldTime, cButtonOnHoldSenseButton2OnHoldrButton2HoldTime, 255PC+2rButton2HoldTimeIsChannel2OnOnHold:rBit1, bTurnOffStartedCh2RestoreBrightnessCh2rBit1, bIsChannel2OnChangeBrightnessCh2pKeyboardIn, sbChannel1TurnCh2InSecondModeTemp, rBit1Temp, (1<<bBrightVectorCh1) + (1<<bBrightVectorCh2)TurnCh2InSecondModereSystemBits, (1<<ebOwnersAtHome) + (1<<ebPowerStateCh1) + (1<<ebPowerStateCh2)OwnersAtHomeTimerTriggerGoOutInSecondMode:reSystemBits, 1<<ebChannel2ModereSystemBits, 1<<ebOwnersAtHomeTurnCh2On:ResetAutoOffTimerCh2rBit1, 1<<bTurnOffStartedCh2reSystemBits, 1<<ebPowerStateCh2rBit1, 1<<bSoftTurnCh2GoOutCh2:reSystemBits, ebOwnersAtHomeGoOutCh2reBrightChangeSpeedCh2, rBrightCounterCh2BrightReadyToChangeCh2rBrightCounterCh2IsChannel2On:rBrightCounterCh2rBit1, bBrightVectorCh2IncreaseBrightnessCh2:Temp, meBrightnessMinCh2Temp, rBrightnessCh2MinBrightnessReachedCh2rBrightnessCh2GoOutCh2:rBrightCounterCh2, reBrightChangeSpeedCh2Temp, mBrightMinCounterCh2TempBrightMinTimeoutIsUpCh2mBrightMinCounterCh2, TempGoOutCh2:Temp, meMinBrightDelayCh2mBrightMinCounterCh2, TemprBit1, 1<<bBrightVectorCh2rBrightCounterCh2GoOutCh2:Temp, meBrightnessMaxCh2rBrightnessCh2, TempMaxBrightnessReachedCh2rBrightnessCh2GoOutCh2:rBrightCounterCh2, reBrightChangeSpeedCh2Temp, mBrightMaxCounterCh2TempBrightMaxTimeoutIsUpCh2mBrightMaxCounterCh2, TempGoOutCh2:Temp, meMaxBrightDelayCh2mBrightMaxCounterCh2, TemprBit1, 1<<bBrightVectorCh2rBrightCounterCh2GoOutCh2IsOff:rButton2HoldTime, 255PC+2rButton2HoldTime, 0rButton2HoldTime, 0IsChannel2OnrButton2HoldTime, cButtonOnHoldSenserButton2HoldTime, 0HoldButton2:rBit1, bIsChannel2OnTurnCh2OffreSystemBits, (1<<ebChannel2Mode) + (1<<ebOwnersAtHome)TurnCh2On:Temp, meMinBrightDelayCh2mBrightMinCounterCh2, TempTemp, meMaxBrightDelayCh2mBrightMaxCounterCh2, TempreUserBits1, ebBrightDirModeCh2InvertBrightVectorCh2Temp, meBrightnessMinCh2rBrightnessCh2, TempInvertBrightVectorCh2Temp, meBrightnessMaxCh2rBrightnessCh2, TempInvertBrightVectorCh2IsChannel2On:Temp, rBit1rBit1, 1<<bBrightVectorCh2Temp, bBrightVectorCh2rBit1, 1<<bBrightVectorCh2IsChannel2OnOn:rBit1, (1<<bIsChannel2On) + (1<<bSoftTurnCh2) + (1<<bBrightVectorCh2)rBrightnessCh2GoOutOff:reSystemBits, ebOwnersAtHomeOwnersAtHomeNotSetCh2rBit1, (1<<bIsChannel1On) + (1<<bIsChannel2On)rBit1, (1<<bSoftTurnCh1) + (1<<bSoftTurnCh2)reSystemBits, (1<<ebOwnersAtHome) + (1<<ebPowerStateCh1) + (1<<ebPowerStateCh2)GoOutCh2:rBit1, (1<<bIsChannel2On) + (1<<bTurnOffStartedCh2)rBit1, 1<<bSoftTurnCh2GoOutCh2On:rBit1, bIsChannel2OnGoOutreSystemBits, ebOwnersAtHomeGoOutCh2Temp, mSaveBrightDelayCh2TempmSaveBrightDelayCh2, TempExitSaveBrightDelayCh2rBit1, bTurnOffStartedCh2ExitSaveBrightDelayCh2reSystemBits, ebChannel2ModeSaveBrightnessMode2Ch2reUserBits2, ebSaveBrightM1Ch2meLastBright2_1, rBrightnessCh2ExitSaveBrightDelayCh2Ch2:reUserBits2, ebSaveBrightM2Ch2meLastBright2_2, rBrightnessCh2:TurnOffTimeoutCh2:ZH, HIGH (2*BrightnessTable)ZL, LOW (2*BrightnessTable)ZL, rBrightnessCh2Temp, 0ZH, TemprCh2OffTime, Z
; ********************Сохранение изменившихся значений в eeprom*******************
GoOut:
ldi Temp, eLastBright1_1; Если значение яркости после последней ре