Фрикер Клуб
 

Вернуться   Фрикер Клуб > Основной раздел > Статьи

Важная информация

Ответ
 
Опции темы Опции просмотра
Старый 14.01.2013, 16:03   #11
tahion
Автор
 
Аватар для tahion
 
Регистрация: 13.05.2011
Сообщений: 1,308
По умолчанию Re: Исходники под ардуину

Цитата:
Сообщение от Valeron
Небеспокойса, когда я сделаю конструктор из кубиков, я тебе лично один вручу )))

Да я как бы и не беспокоюсь, выкладывай чо есть, заценим твой говнокод, фрикер-хуятор 80lvl 6-12 лет, бгг.
tahion вне форума   Ответить с цитированием
Старый 14.01.2013, 16:40   #12
DIVER_SANT
Модератор
 
Аватар для DIVER_SANT
 
Регистрация: 27.03.2011
Сообщений: 2,313
По умолчанию Re: Исходники под ардуину

Начинается.....
DIVER_SANT вне форума   Ответить с цитированием
Старый 14.01.2013, 17:01   #13
kenzo
Автор
 
Аватар для kenzo
 
Регистрация: 17.02.2011
Сообщений: 284
По умолчанию Re: Исходники под ардуину

друзья, давайте только конструктив
kenzo вне форума   Ответить с цитированием
Старый 14.01.2013, 17:11   #14
tahion
Автор
 
Аватар для tahion
 
Регистрация: 13.05.2011
Сообщений: 1,308
По умолчанию Re: Исходники под ардуину

Цитата:
Сообщение от kenzo
друзья, давайте только конструктив

Хм, вот уж не думал, что ты так поступишь, ну ладно, ок. Пусть топикстартер ответит за свои слова и будет все норм:

Цитата:
фрикеры нью генерейшн на ардуино мля ))) можно еще конструктор сделать из таких кубиков знаете, друг с другом сцепляются и получается девайс. типа "Юный фрикер-хуятор" для детей 6-12 лет

tahion вне форума   Ответить с цитированием
Старый 14.01.2013, 17:29   #15
Valeron
Резидент клуба
 
Регистрация: 15.05.2011
Сообщений: 233
По умолчанию Re: Исходники под ардуину

Я за слова отвечаю - такион может рассчитывать на конструктор из кубиков.

Ну а далее собственно следущая часть кодеса.. работа с cc1101. извините, описание позже, я приболел чуть.

Код:
#include <SPI.h>

#define CC_CS  9
#define CC_RX  2 //GDO2
#define CC_TX  3 //GDO0

#define SRES  0x30
#define SCAL  0x33
#define SRX   0x34
#define STX   0x35
#define SIDLE 0x36
#define SPWD  0x39

#define IOCFG2     0x00
#define IOCFG1     0x01
#define IOCFG0     0x02
#define FIFOTHR    0x03
#define SYNC1      0x04
#define SYNC0      0x05
#define PKTLEN     0x06
#define PKTCTRL1   0x07
#define PKTCTRL0   0x08
#define ADDR       0x09
#define CHANNR     0x0A
#define FSCTRL1    0x0B
#define FSCTRL0    0x0C
#define FREQ2      0x0D
#define FREQ1      0x0E
#define FREQ0      0x0F
#define MDMCFG4    0x10
#define MDMCFG3    0x11
#define MDMCFG2    0x12
#define MDMCFG1    0x13
#define MDMCFG0    0x14
#define DEVIATN    0x15
#define MCSM2 	   0x16
#define MCSM1 	   0x17
#define MCSM0 	   0x18
#define FOCCFG 	   0x19
#define BSCFG 	   0x1A
#define AGCTRL2    0x1B
#define AGCTRL1    0x1C
#define AGCTRL0    0x1D
#define WOREVT1    0x1E
#define WOREVT0    0x1F
#define WORCTRL    0x20
#define FREND1 	   0x21
#define FREND0 	   0x22
#define FSCAL3 	   0x23
#define FSCAL2 	   0x24
#define FSCAL1 	   0x25
#define FSCAL0 	   0x26
#define RCCTRL1    0x27
#define RCCTRL0    0x28
#define FSTEST 	   0x29
#define PTEST 	   0x2A
#define AGCTEST    0x2B
#define TEST2 	   0x2C
#define TEST1 	   0x2D
#define TEST0      0x2E
#define PATABLE    0x3E

const byte cc_config[] PROGMEM=
{
  IOCFG0,  0b00000000,
  IOCFG2,  0b00001101,
  FIFOTHR, 0b01000111,
  PKTCTRL0,0b00110010,
  FSCTRL1, 0x06,
  FSCTRL0, 0x00,
  FREQ2,   0x10,
  FREQ1,   0xB0,
  FREQ0,   0x71,
  MDMCFG4, 0x16,
  MDMCFG3, 0xe4,
  MDMCFG2, 0b00110000,
  MDMCFG1, 0x22,
  MDMCFG0, 0xF8,
  MCSM2,   0x07,
  MCSM1,   0x30,
  MCSM0,   0x18,
  AGCTRL2, 0b00000100,
  AGCTRL1, 0x00,
  AGCTRL0, 0b00010000,
  FREND1,  0xB6,
  FREND0,  0b00010001,
  FSCAL3,  0xE9,
  FSCAL2,  0x2A,
  FSCAL1,  0x00,
  FSCAL0,  0x1F,
  TEST2,   0x81,
  TEST1,   0x35,
  TEST0,   0x09,
  PATABLE, 0x00,
  PATABLE, 0xc0,
  PATABLE, 0x00,
  PATABLE, 0x00,
  PATABLE, 0x00,
  PATABLE, 0x00,
  PATABLE, 0x00,
  PATABLE, 0x00
};

volatile byte level=255;
volatile unsigned long last, len;
byte p_level;
unsigned long p_len, p_len_prev;

struct
{
  byte state;
  unsigned long TE;
  byte pre_count, data[8], dat_bit;
} keeloq;

struct
{
  byte state;
  byte pre_count, data[8], dat_bit;
} starline;

void cc1101_strobe(byte s)
{
  digitalWrite(CC_CS, LOW);
  delay(1);
  SPI.transfer(s);
  digitalWrite(CC_CS, HIGH);
}

void cc1101_init()
{
  byte a;

  cc1101_strobe(SRES);
  delay(10);

  digitalWrite(CC_CS, LOW);
  for(a=0; a<sizeof(cc_config); a++)
    SPI.transfer(pgm_read_byte(cc_config+a));
  digitalWrite(CC_CS, HIGH);
}

void rtx_rx()
{
  cc1101_strobe(SIDLE);
  cc1101_strobe(SRX);
}

void rtx_tx()
{
  cc1101_strobe(SIDLE);
  cc1101_strobe(STX);
}

void setbit(byte *data, byte n)
{
  data[n/8]|=1<<(n%8);
}

#define KL_MIN_PRE_COUNT 4
#define KL_MAX_TE 500
#define KL_MIN_TE 300
#define KL_MAX_BITS 64

void process_keeloq()
{
  switch(keeloq.state)
  {
    case 0:
      if(p_level) break;
      keeloq.state=1;
      keeloq.pre_count=0;
      break;

    case 1: //pre+hdr
      if(p_len>=KL_MIN_TE && p_len<=KL_MAX_TE) keeloq.pre_count++;
      else if(!p_level && p_len>=KL_MIN_TE*10 && p_len<=KL_MAX_TE*10 && keeloq.pre_count>=KL_MIN_PRE_COUNT)
      {
        keeloq.TE=p_len/10;
        keeloq.state=2;
        keeloq.dat_bit=0;
        keeloq.data[0]=0x00;
        keeloq.data[1]=0x00;
        keeloq.data[2]=0x00;
        keeloq.data[3]=0x00;
        keeloq.data[4]=0x00;
        keeloq.data[5]=0x00;
        keeloq.data[6]=0x00;
        keeloq.data[7]=0x00;
      }
        else
      {
        keeloq.state=0;
        break;
      }
      break;

    case 2: //dat
      if(!p_level) break;

      if(p_len<keeloq.TE/2 || p_len>keeloq.TE*3)
      {
        keeloq.state=0;
        break;
      }

      if(p_len<=keeloq.TE+keeloq.TE/2) setbit(keeloq.data, keeloq.dat_bit);
      if(++keeloq.dat_bit==KL_MAX_BITS) keeloq.state=100;
      break;
  }
}

#define SL_MIN_PRE_COUNT 4
#define SL_MAX_PRE 1200
#define SL_MIN_PRE 800
#define SL_MAX_ZERO 350
#define SL_MIN_ZERO 100
#define SL_MAX_ONE 700
#define SL_MIN_ONE 400
#define SL_MIN_BITS 16
#define SL_MAX_BITS 64

void process_starline()
{
  byte b;

  switch(starline.state)
  {
    case 0:
      if(p_level) break;
      starline.state=1;
      starline.pre_count=0;
      break;

    case 1: //pre
      if(p_len>=SL_MIN_PRE && p_len<=SL_MAX_PRE) starline.pre_count++;
      else if(p_len<SL_MIN_PRE && starline.pre_count>=SL_MIN_PRE_COUNT)
      {
        starline.state=2;
        starline.dat_bit=0;
        starline.data[0]=0x00;
        starline.data[1]=0x00;
        starline.data[2]=0x00;
        starline.data[3]=0x00;
        starline.data[4]=0x00;
        starline.data[5]=0x00;
        starline.data[6]=0x00;
        starline.data[7]=0x00;
      }
        else
      {
        starline.state=0;
        break;
      }
      break;

    case 2: //dat
      if(p_level) break;
      
      if(p_len_prev>=SL_MIN_ONE && p_len_prev<=SL_MAX_ONE/* &&
         p_len>=SL_MIN_ONE && p_len<=SL_MAX_ONE*/) b=1;
       else
      if(p_len_prev>=SL_MIN_ZERO && p_len_prev<=SL_MAX_ZERO/* &&
         p_len>=SL_MIN_ZERO && p_len<=SL_MAX_ZERO*/) b=0;
      else
      {
        if(starline.dat_bit>=SL_MIN_BITS) starline.state=100;
          else starline.state=0;
        break;
      }

      if(b) setbit(starline.data, starline.dat_bit);
      if(++starline.dat_bit==SL_MAX_BITS) starline.state=100;
      break;
  }
}

void dump_hex(byte *buf, byte bits)
{
  byte a;
  
  for(a=0; a<(bits+7)/8; a++)
  {
    if(buf[a]<=0x0f) Serial.print('0');
    Serial.print(buf[a], HEX);
    Serial.print(" ");
  }
  Serial.println("");
}

void rx_int()
{
  if(level!=255) return;
  
  len=micros()-last;
  last=micros();
  
  if(digitalRead(CC_RX)==HIGH) level=0;
    else level=1; 
}

void setup()
{
  pinMode(CC_RX, INPUT);
  pinMode(CC_CS, OUTPUT);
  digitalWrite(CC_CS, HIGH);
  attachInterrupt(0, rx_int, CHANGE);
  
  Serial.begin(115200); 
  while(!Serial);

  Serial.println("MEGA OVERFUCK ARDUINO LOGGER BY HUY FOR NARKOMANS");
  Serial.println("");
  
  SPI.begin();
  cc1101_init();
  rtx_rx();  
  interrupts();
} 

void loop()
{ 
  if(level!=255)
  {
    p_level=level;
    p_len=len;
    len=0;
    level=255;
    
    process_keeloq();
    process_starline();
    
    p_len_prev=p_len;
  }
  
  if(keeloq.state==100)
  {
    Serial.print("KEELOQ: ");
    dump_hex(keeloq.data, 64);
    keeloq.state=0;
  }
  
  if(starline.state==100)
  {
    Serial.print("STARLINE[");
    Serial.print(starline.dat_bit);
    Serial.print("]: ");
    dump_hex(starline.data, starline.dat_bit);
    starline.state=0;
  }
}
Добавлено через 59 секунд
да, конфиг для AM OOK. далее будет ФМ под хана
Valeron вне форума   Ответить с цитированием
Старый 14.01.2013, 17:43   #16
tahion
Автор
 
Аватар для tahion
 
Регистрация: 13.05.2011
Сообщений: 1,308
По умолчанию Re: Исходники под ардуину

Цитата:
Сообщение от Valeron
Я за слова отвечаю - такион может рассчитывать на конструктор из кубиков.

Ну а далее собственно следущая часть кодеса.. работа с cc1101. извините, описание позже, я приболел чуть.

Хуйка, ответ то где? Когда kab и я продвигали эту тематику ты каку писал, а когда оно стало популярно, ты решил ее выдать за свою и светом озарять? Гыгыгы. Покайся и скажи, что был не прав.
tahion вне форума   Ответить с цитированием
Старый 14.01.2013, 17:47   #17
Valeron
Резидент клуба
 
Регистрация: 15.05.2011
Сообщений: 233
По умолчанию Re: Исходники под ардуину

каюсь и сдаюс, ты подебил.
Valeron вне форума   Ответить с цитированием
Старый 14.01.2013, 17:56   #18
tahion
Автор
 
Аватар для tahion
 
Регистрация: 13.05.2011
Сообщений: 1,308
По умолчанию Re: Исходники под ардуину

Цитата:
Сообщение от Valeron
каюсь и сдаюс, ты подебил.

Очередной сарказм? Я не за победу, а за правду. Если написал серьезно, то как говорится "понять и простить", тема хоть и не первая, но вполне полезная...
tahion вне форума   Ответить с цитированием
Старый 14.01.2013, 17:58   #19
DIVER_SANT
Модератор
 
Аватар для DIVER_SANT
 
Регистрация: 27.03.2011
Сообщений: 2,313
По умолчанию Re: Исходники под ардуину

Как появился Ланчпад-тема стардуино затухла,а может и раньше...Так что осадите добры молодцы.Valeron изучая твои исходники и раньше-заметил что для каждой кодировки дефайны по коду идут ,а не в начале как обычно,может это не приципиально,но почему так?

tahion дай человеку изложить-а выбор останется за нами...
DIVER_SANT вне форума   Ответить с цитированием
Старый 14.01.2013, 18:11   #20
Valeron
Резидент клуба
 
Регистрация: 15.05.2011
Сообщений: 233
По умолчанию Re: Исходники под ардуину

Да разницы нет, где их поместить - но логично когда они перед функцией приема, где собственно и используются. в процессе отладки часто править или смотреть на них приходится, прыгая к ним от функции, так что там им самое место )).
Кстати лаунчпад у меня тоже есть гг.. но тут дело не в том, под что писать. код везде будет одинаков на 95%, и отличаться только в низкоуровневых моментах типа вычисления длительности.
Скажу честно, мне не нравится корявый (уёбищный попросту говоря) код, который новички таскают из проекта в проект просто потому, что нет альтернативы.. не претендую ни на какие права на то, что выкладываю - используйте свободно без копирайтов, и лучше таскайте этот код, чем что попало.
Valeron вне форума   Ответить с цитированием
Ответ
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.



Текущее время: 23:45. Часовой пояс GMT +3.


vBulletin 4.1.0 Перевод: zCarot
(C) www.phreakerclub.com