Администрация форума не несёт ответственности за достоверность информации и оставляет за собой право редактировать или в особых случаях даже удалять посты без предупреждения. Спасибо за понимание.

Программирование ATMEL в BASCOM.

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.



Абоняние для телевизора LG?

Сообщений 1 страница 22 из 22

1

Всем привет! С прошедшими как минимум двумя новыми годами и прочими праздниками. Чисто случайно, сорвав спину, высвободил день чтоб реализовать мечту:
в доме куча пультов к различной бытовой технике. Хочется чтоб один, универсальный и своими руками. За основу беру от телевизора LG 37LV3500. На пульте маркировка - AKB72915244.
Ну думаю сейчас возьму, считаю форму сигнала с пульта, запишу в мегу временные интервалы и в какую сторону дерготь ногой и все ок. Не тут то было, скоро побегу за пол литра.

Итак взял ИК диод с пульта от ТВ тюнера, прикрутил к меге, помигал им (через камеру телефона мигает, все ок) Написал простенькую прогу с задержками как в родном пульте. Нифига не работает.
Сравнил сигнал с моего чуда и с родного пульта - одинаковые. Как будто телек по нюху свой пульт определяет, или видит он какую я кнопку нажимаю - непонятно.

Сигналы с пульта снимал при помощи TSOP4836 и звуковой карты ПК.

Скриншот прилагаю.

http://s2.uploads.ru/t/YkKTX.jpg

Какие мнения будут, господа?

0

2

Ты не учел модуляцию.Вернее , это называется заполнение.  Подключи фотодиод к осциллу и все поймешь.
Если TSOP 36, то то, что ты снял ПОСЛЕ TSOPа, еще надо заполнить меандром в 36 кГц чтобы телек "понял" сигнал. Т.Е. TSOP на телеке его просто не видит.

Отредактировано Skull (2013-03-17 23:15:57)

0

3

Cпасибо, видать чтото опять не так делаю.

Код:
 $regfile = "m8def.dat"                                     ' мега8
$crystal = 8000000                                          ' 1 tik = 1s/8000000= 0,125mks = 0.000125ms
Dim I As Byte , P As Integer , D As Integer, Flag AS  Bit
Disable Interrupts
Config Portd = Output
P = 538
D = P * 2
Waitms 100


     Config Timer0 = Timer , Prescale = 1                   ' конфигурируем таймер 0 
     On Timer0 Pulse                                        ' назначаем подпрограмму, которая будет запускатся по переполнению 0го таймера
     Enable Interrupts                                      'разрешаем прерывания
     Enable Timer0






Do


Set Flag : Waitus 8500                                      'вступление

Reset Flag : Waitus 4330


For I = 1 To 3                                              '000                               '0
    Set Flag : Waitus P
  Reset Flag : Waitus P
Next I


Reset Portd.3 : Waitus D                                    ' 1

For I = 1 To 6                                              '00000
    Set Flag : Waitus P
  Reset Flag : Waitus P
Next I
Reset Flag : Waitus D                                       ' 1

    Set Flag : Waitus P
  Reset Flag : Waitus P
 Reset Flag : Waitus D
For I = 1 To 2                                              '000                               '0
    Set Flag : Waitus P
  Reset Flag : Waitus P
Next I


For I = 1 To 5
Reset Flag : Waitus D                                       ' 1
  Set Flag : Waitus P
  Reset Flag : Waitus P
Next I
   Set Flag : Waitus P
  Reset Flag : Waitus P

  Reset Flag : Waitus D

  For I = 1 To 7                                            '00000
    Set Flag : Waitus P
  Reset Flag : Waitus P
Next I
Reset Flag : Waitus D

  For I = 1 To 2                                            '00000
    Set Flag : Waitus P
  Reset Flag : Waitus P
Next I

For I = 1 To 6
Reset Flag : Waitus D                                       ' 1
  Set Flag : Waitus P
  Reset Flag : Waitus P
Next I




Reset Flag : Waitms 38 : Waitus 381
Set Flag : Waitms 8 : Waitus 470
Reset Flag : Waitus 2170
Set Flag : Waitus 500
Reset Flag


Waitms 900
Loop



Pulse:                                                      ' подпрограмма прерываний таймера0
If Flag = 1 Then Toggle Portd.3 Else Portd.3 = 0
Timer0 = 145
Return

Не обращайте внимание на грабли в основном цикле - это тестовая программка.

так вот. в основном цикле я играюсь флагом, если флаг = 1 то в подпрограмме прерываний по таймеру идет дергание светодиодом. Мега работает на 8мГц, чтоб добится 36 кГц нужно сделать полный период (т.е. два перебрасывания ноги) за 222 тика.

вот тут
Pulse:                                                      ' подпрограмма прерываний таймера0 запускается раз в 256 тиков.
If Flag = 1 Then Toggle Portd.3 Else Portd.3 = 0
Timer0 = 145
Return

я это и делаю. 255-145= 110 это пол периода меандра в 36 кгц.
но почемуто ничего не работает.

Попробую осцилографом, если время будет.

Отредактировано Pasha (2013-03-18 00:07:28)

0

4

Для начала посмотри на стороннем приемнике, есть ли прием. Кроме того, меня смущают настройки таймера, но тут я как тот Чапай- чую, что литра, а объяснить не могу ) Может местные гуру а-ля Mrshilov пояснят...

0

5

Skull написал(а):

чую, что литра

Спасибо дружище за первую подсказку. Разобрался. Взял да включил аппаратный ШИМ. Хоть и не 36 кГц а 31,25кГц но все равно заработало! Ура.
косо криво, нужно напильником допилить. Главное принцип понял, остальное дело техники.

Код:
 $regfile = "m8def.dat"                                     ' мега8
$crystal = 8000000                                          ' 1 tik = 1s/8000000= 0,125mks = 0.000125ms
Dim I As Byte , P As Integer , D As Integer ,
Config Portd = Output
Config Portb = Output
Reset Portb.0
P = 538
D = P * 2
Waitms 100
Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Prescale = 1
Pwm1a = 0
Do
Pwm1a = 128 : Waitus 8500                                   'вступление
Pwm1a = 0 : Waitus 4330
For I = 1 To 3                                              '000                               '0
    Pwm1a = 128 : Waitus P
  Pwm1a = 0 : Waitus P
Next I
Reset Portd.3 : Waitus D                                    ' 1
For I = 1 To 6                                              '00000
    Pwm1a = 128 : Waitus P
  Pwm1a = 0 : Waitus P
Next I
Pwm1a = 0 : Waitus D                                        ' 1
    Pwm1a = 128 : Waitus P
  Pwm1a = 0 : Waitus P
 Pwm1a = 0 : Waitus D
For I = 1 To 2                                              '000                               '0
    Pwm1a = 128 : Waitus P
  Pwm1a = 0 : Waitus P
Next I
For I = 1 To 5
Pwm1a = 0 : Waitus D                                        ' 1
  Pwm1a = 128 : Waitus P
  Pwm1a = 0 : Waitus P
Next I
   Pwm1a = 128 : Waitus P
  Pwm1a = 0 : Waitus P
  Pwm1a = 0 : Waitus D
  For I = 1 To 7                                            '00000
    Pwm1a = 128 : Waitus P
  Pwm1a = 0 : Waitus P
Next I
Pwm1a = 0 : Waitus D
  For I = 1 To 2                                            '00000
    Pwm1a = 128 : Waitus P
  Pwm1a = 0 : Waitus P
Next I
For I = 1 To 6
Pwm1a = 0 : Waitus D                                        ' 1
  Pwm1a = 128 : Waitus P
  Pwm1a = 0 : Waitus P
Next I
Pwm1a = 0 : Waitms 38 : Waitus 381
Pwm1a = 128 : Waitms 8 : Waitus 470
Pwm1a = 0 : Waitus 2170
Pwm1a = 128 : Waitus 500
Pwm1a = 0
Waitms 100
Loop

Кстати, никто не знает, возможно ли ШИМ на 36 кГц как-то настроить?

вроде бы и с 36 кгц разобрался

нужно после конфига ШИМ дописать
OCR1A = 111
ICR1 = 222

а вот и ссылка с подробным описанием моего велосипеда Протокол RC5 и реализация приема и передачи на atmega 8

Отредактировано Pasha (2013-03-18 02:18:55)

0

6

поищите в теме FastAVR мои сообщения
там было готовое

0

7

Pasha написал(а):

а вот и ссылка с подробным описанием моего велосипеда Протокол RC5 и реализация приема и передачи на atmega 8

Отредактировано Pasha (Сегодня 01:18:55)

БРР... ИЗВРАЩЕНЕЦ!!!!!! Если это RC5, то в Баскоме есть встроенные функции
RC5SEND (togglebit, address, command)
и RC5SENDEXT (togglebit, address, command)
почитай хэлп

0

8

Вообще чтобы не парится с заполнением в 36кГц, вроде бы есть контроллеры, например у Микрочипа (MCP2120).
Прелесть вся в том, что тупо выплёвываем данные из порта, а эта штука всё сама переваривает.
Она правда сделана для передачи данных в двух направлениях, но думаю возможно её приспособить для пультовых извращений...

0

9

Skull написал(а):

БРР... ИЗВРАЩЕНЕЦ!!!!!! Если это RC5, то в Баскоме есть встроенные функции
RC5SEND (togglebit, address, command)
и RC5SENDEXT (togglebit, address, command)
почитай хэлп

Да, я знаю что в васике есть библиотека RC-5. Но у меня другая ситуация. LG использует другой протокол, 32 битный. В отличии от 14битного как в RC-5. Поэтому статья очень к стати. На ее базе можно имитировать другие протоколы.

RDW написал(а):

вроде бы есть контроллеры

Настройка аппаратного ШИМ на 36 кГц:

Код:
$regfile = "m8def.dat"
$crystal = 8000000
Set Ddrb.1    ' включаем ногу аппаратного шима на выход. Далее в программе где нужно меняем set на reset и имеем выход меандра или 0 на ноге
Tccr1a = Bits(1 , 6 , 7) : Tccr1b = Bits(0 , 3 , 4)  
Ocr1a = 111  : Icr1 = 222
End

Отредактировано Pasha (2013-03-18 18:15:38)

0

10

Ребята еще вопрос: Как прочесть один бит байтовой переменной?

Код:
dim x as byte, i as byte
x= &B0100001
For i=0 to 7
print x.i ' это не работает
next

Отредактировано Pasha (2013-03-18 22:33:06)

0

11

Наложить маску со всеми нулями и 1 там, где нужно проверить бит. Выполнить операцию AND.
Например проверяем 3-й бит.

Dim X As Byte
Dim Y As Byte

Y=&B01101000
X=Y AND &B00001000

При этом переменная Х будет равна 0 если бит 3 = 0 и 8, если бит 3 равен 1. Таким же образом можно проверять несколько бит изменяя маску.

0

12

На сколько я помню, всё элементарно, частенько юзаю такой пример:

Код:
IF X.1 = 1 THEN...
....
PRINT X.1

Устанавливать или сбрасывать - так же.
Т.е. просто выбираемый бит указывается статикой, а не динамикой. Если нужна динамика, то как показал sva-don (операции с эндом).

Отредактировано RDW (2013-03-19 18:57:05)

0

13

sva-don написал(а):

Наложить маску со всеми нулями и 1 там, где нужно проверить бит. Выполнить операцию AND.

Спасибо большое. Все получилось

Печатаем каждый бит переменной в UART. После процедуры значение переменной сохраняется:

Код:
$regfile = "m48def.dat"                                     ' specify the used micro
$crystal = 8000000                                          ' used crystal frequency
Dim X As Byte , Y As Byte , I As Byte
Y = &B01101000                                              ' = 104
For I = 0 To 7
Rotate Y , Left
X = Y And &B00000001
Print X
Next
Print Y                                                     ' 104
End

0

14

Всем спасибо. Может кому пригодится результат. Телевизор -  LG 37LV3500. На пульте маркировка - AKB72915244. Программа постоянно отсылает код кнопки увеличения громкости:

Код:
'Программа эмуляции кнопки пульта ТВ LG. Код кнопок определял при помощи slyControl
'код кнопок отсылается в виде последовательности, состоящий из 32 бит.
'тут рассматриваю кнопку увиличения громкости
'Задержки P, 8500, 4330 подобраны эксперементально и годятся только конкретно для моей меги, работающие от внутреннего генератора на 8 МГц. На самом деле частота немного другая
' ИК диод должен быть припаян на минус и через резистор в 200 Ом на порт B.1. Лучше использовать транзистор.
$regfile = "m8def.dat"                                      ' мега8
$crystal = 8000000                                          ' 1 tik = 1s/8000000= 0,125mks = 0.000125ms
Dim I As Byte , Ii As Byte , X As Byte , Ir_key As Integer , Print_chr As Integer
Const P = 500 : Const T_vstuplenie = 4000                   ' Задержки в микросекундах для периода бит кода кнопки и для начальной кракозяблы
  Set Ddrb.0                                                ' тут сидит минус ИК диода. Проще схему паять в моем случае
  Set Ddrb.1 : Tccr1a = Bits(1 , 6 , 7) : Tccr1b = Bits(0 , 3 , 4) : Ocr1a = 0 : Icr1 = 222       ' настройка аппаратного ШИМа на 36 кГц для заполнения меандром посылаемых байт
Declare Sub Print_ir                                        ' оформляем подпрограмму отсылки ИК кода

Do
 Ir_key = &B0100000010111111                                ' присваиваем код кнопки
 Print_ir                                                   ' переходим в подпрограмму отсылки ИК кода
 Waitms 100
Loop
End

Sub Print_ir                                                ' подпрограмма отсылки ИК кода
Set Ddrb.1 : Waitus T_vstuplenie : Waitus T_vstuplenie : Reset Ddrb.1 : Waitus T_vstuplenie : Set Ddrb.1 : Waitus P : Reset Ddrb.1 : Waitus P       ' загагулина перед посылкой кода кнопки
Print_chr = &B0010000011011111                              ' первые 16 байт, общая часть для всех кнопок
For I = 0 To 1
  For Ii = 0 To 15                                          ' в этом цикле отсылаем на ИК диод поочередно каждый байт переменной
     Rotate Print_chr , Left
     X = Print_chr And &B0000000000000001                   ' определяем что слать по ИК 0 или 1 (разбираем  Print_chr по битам)
     If X = 1 Then : Waitus P : Waitus P : End If           ' если посылаем 1 то делаем двойную задержку перед периодом
                      Set Ddrb.1 : Waitus P                 '0 отсылка 0 - период без предзадержки
                      Reset Ddrb.1 : Waitus P

  Next
 Print_chr = Ir_key                                         ' по новой будем отсылать оставшиеся 16 бит кода кнопки
Next
End Sub                                                     'возврат в программу
Код:
Коды Кнопок
Вкл &H10ef
Energy &HA956
Avmode &H0CF3
Input &HD02F
TV/rad &H0FF0
1 &H8877
2 &H48b7
3 &HC837
4 &H28D7
5 &HA857
6 &H6897
7 &HE817
8 &H18E7
9 &H9867
0 &H08F7
list &HCA35
q.view &H58A7
vol+ &H40BF
vol- &HC03F
fav &H7887
ratio &H9E61
mute &H906F
p+ &H00FF
p- &H807F
guide &HD52A
home &HC23D
q.menu &HA25D
up &H02FD
dovn &H827D
left &HE01F
right &H609F
ok &H22DD
back &H14EB
info &H55AA
exit &H DA25
red &H4EB1
green &H8E71
yelou &HC639
blue &H8679
text &H04FB
t.opt &H847B
subtitle &H9C63
stop &H8D72
play &H0DF2
pause &H5DA2
<< &HF10E
>> &H718E
ad &H8976
SERVICE  &HFF00 'НЕДОКУМЕНТИРОВАННАЯ ФУНКЦИЯ, ТОЛЬКО ДЛЯ СЕРВИСНЫХ ЦЕНТРОВ!!!!!!! умельцы раньше при помощи этой кнопки вызывали сервисное меню и включали видиоплеер телека. Пароль для входа или 0000 или 0413

http://s3.uploads.ru/t/vqp3t.png

Отредактировано Pasha (2013-03-20 06:10:49)

0

15

Александр Д. написал(а):

поищите в теме FastAVR мои сообщения
там было готовое

Не заметил сообщения. Спасибо, нашел Ваш исходник. Ничего там не понял))) Не увидел там генерации 36 кГц. Да уже и свою программку наваять успел.


Очередной вопрос.
ПДУ Питается от батареек. Как опрашивать клавиатуру? Неужели диоды со всех кнопок на прерывания садить? Или все-таки время от времени просыпаться и проверять состояние кнопок? Как лучше/экономнее для батареек, чтоб комплекта на год хватало?

Отредактировано Pasha (2013-03-20 06:16:55)

0

16

Самый экномный, это кнопки на прерывание, большую часть времени будет спать, а если просыпаться, то сомнительная экономия...

0

17

У меня есть вопрос на засыпку:
Есть числа &B00000001, &B00000010...&B10000000
не подскажете как определить математикой порядковый номер единицы?

f(&B00000001)=1
f(&B10000000)=8

и как проверить что в числе только 1 единица?
f(&B00000001)=1
f(&B00100001)=0
f(&B01100000)=0

Заранее спасибо.

Отредактировано Pasha (2013-03-20 20:14:19)

0

18

Pasha написал(а):

Есть числа &B00000001, &B00000010...&B10000000не подскажете как определить математикой порядковый номер единицы?
            f(&B00000001)=1f(&B10000000)=8

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

Код:
Dim X As Byte , Y As Byte

X = 'Здесь значение, которое нужно проверять

Select Case X
 Case 1 : Y = 1
 Case 2 : Y = 2
 Case 4 : Y = 3
 Case 8 : Y = 4
 Case 16 : Y = 5
 Case 32 : Y = 6
 Case 64 : Y = 7
 Case 128 : Y = 8
End Select

Второй вопрос можно решить так.

Код:
X = 'Значение для проверки
If X = 1 Or X = 2 Or X = 4 Or X = 8 Or X = 16 Or X = 32 Or X = 64 Or X = 128 Then
 Y = 1
Else
 Y = 0
End If

Или так.

Код:
X = 'Здесь значение, которое нужно проверять

Select Case X
 Case 1 : Y = 1
 Case 2 : Y = 1
 Case 4 : Y = 1
 Case 8 : Y = 1
 Case 16 : Y = 1
 Case 32 : Y = 1
 Case 64 : Y = 1
 Case 128 : Y = 1
 Case Else: Y = 0
End Select

Отредактировано sva-don (2013-03-20 21:03:30)

0

19

Мне это первое в голову пришло :glasses:

Код:
For A = 0 To 7
If F.0 = 1 Then
Incr X                                                      'количество единиц
Y = A                                                       'порядковый номер едениц
End If
Shift F , Right , 1
Next

0

20

Это все хорошо, хотелось бы проще.

&B1000 0000 = 128 = 2^7
&B0100 0000 =   64 = 2^6
....
&B0000 0010 = 2 = 2^1
&B0000 0001 = 1 = 2^0

степень и есть порядковый номер от 0 до 7.

Вспоминаем математику эдак за 10 класс.

a^x=b

x = log(a)b (логарифм b с основанием а)

Отсюда вытекает следующий вопрос:

Как в васике посчитать логарифм 128 с основанием 2?
Видел функции только десятичного и натурального логарифма. Свое основание вроде как ставить увы нельзя.

Поискал - нашел ответ.
И так. (барабанная дробь).
&B1000 0000 = 128 = 2^7
Степень = ln(128)/ln(2)=7

Код:
x= &B10000000 
Number_x= ln(x)/ln(2)' x=7

Эх. К черту логарифмы, они жрут памяти и тактов больше чем джип.

окончательное решение задачи (напомню - посчитать порядковый номер единичке в байтовом числе от 1 до 8 и отреагировать если число единичек отличается от одной):

Код:
X = &B00010000                                                       'неизвестная
Number_x = 0                                                ' переменная, которая будет выдавать  какая же единичка присутствует с 1й по 8ю. Если все нули или более одной единиц то переменная должна выдавать 0
For I = 0 To 7
Z = 2 ^ I                                                   ' в математике называется потенцирование,обратное действие логарифму
If Z = X Then : Number_x = I + 1 : Exit For : End If        'есле результат потенцирования совпал с иксом то присваиваем эту степень+1 конечному результату и выходим из цикла
Next
Print Number_x

Отредактировано Pasha (2013-03-21 00:49:42)

0

21

Ну и вот к чему все эти логарифмы, вычисления и пр...

Обработка матрицы из 64 кнопок, подключенная к двум портам МК:

Код:
'Подключение матрицы из 64 кнопок на два порта (B, D) микроконтроллера БЕЗ РЕЗИСТОРОВ, Питание кнопок организованно через внутренние "подтягивающие" резисторы МК.
'Код не боится одновременного нажатия двух кнопок (никаких замыканий не будет). Одновременное нажатие проигнорируется, но сработает сначала на первую из двух нажатых а затем на ту, которая была отпущена последней
'e-mail: P-a-h-a@yandex.ru
'Код выполняет опрос кнопок и выдает координаты нажатой кнопки в двух переменных по оси Х и по оси У (как в экселе столбци и строки)
'В железе не тестировался, в протеусе работает хорошо. Возможно для корректной работы в железе прийдется поставить задержки перед строкой X = Pinb Xor &B11111111 : Portb = 0 и перед  X = Pind Xor &B11111111 : Portd = 0
$regfile = "m8def.dat"                                      ' мега8
$crystal = 1000000
Open "comc.0:9600,8,n,1" For Output As #1                   ' для тестирования вывожу коды кнопок в софтовый уарт, т.к. аппаратный занят
Dim Number_x As Byte , Number_y As Byte , I As Byte , Z As Byte , X As Byte
Declare Sub Test_keyboard(byval I As Byte , Byval Z As Byte , Byval X As Byte)       ' Byval для того чтоб эти переменные не изменялись в подпрограмме и их можно было спокойно использовать в основном цикле


 Do                                                         'основной цикл
  Call Test_keyboard(i , Z , X)                             'вызов процедуры обработки кнопок, ее можно повесить на таймер
  If Number_x > 0 Then Print #1 , "Number_x= " ; Number_x ; " Number_y= " ; Number_y       'если код кнопки отличный от ноля то выводим результат, иначе кнопка не нажата
 Loop
End



Sub Test_keyboard(byval I As Byte , Byval Z As Byte , Byval X As Byte)       'процедура обработки кнопок
 Portd = 0 : Ddrd = 255 : Ddrb = 0 : Portb = 255            'конфиг портов на вход и выход + включение подтяжек на входах
  Number_x = 0                                              'переменная, которая будeт выдавать строку нажатой кнопки. Если нули - то кнопки отпущены
  X = Pinb Xor &B11111111 : Portb = 0                       'функция Xor инвертирует 0 и 1 числа. X = &B01111111 Xor &B11111111 результат &B10000000
  If X = 0 Then : Number_x = 0 : Number_y = 0 : Goto Vernutsja : End If       ' если не нажата ни одна кнопка то возвращаем коды кнопок - нули и  пропускаем вычисления
   For I = 0 To 7
       Z = 2 ^ I                                            ' в математике называется потенцирование,обратное действие логарифму
       If Z = X Then : Number_x = I + 1 : Exit For : End If 'есле результат потенцирования совпал с иксом то присваиваем эту степень+1 конечному результату и выходим из цикла
   Next
 Portb = 0 : Ddrd = 0 : Ddrb = 255 : Portd = 255            'Меняем местами порты В и D
  Number_y = 0
  X = Pind Xor &B11111111 : Portd = 0
 If X = 0 Then : Number_x = 0 : Number_y = 0 : Goto Vernutsja : End If       ' если кнопку уже отпустили то возвращаем коды кнопок - нули и  пропускаем вычисления
   For I = 0 To 7
        Z = 2 ^ I
        If Z = X Then : Number_y = I + 1 : Exit For : End If
   Next
 Vernutsja:
End Sub

http://s2.uploads.ru/t/nmwDb.jpg

Отредактировано Pasha (2013-03-21 03:07:28)

0

22

Вот это намудрил. А так не проще?

Код:
Sub KeyScan
 ddrb = &B00000000                                         'PB на ввод
 portb = &B11111111                                         'Подключим резисторы
 waitms 100
 Stro = pinb                                                     'Первый код
 ddrd = &B00000000                                         
 portd = &B11111111                                         
 waitms 100
 Col = pind                                                      'Второй код
 Key = Stro + Col
End Sub

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

Отредактировано sva-don (2013-03-24 11:08:37)

0