Управление устройствами через ИК-пульт.

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Аватара пользователя
DrWatson
Опытный кот
Сообщения: 890
Зарегистрирован: Вт янв 20, 2009 14:49:08
Откуда: Гондурас, Мурманск

Сообщение DrWatson »

На главной странице КОТа есть кномпочка "поиск даташитов".
Ищите - да обрящете...
TSOP4838 - на 38КГц - нашел за 2 минуты))
- Если вы такие умные, то почему тогда строем не ходите?
ἓν οἶδα ὅτι οὐδὲν οἶδα (с) Σωκράτης
Аватара пользователя
Aheir
Модератор
Сообщения: 4517
Зарегистрирован: Пн апр 03, 2006 11:43:25
Откуда: Санкт - Петербург
Контактная информация:

Сообщение Aheir »

1995kenny, не нужно постить по три сообщения подряд, если Ваш пост в теме последний - отредактируйте его, а не пишите новый! :evil:
Оптимизм х (Опыт + Знания) = const
Аватара пользователя
nictrace
Мучитель микросхем
Сообщения: 492
Зарегистрирован: Вс янв 11, 2009 09:29:08
Откуда: Ярославль
Контактная информация:

Сообщение nictrace »

1995kenny писал(а):Обошел весь радиорынок, ни в одном магазине нету и , говорят, не будет :(
Подойдет ли TSOP4838?


Судя по описанию - полный аналог, и по частотам, и по назначению выводов. А судя по названию - более поздняя разработка, возможно с улучшенными параметрами :)
Мои верные друзья - АМD и AVR
LM317 - атцтой, LM2576ADJ - форева! :)
Аватара пользователя
1995kenny
Вымогатель припоя
Сообщения: 524
Зарегистрирован: Ср авг 27, 2008 10:13:19
Откуда: Украина, Харьков
Контактная информация:

Сообщение 1995kenny »

Что-ж, скоро проверю - сегодня еду в магазин. А вот по расположению выводов не совсем совпадают.
UPD К сожелению сегодня магазин закрыт :(
Аватара пользователя
nictrace
Мучитель микросхем
Сообщения: 492
Зарегистрирован: Вс янв 11, 2009 09:29:08
Откуда: Ярославль
Контактная информация:

Сообщение nictrace »

кстати, в нашем магазине как раз 1736 и 1738 есть, а 4838 нету...
Есть еще irm-8601 на 38 кГц и TFMS5380
Мои верные друзья - АМD и AVR
LM317 - атцтой, LM2576ADJ - форева! :)
Аватара пользователя
1995kenny
Вымогатель припоя
Сообщения: 524
Зарегистрирован: Ср авг 27, 2008 10:13:19
Откуда: Украина, Харьков
Контактная информация:

Сообщение 1995kenny »

Собрал, спаял.
Впринципе работает. Повесил светодиод на выход 1 (управление кнопкой 1).Так он реагирует не только на "1", но и на 3 и 5 и 7 и 9и ещё на некоторые :shock:
Как так? Может, что-то не то в проге??
Вложения
P3110035.JPG
Фотка)
(48.88 КБ) 584 скачивания
pult.c
Прога на C
(11.58 КБ) 431 скачивание
Аватара пользователя
Goodefine
Держит паяльник хвостом
Сообщения: 906
Зарегистрирован: Ср апр 16, 2008 13:22:54
Откуда: Приднестровье, Тирасполь

Сообщение Goodefine »

Несколько наводящих вопросов.
1. Стек до 64-х байт увеличили? По умолчанию компилятору не хватает...
2.Зачем в вечном цикле делать вот это:

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

 DDRB=0b11111111; //настройка портов    
 DDRD=0b0001000;     
 PORTD.3 = 1;

когда достаточно один раз при инициализации...
3. Зачем такой нелогичный подход(чуть подредактировал для читаемости):

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

 //триггер 1 выхода
 if (out1 == 0) {
   if (command == 000001) {out1 = 1;}
                 }
            else   {
               if (command == 000001) {out1 = 0;}
                  }

Когда проще и нагляднее:

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

     switch(command){//сравниваем принятую команду
           case 0: //если приняли 0 то попали сюда
               //будем попадать всегда когда нет команды
            break;
         case 1: //если поймали 1 то сюда и т.д.
            //вот и весь "триггер":
            out1? (out1=0):(out1=1);
            break;
         case 2: //если  2
            out2? (out2=0):(out2=1);
            break;
         case 3: //если  3
            out3? (out3=0):(out3=1);
            break;
         case 4: //если  4
            out4? (out4=0):(out4=1);
            break;
         case 5: //если  5
            out5? (out5=0):(out5=1);
            break;
         case 6: //если  6
            out6? (out6=0):(out6=1);
            break;
         default: //если ничего из вышеперечисленного то сюда
                }

4.Зачем так писать:

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

...if (command == 000110) ...//для out6, например...

Ведь 000110 это десятичное число. Пишите хотя бы так: 0b000110 или просто 6... Но лучше пишите как в примере выше...
5. Зачем каждый раз обнулять command и буфер? Ведь в это время данные могут приняться не до конца, либо не обработаться. Обнулять команду и буфер следует ТОЛЬКО ПОСЛЕ переключения светодиода (после ОТРАБОТКИ команды). Заведите себе функцию:

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

 void clear_buff(_){
                   
             unsigned char i = 0;            
                        command = 0;//обнуляем
         for (i=0; i<14; i++)   {
                  RC5_buffer [i] = 0;
                     }
         }

И вызывайте ее в каждом case, кроме 0 и дефаулта, после включения/отключения светодиода:

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

...
case 2: //если  2
   out2? (out2=0):(out2=1);
        clear_buff();
   break;
   case 3: //если  3
   out3? (out3=0):(out3=1);
   clear_buff();
        break;
 //и так далее
...

6. Ни к чему каждый раз в цикле писать в PORTD.X переменную outx. Достаточно сделать это один раз после изменения переменной. (аналогично занулению буфера). После можно сделать и делай. С учетом всего этого, сделайте главный цикл примерно такой (не забыв вынести настройку портов (см.выше) и сделать функцию clear_buff):

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

...
//вечный цикл
while (1)
{
 
  switch(command){//сравниваем принятую команду
           case 0: //если приняли 0 то попали сюда
               //будем попадать всегда когда нет команды
            break;
         case 1: //если поймали 1 то сюда и т.д.
            //вот и весь "триггер":
            out1? (out1=0):(out1=1);
                PORTB.7=out1;
            clear_buff();
            break;
         case 2: //если  2
            out2? (out2=0):(out2=1);
            PORTB.6=out2;
            clear_buff();
            break;
         case 3: //если  3
            out3? (out3=0):(out3=1);
                PORTB.5=out3;
            clear_buff();            
            break;
         case 4: //если  4
            out4? (out4=0):(out4=1);
                PORTB.4=out4;
            clear_buff();            
            break;
         case 5: //если  5
            out5? (out5=0):(out5=1);
                PORTB.3=out5;
            clear_buff();            
            break;
         case 6: //если  6
            out6? (out6=0):(out6=1);
                PORTB.2=out6;
            clear_buff();            
            break;
         default: //если ничего из вышеперечисленного то сюда
                        clear_buff();       
                }

delay_ms(100); //задержка

} //end while(1)

Код не компилировал, поэтому, возможно, придется местами доработать напильником.
По результатам отпишись, но сделай примерно так...
Любой, заслуживающий внимания, опыт приобретается себе в убыток...
Аватара пользователя
1995kenny
Вымогатель припоя
Сообщения: 524
Зарегистрирован: Ср авг 27, 2008 10:13:19
Откуда: Украина, Харьков
Контактная информация:

Сообщение 1995kenny »

Куда вставить: ?

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

void clear_buff(_){ 
                   
             unsigned char i = 0;             
                        command = 0;//обнуляем
         for (i=0; i<14; i++)   {
                  RC5_buffer [i] = 0;
                     }
         }

куда бы я этот код не ставил CVAVR всегда говорит "missing ;", ссылаясь на 1 строку этого кода.
А

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

clear_buff(); 
до сих пор undefined symbol :(
Что не так?
Вложения
pult.c
код измененный
(11.79 КБ) 405 скачиваний
Аватара пользователя
Goodefine
Держит паяльник хвостом
Сообщения: 906
Зарегистрирован: Ср апр 16, 2008 13:22:54
Откуда: Приднестровье, Тирасполь

Сообщение Goodefine »

1.Там очепятка :) . Вполне очевидная:

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

void clear_buff(){... //а не void clear_buff(_){ 

Вторая проблема - следствие этой...
2. Кто же функцию внутри вечного цикла определяет?? :shock:
Ее нужно до main вставить, но, естественно не залезть при этом в обработчик.
Подправил чуть, но не компилировал...
Вложения
pult.c
(11.79 КБ) 414 скачиваний
Любой, заслуживающий внимания, опыт приобретается себе в убыток...
Аватара пользователя
nictrace
Мучитель микросхем
Сообщения: 492
Зарегистрирован: Вс янв 11, 2009 09:29:08
Откуда: Ярославль
Контактная информация:

Сообщение nictrace »

А что это за плата без проводочков? Никак собрался мощные нагрузки коммутировать? Респекты! :)
Мои верные друзья - АМD и AVR
LM317 - атцтой, LM2576ADJ - форева! :)
Аватара пользователя
1995kenny
Вымогатель припоя
Сообщения: 524
Зарегистрирован: Ср авг 27, 2008 10:13:19
Откуда: Украина, Харьков
Контактная информация:

Сообщение 1995kenny »

nictrace писал(а):А что это за плата без проводочков? Никак собрался мощные нагрузки коммутировать? Респекты! :)

Да, действительно это плата с симисторами и оптопарами, Для управления тремя нагрузками 220В 4А. Пока не подключена, т.к. остальное ещё не закончено и стремно немного :)

Goodefine Большое кошачье спасибо! Всё заработало как надо! :))) Осталось подключить силовую часть :twisted:
Аватара пользователя
Krik99
Потрогал лапой паяльник
Сообщения: 375
Зарегистрирован: Вс мар 04, 2007 13:14:25
Откуда: Украина
Контактная информация:

Сообщение Krik99 »

Секретный кот писал(а):Берём BASCOM-AVR и за два вечера рожаем на любой вкус пульт (RC5/RC6) и приёмник, хоть на 2313, хоть на 8515, хоть на Tiny13.

Приёмник на Тини13 в BASCOM не получится, сам пробовал... хотя интересно реально ли на Тини13 сделать приёмник команд RC5.
А если по теме, то исодник приёмника для RC5 есть на моём сайте под кнопкой "w_w_w".
Изображение
Аватара пользователя
1995kenny
Вымогатель припоя
Сообщения: 524
Зарегистрирован: Ср авг 27, 2008 10:13:19
Откуда: Украина, Харьков
Контактная информация:

Сообщение 1995kenny »

Видел в нете.
Аватара пользователя
Секретный кот
Поставщик валерьянки для Кота
Сообщения: 2106
Зарегистрирован: Ср сен 17, 2008 14:32:15
Откуда: Старые Васюки
Контактная информация:

Сообщение Секретный кот »

Krik99 писал(а):Приёмник на Тини13 в BASCOM не получится, сам пробовал... хотя интересно реально ли на Тини13 сделать приёмник команд RC5.

Я не пробовал за ненадобностью, но особых проблем не вижу – т.к. понадобится только 8-битный таймер 0, который в Тини13 есть.
Аватара пользователя
1995kenny
Вымогатель припоя
Сообщения: 524
Зарегистрирован: Ср авг 27, 2008 10:13:19
Откуда: Украина, Харьков
Контактная информация:

Сообщение 1995kenny »

Всё собрал... не работает :shock:
Тоесть работает практически всё, но лампы 220 не загораются. :evil:
Всё прозвонил кроме симисторов, даже оптопары. Почему же не переключается? :cry:
PS подключал только одну нагрузку с балластной лампой(чтоб ничего не бахнуло)
Вложения
220.GIF
Схэма
(12.98 КБ) 342 скачивания
Аватара пользователя
sachok
Опытный кот
Сообщения: 849
Зарегистрирован: Сб янв 05, 2008 11:05:15
Откуда: Україна м.Луцьк
Контактная информация:

Сообщение sachok »

Совсем недавно использовал вот вот такую схему коммутации сети, взята с забугорного журнала.
Вложения
sim.jpg
(33.93 КБ) 532 скачивания
Я не Сашок!!!
Аватара пользователя
пашок
Родился
Сообщения: 10
Зарегистрирован: Пт ноя 28, 2008 19:33:43
Откуда: Чебоксары
Контактная информация:

Сообщение пашок »

может это глупо но я пока не разбираюсь в этом, так вот может ли приёмник RC-5 не принять команды с пульта RC-5(разных фирм)?? :oops:
Аватара пользователя
nictrace
Мучитель микросхем
Сообщения: 492
Зарегистрирован: Вс янв 11, 2009 09:29:08
Откуда: Ярославль
Контактная информация:

Сообщение nictrace »

RC5 - это протокол. А данных по нему может быть передано великое разнообразное множество. Где гарантия, что в двух пультах найдется хотя бы по одной кнопке с совпадающим кодом?
И еще не забываем про модулирующую частоту!
Мои верные друзья - АМD и AVR
LM317 - атцтой, LM2576ADJ - форева! :)
Аватара пользователя
Секретный кот
Поставщик валерьянки для Кота
Сообщения: 2106
Зарегистрирован: Ср сен 17, 2008 14:32:15
Откуда: Старые Васюки
Контактная информация:

Сообщение Секретный кот »

Для RC5 модулирующая частота всегда должна быть 36 кГц.
Любой приёмник RC5 соответственно обязан принять и декодировать посылку, получив код устройства и № команды. А вот реагировать на эту команду или нет – уже определяется программой устройства, в которое встроен данный приёмник.
Аватара пользователя
1995kenny
Вымогатель припоя
Сообщения: 524
Зарегистрирован: Ср авг 27, 2008 10:13:19
Откуда: Украина, Харьков
Контактная информация:

Сообщение 1995kenny »

А у меня частота получилась(по расчетас с частоты кварца) 38кгц и работает с приемником на 38.
Короче моя схема с симисторами не завелась.Буду искать релюхи(скорее всего совковые т.к. импортные дорогие).А с этими симисторами разберусь как-нибудь позже. :)
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»