
Собрал пробник для домофона из первой части статьи, не заработал. Начал разбираться, в схеме ошибка. Нижнее плечо делителя, минус дисплея и минус домофона должны подключаться с пину GND, а не к Vin.
Далее смутило "резисторы делителя напряжения на 12: 900кОм и 82кОм или 1,1Мом и 100кОм". Как по мне 900/82=10,98 больше смахивает на делитель на 11. Но не суть. Домофона на горизонте не было, скормил пробнику попавшуюся батарейку CR2032. Пробник намерял на ней 3229mV, это меня немного удивило, батарейка явно не из свежих была, померял мультиметром батарейку 2.95V. Делитель подбирать не хотелось, по этому везде где в коде использовался делитель,
Код: Выделить всё
tmp=((ADCx*Uref)+10)/(1023*20/12); //Делитель 1100к/100к в 12 раз (1023*20/12)Прописав свой ключ в пробник, побрел к домофону. Параметры с домофона пробник снял прекрасно, а вот на предполагаемую эмуляцию ключа домофон не отреагировал вообще никак. Как оказалось я сгоряча не обратил внимания на то что в статье описан Цифрал, а дома оказался Метаком.
Вроде как я понял и цифрал и метаком по таймингам соместимы, но различен формат. У цифрала имеем стартовое слово четырехразрядное, а у метакома - синхронизирующий бит и трехразрядное стартовое слово. В программе
Код: Выделить всё
//Код ключа по напряжению (с инверсией)
const unsigned char KOD[] PROGMEM = {1,1,1,0, 0,0,1,0, 0,0,0,1, 1,0,0,0, 1,0,0,0, 0,0,0,1, 1,0,0,0, 0,0,1,0, 0,1,0,0};Код: Выделить всё
//Передача кода
while(1)
{ n=0;
while (n<36)
{ k=pgm_read_byte(&KOD[n]);
digitalWrite(R1_Line, HIGH); //0 на выходе транзисторного ключа
if (k==0) //Если передаётся 0 задержка 39,6мкс (<0,4Tп=107us)
{ delayMicroseconds(35);
}
else //Иначе, если 1 - задержка 79,2мкс (>0,6Tп=113us)
{ delayMicroseconds(75);
}
digitalWrite(R1_Line, LOW); //1 на выходе транзисторного ключа
if (k==0) //Если передаётся 0 задержка 67,2мкс (>0,6Tп=107us)
{ delayMicroseconds(62);
}
else //Иначе, если 1 - задержка 33,2мкс (<0,4Tп=113us)
{ delayMicroseconds(28);
}
n++;
}
}