|
|
  |
Чем или как создать управление микросхемой Lc7821 |
|
|
|
May 13 2015, 15:42
|

Гуру
     
Группа: Модератор FTP
Сообщений: 4 479
Регистрация: 20-02-08
Из: Москва
Пользователь №: 35 237

|
Цитата(love777888 @ May 13 2015, 13:25)  Еще раз о алгоритме, 1) Включили в сеть кнопкой, 2) Срабатывает pwr on, на выходе этого пина с атмеги должен быть высокий уровень 5вольт самое то для управления ключем. и реле. ... Предлагаю вам простенький вариант, сделанный на коленке  . А именно - оставить всё так, как есть сейчас, с одной лишь малюсенькой разницей, что на PD0 будет высокий уровень (5 вольт). Кнопка Power на ДПУ будет "выключательной", т.е. при ее нажатии уровень на PD0 упадет и силовой трансформатор обесточится. Т.е. кнопка Power будет погружать Грюндик в спячку, но не требовать своего нажатия в момент механического включения питания. Мол, раз включили, то надо работать, а не спать. Кстати, в описании протокола RC5 она как раз и называется STANDBY. А вот из спящего режима (в который попадают после однократного нажатия Power) выводит ЛЮБАЯ (!) нажатая кнопка, не только ДПУ, но и кнопки на панели. В этом случае Мега8 делает сама себе Resеt, после которого снова наступит обычное состояние бодрствования.
|
|
|
|
|
May 13 2015, 15:44
|
Местный
  
Группа: Участник
Сообщений: 333
Регистрация: 19-12-13
Из: Новосибирск
Пользователь №: 79 709

|
Цитата(Xenia @ May 13 2015, 22:42)  ... O_O
|
|
|
|
|
May 13 2015, 16:31
|
Местный
  
Группа: Участник
Сообщений: 333
Регистрация: 19-12-13
Из: Новосибирск
Пользователь №: 79 709

|
Задействован алгоритм с дежурным питанием. Кнопками сымитировано нажатие кнопки ПДУ Power. Регулировка громкости. Mute. CODE //======================================================================== void proc_amplifier (void) { static u08 _proc_amplifier;
if (_proc_amplifier != PROC_AMPLIFIER_INIT) { kbd_drv (); }
switch (_proc_amplifier) { case PROC_AMPLIFIER_INIT: // Инициализация ввода-вывода, переменных. // proc_amplifier_init (); // В этом блоке инициализация периферии. ПДУ, SPI, микросхема.
_proc_amplifier = PROC_AMPLIFIER_ON_DELAY_INIT; break;
case PROC_AMPLIFIER_STANDBY_MODE: // Дежурный режим усилителя. if (Get_Event (EV_ID_KEY_PRESSED) && (GetKeyCode () == KEY_POWER_ON_COD)) // Если код ПДУ POWER, то { _proc_amplifier = PROC_AMPLIFIER_ON_DELAY_INIT; // включение усилителя. } break;
case PROC_AMPLIFIER_ON_DELAY_INIT: pwr_relay_on (); // Включение реле питания.
_blink_leds = 0; // Инициализация состояния модуля. _delay_for_speaker = 0; // Инициализация состояния модуля.
_proc_amplifier = PROC_AMPLIFIER_ON_DELAY; break;
case PROC_AMPLIFIER_ON_DELAY: // Мигание светодиодов. Задержка включения колонок. if (Get_Event (EV_ID_SPEAKER_ON)) { _proc_amplifier = PROC_AMPLIFIER_WORK_MODE; return; }
blink_leds (); // Мигание светодиодов. delay_for_speaker (); // Задержка включения колонок. break;
case PROC_AMPLIFIER_WORK_MODE: if (Get_Event (EV_ID_KEY_PRESSED)) // Если код ПДУ { u08 key = GetKeyCode ();
switch (key) { case KEY_POWER_ON_COD: _proc_amplifier = PROC_AMPLIFIER_OFF_DELAY_INIT; // POWER, то - дежурный режим усилителя. break;
case KEY_VOLUME_UP_COD: Set_Event (EV_ID_VOLUME_CHANGE, SET_CLR_EVENT); set_volume_dir (VOLUME_UP); break;
case KEY_VOLUME_DOWN_COD: Set_Event (EV_ID_VOLUME_CHANGE, SET_CLR_EVENT); set_volume_dir (VOLUME_DOWN); break;
case KEY_MUTE_COD: mute_switch (); break;
default: break; } }
proc_motor_vol (); break;
case PROC_AMPLIFIER_OFF_DELAY_INIT: speaker_relay_off (); // Отключение реле колонок.
set_timer (ST_PROC_AMPLIFIER, NO_RERUN_TIMER, AMPLIFIER_OFF_DELAY); _proc_amplifier = PROC_AMPLIFIER_OFF_DELAY; break;
case PROC_AMPLIFIER_OFF_DELAY: if (wait (ST_PROC_AMPLIFIER)) { pwr_relay_off (); // Отключение реле питания. _proc_amplifier = PROC_AMPLIFIER_STANDBY_MODE; } break;
default: break; } } //------------------------------------------------------------------------
//======================================================================== static u08 _proc_motor_vol; static u08 volume_dir;
void proc_motor_vol (void) { switch (_proc_motor_vol) { case 0: if (Get_Event (EV_ID_VOLUME_CHANGE)) // Если код ПДУ { switch (volume_dir) { case VOLUME_UP: motor_vol_up_on (); break;
case VOLUME_DOWN: motor_vol_down_on (); break;
default: break; }
set_timer (ST_PROC_AMPLIFIER, NO_RERUN_TIMER, 200); _proc_motor_vol = 1; } break;
case 1: if (wait (ST_PROC_AMPLIFIER)) { motor_vol_up_off (); motor_vol_down_off ();
_proc_motor_vol = 0; } break;
default: break; } }
void set_volume_dir (u08 dir) { volume_dir = dir; _proc_motor_vol = 0; }
Сообщение отредактировал demiurg1978 - May 13 2015, 16:33
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|