Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Чем или как создать управление микросхемой Lc7821
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12
demiurg1978
Исходное состояние, после включения МК. Работает только прием RC5. Принимается только сигнал включения уселка. Словили код включения, включаем пин реле уселка, мигаем всеми светодиодами 3 раза, включается задержка включения колонок. Сработала задержка, включилось реле колонок, усилитель готов к работе. Можем принимать остальные коды пульта. Я правильно расписал?

Ксения, придется запускать псевопараллельность некоторых процессов и использовать автоматное программирование. Состояния: инициализация (так как компилятор вставляет блок очистки ОЗУ, нулевое состояние будет инициализацией ввода-вывода, переменных), дежурный режим, рабочий режим.
love777888
Еще раз попытаюсь ответить

В схеме есть реле дежурного режима оно отключает силовой трансформатор тоесть сам усилок, сама дежурка питается от отдельного транса.

ПЕРВОЕ ВКЛЮЧЕНИЕ В СЕТЬ
Если нажать кнопку сеть она МЕХАНИЧЕСКАЯ, то
1) Включается реле дежурки пин PD0, включается силовой транс,
2) Включается индикация, как у нас и есть (но если можно при включении чтобы мигала три раза все диоды)
3) Далее задержка PB2, и управление с пульта, все усилитель готов к использованию.
Тут момент такой, почему здесь не участвует пульт при включениив этом описании, все просто усилитель должен включаится использоваться как пультом так и без оного.

ВЫКЛЮЧЕНИЕ С ПУЛЬТА (КНОПКА СЕТЬ ВКЛЮЧЕНА)
1) Выключаются АС по пину РВ2,
2) Выключается индикация (можно если можно мигнув 1 раз всеми диодами)
3) Выключается реле дежурки PD0, тем самым мы обесточиваем сам усилок, все усилок стоит в дежурке. Пульт включен и слушается только кнопки POWER

ВКЛЮЧЕНИЕ С ПУЛЬТА (КНОПКА СЕТЬ НАЖАТА) ПЕРЕХОД С ДЕЖУРНОГО В АКТИВНОЕ СОСТОЯНИЕ НАЖИМАЕМ POWER
1) Включается реле дежурки PD0,
2) Включается индикация (тройное мигание всех диодов),
3) Далее задержка PB2, и управление с пульта, все усилитель готов к использованию. Срабатывает задержка РВ2, все усилитель готов к использованию.

Ну выключение механической кнопкой понятно что к чему тут.
Если что то не так пишите я отвечу...если опять что не так расписал.
demiurg1978
Ксения, что, мне теперь отдуваться? sm.gif
love777888
Я может не так ставлю задачи? Вы обьясните? Что не так? Не в обиду сказано.
demiurg1978
Цитата(love777888 @ May 13 2015, 13:55) *
Я может не так ставлю задачи? Вы обьясните? Что не так? Не в обиду сказано.

Ваша задача была и так непростая. Ксения вам сделала практически все. Есть одно но. Функционал расширяется. Добавление дежурного режима означает - пересматривать всю программу и переделывать, переписывать ее. Точнее, пересмотреть подход к проекту. Я сейчас делаю вам шаблон программы. Если Ксения согласится участвовать дальше, значит я отдам ей этот шаблон. Если нет, попробуем доделать программу вместе. МК ATMEGA32A. Когда программа будет готова, попробую перекомпилировать под ATMEGA8535, ATMEGA16, ATMEGA16A, ATMEGA162. Чтобы был выбор кристаллов.
love777888
А кто ж говорит, что простая задача здесь стояла. Я и так удивлен, что все получилось. Атмегу162 я уже заказал, вы мне предлагаете список микросхем которых у меня нет, но я поинтересуюсь, что есть в.продаже.
demiurg1978
Цитата(love777888 @ May 13 2015, 14:16) *
Атмегу162 я уже заказал, вы мне предлагаете список микросхем которых у меня нет, но я поинтересуюсь, что есть в.продаже.

ATMEGA162 у меня нет. Есть в наличии ATMEGA32A. Шаблон буду собирать для этого кристалла. Потом будет видно. Раз заказали 162, то пусть так и будет.
Xenia
Цитата(demiurg1978 @ May 13 2015, 09:20) *
Ксения, что, мне теперь отдуваться? sm.gif

Я бы на вашем месте тоже дёру дала.

Ведь постановка задачи совершенно не требует знаний программирования, а легко формулируется в терминах реле - какой из двух уровней (высокий или низкий) должен быть на контакте микросхемы в момент пуска, и при каких обстоятельствах он должен изменяться.

Пока человек просит сделать конкретные вещи, с ним можно работать или сотрудничать. Например, запросы типа: хочу на PB2 в момент пуска низкий уровень, а через 5 секунд сменить на высокий. Или чтобы на PD1 в момент пуска был низкий уровень, а при каждом нажатии кнопки "Tune" на ДПУ его уровень менялся на противоположный. И т.п. При этом даже необязательно самому выбирать, PB2 или PD1 это будет, а просто попросить, чтобы такой контакт был из числа свободных.

Но как только человек начинает что-то бубнить про усилки и дежурные режимы, умалчивая, что ему нужно от контроллера, то дело начинает приобретать опасный оборот. Тем более, когда остался-то всего лишь один последний свободный контакт PD0. Вот тут бы и сказать ясно, что он от этого контакта хочет. А вместо этого пространные рассуждения о дежурном питании и силовом трансе. И все это притом, что максимум, что я могу реально сделать - лишь подрыгать оставшимся свободным контактом.

В такой ситуации я была вынуждена потребовать конкретизации задачи, но в ответ получила отказ - меня отправили перечитывать 142-ой пост про усилок, дежурку и транс. Это явный симптом того, что заказчик сам не знает, что хочет. В таких случаях, если тебя не держит договор, надо срочно спасаться бегством.

Цитата(demiurg1978 @ May 13 2015, 10:35) *
ATMEGA162 у меня нет. Есть в наличии ATMEGA32A. Шаблон буду собирать для этого кристалла. Потом будет видно. Раз заказали 162, то пусть так и будет.

Я ему предлагала ATmega162 даже бесплатно прислать, но не удостоилась даже ответа на свое предложение.
demiurg1978
Цитата(Xenia @ May 13 2015, 14:56) *
...

Ладно, исполнитель и заказчик друг друга не поняли. Бывает. Бегством спасаться пока рано. Попробую постановку задачи сделать я. Надеюсь у нас понимание будет.
Задача. Пусть пин включающий реле питания уселка будет POWER_ON. Пин отвечающий за реле колонок SPEAKER. Кнопка PWR_BTN.

Switch-case, КА, если короче.

Состояния уселка:
0 - инициализация ввода-вывода, переменных. Установка состояния 1.
1 - Работает только опрос кнопок и приемник пульта. Реакция только на нажатие кнопки PWR_BTN и код пульта POWER. Нажали на кнопу уселка PWR_BTN или нажали на кнопу пульта POWER, включаем пин POWER_ON, установка состояния 2.
2 - Мигание светодиодами, задержка включения пина SPEAKER. Если у вас линейное мышление, можно сделать на@пку. 3 секунды на мигание. Остается 2 секунды на задержку SPEAKER. Как только закончилась задержка SPEAKER, инициализируем микросхему, все остальное, установка состояния 3.
3 - В этом режиме уже можно рулить уселком и следить за кнопами PWR_BTN и кодом POWER. Как только нажали на кнопу питания и поймали код POWER отключение пина POWER_ON, установка состояния 1.
Так понятно?
Xenia
Цитата(demiurg1978 @ May 13 2015, 11:14) *
Так понятно?


Вы про LC7821 забыли, а это, между прочим, дает название всей теме.

Вот вы сходу можете ответить, лишится ли питания LC7821 после того, как "силовой транс" отключится? Т.е. питается ли LC7821 от дежурного источника или от силового? А ведь это вопрос не праздный, т.к. от него зависит момент, когда ее надо инициализировать. И инициализации она, по-видимому, требует, т.к. ранее было сказано, что L5R5 и L8R8 должны были постоянно включены.

В данном случае накладываются сразу три действия, относительный порядок которых строго не определен:
1. Краны L5R5 и L8R8 внутри LC7821.
2. PB2 - включение AC.
3. PD0 - включение силового трансформатора.

Положим, силовой трансформатор здесь первый в очереди, но тогда 5 секунд задержки с включением AC должны отсчитываться с этого момента, а не с момента старта. В какой момент надо включать краны L5R5 и L8R8 внутри LC7821 - вообще темный вопрос.

Я к тому, что всю последовательность того, какие рычаги и в каком порядке их надо нажимать, должна была бы описана самим ТС, т.к. именно ему лучше всего известно, что требует его Грюндик в работе. Причем, примитивных понятий об электричестве здесь вполне должно хватать, т.к. вся эта логика по своей сути релейная. Т.е. проблема тут не в программировании, а в том, чтобы выдавить из заказчика рабочую последовательность действий. А если он на этот счет упирается, то работать с ним невозможно.
love777888
Уважаемый demiurg 1978, Вы правильно описали моменты работы, но есть исключение, сетевая кнопка у меня с фиксацией и у нее нет дополнительного контакта или кнопки на усилке по типу того как вы написали pwr btn как это было сделано в немецких телевизорах, там был встроеный контакт прямо в сетевой кнопке кот шел прямо на процессор и делал пуск всего телевизора, поэтому для меня не понятно как можно будет без пульта запустить pwr on, когда пользователь нажал кнопку сеть, полностью обесточенного усителя до этого . Вот о чем я расписывал постами выше. Или сетевая кнопка всегда нажала, но тогда всегда нужен пульт для пуска в работу усилителя, или еще одна кнопка потайная для включения с клавиатуры на панели?
По поводу третьего состояния прежде чем переводить в off необходимо сделать отключение speaker.
demiurg1978
Про колонки да, я забыл. Поторопился написать сообщение. Я весь в вашем проекте. sm.gif Пока давайте разберемся с очень важным вопросом. Что у вас запитано от дежурного транса.
love777888
Ксения, я ничего не упираюсь, зачем мне это? Когда вы мне и так помогли. Просто я навереое совсем другим взглядом, на это смотрю, скорее ремонтник нежели программист, если я чего и забыл вам сказать, не обижайтесь. По поводу презента 162 для меня это просто неудобно, напрягать вас покупкой пересылкой... я заказал микросхему, но я думаю для моих целей еще понадобится, тем более такие чудеса можно делать на этих чипах.
demiurg1978
Модераторы. Удалите пожалуйста.
love777888
Demiurg от дежурного трансформатора, питался японский процессор, поэтому в нашем варианте будет питаться логика нашей атмеги.
Еще раз о алгоритме,
1) Включили в сеть кнопкой,
2) Срабатывает pwr on, на выходе этого пина с атмеги должен быть высокий уровень 5вольт самое то для управления ключем. и реле.
3) С этого мрмента нужно проводить задержку speaker, за эти 5 секунд мы мигаем всеми диодами три раза, и оставляем на задержку самих ас 2сек, как вы и описали.
4) Включаем по умолчанию каналы в Lc 7821.
5) После всего выше мы можем пользоваться Пду, и только сейчас, с пульта мы сможем перейти в дежурку. (это при нажатой механической кнопке сеть).
6) Нажали pwr btn на пульте (на усилителе нету этой кнопки, кроме той что полностью отулючакт усь), начинаем отключать Speaker тухнет вся индикация при этом мигнув один раз всеми диодами, отключаем 5вольт на пине атмега т.е. pwr оn -0. Сама атмега с этого момента слушается только кнопки pwr btn.
7) Захотели мы включить усилитель, нажимаем на пульте еще раз кнопку pwr btn, с этого момента все повторяется по пункту 2.
как то так, если все это делать трудно, я не обижусь буду кнопкой сеть отключать, но тут ньюанс, когда выключать кнопкой то происходит хлопок в ас из за разрядов конденсаторов по сему приходится валкодер полностью выкручивать влево, потому и нужна дежурка что бы грамотно все включать и отключать.
извиняюсь окончания телефон каверкает.
demiurg1978
Цитата(love777888 @ May 13 2015, 17:25) *
...

На видео (сообщение выше) я сымитировал код пду кнопой. Счет светодиодов справа налево. Первый светодиод - как бы ваши 6 светодиодов. Второй реле питания. Последний для отладки. Начало видео - включение уселка.
Все правильно?
love777888
В данный момент я нахожусь на работе, посмотреть не могу из за трафика

да вроде правильно, 1 светодиод справа на лево, все 6 диодов мигнули 3 раза, далее включилось реле pwr on 2-й светодиод. хорошо если я все правильно понял где speaker ? как увидеть код установки лс 7821?
demiurg1978
Поправил проект. Новое видео.
Светодиоды справа налево: Реле включения уселка. Реле колонок. Ваши светодиоды.

Код для Ксении:
CODE

//========================================================================
__C_task main ()
{
wdt_enable (WDTO_15_MS);

init_sys_timer ();

__enable_interrupt ();

Init_Events ();

while (1)
{
__watchdog_reset ();

service_timers ();

proc_amplifier ();

Process_Events ();
}
}
//========================================================================


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_PRESSED_COD:
motor_vol_up_on ();
break;

case KEY_VOLUME_DOWN_PRESSED_COD:
motor_vol_down_on ();
break;

case KEY_VOLUME_UP_UNPRESSED_COD:
motor_vol_up_off ();
break;

case KEY_VOLUME_DOWN_UNPRESSED_COD:
motor_vol_down_off ();
break;

default:
break;
}
}
break;

case PROC_AMPLIFIER_OFF_DELAY_INIT:
speaker_relay_off (); // Отключение реле колонок.

set_timer (ST_SPEAKER_RELAY, NO_RERUN_TIMER, AMPLIFIER_OFF_DELAY);
_proc_amplifier = PROC_AMPLIFIER_OFF_DELAY;
break;

case PROC_AMPLIFIER_OFF_DELAY:
if (wait (ST_SPEAKER_RELAY))
{
pwr_relay_off (); // Отключение реле питания.
_proc_amplifier = PROC_AMPLIFIER_STANDBY_MODE;
}
break;

default:
break;
}
}
//------------------------------------------------------------------------

//========================================================================
void delay_for_speaker (void)
{
switch (_delay_for_speaker)
{
case 0:
set_timer (ST_SPEAKER_RELAY, NO_RERUN_TIMER, SPEAKER_DELAY); // 5 мс для отладки. 5000, 5 секунд.
_delay_for_speaker = 1;
break;

case 1:
if (wait (ST_SPEAKER_RELAY))
{
speaker_relay_on (); // Включение реле динамиков.
Set_Event (EV_ID_SPEAKER_ON, SET_CLR_EVENT);
_delay_for_speaker = 2;
}
break;

default:
break;
}
}
//========================================================================

//========================================================================
void blink_leds (void)
{
static u08 i;

switch (_blink_leds)
{
case 0:
all_leds_on ();

set_timer (ST_LEDS, NO_RERUN_TIMER, BLINK_LEDS_TIME);
_blink_leds = 1;
break;

case 1:
if (wait (ST_LEDS))
{
all_leds_switch ();

if (!(LED_1_DDR & (1<<LED_1)))
{
i++;

if (i >= 3)
{
i = 0;
_blink_leds = 2;
return;
}
}
set_timer (ST_LEDS, NO_RERUN_TIMER, BLINK_LEDS_TIME);
}
break;

default:
break;
}
}
//========================================================================
love777888
demiurg, все верно, я так понял диоды будут три раза мигать а далее, включается первый канал и по умолчанию 5 8 каналы плюс светиться диод первого канала,я правильно понимаю?
demiurg1978
Я сделал проект для Ксении, как должен работать дежурный режим. Плюс светодиоды мигать три раза, плюс задержка включения колонок и задержка между отключением колонок и уселка. Светодиоды справа налево: 1 - реле силового транса. 2 - реле колонок. 3 - как будто ваши 6 светодиодов.
Посмотрите на видео правильно ли реализовано включение и отключение уселка? Алгоритм: включаем питание уселка ШТАТНОЙ КНОПКОЙ питания. Дежурный транс включен, питает логику управления. Включается силовой транс (первый светодиод). Мигают ваши как будто шесть светодиодов 3 раза (третий светодиод). Через 5 секунд после включения включается реле колонок (второй светодиод). Усилитель готов к работе. Имитируем нажатие на кнопку ПДУ Power. Отключаются колонки (второй светодиод). Через 3 секунды отключается реле силового транса (первый светодиод). Теперь опять имитируем нажатие на кнопку ПДУ Power. Начинается заново. Включается реле транса, мигают светодиоды, включаются колонки.
Все верно?
love777888
Ну так об этом я постоянно писал в своих сообщениях, ну и как этот алгоритм записать в атмега 8, включив последний неиспользованный пин? я так понял Ксения не станет компилировать новую прошивку?
demiurg1978
Значит алгоритм верный? Если верный, то нужно определиться с набором функционала. Текущий набор вас устраивает или вы хотели бы еще что-то добавить? Какой кристалл будет в окончательной версии?
Ну а насчет того, будет ли она доделывать, зависит от нее. Ксения, вы получили ответ на свой вопрос? Я все сделал, чтобы заказчик и вы друг друга поняли sm.gif
love777888
Для начала спасибо вам большое! Да алгоритм правильный, в этом усилителе я бы еще хотел использовать такие команды, как defeat и loudness, но это я могу и сам сделать на обычной логике типа cd4013, так как я недумаю, что особый вес был в них с управления с пульта. У меня есть усилитель Sony вот там ситуация караул, в коммутаторе стоят 7823 7822, с разными адресами,куча кнопок, стоит процессор обработки 5.1 и как вы догадались, все командует контроллер, с той же шиной spi. который упален, после грозы. ну это к слову, о том что в сони если ставить то только 40 ножку, а в грундике, если Ксения прокомпилирует прошивку, то хватит, и атмега8. Так что надежда на гуру Ксению.
demiurg1978
Под другой МК перекомпилировать не проблема. Я буду переводчиком, посредником, если что sm.gif Ждем Ксению...
love777888
Только это и делаем ждемс..., в продаже есть 32я дип корпус, продавец не знает с буквой а или нет, или они в дипе вам все с буквой а?
demiurg1978
Забудьте про чип дип. Это зажравшиеся перепродаваны. Симметрон дилер ATMEL. Впрочем смотрите в вашем регионе, кто работает с ATMEL. efind.ru
Xenia
Цитата(love777888 @ May 13 2015, 17:39) *
Только это и делаем ждемс..., в продаже есть 32я дип корпус, продавец не знает с буквой а или нет, или они в дипе вам все с буквой а?

Буква "А" после цифры - обновленная серия. Чуть меньше токопотребление, но архитектурно то же самое, что и без буквы "А".

Мега32 (или Мега32А) - это фактически та же Мега8 (Мега8А), только с памятью в 4 раза большей (32К вместо 8К). Ну и в корпусе DIP40 она бывает, а Мега8 нет.

Тем не менее, Мега162 лучше уже тем, что у нее есть "interrupt PCINT", т.е. способность реагирования на уровне железа на изменение состояния линий портов, тогда как на Меге8 приходиться опрашивать порты с периодичностью 10 мсек (чтобы не прозевать кнопки), что не только занимает один из таймеров, но делает алгоритм "некрасивым". Мега162 в этом отношении не уникум, но она самая дешевая из тех, кто имеет это "интеррапт" и выпускается в корпусе DIP40.

P.S. Вам надо было соглашаться на мой вариант - Мега162 уже давно бы прибыла к вам почтой и по цене ниже, чем у вашего продавца.
love777888
Ксения я сам из беларусии, как для меня яделаю заказы на.алиекспресс, там будет самым выгодным, покупать, эти атмелы , без переплат, в сравнении местный барыга предлагает 32 ю за 7$, в китае 5 32а стоит 9$. так что так делайте выводы, тем более что почта у вас в росии быстрее чем в беларусии, но 162 я заказал у местного цена будет порядка 12$ за одну в то время как в китае две будут столько стоить. но заказал из за времени сказал что скоро поедет в польшу за товаром.
Xenia
Цитата(love777888 @ May 13 2015, 18:15) *
Ксения я сам из беларусии, как для меня яделаю заказы на.алиекспресс, там будет самым выгодным, покупать, эти атмелы , без переплат, в сравнении местный барыга предлагает 32 ю за 7$, в китае 5 32а стоит 9$. так что так делайте выводы, тем более что почта у вас в росии быстрее чем в беларусии, но 162 я заказал у местного цена будет порядка 12$ за одну в то время как в китае две будут столько стоить. но заказал из за времени сказал что скоро поедет в польшу за товаром.


Я полагаю, что 32-я вам не нужна, т.к. не стоит своих денег. А 162-я стоит в Москве 300 руб (6$), т.е. почти как в Китае. Я уж с тех пор, как предлагала вам посредничество, уже дважды в магазине была - купила себе LC7821 и TSOP31236 (фотодиод).
demiurg1978
Мой параллельный проект обрастает функционалом. Добавил громкость. Видео. Какие у вас там еще кнопки? Mute, что еще?
Xenia
Цитата(demiurg1978 @ May 13 2015, 18:27) *
Мой параллельный проект обрастает функционалом. Добавил громкость. Видео. Какие у вас там еще кнопки? Mute, что еще?


Какой-то гнусный ваш проект sm.gif - больше одного диода одновременно гореть не должно.
demiurg1978
Цитата(Xenia @ May 13 2015, 22:30) *
Какой-то гнусный ваш проект sm.gif - больше одного диода одновременно гореть не должно.

? sm.gif
Xenia
Цитата(love777888 @ May 13 2015, 13:25) *
Еще раз о алгоритме,
1) Включили в сеть кнопкой,
2) Срабатывает pwr on, на выходе этого пина с атмеги должен быть высокий уровень 5вольт самое то для управления ключем. и реле.
...


Предлагаю вам простенький вариант, сделанный на коленке sm.gif. А именно - оставить всё так, как есть сейчас, с одной лишь малюсенькой разницей, что на PD0 будет высокий уровень (5 вольт).

Кнопка Power на ДПУ будет "выключательной", т.е. при ее нажатии уровень на PD0 упадет и силовой трансформатор обесточится. Т.е. кнопка Power будет погружать Грюндик в спячку, но не требовать своего нажатия в момент механического включения питания. Мол, раз включили, то надо работать, а не спать.

Кстати, в описании протокола RC5 она как раз и называется STANDBY.

А вот из спящего режима (в который попадают после однократного нажатия Power) выводит ЛЮБАЯ (!) нажатая кнопка, не только ДПУ, но и кнопки на панели. В этом случае Мега8 делает сама себе Resеt, после которого снова наступит обычное состояние бодрствования.
demiurg1978
Цитата(Xenia @ May 13 2015, 22:42) *
...

O_O
Xenia
Алгоритм, описанный в моем прошлом посте, закодирован здесь: as19.

P.S. Поправка!
В прошлом коде обнаружен недочет. Испытывать эту: as20.
demiurg1978
Задействован алгоритм с дежурным питанием. Кнопками сымитировано нажатие кнопки ПДУ 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;
}
love777888
Приду домой обязательно проверю, заказаную микросхему 162 буду ждать, послушаю гуру Ксению ,торопиться с 32 не буду.
Xenia
Цитата(love777888 @ May 13 2015, 19:34) *
Приду домой обязательно проверю, заказаную микросхему 162 буду ждать, послушаю гуру Ксению ,торопиться с 32 не буду.


Вы точно уверены, что DIP40 заказали, а то бывают еще квадратные - TQFP44 и MLF44?
love777888
да дип40 про 44ножку тогда речи не шло.
Xenia
Цитата(love777888 @ May 13 2015, 19:44) *
да дип40 про 44ножку тогда речи не шло.


Я тут обнаружила, что и панельки под DIP40 дорогими стали (дороже 50 руб в розницу). Кстати, из старых выброшенных телевизоров такую панельку можно выковырить. sm.gif Вам такие не встречались?
demiurg1978
Цанговые панельки SCLM-40 в розницу около 50 р. И это нормальная цена. Учитывая, что бакс подорожал.
Xenia
Цитата(demiurg1978 @ May 13 2015, 19:53) *
Цанговые панельки SCLM-40 в розницу около 50 р. И это нормальная цена. Учитывая, что бакс подорожал.


А вот, поглядите какой ужас! - https://www.terraelectronica.ru/catalog.php...p;search=sclm40
demiurg1978
Ксения, вот вам шаблон-проект. В состоянии PROC_AMPLIFIER_INIT инициализируете порты, ввод-вывод, SPI, микросхему и так далее. Опрос кнопок и прием кодов ПДУ в состояниях: PROC_AMPLIFIER_STANDBY_MODE и PROC_AMPLIFIER_WORK_MODE, увидите в коде. В состоянии PROC_AMPLIFIER_STANDBY_MODE прием только кода POWER. В состоянии PROC_AMPLIFIER_WORK_MODE все остальные коды. С этим проектом можно замахнуться и на более жирный МК, чем ATMEGA8 (мой проект скомпилирован и проверен на ATMEGA32A). К сожалению у меня нет в наличии пульта и приемника. Так что коды мне проверить попросту нечем. В моем проекте реализованы дежурный режим. Громкость. Mute. Дело осталось за вами. Если что, пишите здесь или в личку.
Xenia
Цитата(demiurg1978 @ May 13 2015, 20:24) *
Ксения, вот вам шаблон-проект. ... С этим проектом можно замахнуться и на более жирный МК, чем ATMEGA8 (мой проект скомпилирован и проверен на ATMEGA32A). К сожалению у меня нет в наличии пульта и приемника. Так что коды мне проверить попросту нечем. В моем проекте реализованы дежурный режим. Громкость. Mute. Дело осталось за вами. Если что, пишите здесь или в личку.


Так и мне не на чем его проверять. Скомпилите его для Мега8 и предложите love777888. Пусть он и выбирает, чей проект лучше. sm.gif
demiurg1978
Я не работал с RC5 никогда. Поэтому не зная каких-либо нюансов, в слепую, даже пытаться не буду. Впрочем, пусть ТС распишет все входы и выходы. Попробую...
Xenia
Цитата(demiurg1978 @ May 13 2015, 20:32) *
Я не работал с RC5 никогда. Поэтому не зная каких-либо нюансов, в слепую, даже пытаться не буду. Впрочем, пусть ТС распишет все входы и выходы. Попробую...


Нет там никаких нюансов. Добавляете в проект rc5.c, а в программный модуль #include rc5.h

Инициализация (один раз):
Rc5_SetRx();
Работает автономно по прерыванию от Таймера 1.

А дальше в главном цикле периодически проверяете rc5.dataOK. Если не нуль, то код лежит в rc5.command
После использования rc5.dataOK обнуляете.

Код
if( rc5.dataOK)  //  если получены данные с ПДУ
{
  cmd = rc5.command; // забираем команду  

...

  rc5.dataOK = 0; // сбрасываем флаг
}

Коды команд в документе: http://www.cyrusaudio.com/download/av5-av8-remotecodes
demiurg1978
Я в файлах rc5 что-то видел про расчеты вручную. У меня частота кварца 16 МГц. Проблем нет на этой частоте? И еще один вопрос. Насколько другие прерывания будут влиять на RC5?
Xenia
Цитата(demiurg1978 @ May 13 2015, 21:00) *
Я в файлах rc5 что-то видел про расчеты вручную. У меня частота кварца 16 МГц. Проблем нет на этой частоте? И еще один вопрос. Насколько другие прерывания будут влиять на RC5?


Другие прерывания, не помешают. А частота (период 1.778 мс) там (в RC.c) установлена из расчета на рабочую частоту 1 МГц без кварца. Поэтому совершенно неважно, какой кварц у вас, а важно то, что у love777888 этот код работает правильно.
demiurg1978
ТС, давай расклад. Входы, выходы. Будем выходить на жирный МК. Или ты на ATMEGA8 хочешь закончить?
Xenia
Цитата(demiurg1978 @ May 13 2015, 22:07) *
ТС, давай расклад. Входы, выходы. Будем выходить на жирный МК. Или ты на ATMEGA8 хочешь закончить?


Да зачем тут жирный нужен? После компиляции кода получилось всего 2121 байт, т.е. четверть от возможностей Меги8. И это еще вместе со всеми моими отладочными инструментами.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.