Отговори на тема  [ 11 мнения ] 
Преработка на USB данни? 
Автор Съобщение
Ранг: Професионалист
Ранг: Професионалист

Регистриран на: Чет Мар 19, 2009 7:33 pm
Мнения: 542
Мнение Преработка на USB данни?
Здравейте, след дълго отлагане реших да довърша започнатото от тази тема:
viewtopic.php?p=149663#p149663

Разучавам софта за РС , който събира данните от USB осцилоскопа. Писан е на Visual C# ( за първи път работя с него)
Декомпилирах програмата за да видя как обработва данните от USB осцилоскопа.
Всичко добре, обаче има една много странно за мен обработка на
данните.
Прочита буфер IOBuf[i] от 512 байта ( това са данните които са записани във FIFO Паметта - проверени са със лог. анализатор ) и би следвало това да е реалния сигнал който се чете от АЦП-то.
Каквото излиза от FIFO Паметта , това и получава програмата за компютъра.
Обаче са много хаотични данни, варират от 0-255.
И тук във РС- софтура видях една обработка на тези данни, на която не мога да разбера смисъла защо се прави :

for (int i = 0; i < 511; i++)
{
this.IOBuf[i] = array[(int)this.IOBuf[i + 1]];
}


Т.е разбирам какво прави: за стойноста на IOBuf[i + 1] взема готова данна от array.
Но защо се прави?
Някакъв филтър ли е, що ли ?
От къде е този масив array с готови числа?

Ще съм много благодарен за всяка помощ :)


Код:
private void Read_USB_Timer_Tick_1(object sender, EventArgs e)
      {
         byte[] array = new byte[]
         {0   128   64   192   32   160   96   224   16   144   80   208   48   176   112   240   8   136   72   200   40   168   104   232   24   152   88   216   56   184   120   248   4   132   68   196   36   164   100   228   20   148   84   212   52   180   116   244   12   140   76   204   44   172   108   236   28   156   92   220   60   188   124   252   2   130   66   194   34   162   98   226   18   146   82   210   50   178   114   242   10   138   74   202   42   170   106   234   26   154   90   218   58   186   122   250   6   134   70   198   38   166   102   230   22   150   86   214   54   182   118   246   14   142   78   206   46   174   110   238   30   158   94   222   62   190   126   254   1   129   65   193   33   161   97   225   17   145   81   209   49   177   113   241   9   137   73   201   41   169   105   233   25   153   89   217   57   185   121   249   5   133   69   197   37   165   101   229   21   149   85   213   53   181   117   245   13   141   77   205   45   173   109   237   29   157   93   221   61   189   125   253   3   131   67   195   35   163   99   227   19   147   83   211   51   179   115   243   11   139   75   203   43   171   107   235   27   155   91   219   59   187   123   251   7   135   71   199   39   167   103   231   23   151   87   215   55   183   119   247   15   143   79   207   47   175   111   239   31   159   95   223   63   191   127   255
}
         
                        int num = 0;
         byte b = 0;
         byte b2 = 0;
         int num2 = 512;
         num = 0;
         SLUSBXpressDLL.Status = SLUSBXpressDLL.SI_Read(SLUSBXpressDLL.hUSBDevice, ref this.IOBuf[0], num2, ref num, 0);

       if (num != num2 || SLUSBXpressDLL.Status != 0)
         {
            MessageBox.Show(string.Concat(new string[]
            {
               "Error writing to USB. Read ",
               num.ToString(),
               " of ",
               num2.ToString(),
               " bytes. Application is aborting. Reset hardware and try again."
            }));
            Application.Exit();
         }
         if (this.IOBuf[0] == 0)
         {
            int num3 = 0;
              for (int i = 0; i < 511; i++)
            {
              this.IOBuf[i] = array[(int)this.IOBuf[i + 1]];
            }
            int num4 = (int)this.IOBuf[0];
            int num5 = (int)this.IOBuf[0];
            for (int j = 0; j < 510; j++)
            {
               if ((int)this.IOBuf[j] > num4)
               {
                  num4 = (int)this.IOBuf[j];
               }
               if ((int)this.IOBuf[j] < num5)
               {
                  num5 = (int)this.IOBuf[j];
               }
            }
            int num6 = (num4 + num5) / 2;
            if (this.first_null_A)
            {
               num3 = num6;
               this.first_null_A = false;
            }
            else if (num3 - num6 > 20 || num6 - num3 > 20)
            {
               this.first_null_A = true;
            }
            if (this.SynchronizationA(num4, num3))
            {
               b = 1;
            }
            else
            {
               b = 0;
            }
         }
         if (this.IOBuf[0] == 1)
         {
            int num7 = 0;
            for (int i = 0; i < 510; i++)
            {
               //this.IOBuf[i] = array[(int)this.IOBuf[i + 1]];
            }
            int num4 = (int)this.IOBuf[0];
            int num5 = (int)this.IOBuf[0];
            for (int j = 0; j < 510; j++)
            {
               if ((int)this.IOBuf[j] > num4)
               {
                  num4 = (int)this.IOBuf[j];
               }
               if ((int)this.IOBuf[j] < num5)
               {
                  num5 = (int)this.IOBuf[j];
               }
            }
            int num6 = (num4 + num5) / 2;
            if (this.first_null_B)
            {
               num7 = num6;
               this.first_null_B = false;
            }
            else if (num7 - num6 > 20 || num6 - num7 > 20)
            {
               this.first_null_B = true;
            }
            if (this.SynchronizationB(num4, num7))
            {
               b2 = 1;
            }
            else
            {
               b2 = 0;
            }
         }
         if (b == 1 || b2 == 1)
         {
            this.pictureBox1.Refresh();
         }


       
           
      }









Накратко : УСБ осцолоскоп от тук :
http://radiokot.ru/circuit/digital/measure/29/

Като аз го преработвам да е с LCD дисплей и един ПИК 18F6722.
схемата е :
1. АЦП
2. ФиФо памет за данните от АЦП-то
3.Микроконтролер и ЛЦД
Много прилича на това, но е без XC9572
Изображение


Пон Сеп 21, 2015 8:36 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Окт 11, 2011 10:53 pm
Мнения: 2775
Местоположение: Brussels / Пловдив
Мнение Re: Преработка на USB данни?
Пиши ми една бира като пропия пак бира - в този буфер се обръщат битовете в обратна посока т.е. най старшия бит става най младши и т.н.
0x00 -> 0x00
0x01 -> 0x80 (128)
0x02 -> 0x40 (64)
0x03 -> 0xC0 (192)
...

_________________
Мразя да мразя ...


Пон Сеп 21, 2015 10:05 pm
Профил
Ранг: Професионалист
Ранг: Професионалист

Регистриран на: Чет Мар 19, 2009 7:33 pm
Мнения: 542
Мнение Re: Преработка на USB данни?
:D
Имаш я, :partyman:
Благодаря ти много !
Само не ми става ясно защо се прави?
Някакъв цифров филтър ли?


Пон Сеп 21, 2015 11:23 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Окт 11, 2011 10:53 pm
Мнения: 2775
Местоположение: Brussels / Пловдив
Мнение Re: Преработка на USB данни?
Най вероятно е било по лесно при рутирането на платката данните от АЦП-то да влезнат обърнати в мцу-то и за по лесно оправянето им е в ПЦ софтуера.

Едит: В схемата от руския сайт се вижда - например между U2 и U3 ...

_________________
Мразя да мразя ...


Пон Сеп 21, 2015 11:40 pm
Профил
Ранг: Професионалист
Ранг: Професионалист

Регистриран на: Чет Мар 19, 2009 7:33 pm
Мнения: 542
Мнение Re: Преработка на USB данни?
](*,)
Имаш вече цяла каса от пожеланото :)


Ама точно никога нямаше да сетя/да_забележа че, рутирането е обърнато.
А толкова време се чеша там дето не ме сърби и се питам:
Що са така хаотични тези данни, дали АЦП-то е повредено и ли к'во??!!

Изключително много ти Благодаря ! :prayer:


Вто Сеп 22, 2015 7:41 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Пет Фев 04, 2005 8:59 pm
Мнения: 5073
Мнение Re: Преработка на USB данни?
Решават хардуерен проблем софтуерно, това само руски хакер може да го измисли.

_________________
Warriors of the Night, ASSEMBLER!!!


Вто Сеп 22, 2015 9:49 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Окт 11, 2011 10:53 pm
Мнения: 2775
Местоположение: Brussels / Пловдив
Мнение Re: Преработка на USB данни?
amdatlon написа:
](*,)
Имаш вече цяла каса от пожеланото :)


Ама точно никога нямаше да сетя/да_забележа че, рутирането е обърнато.
А толкова време се чеша там дето не ме сърби и се питам:
Що са така хаотични тези данни, дали АЦП-то е повредено и ли к'во??!!

Изключително много ти Благодаря ! :prayer:

:partyman:
Примера е много добър да се видят предимствата като се мислят заедно хардуер+софтуер ... дори можеше да е съвсем разбъркано, нищо не пречи и ако ще помогне за рутирането е ОК.

_________________
Мразя да мразя ...


Сря Сеп 23, 2015 9:23 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Сря Фев 13, 2013 2:35 pm
Мнения: 1363
Мнение Re: Преработка на USB данни?
Слага се АЦП-то отдолу и се решава рутирането :)


Чет Сеп 24, 2015 2:21 am
Профил WWW
Ранг: Професионалист
Ранг: Професионалист

Регистриран на: Чет Мар 19, 2009 7:33 pm
Мнения: 542
Мнение Re: Преработка на USB данни?
Идея си нямате колко време загубих в търсене причината за странните данни.
Ама кой да се сети за такова нещо.
Отново ти благодаря palavrov


Чет Сеп 24, 2015 7:37 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Фев 07, 2012 10:22 pm
Мнения: 2182
Мнение Re: Преработка на USB данни?
бе долу горе знаем, иди пращай касата бира на човека


Чет Сеп 24, 2015 7:55 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Окт 11, 2011 10:53 pm
Мнения: 2775
Местоположение: Brussels / Пловдив
Мнение Re: Преработка на USB данни?
Споко ... човека Юни месец така прекали една вечер с пиенето, че още не е близвал алкохол ... да видим докога :D

_________________
Мразя да мразя ...


Чет Сеп 24, 2015 8:50 pm
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 11 мнения ] 

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 1 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни