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

Рекомендуемые сообщения

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

  • Ответов 58
  • Создана
  • Последний ответ

Топ авторов темы

Топ авторов темы

Изображения в теме

зачем это нужно ?

Чтобы ускорить реакцию на изменение температуры путем сокращения константы времени.

Слава антисионистам Владимиру Путину и Владимиру Квачкову!

Ссылка на комментарий
Поделиться на другие сайты

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Давайте тогда разберемся, от чего зависит временная константа. По-моему от времени, затрачиваемого на нагревание корпуса, который находится непосредственно вокруг самого датчика.

Слава антисионистам Владимиру Путину и Владимиру Квачкову!

Ссылка на комментарий
Поделиться на другие сайты

"Дельта Тэ", около 30 секунд. Разница во времени между изменением температуры среды и получением результатов измерения на выходе датчика.

Слава антисионистам Владимиру Путину и Владимиру Квачкову!

Ссылка на комментарий
Поделиться на другие сайты

У меня почему-то сразу реагирует на изменение температуры, ну разве что доли секунды.

Не цитируите полностью предыдущее сообщение!!!

Ссылка на комментарий
Поделиться на другие сайты

Почему когда я в протеусе изменяю температуру, получаю в результате или 0, или 2, или 4.

В коде обрабатывания температуры нет, но она же и так должна была бы меняться.

Где я не так сделал?

// Частота процесора 4 Mhz
// DS18B20 підключений(і) до PORTCbits.RC0
// Кількість підключених DS18B20 8шт.
//ANDCON1 = 7; //ЦИФРОВИЙ для PORTA
//...............................................................................
#include "p18f452.h"
#include "delays.h"
#pragma config WDT = OFF   //Turn off watchdog timer

//...............
#define PBit PORTCbits.RC0
#define PTris TRISCbits.TRISC0
//...............
#define max_dev 8                     //підключені 8 шт.
#define FALSE 0
#define TRUE 1
//===============================================================================================
unsigned char ROM[8];                //ROM біт
unsigned char FoundROM[1+max_dev][8];  //значення знайдених ROM кодів ---> +1 для ROM[0]
unsigned char numROMs;
unsigned char lastDiscrep=0;         //останнє розгалуження
unsigned char doneFlag=0;            //прапорець завершення

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

char temp_c[8];      //значення зчитаних температур
//===============================================================================================
unsigned char ow_reset(void);

unsigned char read_bit(void);        // зчитування біту
void write_bit(char bitval);         // запис біту
unsigned char read_byte(void);       // зчитування байту
void write_byte(char val);           // запис байту (команди) на шину

void FindDevices(void);              //FIND
unsigned char First(void);
unsigned char Next(void);
unsigned char ow_crc(unsigned char x);

void select_device(unsigned  char dev_num);   // звернення до конкретного ds18b20

void Read_Temperature(void);         // зчитування температури
//===============================================================================================



//***********************************************************************************************
//  ГОЛОВНИЙ КОД
//***********************************************************************************************
void main()
 {

  FindDevices();

//while(1)
//   {
   Read_Temperature();
//   }
 }


//===============================================================================================
//                         Іпмульс RESET і імпульс присутності DS18B20
//    presence = 0 - присутні(й);
//    presence = 1 - відсутні(й). 
//===============================================================================================
unsigned char ow_reset()      //reset one-wire line
{
 unsigned char presence;

   PBit = 0;
   PTris = 0;         //підтягуємо до нуля
   Delay10TCYx(48);   // 480 мкс (us)
   PTris = 1;         //звільняємо шину
   Delay10TCYx(8);    // 80 мкс

   presence = PBit;
   Delay10TCYx(40);   // 400 мкс
   return(presence);
//   presence:   0 = device(s) present, 
//               1 = no device presen
}

//===============================================================================================
//                    Зчитування біту з 1-wire
//===============================================================================================
unsigned char read_bit()
  {
   unsigned char d_data;
   PBit = 0;
   PTris = 0;
   Delay1TCY();      // 1 мкс 
   PTris = 1;        // вхід - відновлення лінії
   Delay10TCYx(2);   // 20 мкс 

   d_data = PBit;
   Delay10TCYx(3);   // 30 мкс
   return(d_data);
  }

//===============================================================================================
//                    Запис біту на 1-wire
//===============================================================================================
void write_bit(char bitval)
 {
  PBit = 0;
  PTris = 0;
  if(bitval==1)
    {
     PTris = 1;
    } 
  Delay10TCYx(6);      // 60 мкс
  PTris = 1;
 }

//===============================================================================================
//                    Зчитування бaйту з 1-wire
//===============================================================================================
unsigned char read_byte(void)
 {
  unsigned char bt;
  unsigned char value=0;

  for(bt=0;bt<8;bt++)
     {
      if(read_bit())    //якщо на шині 1
        {
         value|=0x01<<1;
        }
      Delay10TCYx(12);      // 120 мкс
     }
  return(value);
 }

//===============================================================================================
//                    Запис бaйту на 1-wire - передача команди
//===============================================================================================
void write_byte(char val)
 {
  unsigned char bt;
  unsigned char temp;

  for(bt=0;bt<8;bt++)
     {
      temp=val>>bt;
      temp &= 0x01;
      write_bit(temp);
     }
  Delay10TCYx(1);      // 10 мкс
 }

//===============================================================================================
//                    Функція пошуку serial ROM DS18B20 на шині
//===============================================================================================
void FindDevices()
 {
  unsigned char num;
  if(!ow_reset())
    {  //якщо ds18b20 присутні
     if(First())
       {  // якщо хоча б один ds18b20 присутній
        numROMs=0;
        do
          {
           numROMs++;
           for(num=0;num<8;num++)
              {
               FoundROM[numROMs][num]=ROM[num];
              }
          }
        while(Next()&&(numROMs<10));  //поки не знайде віс пристрої, число яких може бути до 10
       }
    }
 }

//...............................................................................................
// first функція обнулює всі результати для нового пошуку ds18b20 на шині
// next - пошук першого ds18b20 на шині
unsigned char First()
 {
  lastDiscrep=0;
  doneFlag=0;
  return Next();
 }
//...............................................................................................
//контрольна сума на шині
unsigned char ow_crc(unsigned char x)
 {
  dowcrc=dscrc_table[dowcrc^x];
  return dowcrc;
 } 
//...............................................................................................
// функція шукає наступні ds18b20 на шині.
// якщо більше немає на шині, то повертається false
unsigned char Next()
 {
  unsigned char m=1;        //ROM bit index
  unsigned char n=0;        //ROM byte index
  unsigned char k=1;        //bit mask
  unsigned char x=0;        //змінна для зчитування значень прямого і інвертованого бітів
  unsigned char discrepMarker=0;  //discrepancy marker
  unsigned char g;          //output bit
  unsigned char nxt;        //return value
  int flag;



  nxt=FALSE;                //set the next flag to false
  dowcrc=0;                 //reset the dowcrc

  flag=ow_reset();          //reset the 1-wire
  if(flag||doneFlag)        //немає ds18b20
    {
     lastDiscrep=0;
     return FALSE;
    }
  write_byte(0xF0);         //команда Search ROM

  do
    {  //для всіх 8 байтів
     x=0;
     if(read_bit()==1)      //прямий біт
       {
        x=2;
        Delay10TCYx(12);      // 120 мкс
       }
     if(read_bit()==1)      //інвертований біт
       {
        x|=1;
       }
       if(x==3)      //сигнал 11 - активні ds18b20 на шині відсутні
         {
          break;
         }
       else
         {
          if(x>0)    //всі активні ds18b20 мають 0 або 1 
            { 
             g=x>>1; //запис біту для пошуку
            }
          else
            { //якщо поточна розбіжність такаж як і попереднього разу, 
              //виберемо так як і попереднього разу
             if(m<lastDiscrep)
               {
                g=((ROM[n]&k)>0);
               }
             else
               {
                g=(m==lastDiscrep);
               }
             if(g==0)
               {
                discrepMarker=m;
               }
            }
          if(g==1)             //isolate bit in ROM[n] with mask k
            {
             ROM[n]|=k;
            }
          else
            {
             ROM[n]&=~k;
            }
          write_bit(g);       //ROM Search write

          m++;                //increment bit counter m (збільшуємо лічильник m)
          k=k<<1;             //зсуваємо бітову маску k

          if(k==0)            //якщо маска 0, починаємо новий ROM
            {
             ow_crc(ROM[n]);  //
             n++;
             k++;
            }
         }
    }
  while(n<8);                 // цикл для всіх 0-7 байт
  if(m<65||dowcrc)            // якщо пошук не повний
    {                         // обнулимо останнє розгалуження
     lastDiscrep=0;
    }
  else                        //якщо пошук повний, встановимо LastDiscrep
    {
     lastDiscrep=discrepMarker;
     doneFlag=(lastDiscrep==0);
     nxt=TRUE;                //пошук ще не завершений. Є ще ds18b20
    }
  return nxt;
 }

//===============================================================================================
//                    Match ROM - звернення до конкретного ds18b20 на 1-wire
//===============================================================================================
void select_device(unsigned char dev_num)
{
 unsigned char bt;

 ow_reset();
 write_byte(0x55);
 for(bt=0;bt<8;bt++)
    {
     write_byte(FoundROM[dev_num][bt]);
    }
}

//===============================================================================================
//          Read Scratch RAM - зчитування температури конкретного ds18b20 на 1-wire
//===============================================================================================
void Read_Temperature()
 {
  char get[9];
  char temp_lsb,temp_msb;      //старший і молодший байти зчитаних температур
  unsigned char k;

  ow_reset();
  write_byte(0xCC);          //Skip Rom - звернення до всіх ds18b20
  write_byte(0x44);          //Start Conversion - сприймання температури

  Delay10TCYx(100);      // 1000 мкс=1мc

  for(numROMs=1;numROMs<=8;numROMs++)  //працюємо з ds18b20 з FoundROM[1-8] (ROM[0] не беремо)
     {
      select_device(numROMs); //звертаємося до конкретного ds18b20
      write_byte(0xBE);       //Read Scratch RAM - зчитування температури з ОЗУ

      for(k=0;k<9;k++)        //зчитуємо 9 байт даних із ОЗУ
         {
          get[k]=read_byte();
         }
      temp_msb=get[1];
      temp_lsb=get[0];
//.....................................................................................
      temp_c[numROMs]=temp_lsb+temp_msb; //значення температур із ds18b20
     }        

 }

Ссылка на комментарий
Поделиться на другие сайты

     temp_c[numROMs]=temp_lsb+temp_msb; //значення температур із ds18b20

Вот это не совсем понятно, склодывать MSB и LSB не надо.

Не цитируите полностью предыдущее сообщение!!!

Ссылка на комментарий
Поделиться на другие сайты

     temp_c[numROMs]=temp_lsb+temp_msb; //значення температур із ds18b20

Вот это не совсем понятно, склодывать MSB и LSB не надо.

Да это я пока просто посмотреть считывает хоть что-то или нет.

Так даже если их складывать, то разве значение temp_c[numROMs] не будет изменяться при изменении температуры?

И еще при считывании temp_c[numROMs] из одного из датчиков не читает вообще..........Где это я мог напортачить?

Ссылка на комментарий
Поделиться на другие сайты

Начинаите, запись и чтение в массивы с нулевых ячеек. массив начинается с нулевого элемента. А то у вас в циклах отчет с нуля, но в массив пишите с первои ячеики, трудно читать код.Полюбому где-то в этом и кроется ошибка, приведите в нормальный вид и выложите сюда, а мож уже и сами наидете косяк:)

Изменено пользователем Andrey_Ch8

Не цитируите полностью предыдущее сообщение!!!

Ссылка на комментарий
Поделиться на другие сайты

Помогите кто-то с кодом...................что-то у меня ничего не получается :(

Вроде всё делаю как надо, а где-то есть ошибка.

//===============================================================================================
//                    Match ROM - звернення до конкретного ds18b20 на 1-wire
//===============================================================================================
void select_device(unsigned char dev)
{
 unsigned char bt;

 ow_reset();
 write_byte(0x55);
 for(bt=0;bt<8;bt++)
    {
     write_byte(FoundROM[dev][bt]);
    }
}

//===============================================================================================
//          Read Scratch RAM - зчитування температури конкретного ds18b20 на 1-wire
//===============================================================================================
void Read_Temperature()
 {
  unsigned char otr[10];
  unsigned char dev;
  unsigned char bt;
  unsigned char lsb, msb;        //старший і молодший байти зчитаних температур

  ow_reset();
  write_byte(0xCC);          //Skip Rom - звернення до всіх ds18b20
  write_byte(0x44);          //Start Conversion - сприймання температури

  Delay10TCYx(100);      // 1000 мкс=1мc
//цикл опрацювання отримання значення із всіх пристроїв
  for(dev=0;dev<=max_dev;dev++)
     {
      //опрацювання кожного пристрою індивідуально
      select_device(dev);     //звертаємося до конкретного ds18b20
      write_byte(0xBE);       //Read Scratch RAM - зчитування температури з ОЗУ
      for(bt=0;bt<9;bt++)
         {
          otr[bt]=read_byte();//9 байт iнформацii з ОЗУ
         }
//................................................................
      lsb=otr[0];
      msb=otr[1];


      temperature[dev] = msb+lsb;  //ДЛЯ ПОЧАТКУ І ТАК ПІДЕ))))
     }

 }

Изменено пользователем wi3ik
Ссылка на комментарий
Поделиться на другие сайты

wi3ik, когда Вы научитесь правильно вопросы задавть ?

Вопрос типа - "У меня не работает !!! Помогите !!!" не прокатывает...

Подробнее, в деталях объясните что случилось. И не паникуйте. Избавьте нас, плиз, от наводящих и вытягивающих из Вас инфу, вопросов...

Ссылка на комментарий
Поделиться на другие сайты

wi3ik, когда Вы научитесь правильно вопросы задавть ?

Вопрос типа - "У меня не работает !!! Помогите !!!" не прокатывает...

Подробнее, в деталях объясните что случилось. И не паникуйте. Избавьте нас, плиз, от наводящих и вытягивающих из Вас инфу, вопросов...

Извините, в следующий раз буду стараться более конкретно задавать вопрос.

А пока что спасибо...........уже разобрался где я накосячил...........пока спасибо.

Будут дальше разбираться

Ссылка на комментарий
Поделиться на другие сайты

Ну и что, где была ошибка?

Я делал:

//===============================================================================================
//                    Зчитування бaйту з 1-wire
//===============================================================================================
unsigned char read_byte(void)
 {
  unsigned char bt;
  unsigned char value=0;

  for(bt=0;bt<8;bt++)
     {
      if(read_bit())    //якщо на шині 1
        {
         value|=0x01<<1;
        }
      Delay10TCYx(12);      // 120 мкс
     }
  return(value);
 }

А нужно было:

//...............
value|=0x01<<bt;
//...............

Теперь нужно преобразовать полученные два байта в значение температуры <_< .

Изменено пользователем wi3ik
Ссылка на комментарий
Поделиться на другие сайты

Теперь нужно преобразовать полученные два байта в значение температуры

temperature[dev] = msb*256+lsb;
temperature[dev] /=16;

А если я хочу выводить на индикатор знак(+ или -), значение температуры, точку, и три знака после точки......

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

Ссылка на комментарий
Поделиться на другие сайты

Зачем выводить десятые отдельно ? Нужно выводить число, умноженное на 10 и ставить точку в нужном месте.

Ну а с минусом ещё проще. Проверил число на отрицательность и вывел на индикатор знак минуса.

Ссылка на комментарий
Поделиться на другие сайты

Кто-то может мне показать пример. как выводить на жк-индикатор число, в моем случае это

temperature[dev]

, в зависимости от клавиши, которую нажимаю (номер DS18B20 это dev).

А то я никак не могу разобраться..................сначала использовал библиотеку XLCD.H............но окончательно запутался.

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

И еще...........помогите в протеусе разобраться с жк-индикатором 2х16.......как выводить информацию в две строчки? Я так понимаю, нужно вводить адрес DDRAMaddress, где будет выводиться первый символ, но что-то совсем ничего не могу сделать

Из этой библиотеки:

 //.............................
 temperature[dev] = msb*256+lsb;
 temperature[dev] /=16;
 data = temperature[dev];
 WriteDataXLCD(data);

Строку и символ я могу вывести :(

//................
 OpenXLCD( FOUR_BIT & LINE_5X7 );
 while(BusyXLCD());

 WriteCmdXLCD(DON);                //Display on
 WriteCmdXLCD(CURSOR_OFF);         //CURSOR off
 WriteCmdXLCD(BLINK_OFF);          //BLINK off
 WriteCmdXLCD(SHIFT_CUR_LEFT);
 WriteCmdXLCD(SHIFT_DISP_RIGHT);

  SetDDRamAddr(0x8B);
//   WriteDataXLCD('*');
//data = 125;
//WriteDataXLCD(data);
putsXLCD(messag);
//................

и кат адресовать вторую строку? (в протеусе ее адрес С0-СF)? но если я пишу SetDDRamAddr(0xСС); - ничего нету :(

xlcd.rar

Изменено пользователем wi3ik
Ссылка на комментарий
Поделиться на другие сайты

Я так понимаю, нужно вводить адрес DDRAMaddress, где будет выводиться первый символ, но что-то совсем ничего не могу сделать

Прочитав даташит на контроллер HD4478 от жк станет все сразу понятно.Есть описание на русском. Изменено пользователем Andrey_Ch8

Не цитируите полностью предыдущее сообщение!!!

Ссылка на комментарий
Поделиться на другие сайты

  • 1 месяц спустя...

Добрый день.

Моя проблема:

по команде searchrom F0 не отзываются Ds1820 сенсоры.

У меня на проводе 2 дачтика.

По сбросу они отзываются. При подаче команды searchrom F0, в ответ получаю: FF FF FF FF FF FF FF FE !!! Т.е. пакет, в котором все 1 за иссключением самого младшего бита - 0.

См. осцилограммы.

На команду readrom 33 датчики отзываются вместе и по отдельности каждый.

Что же не так?

Как много времени я убил... Уже думаю, что считаю ром каждого по отдельности и затем зашью в ПО, что не есть гуд. И тогда сразу буду к каждому обращаться, минуя их поиск.

post-136749-0-99963700-1312203632_thumb.png

post-136749-0-44065000-1312203650_thumb.png

post-136749-0-42968900-1312203661_thumb.png

post-136749-0-13254300-1312203677_thumb.png

Изменено пользователем Pasipaka
Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу

  • Сообщения

    • @korsaj Так сейчас вчитывался ещё раз и ничего как то на ум так и не идёт. Сложновато получается. Данную функцию да тем более с массивами на сравнение я точно не осилю.
    • Собрал тиристорное зарядное. И не совсем понятно как измерять его ток заряда. Вот так показывают два неплохих мультиметра на измерении постоянного тока  (уверен что стрелочный покажет то же самое )   но , Мы же понимаем , что после тиристора идёт не постоянный ток , а импульсный  и вот такое теперь показывают мультиметры в режиме измерения переменного тока  один РМС, другой не рмс.   Что считать правдой ?
    • А чего бы не поставить рядом с DS18B20 некрупный конденсатор между VDD и GND? 
    • Я вскрываю металлической линейкой. Очень часто у таких блоков есть паз вдоль шва, туда вставляю линейку по всей длине шва и как рычагом вскрываю корпус. Если вначале немного промять корпус вдоль шва (бывает достаточно пальцами), то шансы легко вскрыть значительно увеличиваются.
    • При включении в ранее опубликованном виде устройство стало генератором. Частота до 140кГц, на индуктивности размах (от мин. до макс.) до 20В при напряжении на испытуемом БП ~3В. Добавил несколько конденсаторов, в том числе как рекомендовали Z_VIP и Starichok. Немного изменил номиналы резистора в компараторе. Удалил шунтирующее сопротивление на резисторе регулятора тока. Компаратор буду еще отлаживать - в приведённой ниже схеме срабатывает при 4В, но не не отпускает при отсутствии напряжения.  Ограничение тока выставил на 4А. Регулировка тока плавная от 0 до  4А. Выставленный ток стабильный при изменении напряжения от 1В до 10В. Напряжение выше 10В пока не поднимал. Ниже 0,95В ток снижается пропорционально напряжению. Схема в приложении. Все изменения-дополнения делал на существующей плате навесным монтажом. Позже выложу актуальную разводку. Отлаживал с транзисторами AP60T30 (ранее выкладывал фото транзисторов на радиаторе) - без обдува при комнатной температуре длительно держат 20Вт (10В, 2А) при температуре радиатора ~40гр.C. Приобрёл транзисторы IRFP460. С радиатором пока не определился. Схема и фото отладки на текущий момент времени. На фото стрелочный прибор - амперметр с током полного отклонения 6А. и в DipTrace:  
    • Ведь этож надо... такое совпадение. И я тоже делаю без сверлений. Более того, прилагаю фото имеющихся у меня  "хоть чуток острых предметов", несмотря на наличие которых, столь несложный и общедоступный  способ зачистки, к.м.к.  имеет право на демонстрацию в данной теме. Вдруг кому-то пригодится... Тем более, что тема простаивает аж с марта, будто на белом свете нет ничего, что можно было бы сюда  разместить,  хотя бы для сведения. 
×
×
  • Создать...