Описание: Борьба с экономичными лампами. |
Поиск в теме | Версия для печати |
nestandart  |
Отправлено: 25 Октября, 2011 - 00:44:01
|

Супер-модератор

Сообщений всего: 1490
Дата рег-ции: Сент. 2010
|
Написал программу управления ботом с ИК пульта (протокол rm-887 , но это не важно).
CODE:
unsigned long val=0;
unsigned long val2=0;
unsigned long val3=0;
unsigned long val4=0;
unsigned long val5=0;
unsigned long val6=0;
unsigned long val7=0;
unsigned long val8=0;
void setup()
{
pinMode(2,INPUT);
pinMode(10,OUTPUT);
pinMode(11,OUTPUT);
pinMode(12,OUTPUT);
pinMode(13,OUTPUT);
pinMode(18,OUTPUT);
}
void loop()
{
if(pulseIn(2,LOW)==0)
{
digitalWrite(12,LOW);
digitalWrite(11,LOW);
digitalWrite(10,LOW);
digitalWrite(13,LOW);
digitalWrite(18,LOW);
}
val=pulseIn(2,LOW);
val=(val/1000);
if(val==2)
{
val2=pulseIn(2,LOW);
val3=pulseIn(2,LOW);
val4=pulseIn(2,LOW);
val5=pulseIn(2,LOW);
val6=pulseIn(2,LOW);
val7=pulseIn(2,LOW);
val8=pulseIn(2,LOW);
if((val2/1000)==0&&(val3/1000)==0&&(val4/1000)==0&&(val5/1000)==0&&
(val6/1000)==0&&(val7/1000)==0&&(val8/1000)==0)
{
digitalWrite(18,HIGH);//вперд
}
if((val2/1000)==0&&(val3/1000)==0&&(val4/1000)==1&&(val5/1000)==0&&
(val6/1000)==1&&(val7/1000)==1&&(val8/1000)==1)
{
digitalWrite(13,HIGH);//вперд
digitalWrite(12,LOW);
digitalWrite(11,LOW);
digitalWrite(10,HIGH);
}
if((val2/1000)==0&&(val3/1000)==0&&(val4/1000)==1&&
(val5/1000)==0&&(val6/1000)==1&&(val7/1000)==1&&(val8/1000)==0)
{
digitalWrite(13,LOW);//вправо
digitalWrite(12,HIGH);
digitalWrite(11,LOW);
digitalWrite(10,HIGH);
}
if((val2/1000)==1&&(val3/1000)==1&&(val4/1000)==0&&
(val5/1000)==0&&(val6/1000)==1&&(val7/1000)==1&&(val8/1000)==0)
{
digitalWrite(13,HIGH);//лево
digitalWrite(12,LOW);
digitalWrite(11,HIGH);
digitalWrite(10,LOW);
}
if((val2/1000)==1&&(val3/1000)==0&&(val4/1000)==1&&
(val5/1000)==0&&(val6/1000)==1&&(val7/1000)==1&&(val8/1000)==1)
{
digitalWrite(13,LOW);//назад
digitalWrite(12,HIGH);
digitalWrite(11,HIGH);
digitalWrite(10,LOW);
}
}
}
Прога опрашивает TSOP и когда на нем появляется сигнал (лог0) замеряет длинну импульса.
Если длинна импульса равна 2мс (Первый импульс в пачке пульта)
пограмма опрашивает ту же ногу еще семь раз.
Таким образом получаем кодировки кнопок (первый импульс всегда одинаковый).
Далее , если код кнопки совпадает с заранее запрограмированым программа
запускает определенную комбинацию пинов
(крутит моторы в соответствующюю сторону).
При каждом обновленни цикла опрашивается TSOP и если сигнала нет
(длинна импульса равна 0) все пины переводятся в 0.
Т.е. нажимешь кнопку - едет вперед , отпускаешь - останавливается.
И все бы хорошо , при дневном свете все работает.
НО при включеных энергосберегающих лампах начинаются галюны.
А именно , нажал кнопку - едет , отпустил кнопку - все равно едет.
Я считал импульсы идущие от лампы , оказалось лампа гонит , на несущей частоте TSOPa , импульсы 200 - 400 мкс.
По этому программа постоянно фиксирует наличие импульсов на TSOPе и не может
отключить моторы.
Что делать ?
Решить проблему програмно нет возможности (уже вторую ночь - безрезультатно).
Может есть возможность аппаратно отсекать столь малые импульсы.
До этого были те же проблемы с автономной программой , при "экономичном" свете
(датчик постоянно фиксировал препятствие) , решил установкой кондера 0.1мкф между
сигнальной ногой TSOPа и плюсом , а с пультом так не получается.
Кондер лишь увеличивает длинну импульсов на несколько мкс.(Отредактировано автором: 25 Октября, 2011 - 11:15:40) |
|
|
Гость |
Отправлено: 25 Октября, 2011 - 20:30:34
|
УДАЛЁН
|
ну например каждый бит принимать десятком опросов, а не одним.
можно и в аналоге отфильтровать импульсы короче 0.5мс, (RC цепочкой или еще навороченее) но тогда и фронты позаваливаются |
|
|
Роботов |
Отправлено: 25 Октября, 2011 - 20:38:16
|

Гуру

Сообщений всего: 1350
Дата рег-ции: Июнь 2011
|
nestandart пишет:Если на TSOPе тишина - моторы стоят.
Если нет - пытаемся поймать пачку .
Если не поймали не делаем ничего (моторы изначально отключены).
Как то это неправильно. Приёмник должен принять определённый код, расшифровав который он должен принять решение какое действие производить. А не просто есть сигнал/нет сигнала.
nest пишет:и начните с того, что переведите работу с TSOP на прерывание.
Плюсстопятсот.(Отредактировано автором: 25 Октября, 2011 - 20:38:51) |
|
|
Гость |
Отправлено: 26 Октября, 2011 - 21:18:04
|
УДАЛЁН
|
посмотрите как радиочастотники от помех фильтруются (в смысле после демодулятора и компаратора) например граберщики сигналок. думаю тут задача примерно похожая: пакеты сыплются как из ведра, и если пропустить один - ничего страшного, а если мусор принять- хуже, да и тактовые частоты (битрейт) схожий. |
|
|
|
Поиск в теме | Версия для печати |
Страниц (2): [1] 2 » |
« Электронная мастерская » |
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
|
  |
|
|
|