Помогите демодулировать FSK сигнал!

Logik
Offline
Зарегистрирован: 05.08.2014

Разные уровни 1 - это уже интересно! Я бы вот сразу подумал что их формируют с разных сторон. Приемник например 5В а передатчик 3,3В. Или наоборот. Вот и выходит "троичная" логика.

Pavel906
Offline
Зарегистрирован: 31.01.2018

 

Efim пишет:

 Pavel906

Машина Nissan? Можете разобрать блок климат контроля? Хотелось увидеть чем эта шина рулится.

 

А к чему вопрос про Ниссан ?? Я вроде видел в интернете сервопривод ниссановский и плата в нем точно такая же как и у меня (точнее там было написано регулятор вентилятора вроде, но этостранно, так как там видны дорожки потенциометра  ) 

Pavel906
Offline
Зарегистрирован: 31.01.2018

Efim пишет:

 Pavel906

Машина Nissan? Можете разобрать блок климат контроля? Хотелось увидеть чем эта шина рулится.

 

 

https://yadi.sk/d/hXrruM8d3ZtYTn
 

Здесь фотографии плат блока климата и сервопривода отопителя(других приводов нет)
Там же и схема,сложно перерисовывать и сразу красиво располагать элементы, так что как есть(схема только управления на серво)

!!!! Номиналы резисторов писал кодовой маркировкой, мне так удобней ориентироваться было!!!!

P.S на этот сайт фотки сейчас чё то не грузятся

Pavel906
Offline
Зарегистрирован: 31.01.2018

 

Logik пишет:

Разные уровни 1 - это уже интересно! Я бы вот сразу подумал что их формируют с разных сторон. Приемник например 5В а передатчик 3,3В. Или наоборот. Вот и выходит "троичная" логика.

 

это получается как двухсторонняя связь??? Тогда передатчик 12В-1   ~7В-0, а обратно 0в-0  12в или 5в хз-1, так что ли 

Pavel906
Offline
Зарегистрирован: 31.01.2018

Как бы изменить название темы, а то теперь не в струю))

VasiliyV
Offline
Зарегистрирован: 09.07.2018

Так а задача то какая? У вас есть блок управления климатом и Вы хотите его прилепить в шестерку?

Pavel906
Offline
Зарегистрирован: 31.01.2018

VasiliyV пишет:

Так а задача то какая? У вас есть блок управления климатом и Вы хотите его прилепить в шестерку?

 

У меня сейчас просто кондей (крутилки)

Купил на разборке блок климата , хотел присобачить к самодельным 2м сервам( 3я серва есть в моей комплектации но она не такая )  . Сервы дорогие , датчики температуры 3 штуки тоже дорогие, но я замерил температурную зависимость и уже подобрал нужные датчики за копейки, датчик солнечной радиации - фотодиод, тоже подобрал.....Эконом установка такая вот 

на разборке купить готовое не дешевле, если вдруг кто написать это захочет, так как менять нужно ВСЮ ПЕЧКУ, мест под сервы и т.д нет 

на драйве напишу потом подробно 

Pavel906
Offline
Зарегистрирован: 31.01.2018

Задача- перехватывать сигнал управления 3мя сервами, а дальше управлять чем душе угодно

Pavel906
Offline
Зарегистрирован: 31.01.2018

Всем спасибо, сам продвинулся

Pavel906
Offline
Зарегистрирован: 31.01.2018

Еще вопросик, для 2х приводов значения пакета легко считать, так как они позиционные (у рециркуляции 2 положения, у режима 4), а вот привод заслонки регулируется сам, как ему захочется и какая дискретность хз.
так как они одинаково регулируются, то вот значения для 4х позиционной. Это конкретно биты команды:
11111111111

10100101111

01111100110

11111101101

4положения.....Может у кого то есть мысли как ....эм...ну короче понять логику этих значений, потому как если в десятичные перевести, то они не идут по вощрастанию/убыванию, черт знает как короче. Хотелось бы допустим 0-1024

Pavel906
Offline
Зарегистрирован: 31.01.2018

вот мой суперский код, наверняка можно проще, так что жду ответов
Обманка работает , но только НЕЛЬЗЯ ставить задержки в главном цикле....БЕДА
КАК оптимизировать?

 

unsigned long length = 0;
unsigned long start_time = 0;
boolean myAdr[6];
boolean myComm[16];
int a=0;
unsigned int b=0;
int y;
boolean flag;

void setup() {
Serial.begin(115200);
// Привязываем к Pin2 прерывание по фронту сигнала
attachInterrupt(0, falling, FALLING);
pinMode(2, INPUT);
pinMode(9, OUTPUT); //на транзистор для замыкания делителя на землю, который выдает 7в(обратная связь-обманка)
}

void loop() {
 //29-серво отопителя
 //31-серво Mode
 //15-серво рециркуляции
if(a==15){   //пример обматки только одной серво

  // функция для определения изменения команды на серву и обманки (чтобы ошибку не выдавал)
  // в myComm[13] если 1-значит едет, 0-значит стоит. Этот 0 и нужно имитировать, а 1 там всегда и так
  // Пример  1 11111111110 1101  -едет  (Пробелом разделил начало(не изм), команду, обратку)
  //         1 11111111110 1001  -приехала в заданную точку (команда сама со 2 по 12 ЗНАЧЕНИЕ, первое значение не изменяется,
  //                            в последних 4х только 1 значение изменяется, описанное выше)

  if(myComm[1]==y){ 
    flag = 1;
  }
  else 
  {
    flag = 0;
  }
    
y=myComm[1];

//for (int i = 0; i < 16; i++) {
//Serial.print(myComm[i]);
//}

//Туут че-то буду выполнять

Serial.println(b);
}

}

//Прерывание по срезу
void falling() {
// Привязываем к Pin2 прерывание по фронту сигнала
attachInterrupt(0, rising, RISING);
//сохраняем значение времени начала импульса
start_time = micros();
}

//Прерывание по фронту
void rising() {
// Привязываем к Pin2 прерывание по срезу сигнала
attachInterrupt(0, falling, FALLING);
//сохраняем значение длительности импульса
length = micros() - start_time;

if(length>13000){                //каждый адрес начинается после паузы 13,8мс примерно
delayMicroseconds(1000);         //становлюсь на середину фронта

a=0;
for (int i = 0; i < 6; i++){
  myAdr[i] = digitalRead(2);
  a |= (myAdr[i] << i);          //перевожу массив в число, НЕ ЗНАЮ КАК ЗАПИСЫВАТЬ НЕ ЗАДОМ НАПЕРЕД
  delayMicroseconds(3966);       //каждый бит
}

b=0;
for (int i = 0; i < 15; i++){ //Приходится не читывать последний фронт(он и не нужен), чтобы программа обманки отрабатывала на каждом пакете
  myComm[i] = digitalRead(2);
  b |= (myComm[i] << i);
  delayMicroseconds(1980);       //те же 3966 но разбитые на 2, для отработки обманки
                                  
  if(flag==1 && a==15){               //обратная свзь flag 1- серва стоит, 0- едет
  if(i==12) digitalWrite(9, HIGH);    //Включается там где надо
  if(i==13) digitalWrite(9, LOW);
  }
  delayMicroseconds(1980);
}
}
}

 

Pavel906
Offline
Зарегистрирован: 31.01.2018

Прошу помощи!!