Эмуляция кодера sc2260-r4

Есть пуль управления люстрой, на микросхеме sc2260-r4. И передатчике на 315 mhz.
Люстра “видит” его хорошо с любого места комнаты. Внутри контроллера люстры , обычный приёмник XD-RF-5V. Задача передать люстре сигнал с Ардуино.
Аналогичный приёмник подключенный к Ардуино , при использовании библиотеки RCSwitch сигнал с пульта принимает. Но при передаче этих же данных с Ардуино ,через эту же библиотеку, люстра не реагирует.

Изучение кода библиотеки выявило что она делает не совсем корректные тайминги сигнала.
В библиотеку была внесена корректировка, но это не помогло.
Был написан тестовый код, для отправки данных , который должен обеспечить максимально точные тайминги.

 //7672067 (24Bit) Binary: 011101010001000100000011

constexpr uint16_t T   = 230;
constexpr uint16_t Tx3 = 3*T;
constexpr uint8_t  t_pin  = 2;


#define transmit_1 \   
    digitalWrite( t_pin, HIGH);\
    delayMicroseconds( Tx3 ); \
    digitalWrite(t_pin, LOW); \
    delayMicroseconds( T  ); \

#define transmit_0 \   
    digitalWrite( t_pin, HIGH);\
    delayMicroseconds( T ); \
    digitalWrite(t_pin, LOW); \
    delayMicroseconds( Tx3 ); \


}

void sendFast(unsigned long code, uint8_t length ,  int rep) {
 
  for (int nRepeat = 0; nRepeat < rep; ++nRepeat) {
    for (int8_t i = length-1; i >= 0; --i) {             
      if (  code & (1L << i)  ) {
        transmit_1;
        //transmit_1;  //pt2260 -?
      } else {
        transmit_0;
        //transmit_0;  //pt2260 -?
      }
    }   

    transmit_0;
    //digitalWrite(t_pin, LOW);   
    delayMicroseconds(28*T); /// sync
    
  }

}

void setup() {
  Serial.begin(115200);
  pinMode(t_pin, OUTPUT); 
  Serial.println("");
  Serial.println("---Started");
}

void loop() {
    sendFast(7672067 , 24 ,10  );
    delay(1000);
}

Люстра также не реагирует , но бывает что случайны образом, раз на 100 включений , ловит сигнал и переключается.
Даташит на эту микросхему говорит, что 0 и 1 передаётся передаются одним импульсом.
Написано что она совместима с pt2260 , но в даташите на pt2260 сказано что бит передаётся двумя импульсами (код комментирован), в любом случае , так или иначе результат одинаков.

Постоянная T = 230 бралась из данных которые сообщила библиотека RCSwitch.
Также был сделан перебор T от 0 до 1000 , люстра не среагировала ни разу. Даташит говорит, что задающая частота микросхемы приёмника должна быть от 1/4 до 1/16 частоты передатчика , то есть Т может иметь достаточно широкий диапазон.

В чём может быть дело?

Дело в том что ты работаешь в слепую с неправильными инструментами. Купи или арендуй SDR - всё станет понятно.

Задача не стоит в том чтобы эмулировать сигнал и протокол из “чёрного ящика”.
Микросхема используется китайцами в 1000 и 1 устройствах. Абсолютно уверен, что вопрос подобный моему , возникал у умельцев 1000 и 1 раз. В даташите на неё весь протокол расписан. В пульте нога Out микросхемы идёт на передатчик, то есть никакой дополнительной логики с интервалами между транзакциями нет. Отправка по нажатию, если нажатие кнопки сохраняется то непрерывная отправка.

Я просто что то делаю не так, иначе бы и не задавал вопроса. Я был бы готов согласиться например что передатчик FS1000A допустим не подходит , при таких значениях T , однако же я же принимаю свой сигнал , на аналогичный приёмник.

ну удачи тебе с этой уверенностью

Offtop:
Я вчера себе поставил и запустил WizardGpt и пообщался с ним немного, после этого я стал уверен, что вы вообще бот.

тут нас много.

1 лайк

За тобой уже выехали наши умельцы.

rkit прав: для начала нужно убедиться, что передаются именно “эти же” данные.

Вообще вот этот абзац говорит о том, что Вы не просто эмулируете сигнал, а пытаетесь создать его как бы заново, с нуля, иначе вас ВОВСЕ не интересовал бы вопрос о том, как передаются нули и единицы.

А вот этот абзац это подтверждает:

Вообще-то, как по мне Ваша задача ИМЕННо в том, чтобы ТУПО ЭМУЛИРОВАТЬ сигнал. А вы зачем-то “умничаете”

Ну так они же принимаются аналогичным приёмником.
Сигнал с пульта
Decimal: 7672067 (24Bit) Binary: 011101010001000100000011 Tri-State: F1FF0F0F0001 PulseLength: 234 microseconds Protocol: 1
Raw data: 6552,208,644,624,216,620,236,604,240,184,656,612,236,188,656,612,232,192,652,192,652,192,652,612,236,188,656,184,660,192,652,612,232,192,656,188,656,184,664,184,656,188,656,188,660,604,240,608,240,

Decimal: 7672067 (24Bit) Binary: 011101010001000100000011 Tri-State: F1FF0F0F0001 PulseLength: 235 microseconds Protocol: 1
Сигнал с моего передатчика.
Raw data: 6520,208,692,684,248,684,252,684,256,204,692,684,252,208,700,672,252,208,692,212,696,204,692,680,244,212,692,208,696,204,688,676,260,200,696,204,684,212,684,212,684,208,688,212,684,684,232,696,228,

Цифры это длительности импульсов , с небольшой погрешностью на приёмнике.

Вообще-то, как по мне Ваша задача ИМЕННо в том, чтобы ТУПО ЭМУЛИРОВАТЬ сигнал. А вы зачем-то “умничаете”

Да Задача “ИМЕННо в том, чтобы ТУПО ЭМУЛИРОВАТЬ сигнал” но не с “чёрного ящика” , а с конкретной микросхемы протокол которой известен.

Фигней не занимайтесь. Эти цифры - выдача кода, который по определению содержит ошибки, иначе все бы работало.
Возьмите обычный логический анализатор и запишите сначала сигнал оригинального пульта, а потом эмулированный. И сразу будет видно, чем они отличаются.

Анализатор для захвата 300+Мгц ???

А ардуина с ее тактовой 16 МГц как эти 300 МГц читает, по твоему? :slight_smile:
Это на антенне 300 МГц, а на пине ардуино там уже никаких 300МГц нет, там, если не ошибаюсь, 38 КГц всего

–добавлено позже–
А судя по таймингам программы, и того меньше

Предлагаете , повесть приёмник на INT и самому замерить длительности , получаемых импульсов? Можно попробовать , но посмотрев на код библиотеки, не думаю что получу разительно отличные данные.

…а я тогда не думаю, что вы решите этот вопрос…

Бросьте, управляйте люстрой штатным пультом.

а в чем разница?

В том что протокол известен.

И много это вам дало, то что протокол известен? :slight_smile:

Кстати, причина может быть банально не в коде, а в том что оригинальный приемник и передатчик имеют чуть сдвинутую несущую. Поэтому один приемник этот сигнал принимает, а другой нет.

Вопрос уже 3 день перешёл в принципиальную плоскость.
В пульте стоит абсолютно такой же резонатор R315A как и в передатчике FS1000A . Тем более что я принимаю корректно сигнал на аналогичный приёмник от обоих устройств.