Например TDA7294

Форум РадиоКот • Просмотр темы - PureBasic для PC
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Сб апр 20, 2024 16:07:19

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 128 ]    , , 3, , , ,  
Автор Сообщение
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Ср фев 25, 2009 19:38:08 
Прорезались зубы

Зарегистрирован: Сб мар 10, 2007 20:05:39
Сообщений: 225
Откуда: валуйки
Рейтинг сообщения: 0
Ура заработало :)) Большое спасибо. Но есть одно но
Цитата:
Я так понял что обмениватся нужно только текстовыми сообщениями.
текстовыми сообщениями обмен идет во время наладки а в нормальном режиме это будут кнопки, как бы их теперь приладить к программе например кнопка отправляющая код цифры 1 и кнопка отправляющая код цифры 0. Всё оставляем как есть просто в эту прогу добавить еще две кнопки и это будет отличный пример для начального старта и самостоятельного развития программы.
За ранее спасибо
PS в чем была разница между преведушей простейшей прогой и этой терменальной почему коды от той неусваивались контроллером а эти на ура???


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Ср фев 25, 2009 20:13:03 
Потрогал лапой паяльник

Зарегистрирован: Вс мар 30, 2008 14:31:51
Сообщений: 331
Рейтинг сообщения: 0
Хорошо, допустим, в программе есть некоторое число кнопок, щелчёк по которым передаёт один или несколько зарание оговореных байт.
Что будет программа принимать от устройства текст или произвольные данные и в каких количествах и что потом с ними делать?


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Ср фев 25, 2009 20:39:59 
Прорезались зубы

Зарегистрирован: Сб мар 10, 2007 20:05:39
Сообщений: 225
Откуда: валуйки
Рейтинг сообщения: 0
программа на текст никак неведется только на цифровые значения програма загружиная в контролер представляет собой систему ДУ кааким либо внешним устройством тоесть лампочки с компа жажигаем светодиоды хоть что например при помощи нехитрых внешних навесок в виде регистров на мегу управляем новогодней илиминацией ну эт все на будущее програма на пурике должна принимать ответ в тексте как и сейчас она его принемает в виде Set slat to 1. Set bank to 1 Fire cue to 1 кстати прога сейча невыводит Fire cue to 1 но на мониторе последовательного порта я вижу что этот ответ приходит из контролера в комп Просто для начала добавить две кнопки отправка числа 1 и отправка числа 0 для понимания сути дела
Я вот подум и пришол к выводу что окно этой програмы вызывалось при выборе в меню тестового режима а в нормальном состоянии это были кнопки и окно текстовых ответов контролера как думаете это реально сделать ? можно применить билиотеку петра хр меню для создания миню программы


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Ср фев 25, 2009 20:58:04 
Потрогал лапой паяльник

Зарегистрирован: Вс мар 30, 2008 14:31:51
Сообщений: 331
Рейтинг сообщения: 0
Цитата:
прога сейча невыводит Fire cue to 1 но на мониторе последовательного порта я вижу что этот ответ приходит из контролера в комп
Наверно из-за того, что при передаче инфы встретился код 0 (не число а именно код). Это признак конца строки и программа решает что все данные переданы.
В принципе это этого можно отказатся, только как тогда программа узнает что все данные переданы?

Цитата:
Просто для начала добавить две кнопки отправка числа 1 и отправка числа 0 для понимания сути дела
Добавил. :)

В программе добавились две кнопки (строки 101 и 102) и их обработчики событий (строки 133-140 и 142-149)


Вложения:
COM_IO_1.rar [14.62 KiB]
Скачиваний: 406
Вернуться наверх
 
Выбираем схему BMS для заряда литий-железофосфатных (LiFePO4) аккумуляторов

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

Подробнее>>
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Ср фев 25, 2009 22:52:49 
Прорезались зубы

Зарегистрирован: Сб мар 10, 2007 20:05:39
Сообщений: 225
Откуда: валуйки
Рейтинг сообщения: 0
Спасибо буду ознакамливатся
PS у вас нет случаем кода проигрывателя чтоб встроит в программу???? Есть мысль зделать все это безобразие синхронизировать с музыкальной фонограммой.


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

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

Подробнее>>
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Ср фев 25, 2009 23:01:18 
Потрогал лапой паяльник

Зарегистрирован: Вс мар 30, 2008 14:31:51
Сообщений: 331
Рейтинг сообщения: 0
Проигрывать музыку можно, но вот с синхронизацией сложнее будет


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Ср фев 25, 2009 23:04:06 
Прорезались зубы

Зарегистрирован: Сб мар 10, 2007 20:05:39
Сообщений: 225
Откуда: валуйки
Рейтинг сообщения: 0
я просто хочу сделать свой собственный пиромузыкальный контролер и на новый год развлекатся там идет синхранизация времени фонограммы и управления каналами
время и канал записано в таблицу наподобие как у вас сделано в упрвление машинкой с компа

Добавлено позже
я тут скрестил эту прогу терминал с вашей прогой управления машинкой почти добился успеха сейчас выкавыриваю последнии баги если терпения хватит :)


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Пт фев 27, 2009 19:53:20 
Прорезались зубы

Зарегистрирован: Сб мар 10, 2007 20:05:39
Сообщений: 225
Откуда: валуйки
Рейтинг сообщения: 0
обнаружил глюк программа отсылает не все возможные коды в контролер например вот
Цитата:
Порт открыт процессом "GBFFireLaunch.exe" (PID: 3032)
Тут выбирался - 0 слот, банк А, канал 1.
Запись
30 39 31 значение кода 091
чтение
20 56 69 62 72 61 6E 20 53 6C 6F 74 20 30 2E 20 Vibran Slot 0.
56 69 62 72 61 6E 20 62 61 6E 6B 20 41 2E 20 50 Vibran bank A. P
75 73 6B 20 4B 61 6E 61 6C 20 31 0D 0A usk Kanal 1..
Тут выбирался - 0 слот, банк B, канал 1.
Запись
30 41 31 значение кода 0A1
Тут выбирался - 0 слот, банк C, канал 1.
Запись
30 42 31 значение кода 0B1
Тут выбирался - 0 слот, банк D, канал 1.
Запись
30 43 31 значение кода 0C1

Ворт к примеру это программа отослать неможет 30 41 31 значение кода 0A1

как заставить программу отсылать эти числа ???


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Пт фев 27, 2009 20:02:22 
Потрогал лапой паяльник

Зарегистрирован: Вс мар 30, 2008 14:31:51
Сообщений: 331
Рейтинг сообщения: 0
В программе нет никаких фильтров на передачу информации.
Что в ведено, то и передаётся в порт.
Или имеешь в виду что не можешь ввести код 0A1


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Пт фев 27, 2009 22:37:27 
Прорезались зубы

Зарегистрирован: Сб мар 10, 2007 20:05:39
Сообщений: 225
Откуда: валуйки
Рейтинг сообщения: 0
да в поле можно вводить только цифры
ВОПРОС СНИМАЕТСЯ ВБИЛ НАПРЯМУЮ В ПРОГРАММУ ЧИСЛО 1A1 ПРИВЯЗАЛ К КНОПКЕ НОМЕРПРОШЛОЛ


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Пт фев 27, 2009 22:44:03 
Потрогал лапой паяльник

Зарегистрирован: Вс мар 30, 2008 14:31:51
Сообщений: 331
Рейтинг сообщения: 0
Чтобы можно было бы в водить буквы нужно убрать флаг #PB_String_Numeric у функции StringGadget, находящейся в 96 строке.
Т. е. должно быть так
Код:
StringGadget(5,10,58,300,20,"") ; Поле ввода чисел


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Пт фев 27, 2009 22:59:41 
Прорезались зубы

Зарегистрирован: Сб мар 10, 2007 20:05:39
Сообщений: 225
Откуда: валуйки
Рейтинг сообщения: 0
А МОЖНО ФРАГМЕНТ КОДА ГДЕ НЕ КНОПКИ А КВАДРАТНЫЕ ОКОШКИ ЧТОБ ГАЛОЧКИ СТАВИТЬ

ДОБАВЛЕНО ПОЗЖЕ
Созрел еще вопрос как можно сделать чтоб при выборе пункта меню открывалось воторое окно в котором будет находиться скажем куча кнопок ручного управления чтоб не мазолили на переднем фоне основной прораммы а появлялись только когда надо тоесть при выборе в меню этого окна


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Сб фев 28, 2009 14:38:32 
Потрогал лапой паяльник

Зарегистрирован: Вс мар 30, 2008 14:31:51
Сообщений: 331
Рейтинг сообщения: 0
Цитата:
А МОЖНО ФРАГМЕНТ КОДА ГДЕ НЕ КНОПКИ А КВАДРАТНЫЕ ОКОШКИ ЧТОБ ГАЛОЧКИ СТАВИТЬ


Код:
If OpenWindow(0, 200, 200, 200, 100,"CheckBoxGadget",#PB_Window_MinimizeGadget)
 If CreateGadgetList(WindowID(0))

  ; Создаём гаджет
  CheckBoxGadget(0, 10,  30, 250, 20, "Птички нет")

 Repeat
 Event=WaitWindowEvent()
 Gadget=EventGadget()

; Обработка событий от гаджета с идентификатором 0
 If Event=#PB_Event_Gadget And Gadget=0
 ; Проверяем есть ли птичка? Если 0 значит нет, если 1 птичка есть
  Ptihka=GetGadgetState(0)
  If Ptihka=0
; Этот код выполняем, если в переменной Ptihka число равное нулю
; Записываем в гаджет с идентификатором 0, текст
    SetGadgetText(0,"Птички нет")
  Else
; Этот код выполняем, если в переменной Ptihka число отличное от нуля
; Записываем в гаджет с идентификатором 0, текст
   SetGadgetText(0,"Птичка есть")
  EndIf
 EndIf

 Until Event=#PB_Event_CloseWindow

EndIf
EndIf
End



Программно птичка ставится с помощью кода
Код:
SetGadgetState(Gadget , 1)
а сбрасывается с помощью
Код:
SetGadgetState(Gadget , 0)
где Gadget - идентификатор, который присвоен окошку для галочки.
Например, в коде, выложеном выше, идентификатор равен нулю

Скачайте этот учебник
Там в папке \Программы\Гаджет\Примеры есть примеры.

Цитата:
как можно сделать чтоб при выборе пункта меню открывалось воторое окно в котором будет находиться скажем куча кнопок ручного управления


Код:
If OpenWindow(0, 200, 200, 290, 130,"Меню",#PB_Window_MinimizeGadget)
 If CreateGadgetList(WindowID(0))
 ; Создаём меню
  If CreateMenu(0,WindowID(0))
   ; Создаём новый заголовок меню
   MenuTitle("Файл")
    ; Создаём пункты меню
    MenuItem(0,"Открыть")
    MenuItem(1,"Сохранить")
    ; Разделитель между меню
    MenuBar()
    MenuItem(2,"Выход")
    ; Создаём новый заголовок меню
   MenuTitle("Справка")
    MenuItem(3,"О программе")
  EndIf

 Repeat
  Event=WaitWindowEvent() ; Узнаём текущее событие в программе
  Gadget=EventGadget() ; Идентификатор гаджета, в котором произошло событие
  Menu=EventMenu()  ; Получаем идентификатор активного пункта меню
  Window=EventWindow() ; Мдентификатор активного окна
 
  If Window=0 ; События главного окна
   
      If Event=#PB_Event_Menu ; Условие будет выполнено, если произойдёт событие в меню
        Select Menu ; Запоминаем идентификатор меню для последующего сравнения в операторах Case
          Case 0 ; Произошло событие в пункте и идентификатором 0
           MessageRequester("Меню","Пункт 'Открыть'")
          Case 1 ; Произошло событие в пункте и идентификатором 1
           MessageRequester("Меню","Пункт 'Сохранить'")
          Case 2 ; Произошло событие в пункте и идентификатором 2
            Break ; Это прервёт главный цикл и программа закроется
          Case 3 ; Произошло событие в пункте и идентификатором 3
           
            ; Создаём окно "О программе"
            If OpenWindow(1, 0, 0, 130, 50,"О програме",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
             If CreateGadgetList(WindowID(1))
               ButtonGadget(1,30,10,80,30,"Закрыть")           
             EndIf
            EndIf
             
             
             
        EndSelect ; Этот оператор завершает операцию выбора, начатую оператором Select
      EndIf
     
  ElseIf Window=1 ; События дополнительного окна "О программе"
     If Event=#PB_Event_CloseWindow ; Событие закрытия окна
       CloseWindow(1) ; Закрываем окно с идентификатором 1
     EndIf
     
     If Event=#PB_Event_Gadget ; Событие в гаджете
       If Gadget=1 ;Идентификатор заджета равен 1, т. е. это кнопка "Закрыть"
         CloseWindow(1) ; Закрываем окно с идентификатором 1
       EndIf
     EndIf
  EndIf
 
 
 Until Event=#PB_Event_CloseWindow And Window=0 ; Цикл прервётся при закрытии главного окна
 
 EndIf
EndIf
End


При щелчке по пункту меню "О программе", откроется окно с одной кнопкой.

Я так понимаю что это будет окно настроек.
Поэтому перед закрытием окна нужно будет прочитать состояния всех кнопок, окошек для галочек ну, и т. д. и сохранить в переменных.
В большенстве случаев для чтения используется функция GetGadgetState(Gadget), но если нужно прочитать текст, следует использовать функцию GetGadgetText(Gadget)


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Вс мар 01, 2009 17:50:05 
Прорезались зубы

Зарегистрирован: Сб мар 10, 2007 20:05:39
Сообщений: 225
Откуда: валуйки
Рейтинг сообщения: 0
И снова я пристаю с воросами извените уж учусь.
Встала задача подключить к контролеру уневерсальный регистр 74hc595 даже два соединеных каскадом для увеличения количества выходов до 16 вот схемма
Изображение

Вот ссылка на таблицу данных и управляющих логических уровней для этого регистра которую я составил по результатам тестирования в протеусе http://alexval2007.ucoz.ru/Statia/74hc595.htm

В приведенной последовательности данных отсылаемых на регистры мы видим что стоят логические 1 напротив выхода 16, 1, 8, 9. в строке данные а также стоят логические еденицы в строке CLK под каждым лог 1 или лог 0 строки данных после каждога импульса даных сопровождаемых импульсом синхронизации CLK идет импульс записи данных в регистр врезультате всех действий приведенных в таблице зажигаются светодиоды HL1, HL8, HL9, HL16.

Суть вопроса как управлять этим регистром исходя из таблицы данных в пурике помогите пожалуста разобратся я так понял что для передачи данных в регистр мне потребуется два байта по 8 бит. Я прав ? если прав как это все будет выглядеть просто вносим в строку уже приведеной программы данные 11000000бит 11000000бит при переводе на шестнадцатиричный счёт CO а в переводе на десятичный 192 но на мо идеи нужен шестнадцатиричный вариант??? а ещё нужно учеть передачу импульсов синхронизации и записи в регистр какие будут предложения


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Вс мар 01, 2009 20:26:13 
Потрогал лапой паяльник

Зарегистрирован: Вс мар 30, 2008 14:31:51
Сообщений: 331
Рейтинг сообщения: 0
Честно говоря я так и не понял к чему будет подключатся эта схема...
Судя по началу, она подключается к контроллеру, который с вою очередь подключён к компу.
Но тогда не совсем понятен вопрос. Судя по вопросу у меня сложилось впечатление что схема подключается в COM или LPT порту...

Добавлено
Кажется понял
Имелось в виду ввод не текста, а двоичных или шестнадцатиричных числел этих двух передаваемых байт?
Я прав?


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Вс мар 01, 2009 20:58:36 
Прорезались зубы

Зарегистрирован: Сб мар 10, 2007 20:05:39
Сообщений: 225
Откуда: валуйки
Рейтинг сообщения: 0
я хочу подключить ее к контролеру конешно для расширения выходов контролер подключен ком порту и играет роль преобразователя потомушто у меня вертуальный ком порт стоит микруха FTDI преобразователь USB/com на контролер прогу пириписывать придется от этого никуда недется. Но ладно на контролер я перепишу прогу а что слать на это контролер к которому буду подключены эти регистры чтоб это все заработало суть подаваемых логический сигналов я изложил как заставить пурик отправлять нужное но контролер прото я не доконца представляю этот процес вобше я видел схему управления этим регистрами через ЛПТ порт но весь шык в том чтоб это был виртуальный СОМ порт а это означает что это USB ЛПТ и СОМ отмирают на сегодняшний день компютора и невезде их найдеш. Может сделать на контролере виртуальный ком порт ил штото типа того Ну полюбому там будет вестись последовательно - паралельное преобразование кода
Да нужно отправить или двочное или шестнадцатиричное число в порт чтоб управлять регистровой парой у нас получается 16битный код если я не ошибаюсь при этом еще нужно отправлять сигнал синхронизации и сигнал записи в регистр Я так понимаю что контрорлер будет пиревалочной базой тоесть принел последовательный код с компа преобразовал его в паралельный код это данные я думаю тактовые импульсы можно с компа не слать а например на контролере их реализовать програмно с передачей каждого бита данных а вот сигнал записи в регистр незнаю толи с контролера толи с компютора наверно можно на контролере тоже раализовать

Добавлено
Еще раз подумал да скорей всего придется на контролере делать преобразователь с последовательного кода в паралельный


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Пн мар 02, 2009 20:25:08 
Потрогал лапой паяльник

Зарегистрирован: Вс мар 30, 2008 14:31:51
Сообщений: 331
Рейтинг сообщения: 0
Я чё-то не понял, куда делось моё сегодняшнее сообщение?


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Пн мар 02, 2009 23:33:23 
Прорезались зубы

Зарегистрирован: Сб мар 10, 2007 20:05:39
Сообщений: 225
Откуда: валуйки
Рейтинг сообщения: 0
Мое утрешнее мур-мяу тоже пропало. Вопрос был таков как в программе риализовать некоторое количество таймеров для задержки на выполнение команды каждой команде свой таймер задержки. Отсчет сразу всех таймеров начинается сразу по нажатию кнопки старт. Отсчет в сикундах и минутах к примеру задано в текстовом файле с командами s1,b1,k1,115. Это значит слот 1, банк 1, канал 1, 1 : 15 время минуты секунды. Так вот по достижению таймера времени уставки 1 : 15 чтоб произошло выполнение команды а имено отправки в com порт трех байт заданных в команде s, b, k - 1 1 1. Даные команды я думаю хранить в текстовом файле по аналогии с управлением машинкой с компа. Только мне неясна там необходимость задержки 60сек перед запуском программы после чтения файла команд. Что касается моего вопроса в посте выше предлагаю его пока отложить пока я ненапишу новую программу для контроллера.


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Вт мар 03, 2009 14:17:22 
Потрогал лапой паяльник

Зарегистрирован: Вс мар 30, 2008 14:31:51
Сообщений: 331
Рейтинг сообщения: 0
Я так понимаю отсчёты нужно делать одновременно.
Зарание количество требуемых таймеров неизвестно.

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

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

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Вт мар 03, 2009 15:53:27 
Прорезались зубы

Зарегистрирован: Сб мар 10, 2007 20:05:39
Сообщений: 225
Откуда: валуйки
Рейтинг сообщения: 0
У буржуев в программах используется табличный файл с настройками и там вбивается время в формате минуты :секунды - №слота-№банка-№канала. и пояснительная информация ппросто текст для оператора
формат такой 12:15,1,2,3.текст где первое время 12мин 15сек далее номер слота номер банка номер канала по достижению времени таймера 12:15 отправляем из этой строки данные в COM порт три байта 123. В программе может быть таймеров от 1 до дескольких десятков к примеру от 1 до 100 тоесть в таблице со сценарием (файл команд) сто строк каждая заполненая строка должна иметь свой таймер отсчет всех таймеров начинается по нажатию кнопки Старт вот как то так.
И еще вопросик теперь о эстетической привлекательности программы вот скрин буржуйской программы меня интересуют таймеры в левой чати картинки. ак добится нечто похожего это идет отсчет общего времени до окончания программы и реального времени
Изображение


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 128 ]    , , 3, , , ,  

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 11


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

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y