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

Намоточный станок на Arduino версия 2.0


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

Последний версия программы которую я частично проверял с I2C подключением была 2.1b_I2C_DEBUG

Для версий старше 2.0 , как я уже писал, я не могу гарантировать работу программы с I2C.

Я использую ЖК-дисплей 2004 Ramps 1,4 

Программа изначально писалась для символьных дисплеев типа 1602/2004 при этом 12864 является графическим и переделка программы под него теоретически возможна, но игра не стоит свеч.

А вот что имеет смысл это выпаять энкодер и собрать свою платку можно даже антидребезг на триггерах Шмитта организовать. И опыт и пользаB)

20.11.2019 в 21:22, TDA сказал:

/* Name: Winding machine    
   Description: Arduino ATmega 328P + Stepper motor control CNC Shield v3 + 2004 LCD + Encoder KY-040
   Author:      TDA
   Ver:         2.1b_I2C_DEBUG
   Date:        20/11/2019

       Arduino pinout diagram:
          _______________
         |      USB      |
         |           AREF|
         |            GND|
         |             13| DIR A
         |RESET        12| STEP A
         |3V3         #11| STOP BT
         |5V          #10| BUZ OUT
         |GND          #9|
         |VIN           8| EN STEP
         |               |
         |              7| DIR Z
         |             #6|
  LCD RS |A0 14        #5| ENCODER CLK
  LCD EN |A1 15         4| STEP Z
  LCD D4 |A2 16   INT1 #3| ENCODER SW
  LCD D5 |A3 17   INT0  2| ENCODER DT
  LCD D6 |A4 18      TX 1|
  LCD D7 |A5 19      RX 0|
         |__A6_A7________|                        
*/

//**************************************************************  
    
#define ShaftStep 50 // ShaftStep = Шаг резьбы*50

//**************************************************************

#include <avr/io.h>
#include <avr/interrupt.h>
//#include <LiquidCrystal.h>
#include <LiquidCrystal_I2C.h>
#include <Wire.h>

#define ENC_CLK   2 // Даем имена номерам пинов
#define ENC_SW    3
#define STEP_Z    4 
#define ENC_DT    5 
#define DIR_Z     7
#define EN_STEP   8
#define BUZZ_OUT  10
#define STOP_BT   11
#define STEP_A    12
#define DIR_A     13
#define RS        14
#define EN        15
#define D4        16
#define D5        17
#define D6        18
#define D7        19

byte up[8] =   {0b00100,0b01110,0b11111,0b00000,0b00000,0b00000,0b00000,0b00000};   // Создаем свой символ ⯅ для LCD
byte down[8] = {0b00000,0b00000,0b00000,0b00000,0b00000,0b11111,0b01110,0b00100};   // Создаем свой символ ⯆ для LCD

volatile int Encoder_Dir;                                 // Направление вращения энкодера
volatile boolean Push_Button, Var_Set, DC, AutoWindStart; // Нажатие кнопки; режим установки значения; формирование сигнала STEP; работает подпрограмма автонамотки 
volatile boolean Pause;                                   // Флаг паузы в режиме автонамотка   
volatile int i;                                           // Счетчик кол-ва заходов в прерывание таймера
char Str_Buffer[22];                                      // Буфер для функции sprintf 
byte LCD_Column, LCD_Row, Symbol_Code, Motor_Num;         // Номер столбца и строки LCD; код символа https://i.stack.imgur.com/oZhjJ.gif; номер шагового двигателя
int32_t ActualShaftPos, ActualLayerPos;                   // Текущие позиции двигателей вала и укладчика
int Actual_Turn = 0, Actual_Layer = 0;                    // Текущий виток и слой при автонамотке
int Shaft_Pos, Lay_Pos, Set_Turns, Set_Step, Set_Speed=1, Set_Layers=1, Step_Mult=1;  // Переменные изменяемые на экране
byte Menu_Index = 0;                                      // Переменная хранит номер текущей строки меню
int32_t Steps, Step_Accel, Step_Decel;

volatile uint16_t OCR1A_NOM;
volatile uint32_t OCR1A_TEMP;
volatile uint32_t INCR;
volatile uint32_t NSteps;
volatile uint32_t Temp;
int V;
volatile int NTurn;
uint8_t run_btn;
 
uint8_t MicroSteps = 16;
long SteppersPositions[2];
int Pitch = 1;
int8_t Steppers_Dir = 1;
int16_t SpeedIncrease, SpeedDecrease;

volatile int X,Y;
volatile int Set_Speed_INT;

enum menu_states {Autowinding, PosControl, TurnsSet, StepSet, SpeedSet, LaySet, Direction, Start, Cancel, Empty, ShaftPos, LayPos, StepMul, PosCancel}; // Нумерованный список строк экрана

struct MenuType {                       // Структура описывающая меню
  byte Screen;                          // Индекс экрана
  byte string_number;                   // Номер строки на экране
  char format[22];                      // Формат строки
  char format_Set_var[6];               // Формат значения при вводе переменной
  int  *param;                          // Указатель на адрес текущей переменной изменяемой на экране
  int  var_Min;                         // Ограничение значения переменной снизу
  int  var_Max;                         // Ограничение значения переменной сверху
  byte param_coef;};                    // Размерный коэффициент значения переменной

const struct MenuType Menu[] = {        // Объявляем переменную Menu пользовательского типа MenuType и доступную только для чтения
  {0,  0,  "  AUTOWINDING        ", ""      ,NULL,        0,      0,      0        },    // "> AUTOWINDING   "
  {0,  1,  "  POS CONTROL        ", ""      ,NULL,        0,      0,      0        },    // "> POS CONTROL   "
  {2,  0,  "  TURNS:  %03d       ", "%03d"  ,&Set_Turns,  1,      999,    1        },    // "> TURNS: >000<  "
  {2,  1,  "  STEP: 0.%04d       ", "%04d"  ,&Set_Step,   1,      200,    ShaftStep},    // "> STEP:>0.0000<↓"  
  {4,  0,  "  SPEED:  %03d       ", "%03d"  ,&Set_Speed,  1,      300,    1        },    // "> SPEED: >000< ↑"
  {4,  1,  "  LAYERS: %02d       ", "%02d"  ,&Set_Layers, 1,      99,     1        },    // "> LAYERS:>00<  ↓" 
  {6,  0,  "  DIRECTION >>>      ", ""      ,NULL,        0,      0,      0        },    // "> DIRECTION >>>↑"
  {6,  1,  "  START              ", ""      ,NULL,        0,      0,      0        },    // "> START        ↓" 
  {8,  0,  "  CANCEL             ", ""      ,NULL,        0,      0,      0        },    // "> CANCEL       ↑" 
  {8,  1,  "                     ", ""      ,NULL,        0,      0,      0        },    // ">               " 
  {10, 0,  "  SH POS: %+04d      ", "%+04d" ,&Shaft_Pos,  -999,   999,    1        },    // "> SH POS:>±000< "
  {10, 1,  "  LA POS: %+04d      ", "%+04d" ,&Lay_Pos,    -999,   999,    1        },    // "> LA POS:>±000<↓" 
  {12, 0,  "  STPMUL: %03d       ", "%03d"  ,&Step_Mult,  1,      100,    1        },    // "> STPMUL:>000< ↑"
  {12, 1,  "  CANCEL             ", ""      ,NULL,        0,      0,      0        },    // "> CANCEL        "   
  {14, 0,  "T%03d/%03d L%02d/%02d", ""      ,NULL,        0,      0,      0        },    // "T000/000 L00/00 "
  {14, 1,  "SP%03d ST0.%04d      ", ""      ,NULL,        0,      0,      0        },    // "SP000 ST0.0000  " 
  {16, 0,  "AUTOWINDING DONE     ", ""      ,NULL,        0,      0,      0        },    // "AUTOWINDING DONE" 
  {16, 1,  "PRESS CONTINUE       ", ""      ,NULL,        0,      0,      0        }};   // "PRESS CONTINUE  "
  
//LiquidCrystal lcd(RS,EN,D4,D5,D6,D7); // Назначаем пины для управления LCD 
LiquidCrystal_I2C lcd(0x27,16,2); // 0x3F I2C адрес для PCF8574AT, дисплей 16 символов 2 строки 

void setup() {
pinMode(ENC_CLK, INPUT);    // Инициализация входов/выходов  
pinMode(ENC_SW,  INPUT);
pinMode(STEP_Z,  OUTPUT);
pinMode(ENC_DT,  INPUT);
pinMode(DIR_Z,   OUTPUT);
pinMode(EN_STEP, OUTPUT);
pinMode(STEP_A,  OUTPUT);
pinMode(DIR_A,   OUTPUT); 
pinMode(BUZZ_OUT,OUTPUT);
pinMode(STOP_BT, INPUT);
pinMode(RS,      OUTPUT);
pinMode(EN,      OUTPUT);
pinMode(D4,      OUTPUT);
pinMode(D5,      OUTPUT);
pinMode(D6,      OUTPUT);
pinMode(D7,      OUTPUT);

digitalWrite(EN_STEP, HIGH); // Запрет управления двигателями  
digitalWrite(STOP_BT, HIGH); // Вкл. подтягивающие резисторы к VDD  
  
 lcd.init(); 
 lcd.backlight();             // Включение подсветки LCD
  
  lcd.createChar(0, up);       // Записываем символ ⯅ в память LCD
  lcd.createChar(1, down);     // Записываем символ ⯆ в память LCD

  cli();                                                                        // Глобальный запрет прерываний
  EICRA = (1<<ISC11)|(0<<ISC10)|(0<<ISC01)|(1<<ISC00);                          // Настройка срабатывания прерываний: INT0 по изменению сигнала, INT1 по спаду сигнала; ATmega328/P DATASHEET стр.89
  EIMSK = (1<<INT0)|(1<<INT1);                                                  // Разрешение прерываний INT0 и INT1; ATmega328/P DATASHEET стр.90 
  EIFR = 0x00;                                                                  // Сбрасываем флаги внешних прерываний; ATmega328/P DATASHEET стр.91
  TCCR1A=(0<<COM1A1)|(0<<COM1B1)|(0<<COM1A0)|(0<<COM1B0)|(0<<WGM11)|(0<<WGM10); // Настройка таймера/счетчика 1: нормальный режим работы порта, OC1A/OC1B отключены; ATmega328/P DATASHEET стр.170-172
  TCCR1B=(0<<WGM13)|(1<<WGM12)|(0<<CS12)|(0<<CS11)|(1<<CS10);                   // Режим работы таймера/счетчика - CTC (очистить таймер при достижении значения в регистре сравнения OCR1A)
  OCR1A = 20000;                                                                // Значение в регистре OCR1A определяет частоту входа в прерывание таймера и устанавливает скрость вращения двигателей
  sei();
//lcd.begin(20,4);                                                              // Инициализация LCD Дисплей 20 символов 4 строки   
//lcd.begin(16,2);                                                             // Инициализация LCD Дисплей 16 символов 2 строки 
       
  lcd.clear();                                                      
  sprintf(Str_Buffer, Menu[0].format);
  lcd.print(Str_Buffer);                                                        // Выводим первую строку на экран
  lcd.setCursor(0,1); 
  sprintf(Str_Buffer, Menu[1].format);
  lcd.print(Str_Buffer);                                                        // Выводим вторую строку на экран
  PrintSymbol(0,0,0x3E);}                                                       // Выводим символ ">" на 0,0 LCD

 

Замените весь код до void loop() 

Но в дальнейшем крайне рекомендую использовать полубайтовое подключение.

Протокол I2C использует прерывания и при выполнении программы возможны наложения прерываний и "плавающие" баги, которые будет очень трудно ловить и я не могу гарантировать дальнейшую поддержку I2C

 

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

23 часа назад, TDA сказал:

///////////////////////

Спасибо! Нашел в городе данный дислей, 2004, который вы используете. Не могли бы на пальца показать как его подключить к Шилду)? какой вывод куда).
И оставте пожалуйста в после ваш  кошелек яндекс денег например,я уверен многие бы хотели бы вас отблагодарить

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

3 часа назад, Alexandr Zhukov сказал:

Не могли бы на пальца показать как его подключить к Шилду)? какой вывод куда).

Что бы понять соответствие выводов на 2004 Ramps воспользуйтесь тестером. 

Внизу статьи где написана дата публикации и автор есть кнопка "$ вознаградить"

image.png

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

Сравнительное тестирование аккумуляторов EVE Energy и Samsung типоразмера 18650

Инженеры КОМПЭЛ провели сравнительное тестирование аккумуляторов EVE и Samsung популярного для бытовых и индустриальных применений типоразмера 18650. 

Для теста были выбраны аккумуляторы литий-никельмарганцевой системы: по два образца одного наименования каждого производителя – и протестированы на двух значениях тока разряда: 0,5 А и 2,5 А. Испытания проводились в нормальных условиях на электронной нагрузке EBD-USB от ZKEtech, а зарядка осуществлялась от лабораторного источника питания в режиме CC+CV в соответствии с рекомендациями в даташите на определенную модель. Подробнее>>

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

14 часов назад, TDA сказал:

Что бы понять соответствие выводов на 2004 Ramps воспользуйтесь тестером. 

Спасибо за схему)! заработало только на прошивке 2.1b, на 2.2b появляются иероглифы (фото приложил).
Хотел еще вас попросить: скиньте пожалуйста такую же схему ля подключения Энкодера, который на этой плате.
(неудобно просить, я понимаю что все ту гораздо выше по уровню познания в ардуине, но где еще опыта и понимания набираться. Еще раз извиняюсь, за глупые просьбы.)

8XFIz4BKYTs.jpg

ohMp0DJogvs.jpg

yPz7PtlIXFU.jpg

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

Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. 

Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств. Подробнее параметры и результаты тестов новой серии PLM по ссылке.

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

3 часа назад, Alexandr Zhukov сказал:

заработало только на прошивке 2.1b, на 2.2b появляются иероглифы (фото приложил).

Программы отличаются по подключению. Внимательно прочитайте пост где я выкладывал версию 2.2b.

В этой ветке форума я уже выложил все схемы которые у меня есть, посмотрите посты выше, больше у меня нет.  

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

Литиевые батарейки и аккумуляторы от мирового лидера  EVE в Компэл

Компания Компэл, официальный дистрибьютор EVE Energy, бренда №1 по производству химических источников тока (ХИТ) в мире, предлагает продукцию EVE как со склада, так и под заказ. Компания EVE широко известна в странах Европы, Америки и Юго-Восточной Азии уже более 20 лет. Недавно EVE была объявлена поставщиком новых аккумуляторных элементов круглого формата для электрических моделей «нового класса» компании BMW.

Продукция EVE предназначена для самого широкого спектра применений – от бытового до промышленного. Подробнее>>

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

Только что, TDA сказал:

Программы отличаются по подключению. Внимательно прочитайте пост где я выкладывал версию 2.2b.

Нашел только один пост по версии 2.2 https://goo.su/0Rm5
Получилось загрузить версию 2.2 заменил в коде RS 6 на 14 и загрузилась.
Сейчас проблема. Меняю параметры, в настройках меню, жму старт. Дисплей отображает статические данные (приложил фото), то есть ни на дисплеи, ни на моторах движений нет.
На прошивке 2.1 тоже самое. Схему подключения проверял- все правильно подключено. Думаю даже если бы подключение было бы не правильным, хотя бы на дисплеи был бы виден процесс намотки. Подскажите пожалуйста, куда копать?
    При прокрутки в меню, двигатели двигаются, сначало думал проблема может в драйверах, но выходит что нет.

F5vkaJA_gnc.jpg

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

18 минут назад, Alexandr Zhukov сказал:

Дисплей отображает статические данные (приложил фото), то есть ни на дисплеи, ни на моторах движений нет.

https://youtu.be/o_f3Sf8Vp78

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

Привет форумчанам. Прошил Arduino uno, подключил к нему только дисплей 1602 без i2c, ( в скетче строку 2004 закомментил и открыл 1602) но при загрузке выходят вначале winding 2.2 а потом все ставновится квадратиками, регулятор яркости крутил, не помогает. В чем может быть проблема?

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

3 часа назад, madwolf_92 сказал:

дело было в самом экранчике

А что было вкратце? а то непонятная проблема когда первый экран выводит, а дальше нет.

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

Всем доброго времени суток, собран данный станочек, работает довольно таки хорошо, добавил Rotation (направление движения намотки по часовой или против). 

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

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

  • 2 недели спустя...

Всем привет! Собрал станочек по данной схеме, но решил использовать ШД от принтеров (т.к. они были в наличии) и теперь стоит вопрос как правильно выставить количество шагов на оборот вала? ШД ЕМ-462 и ЕМ-463 с  шагом 7,5гр/шаг и 48 шагов на оборот вала. И еще редуктор от принтера на 1/8 на основном валу с катушкой. Есть ли возможность поправить код чтобы это всё работало? 

20200422_150428.jpg

20200422_150523.jpg

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

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

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

На питание дисплея (прямо на дисплее) повесить керамику 0.1мкФ

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

Для людей, которые пишут "мФ" вместо "мкФ", в аду приготовлен отдельный котёл. 1 мФ = 1000 мкФ.

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

21.03.2020 в 11:35, TDA сказал:

- Добавлены кнопки ручного управления двигателями

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

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

У меня получилось так - кнопки вверх вниз управляют шд укладчика вперед - назад. Кнопки вправо-влево и еще одна дополнительная управляют основным ШД тоже вперед  - назад соответственно, единственное что мне непонятно это почему 3 кнопки и одна из них дублируется...

 

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

@TDA Я поставил редуктор 1 к 3 и теперь укладчик шаги осуществляет не корректно (можно уменьшить шаги в 3 раза, но это не совсем удобно), можно ли это как нибудь подправить в прошивке или просто показать где и что надо исправить что бы на 3 шага основного шд приходился 1 шаг укладчика? 

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

22.04.2020 в 13:08, Иван Лавр сказал:

 Есть ли возможность поправить код чтобы это всё работало? 

Пока автор не ответил ни на ваш ни на мой вопрос, умные люди мне подсказали что все дело вот в этих настройках

#define ShaftStep 50 // ShaftStep = Шаг резьбы*50
#define MicroStepsN 16 // Число микрошагов на шаг
#define StepsForTurn 200 // число шогов для одного оборота основного двигателя (200 = 1,8° на шаг)

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

если стоит редуктор то StepsForTurn 200

Пример.

1.У вас стоит редуктор 8 к 1, соответственно вам нужно добавить множитель 8 

#define StepsForTurn 200*8

2. У вас нестандартный укладчик с шагом 7,5 гр.  а  #define ShaftStep 50 // ShaftStep = Шаг резьбы*50; а данное значение рассчитано для шага 1.8гр, получается что 7.5гр./1,8 = 4,16666666, т .е в 4.1666666 раз меньше нам нужно сделать шаг, получается 50/4,1666666 = 12,019 

#define ShaftStep 50 // ShaftStep = Шаг резьбы*12,019

 

вроде вот такая вот выкладка должна быть, если я ошибаюсь прошу простить, понять и указать на неточность)))

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

3 часа назад, madwolf_92 сказал:

Пока автор не ответил ни на ваш ни на мой вопрос, умные люди мне подсказали что все дело вот в этих настройках

Дело в том, что автор, к сожалению, не может поддерживать все возможные варианты реализации устройства отличные от оригинального. Все что можно изменить на данный момент действительно собрано в начале кода программы в виде #define xxxx.

По вопросу проблем с экраном, был дан правильный совет начать с установки керамики по питанию экрана. Если проблема не будет устранена, то скорее всего дело в "звоне" цифровой линии. Необходимо устранить звон на каждой цифровой линии от МК до LCD. Варианты решения на рисунке: 

image.png.8f7893ac95f2725fb0710972026d0685.png

Можно еще один вариант применить, снизить скорость нарастания фронтов, поставив RC фильтр 100 Ом 1нФ на выходах МК. Так как у меня эта проблема не проявляется точнее сказать не могу.

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

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

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

Мой вариант электроники. Поскольку не люблю лишние провода, все собрал на одной плате. Дисплей на 4 строки, но в закромах нашелся только на 20 символов. Плату было травить лень, отфрезеровал на ЧПУ. Тем временем едет CNC шилд с драйверами. Как и рекомендовал автор, для антидребезга на энкодер поставил подавление. На старой советской 561ЛП2. Уж не знаю, был бы без нее дребезг, но с ней его нет. Есть одна непонятка, нет реакции на нажатие кнопок. Но пока на это забил, займусь механикой.

IMG_5592.JPG

IMG_5593.JPG

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

04.05.2020 в 16:04, trikot сказал:

Мой вариант электроники. Есть одна непонятка, нет реакции на нажатие кнопок. 

Выглядит хорошо. Это фрезой все снято? Долго наверно. 

Нажатие кнопок должны приводить к вращению двигателей, они подключены? 

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

Это я раньше заморачивался с полным снятием меди при фрезеровке. Это реально долго. Теперь просто фрезерую по контуру, а лишнюю фольгу отрываю, просто и быстро. На эту плату со сверловкой и удалением лишней фольги ушло минут 30-40. Сейчас я гравером фрезерую, надо бы прикупить фрез 0,2-0,5 диаметром.

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

Пока очень медленно едет CNC шилд с драйверами и ходовой винт, потихоньку занялся механикой. Мое видение зажима каркаса. Оси установлены каждая на 2-х подшипниках, прижимы съемные, задний прижим подпружинен. Хорошо когда на самоизоляции есть чем себя занять:)

IMG_5601.jpg

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

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

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

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

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

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

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

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

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

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

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

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