DpInRock 0 12 мая, 2008 Опубликовано 12 мая, 2008 (изменено) · Жалоба НЕТТТ!!! Еще раз. 1. Засекаете переход, например в ноль. 2. Включаете таймер. 3. Ждем переход в 1 4. Записываем длительность посылки и обнуляем таймер 5. Ждем переход в ноль 6. Записываем длительность посылки, обнуляем таймер. Гоу то пункт 3. Каждое число полученное в ПРОЦЕССЕ будет говорить о КОЛИЧЕСТВЕ 0 или 1 на конкретном участке. А не ОБ ОДНОМ НУЛЕ ИЛИ ЕДИНИЦЕ. Зная длительность минимального импулься можно расчитать, сколько нулей или единиц содержится в КАЖДОМ ИЗ ПОЛУЧЕННЫХ ЧИСЕЛ!!! Ясно? -- Пример. Длительность нуля 150 Длительность 1 - 200 Длительность 0 -30 Длительность 1 60 .... Из этого делаем вывод что сначала пришло 5 нулей потом 7 единиц потом один НОЛЬ потом 2 единицы. Понятно???? Кода у меня нет. Убил давно. Изменено 12 мая, 2008 пользователем DpInRock Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
tklim 0 12 мая, 2008 Опубликовано 12 мая, 2008 (изменено) · Жалоба НЕТТТ!!! Еще раз. 1. Засекаете переход, например в ноль. 2. Включаете таймер. 3. Ждем переход в 1 4. Записываем длительность посылки и обнуляем таймер 5. Ждем переход в ноль 6. Записываем длительность посылки, обнуляем таймер. Гоу то пункт 3. Каждое число полученное в ПРОЦЕССЕ будет говорить о КОЛИЧЕСТВЕ 0 или 1 на конкретном участке. А не ОБ ОДНОМ НУЛЕ ИЛИ ЕДИНИЦЕ. Зная длительность минимального импулься можно расчитать, сколько нулей или единиц содержится в КАЖДОМ ИЗ ПОЛУЧЕННЫХ ЧИСЕЛ!!! Чем ваш алгоритм отличается от того, что я привет в во 2м или 3ем ответе на эту тему ? Я понимаю, о чем вы говорите, но это лишнее для понимания общей сути. И для того чтобы вычислить "минимальную длину" импульса необходимо собрать массив этих всех импульсов. Изменено 12 мая, 2008 пользователем Клим Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DpInRock 0 13 мая, 2008 Опубликовано 13 мая, 2008 · Жалоба Отличается степенью доходчивости до клиента. Ибо если так непонятно, то надо объяснять сяк. Или эдак. До получения результата. Да последоваельность будет именно такая. 10101010101 - не такая. Против этого я возражал и возражаю. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
tklim 0 13 мая, 2008 Опубликовано 13 мая, 2008 · Жалоба Отличается степенью доходчивости до клиента. Ибо если так непонятно, то надо объяснять сяк. Или эдак. До получения результата. 10101010101 - не такая. Против этого я возражал и возражаю. Смотря как тактировать. Если просто фиксировать изменение фронта сигнала, то будет именно такая :). Т.е. после 1 будет обязательно 0 и наоборот :) Вы же предлагаете синхронизировать каким-нибудь сигналом, изначально не зная какая минимальная длина импульса. Т.е. для записи надо учитывать именно длины импульсов. А вот при распознавании уже можно упаковать это все. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VAHOO 0 13 мая, 2008 Опубликовано 13 мая, 2008 · Жалоба Отличается степенью доходчивости до клиента. Ибо если так непонятно, то надо объяснять сяк. Или эдак. До получения результата. 10101010101 - не такая. Против этого я возражал и возражаю. какой оптимальный вариант настроит таймер? тоесть настроить на 10милисекунд и взять значение TCNTx? или настроить на 1 микросикунд и инкрементироват по прериванию? и как обайтис с протоколм RC-5? там же управляющий бит всега инверсный. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DpInRock 0 13 мая, 2008 Опубликовано 13 мая, 2008 · Жалоба Смотря как тактировать. Если просто фиксировать изменение фронта сигнала, то будет именно такая :). Т.е. после 1 будет обязательно 0 и наоборот :) Вы же предлагаете синхронизировать каким-нибудь сигналом, изначально не зная какая минимальная длина импульса. Т.е. для записи надо учитывать именно длины импульсов. А вот при распознавании уже можно упаковать это все. БИТ, Клим, характеризуется не только ЗНАЧЕНИЕМ, но и ДЛИТЕЛЬНОСТЬЮ!!!! Вы описываете меандр. Настроить таймер на максимальную частоту. Но так, чтобы дительность самого большого интервала с постоянным уровнем укладывалась в 255 единиц инкремента таймер. Никаких прерываний от таймера. Таймер просто считывается в нужные моменты и обнуляется. Если есть возможность, то вход с приемника сделать прерыванием по изменению уровня. Тогда на каждое прерывание такого рода вы будете считывать число из таймера и потом обнулять таймер. Дальше по алгоритму. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
tklim 0 13 мая, 2008 Опубликовано 13 мая, 2008 · Жалоба БИТ, Клим, характеризуется не только ЗНАЧЕНИЕМ, но и ДЛИТЕЛЬНОСТЬЮ!!!! Вы описываете меандр. Бит - это единица информации. Время - это уже другое измерение. Чтобы говорить о битах в посылке ИК-пульта надо точно знать спецификацию протокола. У нас этого всего нет - по этому говорить тут бессмысленно. Нас интересуют ИНТЕРВАЛЫ. Настроить таймер на максимальную частоту. Но так, чтобы дительность самого большого интервала с постоянным уровнем укладывалась в 255 единиц инкремента таймер. Никаких прерываний от таймера. Таймер просто считывается в нужные моменты и обнуляется. Если есть возможность, то вход с приемника сделать прерыванием по изменению уровня. Тогда на каждое прерывание такого рода вы будете считывать число из таймера и потом обнулять таймер. Дальше по алгоритму. Опять же, прочитайте что я писал вначале темы. Фактически тоже самое. Только вот прерывания от таймера НУЖНО. А именно для того чтобы определить окончание посылки. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DpInRock 0 13 мая, 2008 Опубликовано 13 мая, 2008 · Жалоба Не путайте человека. Окончание интервала со стабильным значением бита определяется сменой этого самого значения. Таймер вообще не причем. А, бит, конечно не имеет размерности времени, пока лежит в памяти. А вот при передаче уже имеет размерность времени. Объясняю еще раз. Сначала накапливаем интервал, а потом режем его на один или несколько бит, в зависимости от длины. Таким образом мы всего лишь скокращаем необходимую память для хранения принятой посылки. Но заодно и решае проблему сравнения интервалов, если бы мы не превращали эти интервалы в биты. Ибо тогда пришлось бы как-то округлять эти интервалы при сравнении. Ибо раз от раза они будут все равно разными. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
tklim 0 13 мая, 2008 Опубликовано 13 мая, 2008 · Жалоба Объясняю еще раз. Сначала накапливаем интервал, а потом режем его на один или несколько бит, в зависимости от длины. Таким образом мы всего лишь скокращаем необходимую память для хранения принятой посылки. Но заодно и решае проблему сравнения интервалов, если бы мы не превращали эти интервалы в биты. Ибо тогда пришлось бы как-то округлять эти интервалы при сравнении. Ибо раз от раза они будут все равно разными. Объясняю еще раз:) Мы получаем команду от абсолютно неизвестного пульта. И мы не знаем, пока не приняли всю посылку, какой интервал выбрать за длину 1 передаваемого бита. Так что что вы там резать собрались - не совсем ясно. И если вы будете брать изначально достаточно высокую частоту дискретизации, то рискуете получить при приеме одного и того же пакета, к примеру такие данные: 111111000000111111000111 1111110000000111111000111 Как вы их потом будет округлять ? А за память не беспокойтесь, у меги88 1к ОЗУ. И по моему нет пультов, отправляющих больше 100бит(разве что кондиционерные) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VAHOO 0 13 мая, 2008 Опубликовано 13 мая, 2008 (изменено) · Жалоба Не путайте человека. Окончание интервала со стабильным значением бита определяется сменой этого самого значения. Таймер вообще не причем. А, бит, конечно не имеет размерности времени, пока лежит в памяти. А вот при передаче уже имеет размерность времени. Объясняю еще раз. Сначала накапливаем интервал, а потом режем его на один или несколько бит, в зависимости от длины. Таким образом мы всего лишь скокращаем необходимую память для хранения принятой посылки. Но заодно и решае проблему сравнения интервалов, если бы мы не превращали эти интервалы в биты. Ибо тогда пришлось бы как-то округлять эти интервалы при сравнении. Ибо раз от раза они будут все равно разными. у меня вапрос такой. как определить начало и конец пакета? вот я изучал эти протоколы и можно сказать что махимальная пауза между импулсами примерно 9 милисекунд, милимальная пауза между импулсами примерно 275 микросекунд, махимум тактов 48, тоесть надо делать масив из 48 битов как я понимаю надо настроить таймер так? только для нулей unsigned int MASS[48]; interrupt [TIM0_OVF] void timer0_ovf_isr(void) // prerivanie po 10ms { TCNT0=0x9E; } interrupt [EXT_INT0] void ext_int0_isr(void) { if(!PINB.1) // кагда кнопка нажата { k=1; if (!PIND.2 && i<48) // берем первые 48 тактов { TIMSK0=0x01; // вклю. TAIMER0 TCNT0=0x00; TCCR0B=0x05; while(!PIND.2); // ждем кагда будьет высокий уровень TCCR0B=0x00; // запрет TIMER0 TIMSK0=0x00; MASS= TCNT0; i++; } } if (PINB.1 && k==1) // кагда кнопка отпус. { k=0; i=0; j=0; for (i=0;i<48;i++) { UCSR0B=0x08; // разреш. UART printf("%d",MASS); // принт в терминал UCSR0B=0x00; // запретить UART } } } вот я так пишу, но зависимостьи расстояние между пультом и фотоприемника, разные цифры получаю :( irprotokol.rar Изменено 13 мая, 2008 пользователем VAHOO Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 1 13 мая, 2008 Опубликовано 13 мая, 2008 · Жалоба вот я так пишу... Moderator: Если еще будут постится неформатированные, нечитабельные куски исходников - буду просто удалять. И посты с полным ненужным цитированием - тоже. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VAHOO 0 13 мая, 2008 Опубликовано 13 мая, 2008 · Жалоба Moderator: Если еще будут постится неформатированные, нечитабельные куски исходников - буду просто удалять. И посты с полным ненужным цитированием - тоже. извините пожалуйста! просто кагда я отправляю через ссылку никто не смотрит :( Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DpInRock 0 14 мая, 2008 Опубликовано 14 мая, 2008 · Жалоба http://ww1.microchip.com/downloads/en/AppNotes/01064A.pdf Вот тут все описано. Максимальная длительно стабильного интервала у вас буде 1.7 мс. Это для RC5. У Сони битовый интервал тоже где-то в этих пределах. Вот сделайте так, чтобы таймер заполнялся (пока) за 2 миллисекунды. Т.е. на вход ему надо дать частоту 500 ГЦ*256=128 Кгц примерно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VAHOO 0 14 мая, 2008 Опубликовано 14 мая, 2008 · Жалоба http://ww1.microchip.com/downloads/en/AppNotes/01064A.pdf Вот тут все описано. Максимальная длительно стабильного интервала у вас буде 1.7 мс. Это для RC5. У Сони битовый интервал тоже где-то в этих пределах. Вот сделайте так, чтобы таймер заполнялся (пока) за 2 миллисекунды. Т.е. на вход ему надо дать частоту 500 ГЦ*256=128 Кгц примерно. как обайтис с протоколм RC-5? там же управляющий бит всега инверсный. Вот сделайте так, чтобы таймер заполнялся (пока) за 2 миллисекунды. Т.е. на вход ему надо дать частоту 500 ГЦ*256=128 Кгц примерно. у протокола NEC мах. интервал 9 МИЛИСЕКУНД, скачайте пожалуйста irprotokol.rar Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться