17.11.2017, 12:29
|
#1
|
Прохожий
Регистрация: 30.10.2017
Сообщений: 7
Сказал спасибо: 2
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
pic16f628a+lcd1601
Добрый день. Уважаемые знатоки подскажите в чем может быть проблема. Подключаю к м-к PIC16F628A LCD1601 (экран синий, контроллер не известный). Инициализацию выполняю по LCD_HD44780. Инициализация дисплея проходит если несколько раз нажать на кнопку RESET (определяю по тому что горят все 16 квадратиков, но не пойму почему горят первые 8 квадратов полностью, а вторые 8 только на половину), изначально инициализация не проходит (определяю по свечению только первых 8 квадратиков, которые горят полностью).
Но если инициализация проходит (это я только предполагаю, как проверить наверняка не знаю), то почему не высвечивается символы на экране.
Схема:
Нажмите, чтобы открыть спойлер
main.asm
Нажмите, чтобы открыть спойлер
Код:
|
LIST p=PIC16F628A
#include ‹P16F628A.INC›
#include "my_init.inc"
#include "my_macro.inc"
__CONFIG _FOSC_XT & _WDTE_OFF & _PWRTE_OFF & _MCLRE_ON & _BOREN_OFF & _LVP_OFF & _CPD_OFF & _CP_OFF
;__CONFIG 3F61H
; ************************************************** ***************************
; Основная программа
org 0
; ************************************************** ***************************
movlw .7 ; 00000111
movwf CMCON ; Отключаем компораторы
call LCD_Init ; инициализация дисплея
call PressSET ; Press SET
START:
;LCD_Clear
goto START
#include "my_sub.inc"
end |
my_init.inc
Нажмите, чтобы открыть спойлер
Код:
|
; инициализируем переменные для подключения LCD экрана
#define LCD_RS PORTA,RA1
#define LCD_RW PORTA,RA2
#define LCD_E PORTA,RA3
#define LCD_D4 PORTB,RB0
#define LCD_D5 PORTB,RB1
#define LCD_D6 PORTB,RB2
#define LCD_D7 PORTB,RB3
; инициализируем переменные для подключения кнопок
;#define BUTTON_SET PORTA,RA1
;#define BUTTON_PLUS PORTA,RA2
;#define BUTTON_MINUS PORTA,RA3
;#define BUTTON_ON_LIGHT PORTB,RB0
;#define TRIS_BUT_SET TRISA,RA1
;#define TRIS_BUT_PLUS TRISA,RA2
;#define TRIS_BUT_MINUS TRISA,RA3
;#define TRIS_BUT_ON_LIGHT TRISB,RB0
; 1-Wire устройство
;#define DQ PORTA,RA0
;#define TRIS_DQ TRISA,RA0
; Определяем константы и заносим их в память 0 Банк
CBLOCK H'20'
Reg_1 ; переменная для задержки времени 20h
Reg_2 ; переменная для задержки времени 21h
Reg_3 ; переменная для задержки времени 22h
Reg_4 ; переменная для задержки времени 23h
Reg_5 ; переменная для задержки времени 24h
Delay ; переменная для задержки времени 25h
TMP1 ; переменная для временного хранения данных 26h
TMP2 ; переменная для временного хранения данных 27h
TMP3 ; переменная для временного хранения данных 28h
TMP4
ENDC
; flagProg = b'xxxxxxxy' y - разрешение проверки флага занятости BF, y=0 не проверяем, y=1 проверяем флаг занятости
; область памяти регистров 70h - 7Fh видна во всех банках памяти контролера
CBLOCK H'70'
W_TEMP ; переменнта для прерываний временный аккамулятор 70h
STATUS_TEMP ; переменнта для прерываний временный STATUS 71h
PCLATH_TEMP ; переменнта для прерываний временный PCLATH 72h
FSR_osn ; переменнта для прерываний временный FSR_osn 73h
FSR_prer ; переменнта для прерываний временный FSR_prer 74h
_status_prog_ ; переменная для статуса работы программы 75h
ENDC |
my_macro.inc
Нажмите, чтобы открыть спойлер
Код:
|
errorlevel -302 ; Отключаем предуприждение для данного макроса при компелировании
BANK0 MACRO ; Макрос для выбора RAM BANK 0
bcf STATUS,RP0
bcf STATUS,RP1
ENDM
BANK1 MACRO ; Макрос для выбора RAM BANK 1
bsf STATUS,RP0
bcf STATUS,RP1
ENDM
BANK2 MACRO ; Макрос для выбора RAM BANK 2
bcf STATUS,RP0
bsf STATUS,RP1
ENDM
BANK3 MACRO ; Макрос для выбора RAM BANK 3
bsf STATUS,RP0
bsf STATUS,RP1
ENDM
Clear_PORT MACRO
bcf LCD_RS
bcf LCD_RW
bcf LCD_E
bcf LCD_D4
bcf LCD_D5
bcf LCD_D6
bcf LCD_D7
ENDM
Strob_LCD MACRO ; Макрос для строба LCD
bcf LCD_E ; E=0
nop
bsf LCD_E ; E=1
nop
nop ; › 450 nS
bcf LCD_E ; E=0
nop
ENDM
LCD_IN MACRO ; Макрос для вывода на LCD информацию
BANK1
bcf LCD_RS
bcf LCD_RW
bcf LCD_E
bcf LCD_D4
bcf LCD_D5
bcf LCD_D6
bcf LCD_D7
BANK0
Clear_PORT
ENDM
; При выполнении MPU программы с проверкой флага занятости BF (DB7), необходимо 1/2fosc (частоты)
; необходимо для выполнения следующей инструкции по падающему краю сигнала “E” после того,
; как флаг занятости (DB7) переходит в “Low”.
; время выполнения 10 * nop
LCD_OUT MACRO ; Макрос для получения с LCD информации
bsf LCD_RW ; RW=1
BANK1
bsf LCD_D4
bsf LCD_D5
bsf LCD_D6
bsf LCD_D7
BANK0
nop
ENDM
LCD_Clear MACRO ; Макрос для выбора очистки LCD
movlw b'00000001'
call LCDcom
movlw .2 ; устанавливаем задержку в 1650 микросекунд или 1,65 мили секунд
call delay_65mS
ENDM
LCD_Home MACRO ; Макрос для перевода курсора в начало строки LCD
movlw b'00000001'
call LCDcom
movlw .165 ; устанавливаем задержку в 1650 микросекунд или 1,65 мили секунд
call Delay_N10mkS
ENDM |
my_sub.inc
Нажмите, чтобы открыть спойлер
Код:
|
; процедура инициализации десплея LCD
LCD_Init:
LCD_IN ; устанавливаем PIC порт подключения к LCD на передачу информации от PIC к LCD
; первая команда инициализации
; устанавливаем 8 bit интерфейс b'0011'
;bcf LCD_RS ; RS = 0
;bcf LCD_RW ; RW = 0
;bcf LCD_D4 ; D4 = 0
;bcf LCD_D5 ; D5 = 0
bsf LCD_D6 ; D6 = 1
bsf LCD_D7 ; D7 = 1
;call delay_50mS ; Задержка 50 ms
Strob_LCD
; вторая команда инициализации
; устанавливаем 8 bit интерфейс b'0011'
;call delay_4600mkS ; Задержка 4,6 ms
Strob_LCD
; третья команда инициализации
; устанавливаем 8 bit интерфейс b'0011'
call delay_100mkS ; Задержка 100 mks
Strob_LCD
; *********** инициализация окончена,
; *********** настраиваем дисплей
;call Basy_LCD ; ожидание готовности LCD
; При включении дисплея, он настраивается следующим образом:
; 1. Очистка дисплея
; 2. Набор функций:
; - DL=1; 8 bit
; - N =0; 1 строчный дисплей
; - F =0; шрифт символа 5х8
; 3. Дисплей вкл/откл:
; - D =0; отображение выключено
; - C =0; курсор выключен
; - B =0; мигание курсора выключено
; 4. Установка режима ввода данных
; - I/D=1; при вводе позиция курсора увеличивается на 1
; - S =0; без сдвига экрана
; c этого момента байт посылается в 2 этапа, старший бит (тетрада), потом младший бит (тетрада)
; устанавливаем Function Set
; утанавливаем 4 битную шину передачи данных, линии дисплея, шрифт - 001DNF**
; D=0 это 4 bit, D=1 это 8 bit
; N=0 это 1 линия дисплея, N=1 это 2 линии дисплея
; F=0 это 5х7 шрифт, F=1 это 5х10 шрифт
movlw b'00101000'
call LCDcom
; устанавливаем смещение курсора или дисплея - 0001 SR**
; S=0 смещается курсор, S=1 смещается дисплей
; R=0 смещение в лево, R=1 смещение в право
;movlw b'00010100'
;call LCDcom
; утанавливаем дисплей и курсор вкл/откл, также мигание курсора - 00001DCB
; D=1 дисплей включен, D=0 дисплей выключен,
; C=1 курсор включен, C=0 курсор выключен,
; B=1 курсор мигает, B=0 курсор не мигает
movlw b'00001100'
call LCDcom
; это самая последняя команда Entry mode set
; Устанавливаем направление движения - 000001DS
; D=1 перемещение курсора в право D=0 перемещение курсора в лево
; S=1 разрешение сдвига экрана S=0 запрет сдвига экрана
movlw b'00000110'
call LCDcom ; сдвиг курсора вправо
; очистка дисплея
;LCD_Clear
;call led_on
return
; процедура отправки байта команды (LCDcom) или данных (LCDdata) на LCD
; входные данные W
; тип входных данных 1 байт b'xxxxxxxx'
LCDcom: bcf LCD_RS ; RS=0 команда
goto LCDdat1
LCDdata: bsf LCD_RS ; RS=1 данные
LCDdat1 bcf LCD_RW ; RW=0 послать в LCD
; необходимо занести в аккаулятор 0011 хххх
; где хххх это старшая тетрада байта
movwf TMP1 ; сохроняем аккамулятор, т.к. там хранится данные или команда 1 байт
movlw b'11110000' ; указываем что хотим получить старшую тетраду
andlw TMP1 ; заносим в аккамулятор старшую тетраду, младшая = 0
movwf TMP2 ; переносим аккамулятор в регистр старшая тетрада=TMP1, младшая = 0
swapf TMP2,1 ; меняем младшая тетрада=TMP1, старшая тетрада= 0, сохроняем в регистре
movlw b'00110000' ; готовим к типу 0011 хххх
iorwf TMP2,0 ; приводим к типу 0011 хххх и заносим в аккамулятор
call Send_4bit_LCD ; посылаем старшую тетраду
; необходимо занести в аккаулятор 0011 хххх
; где хххх это младшая тетрада байта
movlw b'00001111' ; указываем что хотим получить младшую тетраду
andlw TMP1 ; заносим в аккамулятор младшую тетраду, старшая = 0
movwf TMP2 ; переносим аккамулятор в регистр старшая тетрада = 0, младшая=TMP1
movlw b'00110000' ; готовим к типу 0011 хххх
iorwf TMP2,0 ; приводим к типу 0011 хххх и заносим в аккамулятор
call Send_4bit_LCD ; посылаем старшую тетраду
call delay_100mkS
return
; переводим микроконтроллер на прием от LCD
;LCD_OUT
; когда дисплей занят на ноге D7 LCD логическая 1
; если на этой ноге ноль, то дисплей свободен
;btfss LCD_D7
;return
;bsf PORTB,4
; получаем старшую тетраду байта
;bsf LCD_E ; E=1
;nop ; › 450 nS
;bcf LCD_E
; получаем младшую тетраду байта
;nop
;bsf LCD_E ; E=1
;nop ; › 450 nS
;bcf LCD_E
;LCD_IN
;nop
return
; процедура отправки 4 бит на LCD
; входящий параметр W
; тип данных 4 бит b'xxxx'
Send_4bit_LCD:
movwf TMP3
; производим обнуление шины порта микроконтролера
bcf LCD_D4
bcf LCD_D5
bcf LCD_D6
bcf LCD_D7
; если определенный бит должен быть = 1, то устанавливаем его, иначе пропускаем
btfsc TMP3,0 ; проверяем 0 бит != 0
bsf LCD_D4 ; устанавливаем D4 в 1 если 0 бит != 0
btfsc TMP3,1 ; проверяем 1 бит != 0
bsf LCD_D5 ; устанавливаем D5 в 1 если 1 бит != 0
btfsc TMP3,2 ; проверяем 2 бит != 0
bsf LCD_D6 ; устанавливаем D6 в 1 если 2 бит != 0
btfsc TMP3,3 ; проверяем 3 бит != 0
bsf LCD_D7 ; устанавливаем D7 в 1 если 3 бит != 0
call LCD_strob ; стробируем что окончена посылка
return
LCD_strob:
bcf LCD_E ; E=0
nop
bsf LCD_E ; E=1
nop
nop ; › 450 nS
bcf LCD_E ; E=0, после ожидание должно быть больше 37 микро секунд
;movlw .100 ; ждем 100mks
;call delay_255mkS
nop
return
;================================================= ==============================
; Модуль готовности LCD
;================================================= ==============================
Basy_LCD:
; переходим в режим приема от LCD
bcf LCD_E
BANK1
;bsf TRIS_D4
;bsf TRIS_D5
;bsf TRIS_D6
;bsf TRIS_D7
BANK0
bcf LCD_RS
bsf LCD_RW
bsf LCD_E
btfsc LCD_D7
;goto Basy_LCD
bcf LCD_E
bcf LCD_RW
; переходим в режим передачи на LCD
BANK1
;bcf TRIS_D4
;bcf TRIS_D5
;bcf TRIS_D6
;bcf TRIS_D7
BANK0
return
; выводим на экран слово Press SET
PressSET:
movlw b'01010000' ; 'P'
call LCDdata
movlw b'01110010' ; 'r'
call LCDdata
movlw b'01100101' ; 'e'
call LCDdata
movlw b'01110011' ; 's'
call LCDdata
movlw b'01110011' ; 's'
call LCDdata
movlw b'00100000' ; ' '
call LCDdata
movlw b'01010011' ; 'S'
call LCDdata
movlw b'01000101' ; 'E'
call LCDdata
;movlw b'01010100' ; 'T'
;call LCDdata
return
;
;******** п/п задержки **********
delay_50mS:
movlw .238
movwf Reg_1
movlw .65
movwf Reg_2
decfsz Reg_1,F
goto $-1
decfsz Reg_2,F
goto $-3
nop
return
delay_4600mkS:
movlw .248
movwf Reg_1
movlw .6
movwf Reg_2
decfsz Reg_1,F
goto $-1
decfsz Reg_2,F
goto $-3
nop
return
delay_100mkS:
movlw .33
movwf Reg_1
decfsz Reg_1,F
goto $-1
return
;******************************** |
Думал что время задержек не хватает(везде в мануалах к LCD пишут не меньше указанного). Время выставлял и по 250 мили сек. Где то на просторах форума прочитал что компараторы мешают, отключил, результат не поменялся. LCD подключал к ARDUINO все работает как нужно. Понимаю что проблема с инициализацией, но не знаю куда копать.
|
|
|
|
17.11.2017, 14:46
|
#2
|
Гражданин KAZUS.RU
Регистрация: 17.06.2008
Адрес: Украина
Сообщений: 731
Сказал спасибо: 363
Сказали Спасибо 807 раз(а) в 379 сообщении(ях)
|
Re: pic16f628a+lcd1601
PIC16F628A
Возможно, стОит проверить своевременную настройку портов на
ввод/вывод (все, что связано с регистрами TRIS)
|
|
|
|
17.11.2017, 14:48
|
#3
|
Прохожий
Регистрация: 30.10.2017
Сообщений: 7
Сказал спасибо: 2
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: pic16f628a+lcd1601
Если множество раз (больше 20) нажать на кнопку RESET двойным кликом, т.е. быстро, то экран становится пустым (квадратики пропадают, но он светится, как будто произошла очистка экрана)
|
|
|
|
17.11.2017, 14:49
|
#4
|
Прохожий
Регистрация: 30.10.2017
Сообщений: 7
Сказал спасибо: 2
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: pic16f628a+lcd1601
Сообщение от j-Roger
|
PIC16F628A
Возможно, стОит проверить своевременную настройку портов на
ввод/вывод (все, что связано с регистрами TRIS)
|
вроде как проверял порты, но еще раз пересмотрю. Спасибо.
|
|
|
|
17.11.2017, 15:32
|
#5
|
Почётный гражданин KAZUS.RU
Регистрация: 16.05.2015
Адрес: Болгария
Сообщений: 1,460
Сказал спасибо: 286
Сказали Спасибо 1,125 раз(а) в 540 сообщении(ях)
|
Re: pic16f628a+lcd1601
Такое вобще нельзя писать
Clear_PORT MACRO
bcf LCD_RS
bcf LCD_RW
bcf LCD_E
bcf LCD_D4
bcf LCD_D5
bcf LCD_D6
bcf LCD_D7
Надо
Clear_PORT MACRO
bcf LCD_RS
Delay_uS(5)
bcf LCD_RW
Delay_uS(5)
bcf LCD_E
Delay_uS(5)
bcf LCD_D4
Delay_uS(5)
bcf LCD_D5
Delay_uS(5)
bcf LCD_D6
Delay_uS(5)
bcf LCD_D7
Такое тоже
Strob_LCD MACRO ; Макрос для строба LCD
bcf LCD_E ; E=0
nop
bsf LCD_E ; E=1
nop
1 ноп 1 мкс. Может не хватить саму ножку пика передернуть. Другой вопрос отработает ли ЖКИ такой короткий импульс.
|
|
|
|
17.11.2017, 17:06
|
#6
|
Прохожий
Регистрация: 30.10.2017
Сообщений: 7
Сказал спасибо: 2
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: pic16f628a+lcd1601
Сообщение от OakRidge
|
1 ноп 1 мкс. Может не хватить саму ножку пика передернуть. Другой вопрос отработает ли ЖКИ такой короткий импульс.
|
Объясните пожалуйста почему нужна задержка 5 тактов после каждой команды в макросе. Со стробом тоже не понял даташит говорит что для строба достаточно больше 450 наноСек у меня 2 микроСек
|
|
|
|
17.11.2017, 18:35
|
#7
|
Почётный гражданин KAZUS.RU
Регистрация: 16.05.2015
Адрес: Болгария
Сообщений: 1,460
Сказал спасибо: 286
Сказали Спасибо 1,125 раз(а) в 540 сообщении(ях)
|
Re: pic16f628a+lcd1601
Положим PORTA = b00000000
инструкция bsf PORTA.0 читает весь порт, 8 бит в рабочий регистр, устанавливает бит 0 регистра в 1 и записывает 8 бит 00000001 в выходной регистр PORTA.
Седующая инструкция bsf PORTA.1 работает аналогично.
НО ! Если выход PORTA.0 не успел установится в 1 он прочитается как 0, тоесть PORTA = b00000000. В результате получим не PORTA = b00000011 а PORTA = b00000010
Задержа установления ножки зависит от емкости нагрузки, от тока нагрузки тоже, не так сильно разумеется. Раз ошпарился, потому ставлю 5мкс. Не так уж много, а спокойнее.
|
|
|
|
18.11.2017, 14:49
|
#8
|
Прохожий
Регистрация: 30.10.2017
Сообщений: 7
Сказал спасибо: 2
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: pic16f628a+lcd1601
В макрос добавил задержку 5 мкС после каждого поднятия/опускания питания
Clear_PORT MACRO
bcf LCD_RS
call delay_5
bcf LCD_RW
call delay_5
bcf LCD_E
call delay_5
такую же добавил задержку в процедуру где подымается или опускается порт по bcf или bsf. Также добавил задержку в 2 секунды после отключения компараторов с самом начале программы
ситуация не поменялась. Линии прозвонил на случай плохой пайки и отсутствия сигнала.
Подскажите не знаю что делать.
|
|
|
|
18.11.2017, 15:17
|
#9
|
Почётный гражданин KAZUS.RU
Регистрация: 29.01.2005
Адрес: Воронеж
Сообщений: 1,384
Сказал спасибо: 24
Сказали Спасибо 243 раз(а) в 182 сообщении(ях)
|
Re: pic16f628a+lcd1601
movwf TMP3
; производим обнуление шины порта микроконтролера
bcf LCD_D4
bcf LCD_D5
bcf LCD_D6
bcf LCD_D7
; если определенный бит должен быть = 1, то устанавливаем его, иначе пропускаем
btfsc TMP3,0 ; проверяем 0 бит != 0
bsf LCD_D4 ; устанавливаем D4 в 1 если 0 бит != 0
btfsc TMP3,1 ; проверяем 1 бит != 0
bsf LCD_D5 ; устанавливаем D5 в 1 если 1 бит != 0
btfsc TMP3,2 ; проверяем 2 бит != 0
bsf LCD_D6 ; устанавливаем D6 в 1 если 2 бит != 0
btfsc TMP3,3 ; проверяем 3 бит != 0
bsf LCD_D7 ; устанавливаем D7 в 1 если 3 бит != 0
call LCD_strob ; стробируем что окончена посылка
return
Зачем это? Сразу ТМР3 в порт отправляй.
|
|
|
|
18.11.2017, 15:51
|
#10
|
Почётный гражданин KAZUS.RU
Регистрация: 16.05.2015
Адрес: Болгария
Сообщений: 1,460
Сказал спасибо: 286
Сказали Спасибо 1,125 раз(а) в 540 сообщении(ях)
|
Re: pic16f628a+lcd1601
Сообщение от vavilon79
|
Подскажите не знаю что делать.
|
Перейти на более скоростные и емкие контроллеры.
Если ПИК из младшего семейства пусть будет чтото из серии 16F1xxxx. Цена практически та же, однако память и скорость в разы болше.
Попробовать писать на языке уровнем выше чем ассемблер. Спора нет, ассемблер самый скоростной и экономный по потребелению памяти комманд. Однако самый медленный в отношении писания программ и отладки. Языки как Си, Бейсик, Паскаль жрут вдвое больше памяти, однако имеют одно бесспорное преимущество
БИБЛИОТЕКИ Все сделано професионалами и нет нужды мучатся писать самому.
Примерная программа на Бейсике для PIC16F887. Много хлама, сам пик старье. 18FxxK22 лучше
program Lcd
' Lcd module connections
dim LCD_RS as sbit at RB4_bit
LCD_EN as sbit at RB5_bit
LCD_D4 as sbit at RB0_bit
LCD_D5 as sbit at RB1_bit
LCD_D6 as sbit at RB2_bit
LCD_D7 as sbit at RB3_bit
LCD_RS_Direction as sbit at TRISB4_bit
LCD_EN_Direction as sbit at TRISB5_bit
LCD_D4_Direction as sbit at TRISB0_bit
LCD_D5_Direction as sbit at TRISB1_bit
LCD_D6_Direction as sbit at TRISB2_bit
LCD_D7_Direction as sbit at TRISB3_bit
' End Lcd module connections
dim txt1 as char[16]
txt2 as char[9]
txt3 as char[8]
txt4 as char[7]
i as byte ' Loop variable
sub procedure Move_Delay() ' Function used for text moving
Delay_ms(500) ' You can change the moving speed here
end sub
main:
TRISB = 0
PORTB = 0xFF
TRISB = 0xFF
ANSEL = 0 ' Configure AN pins as digital I/O
ANSELH = 0
txt1 = "mikroElektronika"
txt2 = "EasyPIC6"
txt3 = "Lcd4bit"
txt4 = "example"
Lcd_Init() ' Initialize Lcd
Lcd_Cmd(_LCD_CLEAR) ' Clear display
Lcd_Cmd(_LCD_CURSOR_OFF) ' Cursor off
Lcd_Out(1,6,txt3) ' Write text in first row
Lcd_Out(2,6,txt4) ' Write text in second row
Delay_ms(2000)
Lcd_Cmd(_LCD_CLEAR) ' Clear display
Lcd_Out(1,1,txt1) ' Write text in first row
Lcd_Out(2,5,txt2) ' Write text in second row
Delay_ms(500)
' Moving text
for i=0 to 3 ' Move text to the right 4 times
Lcd_Cmd(_LCD_SHIFT_RIGHT)
Move_Delay()
next i
while TRUE ' Endless loop
for i=0 to 7 ' Move text to the left 8 times
Lcd_Cmd(_LCD_SHIFT_LEFT)
Move_Delay()
next i
for i=0 to 7 ' Move text to the right 8 times
Lcd_Cmd(_LCD_SHIFT_RIGHT)
Move_Delay()
next i
wend
end.
Пока так. Каждому свое
Удачи !
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 16:41.
|
|