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

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

|
Цитата(demiurg1978 @ May 15 2015, 10:37)  Ну как-то так... Видео. Правда всплыл нюанс. Пульт оправляет команды каждые 100 мс. Это видно по Mute. А всплыло на включении дежурного режима. "Уселок" включен. Нажимаю POWER. Он уходит в спячку и заново просыпается. Пока решил так, перед входом в дежурный или рабочий режим обнуляю DataOK. Сижу репу чешу, как обойти этот момент, повтор команд каждые 100 мс... Чего тут репу чесать? Поставьте паузу 1-2 сек после кнопки STANDBY, и лишь после этого обнулите DataOK. А при выходе из спячки вообще ничего предпринимать не надо, т.к. там и так 5 сек задержки есть при рестарте. P.S. Обратите внимание, что в последней редакции структуру rc5 я внутри процедуры инициализации Rc5_SetRx() обнулила, чтобы при теплом рестарте в ней не оставались данных с прошлого раза.
|
|
|
|
|
May 15 2015, 08:43
|
Местный
  
Группа: Участник
Сообщений: 333
Регистрация: 19-12-13
Из: Новосибирск
Пользователь №: 79 709

|
Цитата(Xenia @ May 15 2015, 15:18)  Судя по величине промежутка 100 мсек (по стандарту там должно быть 110 мсек), это вам не поможет - МК работает быстро, а потому за это время ни один раз успеет увидеть DataOK обнуленным. Я не помнил точную цифру, округлил до 100 мс. В том-то и дело, что МК работает быстро. А у меня подход, никаких долгих циклов. Каждая задача разбивается условиями, флагами, состояниями. Такой подход себя давно оправдал тем, что проекты собираются быстро, как конструктор. Автоматное программирование исключает грубые ошибки. Ну а мелкие выявляются при отладке. Цитата(Xenia @ May 15 2015, 15:18)  P.S. Ваше видео доступно для погляда только вам, для остальных - "автор ограничил доступ к видео" Сделано. Кстати. Такой вопрос. Просто в данный момент мне некогда углубленно вникать. У меня на 16 МГц системный тик 1 мс. Одна итерация main должна с запасом впаковаться в системный тик. Как работает модуль RC5? Если в этом модуле зацикливание больше чем на 1 мс, тады ой...
Сообщение отредактировал demiurg1978 - May 15 2015, 10:22
|
|
|
|
|
May 15 2015, 10:28
|
Местный
  
Группа: Участник
Сообщений: 333
Регистрация: 19-12-13
Из: Новосибирск
Пользователь №: 79 709

|
Цитата(Xenia @ May 15 2015, 15:56)  Не поняла, что вы называете "системным тиком". У меня очередь программных таймеров и обработчик. Аппаратный таймер настроен на 1 мс в случае применения 8 и 16 МГц кварца. 10 мс, если кварц для uart, 7,3728 МГц к примеру. 1 мс, 10 мс - это и есть системный тик. Настройки для RC5 при 16 МГц: Код #define RC5_T 0x006E // F_CPU=16 000 000, PRESCALER=256
void Rc5_SetRx() { // TCCR1B|= _BV(CS10); //без предделителя // TCCR1B|= _BV(ICNC1); //Вкл. подавитель шума на входе захвата // TCCR1B&= ~_BV(ICES1); //Выбор детектируемого фронта на входе захвата // Если ICESn =0, то падающий фронт приводит к захвату, ICESn = 1, то нарастающий фронт. TCCR1B = _BV(CS12) | _BV(ICNC1);
// Регистр маски прерываний таймера-счетчика // _BV(TICIE1) Разрешение прерывания по захвату состояния таймера-счетчика 1; // _BV(OCIE1A);// Разрешение прерывания по совпадению TIMSK |= _BV(TICIE1) | _BV(OCIE1A); OCR1A = RC5_T; TCNT1=0; } Поехало с первого запуска. Точнее, со второго, но я просто поторопился и забыл переставить перемычку кварца на STK-500.
Сообщение отредактировал demiurg1978 - May 15 2015, 10:30
|
|
|
|
|
May 15 2015, 10:57
|

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

|
Цитата(demiurg1978 @ May 15 2015, 13:28)  Настройки для RC5 при 16 МГц: #define RC5_T 0x006E // F_CPU=16 000 000, PRESCALER=256 Зря бы такой большой PRESCALER загнали. Модуль rc5.c измеряет длительность импульсов по захвату, а потому RC5_T*17 желательно растянуть на всю шкалу (16 бит) таймера, чтобы измерение было точнее. Отсюда понятно, почему оно не должно превышать 65535. Т.е. надо выбирать МИНИМАЛЬНЫЙ PRESCALER, обеспечивающим при OCR1A=RC5_T период 1.778 мсек. А если вы ему макушку так сурово подрубили (0x006E*0x11=0x074E), то таймер не достает даже до 1/20 своей шкалы. Ведь как только он достигнет этой макушки, то автомат тут же сбросит его в ноль. Т.е. 19/20 шкалы таймера вы выбросили коту под хвост. Я же специально для вас подробно написала, что при 16 МГц достаточно PRESCALER=8, и даже выражение RC5_T*17 в цифрах посчитала, показав, что оно в 65535 укладывается. Впрочем, мое дело сторона, хозяин - барин.
|
|
|
|
|
May 15 2015, 11:11
|
Местный
  
Группа: Участник
Сообщений: 333
Регистрация: 19-12-13
Из: Новосибирск
Пользователь №: 79 709

|
Я отталкивался от того, что главное заставить таймер отщелкать 1,778 мс. Ща поправлю Момент: Код #define FAULT_TIME_RC5 RC5_T*17 // не должно быть более 65535 Warning[Pe061]: integer operation result is out of range F:\Work\Projects\ATMEL\IAR\C\TEMPLATE_FOR_XENIA\rc5.c 69 Warning[Pe068]: integer conversion resulted in a change of sign F:\Work\Projects\ATMEL\IAR\C\TEMPLATE_FOR_XENIA\rc5.c 69 Код #define FAULT_TIME_RC5 RC5_T*17U // не должно быть более 65535 Total number of warnings: 0
Сообщение отредактировал demiurg1978 - May 15 2015, 11:22
|
|
|
|
|
May 15 2015, 11:46
|
Местный
  
Группа: Участник
Сообщений: 207
Регистрация: 1-05-15
Из: Брест
Пользователь №: 86 471

|
Функции грундика оставшиеся Loudness - функция тонкомпенсации, включается "землей", выключается +5 вольт, триггерный характер работы Defeat -подключает и отключает тембр блок, влючается "землей", отключается +5вольт, триггерный характер работы Speaker A - акустическая система а, (на заднице усилка 1-я пара разьемов идущая на АС), влючается "землей", отключается +5вольт, триггерный характер работы Speaker B - акустическая система b, (на заднице усилка 2-я пара разьемов идущая на АС), влючается "землей", отключается +5вольт, триггерный характер работы Все остальные, это радио и навароты, типа присвоение имени станции, я думаю и без этого можно обойтись. Вобщем как то так Ксения.
Сообщение отредактировал love777888 - May 15 2015, 11:47
|
|
|
|
|
May 15 2015, 12:05
|

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

|
Цитата(love777888 @ May 15 2015, 14:46)  Функции грундика оставшиеся Loudness - функция тонкомпенсации, включается "землей", выключается +5 вольт, триггерный характер работы Defeat -подключает и отключает тембр блок, влючается "землей", отключается +5вольт, триггерный характер работы Speaker A - акустическая система а, (на заднице усилка 1-я пара разьемов идущая на АС), влючается "землей", отключается +5вольт, триггерный характер работы Speaker B - акустическая система b, (на заднице усилка 2-я пара разьемов идущая на АС), влючается "землей", отключается +5вольт, триггерный характер работы Все остальные, это радио и навароты, типа присвоение имени станции, я думаю и без этого можно обойтись. Это вы только про кнопки рассказываете, а меня интересуют прочие контакты японского процессора. 1. Контакты 9 и 10 через транзисторы управляют линиями B и C. Что это? 2. Контакт 20 - RC-OUT. Это что? 3. Что за деталь "VOLUME LED BOARD", к которой идет 22-нога процессора? 4. Нога 16, чем она управляет? 5. Ноги 13 и 24, что они чувствуют? 6. Весь левый край процессора, соединенный разъемом с "TUNER BOARD". Там кроме MUTE что-то полезное есть? STEREO, CL, CE, RDS_CLK, RDS_DATA - это что? 7. Ножки 7 и 11, управляющие через транзисторы линиями SPKA и SPKB - это куда пошло? 8. Вверху FUTABA c цифропоказывающими индикаторами. Схема на нее есть? Достать можно информацию, как ею управлять?
|
|
|
|
|
May 15 2015, 13:34
|
Местный
  
Группа: Участник
Сообщений: 333
Регистрация: 19-12-13
Из: Новосибирск
Пользователь №: 79 709

|
Ксения, я решил проблему с повтором команд пульта. CODE static u08 _wait_rc5_data_ok_null;
//======================================================================== bool wait_rc5_data_ok_null (void) { u08 a = false;
switch (_wait_rc5_data_ok_null) { case 0: a = true; break;
case 1: set_timer (ST_WAIT_RC5_DATA_OK_NULL, NO_RERUN_TIMER, 150); _wait_rc5_data_ok_null = 2; a = false; break;
case 2: if (wait (ST_WAIT_RC5_DATA_OK_NULL)) { if (rc5.dataOK) { rc5.dataOK = 0; set_timer (ST_WAIT_RC5_DATA_OK_NULL, NO_RERUN_TIMER, 150); a = false; } else { _wait_rc5_data_ok_null = 0; a = true; } } break;
default: a = false; break; }
if (a) return true; else return false; } //------------------------------------------------------------------------ #pragma inline void set_wait_rc5_data_ok_null (void) { _wait_rc5_data_ok_null = 1; }
//========================================================================
//======================================================================== case PROC_AMPLIFIER_STANDBY_MODE: // Дежурный режим усилителя. if (wait_rc5_data_ok_null ()) { if (rc5.dataOK) { if (rc5.command == 12) { set_wait_rc5_data_ok_null (); _proc_amplifier = PROC_AMPLIFIER_ON_DELAY_INIT; // включение усилителя. } rc5.dataOK = 0; } } break;
case PROC_AMPLIFIER_WORK_MODE: if (wait_rc5_data_ok_null ()) { if (rc5.dataOK) { switch (rc5.command) { case 12: rc5.dataOK = 0; set_wait_rc5_data_ok_null (); _proc_amplifier = PROC_AMPLIFIER_OFF_DELAY_INIT; // POWER, то - дежурный режим усилителя. return;
case 13: set_wait_rc5_data_ok_null (); mute_switch (); break;
case 16: Set_Event (EV_ID_VOLUME_CHANGE, SET_CLR_EVENT); set_volume_dir (VOLUME_UP); break;
case 17: Set_Event (EV_ID_VOLUME_CHANGE, SET_CLR_EVENT); set_volume_dir (VOLUME_DOWN); break;
default: break; }
rc5.dataOK = 0; } } У нас два типа команд. Повтор не нужен (Mute к примеру). Повтор нужен (громкость к примеру). Думаю по коду все понятно будет. Сейчас работает четко как часы.
|
|
|
|
|
May 15 2015, 15:20
|
Местный
  
Группа: Участник
Сообщений: 207
Регистрация: 1-05-15
Из: Брест
Пользователь №: 86 471

|
Это вы только про кнопки рассказываете, а меня интересуют прочие контакты японского процессора. 1. Контакты 9 и 10 через транзисторы управляют линиями B и C. Что это? 2. Контакт 20 - RC-OUT. Это что? 3. Что за деталь "VOLUME LED BOARD", к которой идет 22-нога процессора? 4. Нога 16, чем она управляет? 5. Ноги 13 и 24, что они чувствуют? 6. Весь левый край процессора, соединенный разъемом с "TUNER BOARD". Там кроме MUTE что-то полезное есть? STEREO, CL, CE, RDS_CLK. RDS_DATA - это что? 7. Ножки 7 и 11, управляющие через транзисторы линиями SPKA и SPKB - это куда пошло? 8. Вверху FUTABA c цифропоказывающими индикаторами. Схема на нее есть? Достать можно информацию, как ею управлять?
1) Это LOUDNESS И DEFEAT о чем я рассказывал Вам 2) Контакт 20 и 26 RC In & RC out я понимаю типа сервисной шины подключаются прямо на процессор через буфер. 3) "VOLUME LED BOARD" Да забыл учесть я думаю валкодер мигает во время своего передвижения влево или вправо а потом горит, когда останавливается, разумеется все должно мигать при работе с пульта ткогда мы жмем VOL+ VOL-. 4) Нога 16 это задержка колонок систем А и Б, в то время как существуют, два порта на процессоре которые управляют системами А и Б. 5) Ножка 13 это Mute в тембр блоке, но зачем там транзистор T615? в цифровой части? по этой шине? Ножка 24 я понимаю отслеживает питание, если меньше нормы усилитель не пустишь, вроде Ресета. 6) Это шины управления тюнером он с RDS-ом, моно/стерео режим, МUTE там как раз таки свой, отдельной темой живущий именно в тюнере. 7) Это системы АС А и Б, в более жирной атмеге можно реализовать. Пока здесь обьеденив два этих пина управляю задержкой АС, но это пока. 8) Это люминисцентный индикатор попробую что нибудь найти на нее.
Мюте вроде работает в норме, повторно нажимаешь вкл выкл сам режим.
Сообщение отредактировал love777888 - May 15 2015, 14:38
|
|
|
|
|
  |
3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0
|
|
|