реклама на сайте
подробности

 
 
4 страниц V  « < 2 3 4  
Reply to this topicStart new topic
> алгоритм для записи пульта в AVR, помогите пожалуйста :(
DpInRock
сообщение May 12 2008, 18:37
Сообщение #46


Гуру
******

Группа: Участник
Сообщений: 2 254
Регистрация: 4-05-07
Из: Moscow
Пользователь №: 27 515



НЕТТТ!!!
Еще раз.
1. Засекаете переход, например в ноль.
2. Включаете таймер.
3. Ждем переход в 1
4. Записываем длительность посылки и обнуляем таймер
5. Ждем переход в ноль
6. Записываем длительность посылки, обнуляем таймер. Гоу то пункт 3.

Каждое число полученное в ПРОЦЕССЕ будет говорить о КОЛИЧЕСТВЕ 0 или 1 на конкретном участке. А не ОБ ОДНОМ НУЛЕ ИЛИ ЕДИНИЦЕ.

Зная длительность минимального импулься можно расчитать, сколько нулей или единиц содержится в КАЖДОМ ИЗ ПОЛУЧЕННЫХ ЧИСЕЛ!!!

Ясно?
--
Пример.
Длительность нуля 150
Длительность 1 - 200
Длительность 0 -30
Длительность 1 60
....

Из этого делаем вывод
что сначала пришло 5 нулей
потом 7 единиц
потом один НОЛЬ
потом 2 единицы.
Понятно????

Кода у меня нет. Убил давно.

Сообщение отредактировал DpInRock - May 12 2008, 18:33


--------------------
On the road again (Canned Heat)
Go to the top of the page
 
+Quote Post
Клим
сообщение May 12 2008, 18:38
Сообщение #47


Местный
***

Группа: Свой
Сообщений: 230
Регистрация: 7-04-08
Из: Украина, Запорожье
Пользователь №: 36 541



Цитата(DpInRock @ May 12 2008, 21:37) *
НЕТТТ!!!
Еще раз.
1. Засекаете переход, например в ноль.
2. Включаете таймер.
3. Ждем переход в 1
4. Записываем длительность посылки и обнуляем таймер
5. Ждем переход в ноль
6. Записываем длительность посылки, обнуляем таймер. Гоу то пункт 3.

Каждое число полученное в ПРОЦЕССЕ будет говорить о КОЛИЧЕСТВЕ 0 или 1 на конкретном участке. А не ОБ ОДНОМ НУЛЕ ИЛИ ЕДИНИЦЕ.

Зная длительность минимального импулься можно расчитать, сколько нулей или единиц содержится в КАЖДОМ ИЗ ПОЛУЧЕННЫХ ЧИСЕЛ!!!

Чем ваш алгоритм отличается от того, что я привет в во 2м или 3ем ответе на эту тему ?
Я понимаю, о чем вы говорите, но это лишнее для понимания общей сути.
И для того чтобы вычислить "минимальную длину" импульса необходимо собрать массив этих всех импульсов.

Сообщение отредактировал Клим - May 12 2008, 18:42
Go to the top of the page
 
+Quote Post
DpInRock
сообщение May 13 2008, 05:13
Сообщение #48


Гуру
******

Группа: Участник
Сообщений: 2 254
Регистрация: 4-05-07
Из: Moscow
Пользователь №: 27 515



Отличается степенью доходчивости до клиента. Ибо если так непонятно, то надо объяснять сяк. Или эдак. До получения результата.

Цитата
Да последоваельность будет именно такая.

10101010101 - не такая. Против этого я возражал и возражаю.


--------------------
On the road again (Canned Heat)
Go to the top of the page
 
+Quote Post
Клим
сообщение May 13 2008, 06:52
Сообщение #49


Местный
***

Группа: Свой
Сообщений: 230
Регистрация: 7-04-08
Из: Украина, Запорожье
Пользователь №: 36 541



Цитата(DpInRock @ May 13 2008, 08:13) *
Отличается степенью доходчивости до клиента. Ибо если так непонятно, то надо объяснять сяк. Или эдак. До получения результата.
10101010101 - не такая. Против этого я возражал и возражаю.

Смотря как тактировать. Если просто фиксировать изменение фронта сигнала, то будет именно такая smile.gif. Т.е. после 1 будет обязательно 0 и наоборот smile.gif
Вы же предлагаете синхронизировать каким-нибудь сигналом, изначально не зная какая минимальная длина импульса.
Т.е. для записи надо учитывать именно длины импульсов. А вот при распознавании уже можно упаковать это все.
Go to the top of the page
 
+Quote Post
VAHOO
сообщение May 13 2008, 10:27
Сообщение #50


Частый гость
**

Группа: Участник
Сообщений: 163
Регистрация: 22-09-05
Пользователь №: 8 834



Цитата(DpInRock @ May 13 2008, 09:13) *
Отличается степенью доходчивости до клиента. Ибо если так непонятно, то надо объяснять сяк. Или эдак. До получения результата.
10101010101 - не такая. Против этого я возражал и возражаю.


какой оптимальный вариант настроит таймер?
тоесть настроить на 10милисекунд и взять значение TCNTx?
или настроить на 1 микросикунд и инкрементироват по прериванию?

и как обайтис с протоколм RC-5?
там же управляющий бит всега инверсный.


--------------------
Прошивка это душа микроконтроллера!
Go to the top of the page
 
+Quote Post
DpInRock
сообщение May 13 2008, 11:41
Сообщение #51


Гуру
******

Группа: Участник
Сообщений: 2 254
Регистрация: 4-05-07
Из: Moscow
Пользователь №: 27 515



Цитата(Клим @ May 13 2008, 10:52) *
Смотря как тактировать. Если просто фиксировать изменение фронта сигнала, то будет именно такая smile.gif. Т.е. после 1 будет обязательно 0 и наоборот smile.gif
Вы же предлагаете синхронизировать каким-нибудь сигналом, изначально не зная какая минимальная длина импульса.
Т.е. для записи надо учитывать именно длины импульсов. А вот при распознавании уже можно упаковать это все.

БИТ, Клим, характеризуется не только ЗНАЧЕНИЕМ, но и ДЛИТЕЛЬНОСТЬЮ!!!!
Вы описываете меандр.

Настроить таймер на максимальную частоту. Но так, чтобы дительность самого большого интервала с постоянным уровнем укладывалась в 255 единиц инкремента таймер.
Никаких прерываний от таймера. Таймер просто считывается в нужные моменты и обнуляется.

Если есть возможность, то вход с приемника сделать прерыванием по изменению уровня.
Тогда на каждое прерывание такого рода вы будете считывать число из таймера и потом обнулять таймер.
Дальше по алгоритму.


--------------------
On the road again (Canned Heat)
Go to the top of the page
 
+Quote Post
Клим
сообщение May 13 2008, 12:35
Сообщение #52


Местный
***

Группа: Свой
Сообщений: 230
Регистрация: 7-04-08
Из: Украина, Запорожье
Пользователь №: 36 541



Цитата(DpInRock @ May 13 2008, 14:41) *
БИТ, Клим, характеризуется не только ЗНАЧЕНИЕМ, но и ДЛИТЕЛЬНОСТЬЮ!!!!
Вы описываете меандр.

Бит - это единица информации. Время - это уже другое измерение.
Чтобы говорить о битах в посылке ИК-пульта надо точно знать спецификацию протокола. У нас этого всего нет - по этому говорить тут бессмысленно. Нас интересуют ИНТЕРВАЛЫ.
Цитата
Настроить таймер на максимальную частоту. Но так, чтобы дительность самого большого интервала с постоянным уровнем укладывалась в 255 единиц инкремента таймер.
Никаких прерываний от таймера. Таймер просто считывается в нужные моменты и обнуляется.

Если есть возможность, то вход с приемника сделать прерыванием по изменению уровня.
Тогда на каждое прерывание такого рода вы будете считывать число из таймера и потом обнулять таймер.
Дальше по алгоритму.

Опять же, прочитайте что я писал вначале темы. Фактически тоже самое.
Только вот прерывания от таймера НУЖНО. А именно для того чтобы определить окончание посылки.
Go to the top of the page
 
+Quote Post
DpInRock
сообщение May 13 2008, 13:08
Сообщение #53


Гуру
******

Группа: Участник
Сообщений: 2 254
Регистрация: 4-05-07
Из: Moscow
Пользователь №: 27 515



Не путайте человека. Окончание интервала со стабильным значением бита определяется сменой этого самого значения. Таймер вообще не причем.

А, бит, конечно не имеет размерности времени, пока лежит в памяти. А вот при передаче уже имеет размерность времени.



Объясняю еще раз.
Сначала накапливаем интервал, а потом режем его на один или несколько бит, в зависимости от длины.
Таким образом мы всего лишь скокращаем необходимую память для хранения принятой посылки.

Но заодно и решае проблему сравнения интервалов, если бы мы не превращали эти интервалы в биты. Ибо тогда пришлось бы как-то округлять эти интервалы при сравнении. Ибо раз от раза они будут все равно разными.


--------------------
On the road again (Canned Heat)
Go to the top of the page
 
+Quote Post
Клим
сообщение May 13 2008, 13:48
Сообщение #54


Местный
***

Группа: Свой
Сообщений: 230
Регистрация: 7-04-08
Из: Украина, Запорожье
Пользователь №: 36 541



Цитата(DpInRock @ May 13 2008, 16:08) *
Объясняю еще раз.
Сначала накапливаем интервал, а потом режем его на один или несколько бит, в зависимости от длины.
Таким образом мы всего лишь скокращаем необходимую память для хранения принятой посылки.

Но заодно и решае проблему сравнения интервалов, если бы мы не превращали эти интервалы в биты. Ибо тогда пришлось бы как-то округлять эти интервалы при сравнении. Ибо раз от раза они будут все равно разными.

Объясняю еще разsmile.gif
Мы получаем команду от абсолютно неизвестного пульта. И мы не знаем, пока не приняли всю посылку, какой интервал выбрать за длину 1 передаваемого бита. Так что что вы там резать собрались - не совсем ясно.
И если вы будете брать изначально достаточно высокую частоту дискретизации, то рискуете получить при приеме одного и того же пакета, к примеру такие данные:

111111000000111111000111
1111110000000111111000111
Как вы их потом будет округлять ?
А за память не беспокойтесь, у меги88 1к ОЗУ. И по моему нет пультов, отправляющих больше 100бит(разве что кондиционерные)
Go to the top of the page
 
+Quote Post
VAHOO
сообщение May 13 2008, 19:52
Сообщение #55


Частый гость
**

Группа: Участник
Сообщений: 163
Регистрация: 22-09-05
Пользователь №: 8 834



Цитата(DpInRock @ May 13 2008, 17:08) *
Не путайте человека. Окончание интервала со стабильным значением бита определяется сменой этого самого значения. Таймер вообще не причем.

А, бит, конечно не имеет размерности времени, пока лежит в памяти. А вот при передаче уже имеет размерность времени.
Объясняю еще раз.
Сначала накапливаем интервал, а потом режем его на один или несколько бит, в зависимости от длины.
Таким образом мы всего лишь скокращаем необходимую память для хранения принятой посылки.

Но заодно и решае проблему сравнения интервалов, если бы мы не превращали эти интервалы в биты. Ибо тогда пришлось бы как-то округлять эти интервалы при сравнении. Ибо раз от раза они будут все равно разными.


у меня вапрос такой.
как определить начало и конец пакета?

вот я изучал эти протоколы и можно сказать что

махимальная пауза между импулсами примерно 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[i]= 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[i]); // принт в терминал

UCSR0B=0x00; // запретить UART


}

}

}



вот я так пишу, но зависимостьи расстояние между пультом и фотоприемника, разные цифры получаю sad.gif

Сообщение отредактировал VAHOO - May 13 2008, 19:57
Прикрепленные файлы
Прикрепленный файл  irprotokol.rar ( 6.65 килобайт ) Кол-во скачиваний: 257
 


--------------------
Прошивка это душа микроконтроллера!
Go to the top of the page
 
+Quote Post
zltigo
сообщение May 13 2008, 19:56
Сообщение #56


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(VAHOO @ May 13 2008, 21:52) *
вот я так пишу...

Moderator:
Если еще будут постится неформатированные, нечитабельные куски исходников - буду просто удалять. И посты с полным ненужным цитированием - тоже.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
VAHOO
сообщение May 13 2008, 20:01
Сообщение #57


Частый гость
**

Группа: Участник
Сообщений: 163
Регистрация: 22-09-05
Пользователь №: 8 834



Цитата(zltigo @ May 13 2008, 23:56) *
Moderator:
Если еще будут постится неформатированные, нечитабельные куски исходников - буду просто удалять. И посты с полным ненужным цитированием - тоже.


извините пожалуйста! просто кагда я отправляю через ссылку никто не смотрит sad.gif


--------------------
Прошивка это душа микроконтроллера!
Go to the top of the page
 
+Quote Post
DpInRock
сообщение May 14 2008, 13:06
Сообщение #58


Гуру
******

Группа: Участник
Сообщений: 2 254
Регистрация: 4-05-07
Из: Moscow
Пользователь №: 27 515



http://ww1.microchip.com/downloads/en/AppNotes/01064A.pdf

Вот тут все описано.
Максимальная длительно стабильного интервала у вас буде 1.7 мс.
Это для RC5.
У Сони битовый интервал тоже где-то в этих пределах.
Вот сделайте так, чтобы таймер заполнялся (пока) за 2 миллисекунды. Т.е. на вход ему надо дать частоту 500 ГЦ*256=128 Кгц примерно.


--------------------
On the road again (Canned Heat)
Go to the top of the page
 
+Quote Post
VAHOO
сообщение May 14 2008, 13:15
Сообщение #59


Частый гость
**

Группа: Участник
Сообщений: 163
Регистрация: 22-09-05
Пользователь №: 8 834



[quote name='DpInRock' post='411047' date='May 14 2008, 17:06']
http://ww1.microchip.com/downloads/en/AppNotes/01064A.pdf

Вот тут все описано.
Максимальная длительно стабильного интервала у вас буде 1.7 мс.
Это для RC5.
У Сони битовый интервал тоже где-то в этих пределах.
Вот сделайте так, чтобы таймер заполнялся (пока) за 2 миллисекунды. Т.е. на вход ему надо дать частоту 500 ГЦ*256=128 Кгц примерно.
[/quote]

как обайтис с протоколм RC-5?
там же управляющий бит всега инверсный.



Вот сделайте так, чтобы таймер заполнялся (пока) за 2 миллисекунды. Т.е. на вход ему надо дать частоту 500 ГЦ*256=128 Кгц примерно.
[/quote]


у протокола NEC мах. интервал 9 МИЛИСЕКУНД,
скачайте пожалуйста irprotokol.rar


--------------------
Прошивка это душа микроконтроллера!
Go to the top of the page
 
+Quote Post

4 страниц V  « < 2 3 4
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 16th June 2025 - 19:54
Рейтинг@Mail.ru


Страница сгенерированна за 0.01531 секунд с 7
ELECTRONIX ©2004-2016