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

Микроконтролер Зависет Attyni13A


strengerst

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

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

.include "tn13def.inc";
//Переименованные регистра
.def PINT=R24; //R24 переименовуем в VECTORPCINT
.def TIMEA=R25;
.list;
.cseg; работаем с програмной памятью а не озу или eeprom
.org 0; устанавливаем начальную позицию строки
exit: rjmp N0;
.org 2
/*Код прерывания по выводам PCINT*/
in R20, SREG;
inc PINT;
out SREG, R20;
reti;
/*Код прерывания по совпадению с таймером значения А*/
.org 6
in R20, SREG;
INC TIMEA;
out SREG, R20;
reti;

/*Код установки таймера счетчика*/
TIME0RIN:
ldi R16, 0x00;// Сбрасываем все флаги таймера
out TIFR0, R16;
ldi R16, (1<<OCIE0A);Установка по совпадению с А;
out TIMSK0, R16;
ldi R16, 0xFF; Устанавливаем значение при совпадении с А
out OCR0A, R16;
ldi R16, (1<<CS02)|(0<<CS01)|(1<<CS00);
out TCCR0B, R16;
rjmp start;
/*Основной код начало программы*/
N0:
cli; ЗАПРЕOFTV ГЛОБАЛЬНЫЕ ПРЕРЫВАНИЯ перед установкой параметров
//инициализация стэка.(установка максимально размера ОЗУ);
ldi R17, RAMEND;
out SPL, R17;
//Установка предделителя частоты тактового сигнала Устанавляваем деление на 8 что бы не перегревать процесор.
ldi R16, (1<<CLKPCE)|(0<<CLKPS1)|(0<<CLKPS0);
out CLKPR, R16;
ldi R16, (0<<CLKPCE);
out CLKPR, R16;
////Запрет прерывания от компаратора перед его отключением ;
//Команда сбрасывает значение в 0 регистра ACSR ячейки ACIE;
CBI ACSR, ACIE;
//Отключение компаратора
////Команда устанавливает значение в 1 регистра ACSR ячейки ASD;
SBI ACSR, ACD;
///Выбераем режим срабатывания по PCMSK
ldi R16, (1<<PCIF);
out GIFR, R16; ..Скидываем флаг прерывания если он установлен.
ldi R16, (1<<PCIE);
out GIMSK, R16;
//Выбираем режим срабатывания по нарастающему фронту
ldi R16, (1<<ISC01)|(1<<ISC00);
out MCUCR, R16;
//Выбираем ножку микроконтролера
ldi R16, (1<<PCINT1);
out PCMSK, R16;
//Обнулям занечния наших переменых
CLR ZH;
mov pint, ZH;
mov timea, ZH;

//Устанавливаем работу некоторых ножек порта как на выход.
ldi R16, (1<<DDB4)|(0<<DDB1)|(1<<DDB0);
out DDRB, R16;
//Подключаем подтягивающия резистр к ножке микроконтролера
ldi R16,(1<<PORTB1);
out PORTB, R16;
N1:
//Оключаем работу таймера
ldi R16, (0<<CS02)|(0<<CS01)|(0<<CS00);
out TCCR0B, R16;
sei;//Разрешаем глобальные прерывания
//Скидываем в 0 значение переменых PINT, TIMEA;
mov PINT, ZH;
mov TIMEA, ZH;
// MCUCR ячейки SE-Бит разрешения спящего режима;
// Выбираем режим POWER DOWN, битами SM1 и SM0;
ldi R16, (1<<SE)|(1<<SM1)|(0<<SM0);
out MCUCR, R16;
sleep;
//Отключаем разрешение перехода в спящий режим
ldi R16, (0<<SE);
out MCUCR, R16;
//При первом включении микроконтролера выставлям начальные параметры в метки N0;
start:
wdr; //сбрасываем сторожевой таймер
ldi R16, 0;
//сравнение двух переменных и если они равны то пропуск следующей команды
cpse R16, pint;
rjmp PC+0x02;
rjmp start;
//если сроботало прерывание (поступил перый хлопок pint=1)
ldi R16, 1;
cpse R16, pint;
rjmp PC+0x05; если pint не равно 1 то переходим на 5 позиции в низ.
inc pint; прибавляем 1 что бы больше сюда не заходить.
ldi R16, (0<<PCIE); отключаем внешнее прерывания PCINT
out GIMSK,R16;
rjmp TIME0RIN;
/*По прошествию 2 секунд после первого прерывания подключаем глобальное прерывание */
ldi R16, 10;
cpse R16, timea;
rjmp PC+0x14;
ldi R16, 2;
cpse R16, PINT;
rjmp PC+0x11;
inc timea;
ldi R16, (1<<PCIF); скидываем флаг прерывания
out GIFR,R16;
ldi R16, (1<<PCIE); потключаем внешнее прерывания PCINT
out GIMSK,R16;
ldi R16, 0x81; скидываем таймер счетчик
out GTCCR, R16;
ldi R16, 0x00; скидываем таймер счетчик
out GTCCR, R16;
ldi R16, 3;
mov PINT, R16;
ldi R16, 0;
mov timea, R16;
nop;
nop;
sei;
/*Уходим в режим sleep если второй хлопок не поступил по прошествию 5 секунд*/
ldi R16, 120;
cpse R16, timea;
rjmp PC+0x07;
ldi R16, 3;
cpse R16, pint;
rjmp PC+0x04;
nop;
nop;
rjmp N1;

/*Если второй хлопок поступил*/
ldi R16, 4;
cpse R16, pint;
rjmp PC+0x08;
ldi R16, (0<<PCIE); отключаем внешнее прерывания PCINT
out GIMSK,R16;
inc pint;
ldi R16, 0;
mov timea, R16;
ldi R16, 0x00; скидываем таймер счетчик
out TCNT0, R16;
/*Выжидаем одну секунду и подключаем внешнее прерывание*/
ldi R16, 10;
cpse R16, timea;
rjmp PC+0x0D;
ldi R16, 5;
cpse pint, R16;
rjmp PC+0x0A;
ldi R16, (1<<PCIF); скидываем флаг прерывания
out GIFR,R16;
ldi R16, (1<<PCIE); потключаем внешнее прерывания PCINT
out GIMSK,R16;
inc pint;
ldi R16, 0x00; скидываем таймер счетчик
out TCNT0, R16;
ldi R16, 0;
mov timea, R16;
/*Если поступил третий хлопок в течении 2сек нечего не включаем и идем спать */
ldi R16, 60;
cpse R16, timea;
rjmp PC+0x05;
ldi R16, 7;
cpse R16, pint;
rjmp PC+0x02;
rjmp N1;
/*Если третий хлопок не поступил в течении 2сек подключаем пин PORTB2 */
ldi R16, 60;
cpse R16, timea;
rjmp PC+0x09;
ldi R16, 6;
cpse R16, pint;
rjmp PC+0x06;
ldi R16, (1<<PORTB4);
in R17, PORTB;
eor R16, R17;
out PORTB,R16;
rjmp N1;
rjmp start;

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

Какое внешнее прерывание вы используете на PB1 - INT0 или PCINT1. А то сложно что-то сказать не зная идею.

Во время инициализации вы настраиваете прерывание по восходящему фронту INT0. Прерывания PCINT работают по обоим перепадам (один режим). Обработчик прерывания у вас выбран PCINT

//Выбираем режим срабатывания по нарастающему фронту

ldi R16, (1<<ISC01)|(1<<ISC00);

out MCUCR, R16;

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

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

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

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

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

Ну вот же в коде написано

///Выбераем режим срабатывания по PCMSK
ldi R16, (1<<PCIF);
out GIFR, R16; ..Скидываем флаг прерывания если он установлен.
ldi R16, (1<<PCIE);
out GIMSK, R16;
//Выбираем режим срабатывания по нарастающему фронту
ldi R16, (1<<ISC01)|(1<<ISC00);
out MCUCR, R16;
//Выбираем ножку микроконтролера
ldi R16, (1<<PCINT1);
out PCMSK, R16;

А вообще работа следующая, когда на ножку микроконтроллера приходит сигнал, которым является хлопок, передающийся через микрофон и усилитель, у нас срабатывает прерывание в котором происходит увлечение на один переменной PINT, в коде везде есть сравнение этой переменой с разными значениями суть которых определяет работу определенного участка кода, заданного значение, где совпадает с переменой PINT. а также значения таймера которые записываются в переменную timea что дает нам возможность производить задержку по времени и учитывать длительность хлопков. Так если хлопнуть три раза значение переменой PINT превысит допустимое и микроконтроллер уснет при это все параметры обнулим и при следующем хлопке счет начнется заново. А если один хлопок, то по истечению промежутка времени у нас в коде

/*Уходим в режим sleep если второй хлопок не поступил по прошествию 5 секунд*/
ldi R16, 120;
cpse R16, timea;
rjmp PC+0x07;
ldi R16, 3;
cpse R16, pint;
rjmp PC+0x04;
nop;
nop;
rjmp N1;

который сравнивает количество прерываний по времени с переменой timea.

Да все по сути работает я лично проверял. но вот только не долго определеный промежуток времени там 5 мин. А потом контролер зависает чета.

Вы это сами "изобретали" или "сдернули" откуда-то?

да сам писал видно же что любительский код.

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

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

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

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

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

Тогда объясните кто Вас учил использовать безусловные переходы типа rjmp PC+0x.., вместо rjmp {имя метки}. Вроде Вы и метки используете, но категорически отказываетесь их применять при переходах. Кстати, есть еще кучка условных переходов, применение которых позволяет создавать более читабельный и понятный листинг, чем пропуск команды при равенстве регистров.

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

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

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

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

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

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

Повторяюсь ещё раз

//Выбираем режим срабатывания по нарастающему фронту

ldi R16, (1<<ISC01)|(1<<ISC00);

out MCUCR, R16;

Это для прерывания по INT0. Вы же используете прерывание PCINT. PCINT не имеет возможности настройки по фронту/по спаду/по любому перепаду/или по низкому уровню. Эта настройка доступна только для INT0. PCINT может только - по любому перепаду на ноге. То есть когда вы хлопнули один раз вы два раза попали в прерывание (по фронту и по спаду), когда хлопаете 3 раза соответственно 6 раз в прерывание.Если вы хотите инкрементировать только по фронту, то попадая в прерывание проверяйте состояние входа а потом инкрементируйте.

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

Обратите внимание на это место:

.org 2
/*Код прерывания по выводам PCINT*/
in R20, SREG;
inc PINT;
out SREG, R20;
reti;
/*Код прерывания по совпадению с таймером значения А*/
.org 6
in R20, SREG;
INC TIMEA;
out SREG, R20;
reti;

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

Повторяюсь ещё раз

//Выбираем режим срабатывания по нарастающему фронту

ldi R16, (1<<ISC01)|(1<<ISC00);

out MCUCR, R16;

Это для прерывания по INT0. Вы же используете прерывание PCINT. PCINT не имеет возможности настройки по фронту/по спаду/по любому перепаду/или по низкому уровню. Эта настройка доступна только для INT0. PCINT может только - по любому перепаду на ноге. То есть когда вы хлопнули один раз вы два раза попали в прерывание (по фронту и по спаду), когда хлопаете 3 раза соответственно 6 раз в прерывание.Если вы хотите инкрементировать только по фронту, то попадая в прерывание проверяйте состояние входа а потом инкрементируйте.

Это правильное замечание но на код оно не влияет так как после первого хлопка у нас срабатывает прерывания по высокому фронту и что бы мы не попадали в прерывания по низкому фронту в коде после первого прерывания отключаются прерывания по PCINT до окончания действия таймера а потом опять подключаем прерывания и ждем второй хлопок. Это исключает возможность двойного попадания в прерывания. Почему PCINT а не INT0 потому что нога отведеная под INT0 расположения микроконтроллера находиться не в удобном для моей схемы места.

//если сроботало прерывание (поступил перый хлопок pint=1)
ldi R16, 1;
cpse R16, pint;
rjmp PC+0x05; если pint не равно 1 то переходим на 5 позиции в низ.
inc pint; прибавляем 1 что бы больше сюда не заходить.
ldi R16, (0<<PCIE); отключаем внешнее прерывания PCINT
out GIMSK,R16;
rjmp TIME0RIN;/*Если второй хлопок поступил*/
ldi R16, 4;
cpse R16, pint;
rjmp PC+0x08;
ldi R16, (0<<PCIE); отключаем внешнее прерывания PCINT
out GIMSK,R16;
inc pint;
ldi R16, 0;
mov timea, R16;
ldi R16, 0x00; скидываем таймер счетчик
out TCNT0, R16;

Обратите внимание на это место:

.org 2
/*Код прерывания по выводам PCINT*/
in R20, SREG;
inc PINT;
out SREG, R20;
reti;
/*Код прерывания по совпадению с таймером значения А*/
.org 6
in R20, SREG;
INC TIMEA;
out SREG, R20;
reti;

Учту ваше замечание и попробую переделать. Вот так вроде бы должно быть

.include "tn13def.inc";
//Переименованные регистра
.def PINT=R24; //R24 переименовуем в VECTORPCINT
.def TIMEA=R25;
.list;
.cseg; работаем с програмной памятью а не озу или eeprom
.org 0; устанавливаем начальную позицию строки
rjmp N0; Reset Handler
rjmp N0 ; IRQ0 Handler
rjmp PCINT0Z ; PCINT0 Handler
rjmp N0 ; Timer0 Overflow Handler
rjmp N0; EEPROM Ready Handler
rjmp N0; Analog Comparator Handler
rjmp TIM0_COMPA ; Timer0 CompareA Handler
rjmp N0; Timer0 CompareB Handler
rjmp N0; Watchdog Interrupt Handler
rjmp N0; ADC Conversion Handler


/*Код прерывания по выводам PCINT*/
PCINT0Z:
in R20, SREG;
inc PINT;
out SREG, R20;
reti;
/*Код прерывания по совпадению с таймером значения А*/
TIM0_COMPA:
in R20, SREG;
INC TIMEA;
out SREG, R20;
reti;


/*Код установки таймера счетчика*/
TIME0RIN:
ldi R16, 0x00;// Сбрасываем все флаги таймера
out TIFR0, R16;
ldi R16, (1<<OCIE0A);Установка по совпадению с А;
out TIMSK0, R16;
ldi R16, 0xFF; Устанавливаем значение при совпадении с А
out OCR0A, R16;
ldi R16, (1<<CS02)|(0<<CS01)|(1<<CS00);
out TCCR0B, R16;
rjmp start;
/*Основной код начало программы*/

N0:
cli; ЗАПРЕOFTV ГЛОБАЛЬНЫЕ ПРЕРЫВАНИЯ перед установкой параметров
//инициализация стэка.(установка максимально размера ОЗУ);
ldi R17, RAMEND;
out SPL, R17;

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

На какой частоте работает МK, если 1,2 то с момента первого фронта до отключения прерывания проходит 24 мкСек. И как насчёт импульсных помех. Да и по поводу предыдущих моих цитат вашего кода. Если кусок кода просто есть и не выполняет ничего то не лучше ли его выкинуть отредактировав. Чтоб читающие ваш код не спотыкались об уже оговорённое. Какое питание у вашего Мк (имею в виду стабилизатор линейный/импульсный) У меня были случаи зависания МК при линейном стабилизаторе( атмега8 и тини13 даже wdr не помагал), менял на импульсный и проблема исчезала.

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

Здравствуйте, хотелось бы сразу отбросить аппаратные вопросы.

1. У вас стоит конденсатор между выводами питания контроллера (непосредственно около них, а не где-нибудь за 20 см)? Если нет, то причина зависания может быть именно в этом.

2. У вас контроллер управляет мощной нагрузкой, которая питается от того же источника питания что и контроллер? Если да, то тогда следует развязать питание при помощи диода и электролитического конденсатора, я имею ввиду возможные просадки напряжения при включении мощной нагрузки, которые могут приводить к зависанию контроллера.

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

На какой частоте работает МK, если 1,2 то с момента первого фронта до отключения прерывания проходит 24 мкСек. И как насчёт импульсных помех. Да и по поводу предыдущих моих цитат вашего кода. Если кусок кода просто есть и не выполняет ничего то не лучше ли его выкинуть отредактировав. Чтоб читающие ваш код не спотыкались об уже оговорённое. Какое питание у вашего Мк (имею в виду стабилизатор линейный/импульсный) У меня были случаи зависания МК при линейном стабилизаторе( атмега8 и тини13 даже wdr не помагал), менял на импульсный и проблема исчезала.

В настройках fuses стоит 9,6MHz и также fuses ставлю СLKDIV8 что в суме дает нам частоту 9,6/8=1,2 MHz Как вы вычислили 24 мкСек ? очень интересно. Питание от линейного стабилизатора точнее микросхемы 7805. Вот схема подключения http://savepic.ru/9527162.htm

Стоит попробовать от импульсного запитать, но все схемы с импульсным питанием такие громоздкие :(

Здравствуйте, хотелось бы сразу отбросить аппаратные вопросы.

1. У вас стоит конденсатор между выводами питания контроллера (непосредственно около них, а не где-нибудь за 20 см)? Если нет, то причина зависания может быть именно в этом.

2. У вас контроллер управляет мощной нагрузкой, которая питается от того же источника питания что и контроллер? Если да, то тогда следует развязать питание при помощи диода и электролитического конденсатора, я имею ввиду возможные просадки напряжения при включении мощной нагрузки, которые могут приводить к зависанию контроллера.

1. С7 на 0,1 мкф стоит возле микроконтроллера при запитывании от 7805.

2. Контролер управляет симистором. через который проходит нагрузка которая питается от другова источника. Вот схема http://savepic.ru/9527162.htm

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

Так в том то и проблема, что ограничивать ток по питанию не нужно (микроконтроллер сам возьмет столько, сколько ему нужно), а вот ограничивать ток по выходам (например по выходу контроллера, который управляет симистором) нужно. В результате у вас получается что при открывании симистора (предположим что вам необходим ток 20 мА) Происходит просадка напряжения до 3 вольт, в результате контроллер начинает глючить (причем проблема именно не в том что напряжение опускается до 3 вольт, контроллер и при 3 вольтах может работать, а в самом факте просадок, когда во время просадки при записи информации в регистры, она может быть повреждена или возникающий перепад может спровоцировать срабатывание внешнего прерывания).

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

Так в том то и проблема, что ограничивать ток по питанию не нужно (микроконтроллер сам возьмет столько, сколько ему нужно), а вот ограничивать ток по выходам (например по выходу контроллера, который управляет симистором) нужно. В результате у вас получается что при открывании симистора (предположим что вам необходим ток 20 мА) Происходит просадка напряжения до 3 вольт, в результате контроллер начинает глючить (причем проблема именно не в том что напряжение опускается до 3 вольт, контроллер и при 3 вольтах может работать, а в самом факте просадок, когда во время просадки при записи информации в регистры, она может быть повреждена или возникающий перепад может спровоцировать срабатывание внешнего прерывания).

Хорошое замечание я и не думал о просадки напряжения при открытие. Надеюсь это поможет устранить глюки. Меня смущал тот факт что сама микра работала исправно в начале. а лишь через промежуток времени зависало попробую переделать схему.

Так правильно будет? http://savepic.ru/9537168.png

Вариант управления симистором http://www.microchip...pport/dimm.html

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

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

Как вы вычислили 24 мкСек ?

Кинул ваш код в AVRStudio и посмотрел. С момента первого фронта до отключения прерывания проходит 29 тактов. на частоте 1,2 это и будет 24 мкСек

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

Большое всем спасибо за уделенное время и внимание, Буду переделывать схему под эту http://savepic.ru/9537168.png что из этого выйдет отпишусь.

Как вы вычислили 24 мкСек ?

Кинул ваш код в AVRStudio и посмотрел. С момента первого фронта до отключения прерывания проходит 29 тактов. на частоте 1,2 это и будет 24 мкСек

Та вроде 24 мкСек хватает прежде чем сработает прерывания по спаду.Но лучше всего в обработчике прерываний отключать наверное так:

/*Код прерывания по выводам PCINT*/
PCINT0Z:
ldi R16, (0<<PCIE); отключаем внешнее прерывания PCINT
out GIMSK,R16;
in R20, SREG;
inc PINT;
out SREG, R20;
reti;

Спасибо за замечание очень пригодились.

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

...Но лучше всего в обработчике прерываний отключать наверное так:

Зачем?

С момента первого фронта до отключения прерывания проходит 29 тактов. на частоте 1,2 это и будет 24 мкСек, А при таком отключении прерывания это будет почти моментально.

Хочу попробовать так подключить получиться ? http://savepic.ru/9638274.png

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

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

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

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

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

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

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

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

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

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

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