Форум
 

Вернуться   Форум "Фрикер Клуб" - кодграббер своими руками > Основной раздел > Кодграбберы

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

Ответ
 
Опции темы Опции просмотра
Старый 16.11.2017, 11:59   #41
skorpionm Меню Пользователя
Вступил в клуб
 
Регистрация: 21.03.2013
Сообщений: 46
По умолчанию Re: анализатор + кодграбер (stm32f103c8t6+ssd1306+WL101-341)WL101-341

посмотрел на реализации предложеные тут для работы STM32 с CC1101 и опять ужаслуслся от количество бит, регистров и прочего

но у меня получилось так

PHP код:
#define UP_CS_CC1101    HAL_GPIO_WritePin(CS_PORT,CS_PIN,GPIO_PIN_SET); 
#define DOWN_CS_CC1101   HAL_GPIO_WritePin(CS_PORT,CS_PIN,GPIO_PIN_RESET);


const uint8_t    Cfg_AM_433[]={
  
IOCFG2,   0x0D,
    
IOCFG0,   0x0D,
    
FIFOTHR,  0x07,
    
PKTCTRL00x32,
    
FSCTRL1,  0x0E,
    
FREQ2,    0x10,
    
FREQ1,    0xB0,
    
FREQ0,    0x7F,
    
MDMCFG4,  0x17,
    
MDMCFG3,  0x32,
    
MDMCFG2,  0x30,
    
MDMCFG1,  0x23,
    
MDMCFG0,  0xF8,
    
MCSM0,    0x18,
    
FOCCFG,   0x18,
    
AGCCTRL20x07,
    
AGCCTRL10x00,
    
AGCCTRL00x91,
    
WORCTRL,  0xFB,
    
FREND1,   0xB6,
    
FREND0,   0x11,
    
FSCAL3,   0xE9,
    
FSCAL2,   0x2A,
    
FSCAL1,   0x00,
    
FSCAL0,   0x1F,
    
TEST2,    0x88,
    
TEST1,    0x31,
    
TEST0,    0x09,
    
PATABLE,  0x00,
    
PATABLE,  0xC0,
    
PATABLE,  0x00,
    
PATABLE,  0x00,
    
PATABLE,  0x00,
    
PATABLE,  0x00,
    
PATABLE,  0x00,
    
PATABLE,  0x00
};


const 
uint8_t Cfg_FM_433[]={
 
0
};

const 
uint8_t Cfg_WFM_313[]={
  
0
};

const 
uint8_t Cfg_WFM_433[]={
  
0
};

// Hold pointer to inited HAL SPI device
static SPI_HandleTypeDef CC1101_SPI;
static 
GPIO_TypeDef CS_PORT;
uint16_t CS_PIN;


uint8_t CC1101_Init (SPI_HandleTypeDef hspiGPIO_TypeDef cs_portuint16_t cs_pin){
    
CC1101_SPI hspi;
    
CS_PORT cs_port;
    
CS_PIN cs_pin;
    
    
HAL_SPI_Init(CC1101_SPI);
    
    return(
1);
}
void CC1101_Strobe (uint8_t strob){
    
    
DOWN_CS_CC1101;
    
HAL_SPI_Transmit(CC1101_SPI, &strob1,100);
    
UP_CS_CC1101;
}
//void CC1101_Config1 (const uint8_t *Cfg, uint8_t size){
//    
//    HAL_Delay(40);
//    CC1101_Strobe(SIDLE);
//    HAL_Delay(40);
//    CC1101_Strobe(SRES);
//    HAL_Delay(100);
//    
//    DOWN_CS_CC1101;
//    HAL_SPI_Transmit(CC1101_SPI, (uint8_t*)Cfg, size,100);
//    UP_CS_CC1101;
//    //    CC1101_Config1(Cfg_AM_433, sizeof(Cfg_AM_433));
//     HAL_Delay(100);
//     CC1101_Strobe(SRX);
//}

void CC1101_Config (uint8_t Cfg){

    
    
HAL_Delay(40);
    
CC1101_Strobe(SIDLE);
    
HAL_Delay(40);
    
CC1101_Strobe(SRES);
    
HAL_Delay(100);

    
DOWN_CS_CC1101;
     switch (
Cfg){
         case 
AM_433:
                 
HAL_SPI_Transmit(CC1101_SPI, (uint8_t*)Cfg_AM_433sizeof(Cfg_AM_433),100);
            break;
         case 
FM_433:
                 
HAL_SPI_Transmit(CC1101_SPI, (uint8_t*)Cfg_FM_433sizeof(Cfg_FM_433),100);
            break;
     }
    
UP_CS_CC1101;


инициализачия SPI куда подключен CC1101
CC1101_Init(&hspi2, GPIOB, GPIO_PIN_12); SPI и пин CS далее не будет зависеть от кода надо указать только при инициализации

загрузка конфига
CC1101_Config(AM_433);

хотел сделать еще проще
CC1101_Config1(Cfg_AM_433,sizeof(Cfg_AM_433)); но не получается объявить массив чтоб его было видно в других местах (если явно не указывать его размер)

Добавлено через 32 минуты
а да, SPI сконфигурирован на 9 Мгц

Добавлено через 1 час 57 минут
ну и ништячек что все работает https://yadi.sk/i/l1YJpT5X3PkBGo
skorpionm вне форума   Ответить с цитированием
Старый 16.11.2017, 14:35   #42
skorpionm Меню Пользователя
Вступил в клуб
 
Регистрация: 21.03.2013
Сообщений: 46
По умолчанию Re: анализатор + кодграбер (stm32f103c8t6+ssd1306+WL101-341)WL101-341

как посмотреть на какой частоте принемем/передаем
данные читаем из СС1101....
PHP код:
uint8_t CC1101_ReadData (uint8_t strob){
    
uint8_t data;
    
strob|=0x80;
     
    
DOWN_CS_CC1101;
     
HAL_SPI_Transmit(CC1101_SPI, &strob1100); 
     
HAL_SPI_Receive (CC1101_SPI, &data1100);
    
UP_CS_CC1101;
 
    return (
data); 
 }
 
uint32_t CC1101_GET_Freq (void){
    
uint32_t freq = (CC1101_ReadData(FREQ2)<<16)|(CC1101_ReadData(FREQ1)<<8)|(CC1101_ReadData(FREQ0));
    
uint32_t reg_freq freq 1457
    
reg_freq /= 2000;
    
reg_freq += freq 396
    return(
reg_freq);

CC1101_GET_Freq () --> частота в герцах / 1000000 -->Мгц
skorpionm вне форума   Ответить с цитированием
Старый 16.11.2017, 15:04   #43
Paul74s Меню Пользователя
Резидент клуба
 
Аватар для Paul74s
 
Регистрация: 16.11.2012
Сообщений: 552
По умолчанию Re: анализатор + кодграбер (stm32f103c8t6+ssd1306+WL101-341)WL101-341

Эта формула оптимизирована для 8-битных МК, а для 32-битных можно накатать формулу из даташита.

Да еще число 1457 - это "множитель" для кварца определенной частоты, например 26'000'050 Гц, число легко подобрать, например по SDR или более точному прибору
Paul74s вне форума   Ответить с цитированием
Старый 16.11.2017, 17:56   #44
skorpionm Меню Пользователя
Вступил в клуб
 
Регистрация: 21.03.2013
Сообщений: 46
По умолчанию Re: анализатор + кодграбер (stm32f103c8t6+ssd1306+WL101-341)WL101-341

Понять бы как по формуле рассчитывается частота, тогда смогу сделать прям из меню установку, нужной частоты
skorpionm вне форума   Ответить с цитированием
Старый 16.11.2017, 21:18   #45
skorpionm Меню Пользователя
Вступил в клуб
 
Регистрация: 21.03.2013
Сообщений: 46
По умолчанию Re: анализатор + кодграбер (stm32f103c8t6+ssd1306+WL101-341)WL101-341

В формулу из даташита я так понимаю Fxosc это частота кварца? Теоретически 26Мгц?

Добавлено через 1 час 3 минуты
И ещё 1 вопрос к знатокам....
В асинхронным режиме входом ТХ передатчика , может является только GDO0, конфигурим его 0x26 и цепляем к выходу Мк. Все как-бы хорошо ,Но! Как обычно бочка дектя.... При включении Сс1101 на выходе GDO0 строб в 1...кГц, тоесть по умолчанию настроен на выход.... И при подключении к выходу мк , который в свою очередь уже имеет потенциал 1 или 0. Отсюда вопрос как быть в этой ситуевине... Или может кто подскажет как на лету в СТМ-ке переконфигурировать пин с входа на выход и обратно после передачи.
skorpionm вне форума   Ответить с цитированием
Старый 16.11.2017, 22:25   #46
Paul74s Меню Пользователя
Резидент клуба
 
Аватар для Paul74s
 
Регистрация: 16.11.2012
Сообщений: 552
По умолчанию Re: анализатор + кодграбер (stm32f103c8t6+ssd1306+WL101-341)WL101-341

Теоретически 26 МГц, но по факту может отличаться, кто его знает что там поставили китайцы.
Формула это элементарная математика гоняй хоть от регистров к частоте, хоть от частоты к регистрам:
Регистры*396.7285=частота или частота/396.7285=регистры
А на кой их переключать? GDO0 настраиваешься на асинхронный вход - ногу МК на выход, а GDO2 на асинхронный выход - ногу МК на вход, и работай на здоровье.
А какая разница что по дефолту в СС: включил, закинул в регистры нужные настройки и слушай/передавай радио.
Paul74s вне форума   Ответить с цитированием
Старый 17.11.2017, 06:38   #47
skorpionm Меню Пользователя
Вступил в клуб
 
Регистрация: 21.03.2013
Сообщений: 46
По умолчанию Re: анализатор + кодграбер (stm32f103c8t6+ssd1306+WL101-341)WL101-341

Вот как раз проблема в том что. Сначала инициализируются порты мк, и ногу подключению к GDO0 будет выходом до того как будут закигуты регистры в СС. Ну ладно это можно и поменять. Но при сбросе СС, если надо залить другой конфиг, GD00 опять окажется выходом, хоть и кратковременно, но всеже.
skorpionm вне форума   Ответить с цитированием
Старый 17.11.2017, 07:18   #48
Paul74s Меню Пользователя
Резидент клуба
 
Аватар для Paul74s
 
Регистрация: 16.11.2012
Сообщений: 552
По умолчанию Re: анализатор + кодграбер (stm32f103c8t6+ssd1306+WL101-341)WL101-341

Такой ерундой даже не заморачивался - АТмега328 чувствует себя хорошо.
Из личных опытов: загрузил в СС настройки, включил на прием, в асинх.выходу была подключена пищалка - все "пишало", затем решил переписать прошивку МК (кондер только 100н), отцепил "батарейку" 3,3В не переводя СС в IDLE, через несколько секунд подключил программатор с питанием 5В, а из пищалки полился звук приема, т.е. СС вообще не сбросилась и не сгорела от 5В.
Вечером могу провести опыты по "сбросу" регистров от "SRES" и "передергивания" СС с проверкой данных в регистрах.
Paul74s вне форума   Ответить с цитированием
Старый 17.11.2017, 10:28   #49
skorpionm Меню Пользователя
Вступил в клуб
 
Регистрация: 21.03.2013
Сообщений: 46
По умолчанию Re: анализатор + кодграбер (stm32f103c8t6+ssd1306+WL101-341)WL101-341

я не говорил что это 100% должно выжжечь выход... я говорю это не правильно... и надо GDO0 цеплять хотябы через токо-ограничивающий резистор на 620-680 ом ток при кализиях будет не превышать 5мкА... что не сожжет выхода и думаю хватит, чтоб открывать входной транзистор

Добавлено через 4 минуты
еще глупый вопросик
StarLine - протокол
1 - UP-250мкс- DOWN-250мкс
0 - UP-500мкс- DOWN-500мкс
или наоборот (по разному пишут)
далее посылка как в в других KeeЛогах, отзеркалирована ?
посылка 8бит(кнопка)+24бит(Serial)+32бит (HOP) ?????

Добавлено через 1 час 54 минуты
заценитите )) https://yadi.sk/i/WLGngHRP3Pn2Ah
skorpionm вне форума   Ответить с цитированием
Старый 17.11.2017, 16:17   #50
skorpionm Меню Пользователя
Вступил в клуб
 
Регистрация: 21.03.2013
Сообщений: 46
По умолчанию Re: анализатор + кодграбер (stm32f103c8t6+ssd1306+WL101-341)WL101-341

Цитата:
Сообщение от Paul74s
Теоретически 26 МГц, но по факту может отличаться, кто его знает что там поставили китайцы.
Формула это элементарная математика гоняй хоть от регистров к частоте, хоть от частоты к регистрам:
Регистры*396.7285=частота или частота/396.7285=регистры
А на кой их переключать? GDO0 настраиваешься на асинхронный вход - ногу МК на выход, а GDO2 на асинхронный выход - ногу МК на вход, и работай на здоровье.
А какая разница что по дефолту в СС: включил, закинул в регистры нужные настройки и слушай/передавай радио.

ну тогда ....
PHP код:
#define Fxosc 26000000                 //Freq Crystal

float  CC1101_GET_Freq (void){
    
uint32_t freq = (CC1101_ReadData(FREQ2)<<16)|(CC1101_ReadData(FREQ1)<<8)|(CC1101_ReadData(FREQ0));
    return((((float) 
freq*Fxosc/0x10000))/1000000); 


void CC1101_SET_Freq (float freq){
  
uint32_t Set_Freq=((float) (freq*1000000)/Fxosc 0x10000);
    
    
uint8_t Buf_Freq[]={
    
FREQ2Set_Freq>>16,
    
FREQ1Set_Freq>>8,
    
FREQ0Set_Freq    
    
};
    
CC1101_Strobe(SIDLE);
    
HAL_Delay(40);
    
DOWN_CS_CC1101;
    
HAL_SPI_Transmit(CC1101_SPI, (uint8_t*)Buf_Freqsizeof(Buf_Freq),100);
    
UP_CS_CC1101;
    
HAL_Delay(40);

CC1101_GET_Freq () получить текущуу частоту в Мгц
CC1101_SET_Freq (433.92) установить частоту

подкручивая Fxosc можно настроится на правильную частоту

Последний раз редактировалось skorpionm; 17.11.2017 в 16:24.
skorpionm вне форума   Ответить с цитированием
Ответ

Опции темы
Опции просмотра

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

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



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


vBulletin 4.1.0 Перевод: zCarot
(C) www.phreakerclub.com
Яндекс.Метрика