Страница 1 из 1

Очередной раз про ИК

Добавлено: Пт июл 03, 2009 08:23:33
leftmails
Добрый день Уважаемые КОТЫ!!!
прошу прощения за созданный топ, таких тем в ветке много все просмотрел,но опять запутался:(
Делаю сигнализацию ИК.
Идея такая: 3 канала посылки кода в одну сторону, и нужно считать 3 разных кода.Потом если прервалось, т.е. кто то прошел то включить нагрузку.
Пошарив по форуму я нашел кучу нужной информации, смастерил код, для передачи. TSOP видит и реагирует на посылки всех 1, 36Кгц вроде у меня
но вот с посылкой правильной команды и приема ее пока проблемы:(
Посылаю чисто 1,
МК- мега16

Код: Выделить всё

//настройки для таймера:
TCCR0=0x01; //считать каждый первый импульс
TCNT0=0x00;
OCR0=0x1B; //сравнивать счетный регистр с регистром сравнения
while (1)
{
while(k<28){
PORTA.1++; // [color=red][b][size=14]как вот тут прописать команду? допустим 10101011[/size][/b][/color]
while(!(TIFR&0x02)); //флаг совпадения значения счетного
TIFR=0x02; //очистим флаг
TCNT0=0x00; //очистим счетный регистр
k++; }
k=0;
};
Пожалуйста подскажите как передать команду определенную.

А вот с приемом требуется Ваша помощь:
я пытаюсь вот так принять:
где RC5_buffer я храню текущее состояние порта

Код: Выделить всё

char RC5_buffer[29],i;
for (i=0; i<28; i++){
RC5_buffer [i] = !PIND.2;
};
Но ни как не могу понять.. как принимать все с тойже частотой,т.е. после TSOP (на 36кГц).
Пожалуйста подскажите..., я уже все обычскал.. кучу примеров посмотрел на тини, но не получается,уже месяц мучаюсь:(

Добавлено: Пт июл 03, 2009 09:46:06
Saadov
Для приема использовали бы вы http://radiokot.ru/articles/16/
Для передачи просто поищите в google по словам RC5 send, RC5 передатчик, RC5 transmiter и т.д. все уже разжевано
можно здесь глянуть http://www.a-netz.de/electronic.de.php
строка RC5-Fernbedienung.
Вообщем посмотрите.
Удачи!

Добавлено: Пт июл 03, 2009 10:08:15
urry
Мне непонятно, где именно мучаетесь...
Огласите алгоритм.

Добавлено: Пт июл 03, 2009 10:17:08
clawham
Если вы надумали принимать и посылать одним устройством - МК то подумайте что будет при посылке пачки для 1-цы, вы-то принимаете по прерыванию...Вышы прога просто зациклится - прерывание прервёт генерацию потом отработав вернётся в код генератора и снова прервётся с первым же импульсом и так далее :)
гораздо правильнее сделать внешний источник сигнала на отдельной микросхеме - да хотябы тиньку 45 взять и на её основе забабахать :)
в общем не совсем понимаю зачем вообще городить огород? тсоп слишком чувствительный, и тот инфракрасный сигнал что вы посылаете может отразиться от чего угодно...у меня свет включается выключается стабильно с пультика при новых батарейчах через матовое стекло входной двери изза угла в коридоре :)))

Добавлено: Пт июл 03, 2009 11:22:45
Секретный кот
Частая ошибка заключается в том, что передавать и принимать RC5 пытаются по очереди (одним и тем же девайсом :)) ).

Добавлено: Пт июл 03, 2009 13:03:53
leftmails
Устройство приема и передачи будут иметь разные МК и будут они на меге 16, т.к. они у меня есть на руках.
Уважаемый Saadov благодарю за ссылки.. я про них читал, но только на самом форуме телесис.. ТАм про Тини. А сейчас более внимательно посмотрел там под мегу есть. Благодарю!
Буду разбираться, сегодня вечером буду тестить приемник.

Пожалуйста подскажите как передалать код передатчика, чтобы он передавал определенную команду в фрмате RC5?
Несколько раз перепрочитовал
http://fi-com.ru/mcu/rc5.htm
Но не как не могу понять.. как всетаки использовать код для подачи команды

Код: Выделить всё

volatile unsigned char empty = 0;
volatile unsigned char pulse = 0;
SIGNAL (SIG_OVERFLOW0) {
    if (pulse) {
        DDRB |= (1<<PB1);
        empty = 1;
        pulse--;
    }
    if (!pulse) {
        empty = 0;
        DDRB &= ~(1<<PB1);
    }
}

void ir_send (unsigned char byte) {
    if (!empty)
        pulse = byte;
}

Так же эксперементировал с кодом

Код: Выделить всё

//настройки для таймера: 
while (1) 
{ 
while(k<28){ 
PORTA.1++; //как вот тут прописать команду? допустим 10101011
while(!(TIFR&0x02)); //флаг совпадения значения счетного 
TIFR=0x02; //очистим флаг 
TCNT0=0x00; //очистим счетный регистр 
k++; } 
k=0; 
}; 
Но увы:( РАботает только так.. на посылку импульсов одинаковых

Добавлено: Сб июл 04, 2009 18:39:49
leftmails
:( эхх...не получается сформировать код:(

Добавлено: Сб июл 04, 2009 19:23:13
Alex72
leftmails писал(а)::( эхх...не получается сформировать код:(
Делал и приемник и передатчик RC5, но программирую на асме, СИ не знаю, поэтому с кодом помочь не могу. Но последовательность действий могу растолковать если надо.

Добавлено: Вт июл 07, 2009 17:31:47
leftmails
Alex72 писал(а):
leftmails писал(а)::( эхх...не получается сформировать код:(
Делал и приемник и передатчик RC5, но программирую на асме, СИ не знаю, поэтому с кодом помочь не могу. Но последовательность действий могу растолковать если надо.
Был бы весьма благодарен... мне просто общий принцип.. а на Си я сделаю..

Добавлено: Вт июл 07, 2009 18:07:55
Danko
Собирал пульт RC5 на tiny2313 в CVAVR.

так же есть и на tiny15L в ICC-TINYAVR ver 6.11A (без использования таймеров)

PS
все собиралось в железе (правда приемником был самодельный ИК приемник)