Управление устройствами через ИК-пульт.
- nictrace
- Мучитель микросхем
- Сообщения: 492
- Зарегистрирован: Вс янв 11, 2009 09:29:08
- Откуда: Ярославль
- Контактная информация:
1995kenny писал(а):Обошел весь радиорынок, ни в одном магазине нету и , говорят, не будет![]()
Подойдет ли TSOP4838?
Судя по описанию - полный аналог, и по частотам, и по назначению выводов. А судя по названию - более поздняя разработка, возможно с улучшенными параметрами
Мои верные друзья - АМD и AVR
LM317 - атцтой, LM2576ADJ - форева!
LM317 - атцтой, LM2576ADJ - форева!
- 1995kenny
- Вымогатель припоя
- Сообщения: 524
- Зарегистрирован: Ср авг 27, 2008 10:13:19
- Откуда: Украина, Харьков
- Контактная информация:
Собрал, спаял.
Впринципе работает. Повесил светодиод на выход 1 (управление кнопкой 1).Так он реагирует не только на "1", но и на 3 и 5 и 7 и 9и ещё на некоторые
Как так? Может, что-то не то в проге??
Впринципе работает. Повесил светодиод на выход 1 (управление кнопкой 1).Так он реагирует не только на "1", но и на 3 и 5 и 7 и 9и ещё на некоторые
Как так? Может, что-то не то в проге??
- Вложения
-
- P3110035.JPG
- Фотка)
- (48.88 КБ) 584 скачивания
-
- pult.c
- Прога на C
- (11.58 КБ) 431 скачивание
- Goodefine
- Держит паяльник хвостом
- Сообщения: 906
- Зарегистрирован: Ср апр 16, 2008 13:22:54
- Откуда: Приднестровье, Тирасполь
Несколько наводящих вопросов.
1. Стек до 64-х байт увеличили? По умолчанию компилятору не хватает...
2.Зачем в вечном цикле делать вот это:
когда достаточно один раз при инициализации...
3. Зачем такой нелогичный подход(чуть подредактировал для читаемости):
Когда проще и нагляднее:
4.Зачем так писать:
Ведь 000110 это десятичное число. Пишите хотя бы так: 0b000110 или просто 6... Но лучше пишите как в примере выше...
5. Зачем каждый раз обнулять command и буфер? Ведь в это время данные могут приняться не до конца, либо не обработаться. Обнулять команду и буфер следует ТОЛЬКО ПОСЛЕ переключения светодиода (после ОТРАБОТКИ команды). Заведите себе функцию:
И вызывайте ее в каждом case, кроме 0 и дефаулта, после включения/отключения светодиода:
6. Ни к чему каждый раз в цикле писать в PORTD.X переменную outx. Достаточно сделать это один раз после изменения переменной. (аналогично занулению буфера). После можно сделать и делай. С учетом всего этого, сделайте главный цикл примерно такой (не забыв вынести настройку портов (см.выше) и сделать функцию clear_buff):
Код не компилировал, поэтому, возможно, придется местами доработать напильником.
По результатам отпишись, но сделай примерно так...
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
- Откуда: Украина, Харьков
- Контактная информация:
Куда вставить: ?
куда бы я этот код не ставил CVAVR всегда говорит "missing ;", ссылаясь на 1 строку этого кода.
А до сих пор undefined symbol
Что не так?
Код: Выделить всё
void clear_buff(_){
unsigned char i = 0;
command = 0;//обнуляем
for (i=0; i<14; i++) {
RC5_buffer [i] = 0;
}
}куда бы я этот код не ставил CVAVR всегда говорит "missing ;", ссылаясь на 1 строку этого кода.
А
Код: Выделить всё
clear_buff(); Что не так?
- Вложения
-
- pult.c
- код измененный
- (11.79 КБ) 405 скачиваний
- Goodefine
- Держит паяльник хвостом
- Сообщения: 906
- Зарегистрирован: Ср апр 16, 2008 13:22:54
- Откуда: Приднестровье, Тирасполь
1.Там очепятка
. Вполне очевидная:
Вторая проблема - следствие этой...
2. Кто же функцию внутри вечного цикла определяет??
Ее нужно до main вставить, но, естественно не залезть при этом в обработчик.
Подправил чуть, но не компилировал...
Код: Выделить всё
void clear_buff(){... //а не void clear_buff(_){
Вторая проблема - следствие этой...
2. Кто же функцию внутри вечного цикла определяет??
Ее нужно до main вставить, но, естественно не залезть при этом в обработчик.
Подправил чуть, но не компилировал...
- Вложения
-
- pult.c
- (11.79 КБ) 414 скачиваний
Любой, заслуживающий внимания, опыт приобретается себе в убыток...
- 1995kenny
- Вымогатель припоя
- Сообщения: 524
- Зарегистрирован: Ср авг 27, 2008 10:13:19
- Откуда: Украина, Харьков
- Контактная информация:
nictrace писал(а):А что это за плата без проводочков? Никак собрался мощные нагрузки коммутировать? Респекты!
Да, действительно это плата с симисторами и оптопарами, Для управления тремя нагрузками 220В 4А. Пока не подключена, т.к. остальное ещё не закончено и стремно немного
Goodefine Большое кошачье спасибо! Всё заработало как надо!
- Krik99
- Потрогал лапой паяльник
- Сообщения: 375
- Зарегистрирован: Вс мар 04, 2007 13:14:25
- Откуда: Украина
- Контактная информация:
Секретный кот писал(а):Берём BASCOM-AVR и за два вечера рожаем на любой вкус пульт (RC5/RC6) и приёмник, хоть на 2313, хоть на 8515, хоть на Tiny13.
Приёмник на Тини13 в BASCOM не получится, сам пробовал... хотя интересно реально ли на Тини13 сделать приёмник команд RC5.
А если по теме, то исодник приёмника для RC5 есть на моём сайте под кнопкой "w_w_w".

- Секретный кот
- Поставщик валерьянки для Кота
- Сообщения: 2106
- Зарегистрирован: Ср сен 17, 2008 14:32:15
- Откуда: Старые Васюки
- Контактная информация:
- 1995kenny
- Вымогатель припоя
- Сообщения: 524
- Зарегистрирован: Ср авг 27, 2008 10:13:19
- Откуда: Украина, Харьков
- Контактная информация:
Всё собрал... не работает
Тоесть работает практически всё, но лампы 220 не загораются.
Всё прозвонил кроме симисторов, даже оптопары. Почему же не переключается?
PS подключал только одну нагрузку с балластной лампой(чтоб ничего не бахнуло)
Тоесть работает практически всё, но лампы 220 не загораются.
Всё прозвонил кроме симисторов, даже оптопары. Почему же не переключается?
PS подключал только одну нагрузку с балластной лампой(чтоб ничего не бахнуло)
- Вложения
-
- 220.GIF
- Схэма
- (12.98 КБ) 342 скачивания
- Секретный кот
- Поставщик валерьянки для Кота
- Сообщения: 2106
- Зарегистрирован: Ср сен 17, 2008 14:32:15
- Откуда: Старые Васюки
- Контактная информация: