key programming immo tools emergency start device программаторы ключа заводилки Кодграббер штатных охранных систем, toyota, lexus, subaru.

Граббер - с самого начало - шаг за шагом

#1
Здравствуйте Братья!
Да прибудет с вами милость Создателя!
Вот и я созрел для сборки своего первого граббера. Изучив доступные разделы, появилось желание собрать свой граббер. Буду проектировать и выкладывать поэтапно шаг за шагом свою конструкцию. И так начнем:
Что нам понадобиться:
1. Ресивер - на форуме очень рекомендовали TR3100 фирмы RFM. Ну я заказал у своих снабженцов пару тройку сэмплов - но дело это не скорое а начинать надо. Подехал к кенту в автосервис - там его электрик за 20 американских рублей вытащил целый мешок убитых автомобильных сиг. После быстрой сортировки - оставил то что можно будет использовать. Для отбраковки использовал работающий брелок:

Если кто узнал зверя - подскажите что это за система ваще?

---------- Post added at 19:26 ---------- Previous post was at 19:14 ----------

Частота трансивера брелка примерно 433 MHz.
Вот примерный замер частоты:

Можно померить и точнее - но на данном этапе этого достаточно.

---------- Post added at 19:28 ---------- Previous post was at 19:26 ----------

Перебрав несколько ресиверов остановился на этом экспанате:

Я больше чем уверен, что можно найти ресивер и получше - но как говориться за не имением гувернантки - любят горничную ... Ыыы

---------- Post added at 19:34 ---------- Previous post was at 19:28 ----------

Ресивер шумит ужасно - но при передаче сигнал достаточно четкий. Будем надеятся что сможем выкрутить посылку с него - в сиге он по ходу был на прямую подключон прямо к пику. Вот собственно тут выход с ресивера от нашего брелка:


---------- Post added at 19:44 ---------- Previous post was at 19:34 ----------

Ресивер есть - осталось дело за малым.
2. Микроконтроллер - то есть моск граббера. Сначало хотел остановится на мотороле - но что то так заломало програматор к нему собирать - хотя к нему все практически есть и CodeWarrior - среда разработки и компайлер - шикарные. Но учитываю низкую популярность моторолы у молодежи - выбор упал на PIC. Знакомый лифтодел подогрел и пиками и кристалами к ним:

Это по ходу 16F873A.
Могу согласиться что 18 - я серия была бы по лучше - но как говорится зато этих много ...

---------- Post added at 19:48 ---------- Previous post was at 19:44 ----------

Решающим моментом в выборе Micrichip - это наличие програматора для него :)


---------- Post added at 19:49 ---------- Previous post was at 19:48 ----------

По ходу дела - можно приступить к проектированию системы.
В следущем посту выложу схему.
 
#2
Думаю действительно пора начать что либо делать)) а то этот форум по тихоньку вымирает
 
#5
Среда программирования и язык?
По ходу тут не так уж и много вариантов:
MPLAB + HI-TECH C® Compiler for PIC10/12/16

С ассемблером заморочиваться пока что неохота.

---------- Post added at 09:21 ---------- Previous post was at 09:19 ----------

Дисплей какой будет использоваться?
В первой фазе на этапе прототайпа будем взаимодействовать с PC через MAX-232.
Знакомый лифтодел обещал подогреть ЛСД с последовательным интерфэйсом - на следущей неделе. Покажу что притащит.
 
#6
если хочешь хороший трансивер, то зайди сюда и посмотри,

Please Login or Register to view hidden text.

модель DRF7020D27-043A цена 1500р вот эксперимент с этим трансивером

Please Login or Register to view hidden text.

судя по "Выходная мощность 27dBm — почти 500мВт" это то что надо для граббера...
 
#7
Пусть сначала обычными приемниками научится сигналы принимать передавать а потом будет покупать если захочется
 
#8
шо, опять с нуля ??? а собрать то что выкладывали и успокоиться на этом неспортивно ? ну понимаю, сам такой. но всетаки попробуй начать с чего-то проверенного уже.
 
#9
Вот собственно и пациент:

Все собрано на скорую руку. Но для отработки основных узлов этого достаточно.
Ресивер по ходу еще не подключил. Для отработки приема пакетов и для чистоты эксперемента брелок подключон на прямую к контролеру.
Вот тут как говориться все и началось.
По ходу разработки появляются вопросы, может кто подскажет если в теме:

---------- Post added at 00:50 ---------- Previous post was at 00:40 ----------

Вопрос такой: Кто как собирает биты во время приема пакета. По ходу дела создать масив битов не получается - приходится для экономии памяти паковать биты в байты.
У меня это так получилось сделать:
TB = 0;
if (TMR1L > 0x80) // проверяем что пришло 0 или 1
{TB = 1 << ib;}
CBUFF[ix] = CBUFF[ix] | TB;
ib++;
bitscount++;
if (ib >= 8) // проверяем заполнение текущего байта если уже заплнен то переходим к следущему
{
ix++;
ib = 0;
}

Если кто предложит что поумнее буду премного благодарен.

---------- Post added at 00:56 ---------- Previous post was at 00:50 ----------

Вот тут назревает по ходу второй вопрос:
Запустил PIC на резонаторе 4MHz - устойчивую передачу данный через RS-232 удалось получить на максимальной скорости только 4800 - скурил уже даташит на микроконтролер - вроде как должно быть быстрее:
Подскажите где запарол?
Вот мои настройки:

//TRX
SPBRG = 12;
BRGH = 0;
RCSTA = 0;
TXSTA = 0;
SYNC = 0;
SPEN = 1;
TXEN = 1;

---------- Post added at 01:00 ---------- Previous post was at 00:56 ----------

По связи через послед порт есть еще пару тройку вопросов.
При передачи между посылками приходиться ставить паузу чтото вроде этого:

uint8_t i;
uint8_t hexa;
for (i = 0; i <= ix; i++)
{
hexa = (CBUFF >> 4) & 0x0f;
TXREG = TXMASK[hexa];
delay();
hexa = CBUFF & 0x0f;
TXREG = TXMASK[hexa];
CBUFF = 0x00;
delay();
TXREG = SPACE;
delay();
}

void delay(void)
{
for(uint8_t r = 0 ;r <= 0xef; r++);
}

Что то по ходу не очень ...
Подскажите плиз как ваще правельно передачу делать через последовательный порт на пиках.

---------- Post added at 01:09 ---------- Previous post was at 01:00 ----------

Вот по ходу и сами пакеты:

48 0A 42 02 18 00 48 0A 42 02 18 00 56

48 0A 22 02 24 00 48 0A 22 02 24 00 56

48 0A 62 01 40 00 48 0A 62 01 40 00 56

48 0A 22 02 B0 00 48 0A 22 02 B0 00 54

48 0A 22 02 C4 00 2A

48 0A 12 02 18 00 48 0A 12 02 18 00 56

48 0A 52 01 06 00 48 0A 52 01 06 00 54

48 0A 32 01 4A 00 48 0A 32 01 4A 00 52

48 0A 32 01 84 00 2A

48 0A 12 02 44 00 48 0A 12 02 44 00 56

48 0A 52 01 38 00 48 0A 52 01 38 00 52

48 0A 12 02 80 00 2C

48 0A 12 02 64 00 48 0A 12 02 64 00 54

48 0A 02 04 28 00 48 0A 02 04 28 00 58

48 0A 82 02 50 00 48 0A 82 02 50 00 48 0A 82 02 50 00 48 0A 82 02 50 00 AC

48 0A 61 01 26 00 29

48 0A 21 02 34 00 48 0A 21 02 34 00 54

48 0A 21 02 88 00 2B

48 0A 11 02 84 00 2B

48 0A 51 01 20 00 48 0A 51 01 20 00 56

48 0A 31 01 48 00 2A

48 0A 31 01 12 00 2A

48 0A 11 02 08 01 2B

48 0A 51 01 3A 00 48 0A 51 01 3A 50


Последний байт в каждой строке это колличество битов в посылке.
Каждый пакет записан уже с выравниванием по байту для удобства анализа.

---------- Post added at 01:16 ---------- Previous post was at 01:09 ----------

Похоже при упаковке битов перепутано направление - но щас это еще не критично.
Вопрос такой - тут явно выидно что пакеты с разной длинной.
От 39 до 44 бит.
Подскажите что это за система = может кто узнает.

---------- Post added at 01:21 ---------- Previous post was at 01:16 ----------

Следущий шаг - это проанализировав пакеты (в двоичном виде наглядней будет) выделить HOP FIX и код кнопки.

---------- Post added at 01:44 ---------- Previous post was at 01:21 ----------

шо, опять с нуля ??? а собрать то что выкладывали и успокоиться на этом неспортивно ? ну понимаю, сам такой. но всетаки попробуй начать с чего-то проверенного уже.
Смысла особого не вижу - повторить то что выкладывают а потом париться с прошивкой к нему чтобы привести его в боевое состояние и не факт что он подойдет к моим условиям.
Свой на много интересней ... или я не прав?
Цель то стоит по ходу разобраться для начала что там и к чему.

---------- Post added at 02:09 ---------- Previous post was at 01:44 ----------

---------- Post added at 02:10 ---------- Previous post was at 02:09 ----------

 
Последнее редактирование:
#10
Вот выпуливание восми байт через Юарт

чтобы не делать паузу между пакетами проверяем бит завершения передачи TXSTA,TRMT

PHP:
        movff   registr1,TXREG
        
        btfss   TXSTA,TRMT
        bra     $-2
  
        movff   registr2,TXREG


        btfss   TXSTA,TRMT
        bra     $-2
  
        movff   registr3,TXREG

        btfss   TXSTA,TRMT
        bra     $-2
  
        movff   registr4,TXREG


        btfss   TXSTA,TRMT
        bra     $-2
  
        movff   registr5,TXREG

        btfss   TXSTA,TRMT
        bra     $-2
  
        movff   registr6,TXREG

        btfss   TXSTA,TRMT
        bra     $-2
  
        movff   registr7,TXREG

        btfss   TXSTA,TRMT
        bra     $-2
  
        movff   registr8,TXREG

        btfss   TXSTA,TRMT
        bra     $-2

По поводу скорости обмена надо включить высокоскоросной режим BRGH = 1;
тогда скорость можно поднять до 19200
 

Вложения

Последнее редактирование:
#11
Вопрос такой: Кто как собирает биты во время приема пакета. По ходу дела создать масив битов не получается - приходится для экономии памяти паковать биты в байты.
У меня это так получилось сделать:
TB = 0;
if (TMR1L > 0x80) // проверяем что пришло 0 или 1
{TB = 1 << ib;}
CBUFF[ix] = CBUFF[ix] | TB;
ib++;
bitscount++;
if (ib >= 8) // проверяем заполнение текущего байта если уже заплнен то переходим к следущему
{
ix++;
ib = 0;
}
Прием не совсем понятен, почему бы не сделать это в цикле

Где анализ сигнала на кейлог, старлайн или другое?
Где анализ преамбулы и хедера для определения длительности пакетов?

например как я принимаю и записываю данные с пина через пром времени, но к твоей задаче это не подходит, это я для наглядности.
PHP:
if (INTCON.INT0IF)
  {                                                          //прерывание по фронту сигнала
    for(k=0; k<1350; k++)                          //это буфер из 1350 байт, в твоем случае надо 8 байт или 9 байт
             {
             for (b=0; b<8; b++)
                 {
                 if (PORTB.F0) 
                    {
                    byte_b |= 1<<b;
                    PORTA.F0 = 1;                     //включить писчалку, для слухового восприятия прихода сигнала
                    }
                 else
                      {
                      byte_b &= (~(1<<b));
                      PORTA.F0 = 0;                   //выключить писчалку
                      }
                 Delay_us(4);
                 }
                 BUF[K] = byte_b;
             }
    INTCON.INT0IF = 0;                             //сброс флага прерывания
    INTCON.INT0IE = 0;                             //запрещаем прерывание по приходу сигнала
    flag = 1;                                             //сигнал отработан
    oldstate = 1;                                      //сигнал отработан
  }


---------- Post added at 20:45 ---------- Previous post was at 20:31 ----------

Подскажите что это за система = может кто узнает.
Выложи вавку, похоже твоя программа недоработанна, почему пакеты разной битовой длительности летят с одного и того же брелка?
 
Последнее редактирование:
#12
Паузу по ходу переписал примерно так:
void delay(void)
{
while(!TRMT) continue;
}

Передача тоже зашуршала на 19200
Вот моя иницилизация:
//TRX
SPBRG = 12;
TXSTA = 0;
BRGH = 1;
RCSTA = 0;
SYNC = 0;
SPEN = 1;
TXEN = 1;
главное не попутать местами TXSTA и BRGH.
у меня было на оборот - поэтому неудавалось переключить на быстрый режим передачи.

---------- Post added at 00:28 ---------- Previous post was at 00:08 ----------

Прием пакетов выглядит так:
void interrupt isr(void)
{
if (INTF)
{
INTF = 0;
INTE = 0;
if (FRONTF == 1) //фронт ипульса
{
TMR1 = 0;
TMR2ON = 0;
if (TMR2 < 0x20) // эту лажу пришлось добавить чтобы отделить
if(TMR2 > 0x10) // пакеты между собой в одной посылке - время 0x1F значения таймера
{
ib = 0;
ix++;
}
TMR1ON = 1;
FRONTF = 0;
INTEDG = 0;
PORTA = 0x08;
} else //спад импульса
{
TMR1ON = 0;
TMR2 = 0;
TMR2ON = 1;
FRONTF = 1;
INTEDG = 1;
PORTA = 0x00;
TB = 0;
if (TMR1L > 0x80) //если по длительности 1 то нам сюда
{
TB = 1 << ib;
CBUFF[ix] = CBUFF[ix] | TB;
}
ib++;
bitscount++;
if (ib >= 8)
{
ix++;
ib = 0;
}
if (ix >= bufmax)
{
TMR2IF = 1;
PORTA = 0x08;
}
}
INTE = 1;
} else
if(TMR1IF) // сюда мы попадем если по ходу проиппали спад импульса
{ // можно начинать все с начало
TMR1IF = 0;
TMR1ON = 0;
INTE = 0;
ix = 0;
ib = 0;
bitscount = 0;
PORTA = 0x08;
FRONTF = 1;
INTEDG = 1;
INTE = 1;
} else

if(TMR2IF) // тут по ходу конец посылки
{
TMR2IF = 0;
TMR1ON = 0;
TMR2ON = 0;
TMR2 = 0;
INTE = 0;
FRONTF = 1;
if (ib == 0){ix--;}else{ib = 0;}

SENDBUFFER();
ix = 0;

bitscount = 0;
INTEDG = 1;
INTE = 1;
}
}

---------- Post added at 00:33 ---------- Previous post was at 00:28 ----------

Прием не совсем понятен, почему бы не сделать это в цикле

Где анализ сигнала на кейлог, старлайн или другое?
Где анализ преамбулы и хедера для определения длительности пакетов?
никакого анализа еще нету - принимает все что приходит
Про анализ пакетов по подробней пожалуйста если можно.
Все временый промежутки прописаны руками - собираюсь переписать на авто детект.
В начале каждого пакета валит три нуля - вот по им и можно расчитать длительность.

---------- Post added at 00:46 ---------- Previous post was at 00:33 ----------

Вот для наглядности несколько пакетов перекрутил в двоичный формат и востановил последовательность битов в том порядке как был прием.
Вот исходные посылки по два пакета в каждой строке - последний байт количество бит:

48 0A 44 02 50 00 48 0A 44 02 50 00 56
48 0A 24 02 84 00 48 0A 24 02 84 00 56
48 0A 24 02 88 00 48 0A 24 02 88 00 56
48 0A 24 02 1C 00 48 0A 24 02 1C 00 54
48 0A 54 01 2A 00 48 0A 54 01 2A 00 52
48 0A 14 04 10 01 48 0A 14 04 10 01 56
48 0A 14 04 74 00 48 0A 14 04 74 00 52
48 0A 0C 04 44 00 48 0A 0C 04 44 00 56
48 0A 2C 02 32 00 48 0A 2C 02 32 00 52
48 0A 1C 02 04 00 48 0A 1C 02 04 00 56
48 0A 3C 01 05 00 48 0A 3C 01 05 00 52
48 0A 1C 02 46 00 48 0A 1C 02 46 00 52
48 0A 1C 02 4C 00 48 0A 1C 02 4C 00 52
48 0A 0C 02 94 00 48 0A 0C 02 94 00 54
48 0A 4C 01 84 00 48 0A 4C 01 84 00 54
48 0A 2C 01 0C 00 48 0A 2C 01 0C 00 54
48 0A 2C 01 06 00 48 0A 2C 01 06 00 54
48 0A 0C 02 80 00 48 0A 0C 02 80 00 58

Дублирующую посылку откинул - вот что получилось:

00010010 01010000 00100010 01000000 00001010 000
00010010 01010000 00100100 01000000 00100001 000
00010010 01010000 00100100 01000000 00010001 000
00010010 01010000 00100100 01000000 00111000 00
00010010 01010000 00101010 10000000 01010100 0
00010010 01010000 00101000 00100000 00001000 100
00010010 01010000 00101000 00100000 00101110 0
00010010 01010000 00110000 00100000 00100010 000
00010010 01010000 00110100 01000000 01001100 0
00010010 01010000 00111000 01000000 00100000 000
00010010 01010000 00111100 10000000 10100000 0
00010010 01010000 00111000 01000000 01100010 0
00010010 01010000 00111000 01000000 00110010 0
00010010 01010000 00110000 01000000 00101001 00
00010010 01010000 00110010 10000000 00100001 00
00010010 01010000 00110100 10000000 00110000 00
00010010 01010000 00110100 10000000 01100000 00
00010010 01010000 00110000 01000000 00000001 0000

---------- Post added at 00:50 ---------- Previous post was at 00:46 ----------

Явно можно выделить три первых нуля - можно использовать для расчета времени.
Потом 16 - бит похожих на фикс - затем идет непонятный бит - после которого идет бит кнопки.
Пять последних пакетов с одной кнопкой и четыре перед ними с другой кнопкой.

---------- Post added at 01:01 ---------- Previous post was at 00:50 ----------

Меня самого очень смущает разная длина пакетов - но в одной посылке пакеты одинаковые по длине - ваще непонятка.
Вот для примера три пакета:
48 0A 22 02 60 00 48 0A 22 02 60 00 48 0A 22 02 60 00 81
Общее количество битов 0x81 = 129/3 = выходит по 43 бита на пакет.
В следущей посылке явно выдно четыре пакета по 42 бита:
48 0A 52 01 84 00 48 0A 52 01 84 00 48 0A 52 01 84 00 48 0A 52 01 84 00 A8
0xA8 = 168/4 = 42 бита на пакет.
Лажа какаято ...
 
Последнее редактирование:
#13
никакого анализа еще нету - принимает все что приходит
Про анализ пакетов по подробней пожалуйста если можно.
Все временый промежутки прописаны руками - собираюсь переписать на авто детект.
В начале каждого пакета валит три нуля - вот по им и можно расчитать длительность.
Не понятно это формат кейлог, старлайн , или чтото еще?
Сначало надо определять формат пакетов, там же закодированы длительности.
Надо осцилограмму снять. Я с пом PowerGraph осцилограммы снимаю на комп, потом анализировать можно, подсоединять ко входу звуковой карты. На форуме есть описание, поищи.

Please Login or Register to view hidden text.



Please Login or Register to view hidden text.

формат старлайн

Please Login or Register to view hidden text.



Анализатор пакетов на меге

Please Login or Register to view hidden text.



Брелок какойто непонятный, какая восьминожка там стоит?
Лучше брел от сигналки взять.
 
Последнее редактирование:
#14
Не понятно это формат кейлог, старлайн , или чтото еще?
Сначало надо определять формат пакетов, там же закодированы длительности.
Надо осцилограмму снять. Я с пом PowerGraph осцилограммы снимаю на комп, потом анализировать можно, подсоединять ко входу звуковой карты. На форуме есть описание, поищи.

Брелок какойто непонятный, какая восьминожка там стоит?
Лучше брел от сигналки взять.
Восьминожка это по ходу PIC12
Осцилограма после тюнера есть на первой странице(брелок щас подключен на прямую - соответственно сигнал инверсный) - через PowerGraph только вечером смогу снять осцилограму.
Заодно и посчитаем сколько там битов реально валит в каждой посылке.
 
#15
Uncle, изначально начал не совсем правильно делать, зачем в железо лесть, это не наш метод, сначала надо на компьютере смоделировать, это проще и быстрее в реализации, тамже можно регистры контроллера анализировать на каждом шаге программы, отладку делать. В общем без Протеуса не обойтись. Вот проэктик, там имитатор сигналов кейлг, стар, саме, и еще чтото, тамже твой будущий граб, перерисуешь для себя, и анализатор.
Работай в протеусе, сразу видно какой сигнал прилетает (с ом вирт. осцилографа) и как контроллер его определяет (смотрим регистры).
Только прошивки там для граба нет, надо добавлять.
 

Вложения

#16
russo, Брат - посмотри плиз мою функцию приема пакетов свежим взглядом - думаю сразу найдешь откуда лишаковые биты лезут.
 
#17
if (TMR2 < 0x20) // эту лажу пришлось добавить чтобы отделить
if(TMR2 > 0x10) // пакеты между собой в одной посылке - время 0x1F значения таймера
А здесь ничего не забыл добавить?

Вообще выложи весь код папкой проэкта, как таймеры инициализированы, и все остальное.
 
#19
Лучше брел от сигналки взять.
Походу это брелок и есть от сигналки - производитель компания

Please Login or Register to view hidden text.


Ну не последняя модель - такая пару тройку лет назад выпущеная.

---------- Post added at 21:58 ---------- Previous post was at 20:55 ----------

Вот по ходу снял поверграфом пару пакетов:
А вот он первый:

А вот второй:


---------- Post added at 22:38 ---------- Previous post was at 21:58 ----------

поигравшись с поверграфом - прихожу к выводу что там внатуре меняется количество битов в посылках. И еще - мой гавнограббер считает биты по ходу правельно.
 
#20
Через конденсатор подключился к звуковой карте?

Подключись без кондера напрямую, осцилограмма будет более реальная.

Интересно, почему преамбулы нет? Что за кодировка?

Можно сохраненный файл в поверграфе приложить.
 
Сверху