Jump to content

    

Frosty85

Участник
  • Content Count

    7
  • Joined

  • Last visited

Community Reputation

0 Обычный

Recent Profile Visitors

590 profile views
  1. Есть исходник реализации программного SPI на PIC12F629. Задача стоит получить простенький вариант (минимальных размеров) передатчика SPI. Т.е. по нажатию кнопки передать по SPI массив из N-бит информации. Основная проблема как сделать легкодоступным изменение тактовой частоты (SCLK) к примеру 8.84кГц CODE// PIC12F629 Configuration Bit Settings // 'C' source line config statements #include <xc.h> #include <stdint.h> // #pragma config statements should precede project file includes. // Use project enums instead of #define for ON and OFF. // CONFIG #pragma config FOSC = INTRCIO // Oscillator Selection bits (INTOSC oscillator: I/O function on GP4/OSC2/CLKOUT pin, I/O function on GP5/OSC1/CLKIN) #pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT enabled) #pragma config PWRTE = OFF // Power-Up Timer Enable bit (PWRT disabled) #pragma config MCLRE = OFF // GP3/MCLR pin function select (GP3/MCLR pin function is MCLR) #pragma config BOREN = ON // Brown-out Detect Enable bit (BOD enabled) #pragma config CP = OFF // Code Protection bit (Program Memory code protection is disabled) #pragma config CPD = OFF // Data Code Protection bit (Data memory code protection is disabled) //============================================================== #define _XTAL_FREQ 4000000L //============================================================== #define MOSI GP0 #define MISO GP1 #define SCK GP2 #define SS GP5 #define GPIO_Tx GP4 #define TRIS_Tx TRISIObits.TRISIO4 //============================================================== // //============================================================== const uint8_t arr_data[] = { 0x03, 0x00, 0x7E, 0xF8, 0x85, 0xF9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xFD, 0x7E, 0x00, 0x00, 0xE1 }; unsigned char flag; enum { reset = 0, in = 1, //приняли байт }; //============================================================== // //============================================================== void Init_MCU(void); void SPI_write_LSB (uint8_t); void SPI_send_arr_data(void); //============================================================== // //============================================================== void Init_MCU(void) { GPIO = 0; CMCON = 7; TRISIO = 0b00010010; //GP4,GP1 input GPIF = 0; GPIE = 1; IOCB4 = 1; //GP4 interrupt PEIE = 1; GIE = 1; } //============================================================== void main(void) { Init_MCU(); SS=1; while (1) { switch(flag) { case in: SPI_send_arr_data(); break; } __delay_ms(100); } } //============================================================== // //============================================================== void SPI_send_arr_data(void) { SS = 0; for (uint8_t i = 0; i<sizeof (arr_data); i++) { SPI_write_LSB(arr_data[i]); } SS = 1; flag = reset; } //============================================================== // //============================================================== void SPI_write_LSB (uint8_t data) { unsigned char mask = 0x01; while (mask) { if (data & mask)MOSI = 1; else MOSI = 0; SCK = 1; __delay_us(46); SCK = 0; // __delay_us(46); mask <<= 1; } } //============================================================== // //============================================================== interrupt void IRQ(void) { flag = GPIO; if (GPIF && GP4 == 0) { flag = in; } GPIF = 0; } //============================================================== // //==============================================================
  2. Внесу ясности в задачу )))) Сейчас эти самые блоки у меня на руках долго пытался понять откуда он их взял (клиент) и почему он решил что это блоки АКПП и ДВС, на самом деле Это блок от двигателя и иммобилайзера. год узнать не могу и марку тоже, знаю одно, в интернете это даболе всем изввестный стандарт ISO 11785 (RFID) нашел даже даташит на сам контроллер в блоке TMS57780N Теперь думаю яснее будет понять что это за сигналы и откуда они. Вопрос остался открытым, помогите его разложить на байты данных, да и в целом попытаться понять этот протокол. Цитата(Vasily_ @ Sep 23 2015, 17:13) Стандартов нет, но в основном встречается 10400. Для начала автору надо посмотреть уровни сигналов обычным осциллографом, а не пихать сразу всякие сиале, тогда можно сказать что там за шина. Уровень сигнала - 5В И это точно не K-line Цитата(zltigo @ Sep 23 2015, 17:03) Ну Вам, несомненно виднее - я и близко не имею такого опыта с реальными машинами, как Вы. Но пока тупо видно, что там с высочайшей долей вероятности UART логика. Где-то я читал что RS-xxx и UART это в принципе один и тот же стандарт, точнее принцип передачи данных тот же самый асинхронный, только некоторые отличия в структуре самой посылки.
  3. Цитата(zltigo @ Sep 23 2015, 00:11) Вы это серьезно? Скорость в битах в секунду. Берем секунду и делим на длительность бита. Да бред получаетс 7012 бит.сек
  4. Цитата(smalcom @ Sep 23 2015, 00:16) Пишет, что файл с данными устаревший. Пробовал открыть в 1.1.15. Когда мышкой наводишь на место где есть импульсы, справа показывается частота для кусочка под курсором. Качай последнюю версию софта или не ниже 1.1.16 по частоте: длительность импульса 0.1425ms, период: 0.2437ms, Частота: 4.103kHz по частоте одного бита: длительность импульса 0.1425ms, период: 0.2437ms, Частота: 4.103kHz по частоте старт имп.: длительность: 0.2433ms, период: 0.4433ms, частота: 2.256kHz Стоп бит: длительность: 0.6383ms, период: 1.339ms, частота: 747Hz
  5. Цитата(zltigo @ Sep 22 2015, 20:41) Снимаете с большим разрешением кусочек. По минимальной длительности бита определяете скорость, по длительности посылки ДО стоп битов видите разрядность. Включаете в анализаторе рашифровку - убеждаетесь. Я вот это и пытаюсь вычислить (((( как по минимальной длительности бита определить скорость? По разрядности я разобрался вроде. Вот скорость немогу определить.
  6. Цитата(yes @ Sep 22 2015, 19:27) там скорее всего CAN - не положено другого в автомобилях. он дифференциальный - поищите инверсный сигнал Нет это не CAN, машина 1999 года. Блоки между собой завязаны по трем проводам. И не Multiplex и не OBDII.
  7. Доброго времени, есть лог общения снятый между двумя блоками управления (АКПП и ДВС) немогу определить на какой скорости и сколькибитный, понимаю что это стандартный RS-XXX но какой и на какой скорости увы не могу ((( Помогите разобраться. [attachment=95523:screenshot.jpg] [attachment=95522:screenshot2.jpg] Лог целиком снятый с помощью saleae logic :[attachment=95524:________.rar]