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

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

|
Цитата(demiurg1978 @ May 15 2015, 02:47)  Код #define RC5_T 0x6F1F // F_CPU=16 000 000, PRESCALER=1 #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 Как с этим быть? Поставьте divisor, такой, чтобы соблюдалось условие RC5_T*17>65535. Наобум кажется, что 16 подойдет.  Но у меня компилятор почему-то такой ошибки не выдает.
|
|
|
|
|
May 14 2015, 23:59
|

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

|
Цитата(demiurg1978 @ May 15 2015, 02:55)  ? Не понял. Поставьте divisor=16 (он же prescaler), от этого RC_T уменьшится в 16 раз. Только надобно разобраться, в какой регистр этот дивизор вставлять. Т.е. при ваших 16 МГц при divisor=16 величина RC5_T будет в точности такой же как у love777888, т.е. 0x06F1. Потому что у вас 16 МГц,а у него 1 МГц. P.S. Прошу прощения, у таймере 1 в Меге8 не бывает divisor=16, а бывает только 8 или 64. Значит берем divisor=8, для него получаем RC5_T=0x0DE3. Это число, будучи умноженным на 17, влезет в два байта: 0x0DE3 * 0x11 = 0xEC13 А дивизор 8 добавляем в строку: TCCR1B = _BV(CS10) | _BV(ICNC1) | _BV(CS11); Короче говоря, любыми средствами запускаем Timer1 с периодом 1.778 мсек. Если OCR1A получается слишком велико, то урезаем ее дивизором. P.P.S. А если все равно ничего не выходит, то выставите фузами своей Меге8 режим работы от внутреннего осциллятора - тогда у вас станет как у love777888. Убедитесь, что RC5 работает, а потом вернитесь на кварц, одновременно увеличив дивизор на таймере.
|
|
|
|
|
May 15 2015, 04:52
|
Местный
  
Группа: Участник
Сообщений: 333
Регистрация: 19-12-13
Из: Новосибирск
Пользователь №: 79 709

|
Ксения, у вас в начале программы эти строки: Код // Timer
TCCR1A = 0; TCCR1B = (1<<WGM12) | 0x2; // CTC-mode + divisor=8 (fast) // TCCR1B = (1<<WGM12) | 0x4; // CTC-mode + divisor=256 TCNT1 = 0; #ifdef MYBOARD OCR1A = 0x7CFF; // period = 500 ms error = 0.000% at 16.364 MHz / 256 (fast = 125 ms) #else OCR1A = 0x0F41; // period = 500 ms error = 0.006% at 1.000 MHz / 256 (fast = 125 ms) #endif Не могли бы разъяснить?
|
|
|
|
|
May 15 2015, 04:55
|

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

|
Цитата(demiurg1978 @ May 15 2015, 06:25)  Ну да, придется начать с 1 МГц. Тем более что на 1 МГц все работает. Скажите, отчего вы не хотите ответить, какую марку фотоприемника вы себе купили? Я уж и в личку вам писала и в теме вопрос задавала: Цитата(Xenia @ May 14 2015, 14:57)  P.S. Я вам в личке вопрос задала про то, какой фотоприемник вы купили. Ответьте пожалуйста. но вы упорно отвечать не хотите. Ведь не исключено, что у вас не работает программа только потому, что фотоприемник выбран неверно. Цитата(demiurg1978 @ May 15 2015, 07:52)  Ксения, у вас в начале программы эти строки: ... Не могли бы разъяснить? Это мусор  , остался от прошлого применения Timer1, с тех времен, когда именно по нему опрашивались кнопки, а фотодатчика в схеме еще не было. В последних версиях программы я это место закомментарила. Однако вреда от него нет, поскольку в функции инициализации Rc5_SetRx() регистры этого таймера все равно получают новые значения. Именно поэтому я и проглядела, что в программе сохранился прошлый код. Т.е. сейчас в главном модуле программы (main.c) Timer1 вообще не упоминается, т.к. теперь он задействован в rc5.c.
|
|
|
|
|
May 15 2015, 05:07
|
Местный
  
Группа: Участник
Сообщений: 333
Регистрация: 19-12-13
Из: Новосибирск
Пользователь №: 79 709

|
Я ответил еще вчера. Сообщение 217. Такой же как у вас. Не могли бы разъяснить значение continue в этих строках? Код // Командный монитор switch( lastcmd) // to upper case { case 0: continue; case 0x1B: // Esc break; case 'R': case 'r': PushStr( "Restart\r\n"); Flush(); Restart(); break; case 'S': case 's': Flag ^= Flag_Stop; PushStr( (Flag & Flag_Stop) ? "Stop\r\n" : "Start\r\n"); break; case 'V': case 'v': PushStr( "Version "VERSION"\r\n"); break; case '1': case '2': case '3': case '4': case '5': case '6': continue; } Я ни разу не видел continue в switch-case.
Сообщение отредактировал demiurg1978 - May 15 2015, 05:08
|
|
|
|
|
May 15 2015, 05:13
|

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

|
Цитата(demiurg1978 @ May 15 2015, 08:07)  Не могли бы разъяснить значение continue в этих строках? Я ни разу не видел continue в switch-case. А return и goto вы внутри switch-case видели?  Это вещь вполне допустимая, поскольку continue, return и goto не являются спецификой switch-case, а представляют собой обычные операторы, которыми могут быть заполнены блоки case. В данном случае continue относится к внешнему циклу for, внутри которого оказалась вложена конструкция switch-case. Тут мне не хотелось, чтобы lastcmd обнулялся после выхода из switch, а хотелось, чтобы она сохранила код последнего нажатого символа, т.к. тот задействован в interrupt-процедуре опроса кнопок для их эмуляции с терминала.
|
|
|
|
|
May 15 2015, 06:50
|
Местный
  
Группа: Участник
Сообщений: 207
Регистрация: 1-05-15
Из: Брест
Пользователь №: 86 471

|
Ксения все работает, задержка есть, что будем делать дальше?, для расширения требуется новый контроллер(функции DEFEAT, LOUDNESS, но не принципиально можно сделать на CD4013) новый контроллер скоро будет, но для грундика вроде все ясно, единственный ньюанс в выключенном состоянии, горит светодиод (один из наших 6-ти диодов). Если можно сделать при выключении чтобы все диоды мигнули один раз и выключились. Тоесть не логично усилитель в дежурке, а кроме сетевого диода горит еще наш один диод. Спасибо!
Сообщение отредактировал love777888 - May 15 2015, 06:51
|
|
|
|
|
May 15 2015, 07:03
|

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

|
Цитата(love777888 @ May 15 2015, 09:50)  Ксения все работает, задержка есть, что будем делать дальше?, для расширения требуется новый контроллер(функции DEFEAT, LOUDNESS, но не принципиально можно сделать на CD4013) новый контроллер скоро будет, но для грундика вроде все ясно, единственный ньюанс в выключенном состоянии, горит светодиод (один из наших 6-ти диодов). Если можно сделать при выключении чтобы все диоды мигнули один раз и выключились. То есть не логично усилитель в дежурке, а кроме сетевого диода горит еще наш один диод. Думаю, что пока новый МК не подоспел, вам лучше заняться ревизией ножек сгоревшего японского процессора, с целью выяснения, чем там еще можно полакомиться. Ведь если это логические уровни (высокий или низкий) на прием или передачу, то ровно то же самое можем сделать и мы любым другим МК. Я ранее уже подначивала вас этим заняться, но вы не ответили. Ну, а пока можно и поразвлечься, мечтая о схеме на новой Меге. Например, такой:   Черненькие ножки хотелось бы пока зарезервировать (не использовать), а все остальные из свободных могут быть заняты делом. Таких 11 штук.
|
|
|
|
|
May 15 2015, 07:37
|
Местный
  
Группа: Участник
Сообщений: 333
Регистрация: 19-12-13
Из: Новосибирск
Пользователь №: 79 709

|
Ну как-то так... Видео. Правда всплыл нюанс. Пульт оправляет команды каждые 100 мс. Это видно по Mute. А всплыло на включении дежурного режима. "Уселок" включен. Нажимаю POWER. Он уходит в спячку и заново просыпается. Пока решил так, перед входом в дежурный или рабочий режим обнуляю DataOK. Сижу репу чешу, как обойти этот момент, повтор команд каждые 100 мс...
|
|
|
|
|
  |
3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0
|
|
|