Перейти к содержанию
    

andreichk

Свой
  • Постов

    514
  • Зарегистрирован

  • Посещение

Сообщения, опубликованные andreichk


  1. On 4/23/2021 at 5:46 PM, cybersonner said:

    https://gosthelp.ru/text/SP95272Sanitarnyepravilao.html раздел 3.

    погуглил тщательнее- тот самый недавно отмененный документ.

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

    https://de.wikipedia.org/wiki/T%2BA_elektroakustik

  2. On 9/14/2020 at 8:22 PM, Сергей Борщ said:

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

    Вы были правы, косяк находился в инициализации SAI . После исправления, данные стали передаваться правильно.

    Большое спасибо  всем участникам...:good2:

     

    вот собственно то, что должно получиться в итоге:

     

    K640_DSC00002.JPG

    K640_DSC00003.JPG

    K640_DSC00004.JPG

  3. 8 minutes ago, Сергей Борщ said:

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

    я бы с удовольствием, но не знаю, как. а есть букварь для чайников на эту тему?

  4. попробовал подменить тестовый буфер на реальные данные, полученные с кодека по SAI шине.

    #define NCHANNEL   2
    #define NSAMPLE    512
    #define NDUMM      32
    
    typedef int16_t sample;
    typedef sample input_sample[NCHANNEL];
    typedef input_sample audioBuf[NSAMPLE + NDUMM];
    
    typedef sample output_channel[NSAMPLE];
    typedef output_channel output_buffer[NCHANNEL];
    
    audioBuf Input ; 
    
    output_buffer Output;
    
    void shuffle(int channel)
    {
        for(int i = 0; i < NSAMPLE*2; ++i)
        
            Output[channel][i] = Input[i + NDUMM][channel];
    }
    
    void DSP_Sample(void){
    
        extern SAI_HandleTypeDef haudio_in_sai;
    
     HAL_StatusTypeDef res =     
     HAL_SAI_Receive(&haudio_in_sai,(uint8_t*) Input, (NSAMPLE + NDUMM) * 2, HAL_MAX_DELAY);
     
     if (HAL_OK != res)
        {
         CRASH_(15,"HAL_SAI_Receive failed");
        }
        
        for(int i = 0; i < NCHANNEL; ++i) {shuffle(i);}    
        
     HAL_SPI_Transmit(&hspi3, (uint8_t*) &Output[0], (NSAMPLE + NDUMM) * 2, HAL_MAX_DELAY);
    }

    однако применительно к моему процессору,на выходе  ничего не изменилось , то есть всё так и осталось , как с моим быдлокодом. разделения на левый и правый каналы к сож. не произошло.

  5. увеличил кол-во данных в буфере и заполнение стало непрерывным.

    #define NCHANNEL   2
    #define NSAMPLE    256
    #define NDUMM      1
    
    typedef int16_t sample;
    typedef sample input_sample[NCHANNEL];
    typedef input_sample input_buffer[NSAMPLE + NDUMM];
    
    typedef sample output_channel[NSAMPLE];
    typedef output_channel output_buffer[NCHANNEL];
    
    input_buffer Input = 
    {
     0,1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1,
       1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1,
       1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1,
       1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1,
       1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1,
       1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1,
       1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1,
       1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1,
       1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1,
       1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1,
       1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1,
       1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1,
       1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1,
       1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1,
       1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1,
       1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1,
       1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1,
       1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1,
       1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1,
       1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1,
       1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1,
       1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1,
       1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1,
       1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1,
       1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1,
       1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008
    };
    
    output_buffer Output;
    
    void shuffle(int channel)
    {
        for(int i = 0; i < NSAMPLE*2; ++i)
        
            Output[channel][i] = Input[i + NDUMM][channel];
    }
    
    void DSP_Sample(void){
    
        extern SAI_HandleTypeDef haudio_in_sai;
    
     HAL_StatusTypeDef res =     
     HAL_SAI_Receive(&haudio_in_sai,(uint8_t*) audioBuf, (NSAMPLE + NDUMMY) * 2, HAL_MAX_DELAY);
     
     if (HAL_OK != res)
        {
         CRASH_(15,"HAL_SAI_Receive failed");
        }
        
        for(int i = 0; i < NCHANNEL; ++i) {shuffle(i);}    
        
     HAL_SPI_Transmit(&hspi3, (uint8_t*) &Output[0], (NSAMPLE + NDUMM) * 2, HAL_MAX_DELAY);
    }

    на картинке видно, что данные с буфера уложились правильно

    2.png

    3.png

  6. спасибо всем отозвавшимся, я проверил все ваши поправки  и вот что получил, только я немного увеличил размер тестового буфера, чтобы приблизить к реальным условиям.

    #define NCHANNEL   2
    #define NSAMPLE    256
    #define NDUMM      1
    
    typedef int16_t sample;
    typedef sample input_sample[NCHANNEL];
    typedef input_sample input_buffer[NSAMPLE + NDUMM];
    
    typedef sample output_channel[NSAMPLE];
    typedef output_channel output_buffer[NCHANNEL];
    
    input_buffer Input = 
    {
     0,1008, 31, 1008, 31, 1008, 31, 1008, 31, 1008, 31, 1008, 31, 1008, 31, 1008, 31, 1008, 31, 1008, 31,
       1008, 31, 1008, 31, 1008, 31, 1008, 31, 1008, 31, 1008, 31, 1008, 31, 1008, 31, 1008, 31, 1008, 31,
       1008, 31, 1008, 31, 1008, 31, 1008, 31, 1008, 31, 1008, 31, 1008, 31, 1008, 31, 1008, 31, 1008, 31,
       1008, 31, 1008, 31, 1008, 31, 1008, 31, 1008, 31, 1008, 31, 1008, 31, 1008, 31, 1008, 31, 1008, 31,
       1008, 31, 1008, 31, 1008, 31, 1008, 31, 1008, 31, 1008, 31, 1008, 31, 1008, 31, 1008, 31, 1008, 31,
       1008, 31, 1008, 31, 1008, 31, 1008, 31, 1008, 31, 1008, 31, 1008, 31, 1008, 31, 1008, 31, 1008, 31,
       1008, 31, 1008, 31, 1008, 31, 1008, 31, 1008, 31, 1008, 31, 1008, 31, 1008, 31, 1008, 31, 1008, 31,
       1008, 31, 1008, 31, 1008, 31, 1008, 31, 1008, 31, 1008, 31, 1008, 31, 1008, 31, 1008, 31, 1008, 31,
       1008, 31, 1008, 31, 1008, 31, 1008, 31, 1008, 31, 1008, 31, 1008, 31, 1008, 31, 1008, 31, 1008, 31,
       1008, 31, 1008, 31, 1008, 31, 1008, 31, 1008, 31, 1008, 31, 1008, 31, 1008, 31, 1008, 31, 1008, 31,
       1008, 31, 1008, 31, 1008, 31, 1008, 31, 1008, 31, 1008, 31, 1008, 31, 1008, 31, 1008, 31, 1008, 31,
       1008, 31, 1008, 31, 1008, 31, 1008, 31, 1008, 31, 1008, 31, 1008, 31, 1008, 31, 1008, 31, 1008, 31,
       1008, 31, 1008, 31, 1008, 31, 1008, 31, 1008, 31, 1008, 31, 1008, 31, 1008, 31, 1008, 31, 1008, 31
    };
    
    output_buffer Output;
    
    void shuffle(int channel)
    {
        for(int i = 0; i < NSAMPLE; ++i)
        
            Output[!channel][i] = Input[i + NDUMM][channel];
    }
    
    void DSP_Sample(void){
    
    //    extern SAI_HandleTypeDef haudio_in_sai;
    
    // HAL_StatusTypeDef res =     
    // HAL_SAI_Receive(&haudio_in_sai,(uint8_t*) audioBuf, (NSAMPLE + NDUMMY) * 2, HAL_MAX_DELAY);
     
    // if (HAL_OK != res)
      //  {
      //   CRASH_(15,"HAL_SAI_Receive failed");
     //   }
        
        for(int i = 0; i < NCHANNEL; ++i)
            shuffle(i);    
        
     HAL_SPI_Transmit(&hspi3, (uint8_t*) &Output[0], (NSAMPLE + NDUMM) * 2, HAL_MAX_DELAY);
    }

    однако , применительно к конкретному процессору  STM32H743, получилось не совсем то, что ожидалось, а именно как на картинке. наверное потому что данных в буфере в 2 раза меньше

    1.png

  7. Привет народ. Необходимо переслать по СПИ шине данные , полученные со звукового кодека, который подключен по SAI в другой процессор.

    Судя по осциллограмме на ножках кодека, инициализация проходит успешно и можно видеть , как данные от левого и правого каналов меняются независимо друг от друга( проверял с помощью подачи синуса на каждый канал).

    То есть данные передаются в буфер в порядке 16 бит левого канала, затем 16 бит правого канала и т.д. то есть как в даташите прописано.

    Пытаюсь для передачи  по СПИ перетасовать данные в порядок 512 байт левого канала, затем 512 байт правого канала таким кодом:

    #define NSAMPLES 512                //Must be order of 2
    #define NDUMMY 32                   //Dummy samples are needed to minimize influence of filter settling after invoking the SAI
    
    int16_t audioBuf[(NSAMPLES + NDUMMY) * 2];
    
    int16_t audioBuff[(NSAMPLES + NDUMMY) * 2];//
    
    void DSP_Sample_send(int ch){
    
        int16_t* pBuf = &audioBuf[NDUMMY + (ch!=0)];
    
        for(int i = 0; i < NSAMPLES; i++)
                                           {
                                      if (ch!=0) audioBuff[i] = (int16_t)*pBuf; 
                                     else        audioBuff[ NSAMPLES + i ] = (int16_t)*pBuf;
                                                 pBuf += 2;
                                           } pBuf = 0;
    }
    
    void DSP_Sample(void){
    
        extern SAI_HandleTypeDef haudio_in_sai;
    
     HAL_StatusTypeDef res =     
     HAL_SAI_Receive(&haudio_in_sai,(uint8_t*) audioBuf, (NSAMPLES + NDUMMY) * 2, HAL_MAX_DELAY);
     
     if (HAL_OK != res)
        {
         CRASH_(15,"HAL_SAI_Receive failed");
        }
        
     DSP_Sample_send(0); //заполняем 512байт левый канал
     DSP_Sample_send(1);//заполняем 512байт  правый канал
     HAL_SPI_Transmit(&hspi3, (uint8_t*) audioBuff, (NSAMPLES + NDUMMY) * 2, HAL_MAX_DELAY);
    }

    однако на ножке MOSI  вижу, что данные левого и правого канала идентичны, то есть меняются одновременно от одного из каналов на входе кодека, а от другого не меняются вовсе, хотя на самом кодеке, как я писал выше, видно чёткое разделение данных левого и правого каналов.

    Подскажите битте, где я косячу и помогите исправить ошибки. Спасибо заранее...

  8. вобщем мы подумали и я решил: выкинуть УАРТ и выводить команды прямо в паралельный порт, с которого адресо-командо байты передаются в СПИ модуль в спартане.

    выглядит это так:

    код в микроблейзе:

    //================================================================================
    =
    //
    //================================================================================
    =
    #include <pthread.h>
    #include <stdio.h>
    #include "platform.h"
    #include <xparameters.h>
    #include <xiomodule.h>
    #include <xiomodule_l.h>
    
    XIOModule gpo1;
    
    volatile u16 addr_command[]= {
                                    0x0002,// RESET
                                    0x0001,// READOUT ENABLE
                                    0x0300,// HIGH PERF MODE
                                    0x4101,// LVDS/ КАНАЛ "В" ОТКЛЮЧЕН
                                    0x4208,// EN DIGITAL
                                    0x4500,// LVDS STRENG
                                    0x4A00,// HIGH FREQ MODE CH B
                                    0x5800,// HIGH FREQ MODE CH A
                                    0x2504,// CH A TEST PATTERNS
                                    0x2B04,// CH B TEST PATTERNS
                                    0x2BC0,// CH B Normal mode
                                    0x25C0,// CH A Normal mode
                                    0x3D20,// ENABLE OFFSET CORR
                                    0xCFBC,// FREEZE OFFSET CORR, OFFSET CORR TIME CONSTANT
                                    0x2900,// DATA FORMAT Twos complement
                                    0x4200 //, // DIS DIGITAL
                                    //0x0000 //
    };
    
    volatile u32 ct = 0;
    void delay(u32 ms) {
        ct = 0;            // set the counter to 0
        while (ct++ < ms); // wait for ms number of milliseconds
    }
    
    int main() {
                XIOModule_Initialize(&gpo1, XPAR_IOMODULE_0_DEVICE_ID);
                XIOModule_Start(&gpo1);
    
                volatile int i = 0;
                 for (i = 0; i < 16; ++i) {
                                    XIOModule_DiscreteWrite(&gpo1, 1, addr_command[i]);// отправка команд в АЦП
                                    delay(2);
                                }
       return 0;
    }

     

    и приёмник в спартане:

     

    `timescale 1ns / 1ps
    //////////////////////////////////////////////////////////////////////////////////
    // Create Date:    26/03/2018 
    // Module Name:    SPI_Master 
    // SPI интерфейс для ADS4245
    // Serial Data Input. This device has a 16-bit shift register.
    //////////////////////////////////////////////////////////////////////////////////
    module SPI_Master16(
          input clk,
         input [15:0]IN_Data,
          output reg CS,
          output reg SDATA,
          output reg SCLK
    );
         
    reg  [5:0] cnt;
    reg  [9:0] DataRate;
    reg  [4:0] ByteCaunt;
    reg [15:0] DataINReg;
    
    //------------------------------------------------
    //Формирования тактовых импульсов и последовательных данных      
    always @(posedge clk)
           begin
         
            if (CS == 0) begin
                 cnt = cnt + 1'b1;
                          
                    if (cnt == 12) begin
                        SCLK = 0;
                      SDATA = DataINReg [15 - ByteCaunt];                    
                            
                    end
              
                    if (cnt == 24) begin
                      
                              ByteCaunt = ByteCaunt + 1'b1;
                        SCLK = 1;
                          cnt = 0;
                            
                    end
                      
              end else begin
              
                        SCLK = 1;
                          cnt = 0;
                      ByteCaunt =0;
                            SDATA = 0;
             end                        
              
       end         
    //-----------------------------------------------
    //-----------------------------------------------
    // Формирование частоты обновления и чип селекта
    // 120.88 МГц тактовые импульсы
    // Поступающие данные 5 MГц
    always @(posedge clk)
           begin
             
                DataRate = DataRate + 1'b1;
              
                if (DataRate == 256) begin
                 
                      CS = 0;
                      
                end
              
                if (DataRate == 640) begin
                 
                      CS = 1;
                      
                      DataRate = 0;
                end         
    
          end
    //-----------------------------------------------
    
    always @(posedge clk)
           begin
             
               DataINReg = IN_Data;
             
             end
    
    endmodule

     

    //===============================================================================
    //--------------------- ВСТРОЕННЫЙ ПРОЦЕССОР MICROBLAZE  ------------------------
    //===============================================================================
    wire [15:0]GPO1;   
    reg  [15:0]data16;
    wire ADS_CS, ADS_SDATA, ADS_SCLK;
    microblaze_mcs_v1_4 mcs_0 (
                              .Clk(res_clkA),   //  input clk
                              .Reset(resetS0),  //  input Reset
                              .GPO1(GPO1[15:0]) // output [15 : 0] GPO1
    );
    //===============================================================================
    //--------------------- ИНИЦИАЛИЗАЦИЯ И КАЛИБРОВКА ADS4245 ----------------------
    //===============================================================================
    SPI_Master16 ADS4245(
                        .clk(res_clkA),      //
                        .IN_Data(GPO1[15:0]),//входные данные 16bit
                         .CS(ADS_CS),
                         .SDATA(ADS_SDATA),
                         .SCLK(ADS_SCLK)
    );
    assign RESET = GPO1[1];  //"C14" '0' для управления по СПИ
    assign SCLK  = ADS_SCLK; //"D15" 
    assign SDATA = ADS_SDATA;//"C16" 
    assign SEN   = ADS_CS;   //"D17"
    //================================================================================
    =

     

    получилась вот такая картинка. вобщем , что посылаю, то и получаю.....

     

    post-16143-1522171564_thumb.png

  9. // HIGH PERF MODE
              xil_printf("%b", 0x03, 0x00 );
    // LVDS CMOS
              xil_printf("%b", 0x41, 0x00);
    // EN DIGITAL
              xil_printf("%d", 0x42, 0x08);
    // LVDS STRENG
              xil_printf("%b", 0x45, 0x00);
    // HIGH FREQ MODE CH B
              xil_printf("%b", 0x4A, 0x00);
    // HIGH FREQ MODE CH A
              xil_printf("%b", 0x58, 0x00);
    
    // CH A/B TEST PATTERNS
              xil_printf("%b", 0x25, 0x04);
              xil_printf("%b", 0x2B, 0x04);
    // Start calibration
    
                    ///    devmem 0x43C20044 32 0x00000100 непонятно как это описать?
    
                 delay(2); // delay one second    sleep 2
    
                    ///ADC_DONE_STATUS=$((`devmem 0x43C20010` & 0x00000003)) непонятно как это описать?
    
      if( inbyte()== 3 )//читаем ответ  if [[ $ADC_DONE_STATUS -eq 3 ]]
               xil_printf("Calibration Done");
          else xil_printf("Calibration Failed");
    
                                                        ///fi непонятно как это описать?
    // Stop calibration
                                ///devmem 0x43C20044 32 0x00000000 непонятно как это описать?
    // CH A/B Normal mode
                 xil_printf("%b", 0x25, 0xC0);
                 xil_printf("%b", 0x2B, 0x00);

     

    подключил микроблейз к спартану. Поморгал светодиодами и инициализировал УАРТ.

    Проверил осциллографом пины УАРТА, Точно вижу, что шлёт указанные байты. Но остались непонятки с синтаксисом. Кто подстажет, как это описать на Си в микроблейзе?

    Спасибо заранее....

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

     

    HIGH PERF MODE

    echo -en "\x03\x00" > $SPI_DEV

    # LVDS CMOS

    #echo -en "\x41\x00" > $SPI_DEV

    # EN DIGITAL

    echo -en "\x42\x08" > $SPI_DEV

    # LVDS STRENG

    #echo -en "\x45\x00" > $SPI_DEV

    # HIGH FREQ MODE CH B

    #echo -en "\x4A\x00" > $SPI_DEV

    # HIGH FREQ MODE CH A

    #echo -en "\x58\x00" > $SPI_DEV

     

    # CH A/B TEST PATTERNS

    echo -en "\x25\x04" > $SPI_DEV

    echo -en "\x2B\x04" > $SPI_DEV

    # Start calibration

    devmem 0x43C20044 32 0x00000100

    sleep 2

    ADC_DONE_STATUS=$((`devmem 0x43C20010` & 0x00000003))

    if [[ $ADC_DONE_STATUS -eq 3 ]]

    then

    echo -ne $yellow

    echo "Calibration Done"

    echo -ne $normal

    else

    echo -ne $lightred

    echo "Calibration Failed"

    echo -ne $normal

    fi

    # Stop calibration

    devmem 0x43C20044 32 0x00000000

    # CH A/B Normal mode

    echo -en "\x25\xC0" > $SPI_DEV

    echo -en "\x2B\x00" > $SPI_DEV

     

    предполагаю, что начало должно выглядеть так:

     

    `timescale 1ms / 1ns
    //////////////////////////////////////////////////////////////////////////////////
    // Module Name: adc_spi  настройка ацп по спи
    //////////////////////////////////////////////////////////////////////////////////
    module adc_spi_init(
      // Clock
      input wire clock,
      input wire init_en,
      // ADC Out
      output  reg adc_sload,
      output wire adc_sclk,
      output  reg adc_sdata
    );
    
    reg [7:0]HIGH_PERF_MODE = 8'h03 & 8'h00;      // HIGH_PERF_MODE
    reg [7:0]LVDS_CMOS = 8'h41 & 8'h00;           // LVDS_CMOS
    
    reg [7:0]EN_DIGITAL = 8'h42 & 8'h08;          // EN_DIGITAL
    reg [7:0]LVDS_STRENG = 8'h45 & 8'h00;         // LVDS_STRENG
    
    reg [7:0]HIGH_FREQ_MODE_CH_B = 8'h4A & 8'h00; // HIGH_FREQ_MODE_CH_B
    reg [7:0]HIGH_FREQ_MODE_CH_A = 8'h58 & 8'h00; // HIGH_FREQ_MODE_CH_A
    
    reg [7:0]CH_A_TEST_PATTERNS = 8'h25 & 8'h04;  // CH_A_TEST_PATTERNS
    reg [7:0]CH_B_TEST_PATTERNS = 8'h2B & 8'h04;  // CH_B_TEST_PATTERNS
    
    always @ ( posedge clock )
    
      begin
    ..........................................
    
    end
    
    endmodule

     

    Приветствуется любая помощь. Заранее спасибо...

     

  11. Хоть я и не буду разбираться с фильтром, совет дам. Вы показываете "средство". А какова "цель"? Что вы хотите отфильтровать, доложите для начала.

    конечная цель - сканер КВ-диапазона.

     

    конкретно по фильтрам: как я понимаю, согласно общей теории построения СДР приёмников , после СИС фильтра, должен следовать ФИР, который тоже должен децимировать входную частоту.

    Как я уже указывал, на выходе смесителя у меня при тактовой 120.88 МГц должно выходить от 0 до 60 МГц, то есть в КВ диапазон как раз попадаем. тогда, если я хочу напр. чтобы на выходе ФИР у меня было ну скажем 118 кГц,

    то я должен весь сигнал поделить на 1024, раскидав делители на все фильтры, правильно?

  12. Нет. Мне это не интересно. Что конкретно вы хотите сделать - перестраиваемый узкополосный фильтр? Так и задавайте конкретный вопрос.

    Ок, начнём конкретно.

    1. фильтр CIC. на входе имеем 20 бит со смесителя.

    Как я уже писал, общая тактовая частота 120.88 МГц. В настройках есть такой параметр Sample rate.

    Если выставлю его == 12, то на выходе фильтра будет поток примерно 12 МГц, так?

    Далее за CIC фильтром идёт набор FIR, и в них тоже есть опция установки Input Sample rate.

    Как их правильно выставлять? в соответствии с делителем предыдущего значения? То есть , если первый СИС делит на 12, то тогда в ФИР ставим 12Мгц , в следующем ФИР децимация == 8,

    тогда делим 12 на 8, для следующего так же делим значение предыдущего и т.д ?

     

    вобщем сделал так:

    CIC децимация на 32

    далее все остальные ФИРы децимация на 2, соответственно параметры Input Sample rate такие:

     

    3.7775

    1.88875

    0.944375

    0.4721875

    0.23609375

    0.118046875

     

    то есть самый последний ФИР выдаёт поток 118 кГц, который я уже в квадратурном смесителе обрабатываю.

    Тогда такой вопрос: все фильтры тактируются одной частотой 120.88 Мгц. Может для ФИРов тоже можно\нужно тактовую частоту понижать, чтобы лучше фильтровало?

  13. Смысл в том, что с RTL-SDR вы можете в Матлабе творить чудеса. А AD9689 вы просто не купите. И будете продолжать строчить посты-мечты.

    Вам непременно нужен сплошной диапазон под гигагерц для радио? О супергетеродинном приеме не задумывались?

    Вы не поверите, но я даже вам могу его купить через фирму , на которой работаю(разумеется за ваши деньги), но зачем мне СДР за такие деньги?

    Давайте исходить из того, что есть, а именно:

    как я уже указал в первом посте, в наличии имеется АЦП ADS4245, припаянный к 6-му спартану с одной стороны, с другой стороны к нему припаян ТФТ 600х800, с третьей стороны 16 битный ЦАП для звука,

    STM32F103 для кнопок и сам не знаю ещё мне в голову взбредёт, вобщем есть кое какой джентльменский набор для экспериментов с СДР.

    Плата уже собрана , проверена на простейшем СДРе http://we.easyelectronics.ru/Radio/prostoy...opriemnik.html/ , что-то там даже шипит и свистит, можно иногда услышать китайское радио, избирательность только слабая .

     

    Вобщем я на верилоге пытаюсь что-то усовершенствовать, но требуется помощь знающих по настройкам CIC FIR фильтров в ИЗЕ14.7 . Понимаю, что он древний, но я тоже уже почти динозавр.....

     

    Супергетеродин - это здорово, то есть с одной промежуточной частотой, то есть надо ещё один DDS генератор встроить на пром. частоту, например 465 кГц, если мне память не изменяет, так?

  14. В общих чертах мой приёмник выглядит примерно вот так:

    не нарисован ещё ТФТ дисплей и кнопки-нажималки для переключения всяких режимов, об этом позже.

    собственно пока главный вопрос, все эти синусы и косинусы должны быть одной частоты, только сдвинутые на 90 градусов или частоты должны быть разными?

    коэфициэнты FIR фильтров выдернуты из даташита на АЦП AD9689 https://www.mouser.com/ds/2/609/AD9689-1149165.pdf

    там собственно весь СДР на одном кристалле, но цена капец какая кусачая. Оттуда же и квадратурный смеситель

    post-16143-1520961590_thumb.jpg

  15. у LTC6400 Vocm=1-1,6V, работать возможно будет, но, т.к. у Вас развязка через конденсаторы, то выравнивать синфазные напряжения не нужно, точку a к b не подсоединять, а подсоединить к делителю на полпитания

    зачем драйвер если есть трансформатор?

    PS схемы подключения можно посмотреть в тестовых платах АЦП

    ну собственно с даташитов схемы подключений и надёрганы. вобщем тогда так и оставим.

    далее у меня вопросы по верилогу , не знаю , тут задавать или другую тему делать?

    post-16143-1520956686_thumb.jpg

  16. Привет народ !

    Чтобы окончательно не свихнуться от скуки в этой стране, решил я на досуге собрать означенный прибор в связке с небольшой плисиной и потихоньку спрограмить себе приёмничек.

    Собсно по теме имею следующий вопрос:

    1. правильно ли вообще собрана схема, если нет, то как правильно?

    2. правомерно ли соединение точек а и b на схеме, если на них показывает разное напряжение?

    Спасибо заранее.

    ссылки на даташиты тут:

    http://cds.linear.com/docs/en/datasheet/640020f.pdf

    http://www.ti.com/lit/ds/symlink/ads4245-ep.pdf

    post-16143-1520779834_thumb.jpg

×
×
  • Создать...