Например TDA7294

Форум РадиоКот • Просмотр темы - WatchDog Timer Сторожевой таймер в AVR
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Вт апр 16, 2024 22:47:48

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


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



Начать новую тему Ответить на тему  [ Сообщений: 228 ]  1, , , , ...  
Автор Сообщение
Не в сети
 Заголовок сообщения: WatchDog Timer Сторожевой таймер в AVR
СообщениеДобавлено: Вс ноя 19, 2006 14:23:38 
Нашел транзистор. Понюхал.
Аватар пользователя

Карма: -1
Рейтинг сообщений: -1
Зарегистрирован: Пт ноя 10, 2006 16:50:24
Сообщений: 184
Откуда: Россия Крым Феодосия
Рейтинг сообщения: 0
WatchDog Timer - что это?
Обьясните что это такое как можно проще.
(использую tini13, и прогу AlgorithmBuilder)

_________________
Тот кто впереди, всегда боится отстать, - это наш шанс, вот так то.


Последний раз редактировалось Gudd-Head Пт фев 07, 2014 13:41:14, всего редактировалось 2 раз(а).
Тему прилепил


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Пн ноя 20, 2006 07:39:01 
Нашел транзистор. Понюхал.
Аватар пользователя

Зарегистрирован: Чт янв 12, 2006 00:17:30
Сообщений: 186
Откуда: Новосибирск, ИФП СО РАН
Рейтинг сообщения: 0
Так называемый сторожевой таймер. Если он включен, то по его переполнению контроллер сбрасывается. Нужен чтобы зависаний не было. Програмно может обнулятиься.


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Чт ноя 23, 2006 22:07:58 
Нашел транзистор. Понюхал.
Аватар пользователя

Карма: -1
Рейтинг сообщений: -1
Зарегистрирован: Пт ноя 10, 2006 16:50:24
Сообщений: 184
Откуда: Россия Крым Феодосия
Рейтинг сообщения: 0
Все спасибо, уже пошел делать.

_________________
Тот кто впереди, всегда боится отстать, - это наш шанс, вот так то.


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

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

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: ATtiny24 не стартует WDT...
СообщениеДобавлено: Ср дек 05, 2012 20:35:55 
Друг Кота
Аватар пользователя

Карма: 46
Рейтинг сообщений: 590
Зарегистрирован: Вт май 19, 2009 09:27:30
Сообщений: 3258
Откуда: Украина
Рейтинг сообщения: 0
Здравствуйте, Братья по паяльнику!
Ваяю один полезный "девайсик" с батарейным питанием. Основа - ATtiny24. Данный МК выбрал за его мелкоту, наличие АЦП и относительно невысокую цену. Но вот засада - аппаратный INT, способный выводить данный МК из "глубокой спячки" только один, что для моего случая не достаточно. Внимание привлёк WDT с возможностью не только давать сброс, но и прерывание, способное пробудить ядро МК. По пробуждению решил задать опрос нужных портов и потом, если что, снова отправлять МК в "спячку".
Попытался запустить WDT, создав проект в CV AVR и выставив все нужные опции при помощи "Визарда". Получилось следующее:

Спойлер
Код:
#include <tiny24.h>   
#include <delay.h>   


#define red PORTB.2
#define yellow PORTB.1
#define green PORTB.0
#define left PINA.5
#define right PINA.6




// Watchdog timeout interrupt service routine
interrupt [WDT] void wdt_timeout_isr(void)
{
WDTCSR|=0x40;
// Place your code here
yellow=1;
//delay_ms(10);
//yellow=0;
}

#include <delay.h>

#define ADC_VREF_TYPE 0xC0

// ADC interrupt service routine
interrupt [ADC_INT] void adc_isr(void)
{
unsigned int adc_data;
// Read the AD conversion result
adc_data=ADCW;
// Place your code here

}

// Declare your global variables here

void main(void)
{
// Declare your local variables here

// Crystal Oscillator division factor: 1
#pragma optsize-
CLKPR=0x80;
CLKPR=0x00;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif

// Input/Output Ports initialization
// Port A initialization
// Func7=Out Func6=In Func5=In Func4=In Func3=Out Func2=In Func1=In Func0=In
// State7=0 State6=P State5=P State4=T State3=0 State2=T State1=T State0=T
PORTA=0x60;
DDRA=0x88;

// Port B initialization
// Func3=In Func2=Out Func1=Out Func0=Out
// State3=T State2=0 State1=0 State0=0
PORTB=0x00;
DDRB=0x07;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 8000,000 kHz
// Mode: Fast PWM top=FFh
// OC0A output: Disconnected
// OC0B output: Non-Inverted PWM
TCCR0A=0x23;
TCCR0B=0x01;
TCNT0=0x00;
OCR0A=0x00;
OCR0B=0x64;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer 1 Stopped
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

// External Interrupt(s) initialization
// INT0: Off
// Interrupt on any change on pins PCINT0-7: Off
// Interrupt on any change on pins PCINT8-11: Off
MCUCR=0x00;
GIMSK=0x00;

// Timer/Counter 0 Interrupt(s) initialization
TIMSK0=0x00;
// Timer/Counter 1 Interrupt(s) initialization
TIMSK1=0x00;

// Universal Serial Interface initialization
// Mode: Disabled
// Clock source: Register & Counter=no clk.
// USI Counter Overflow Interrupt: Off
USICR=0x00;

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
ADCSRB=0x00;

// ADC initialization
// ADC Clock frequency: 1000,000 kHz
// ADC Voltage Reference: 1.1V, cap. on AREF
// ADC Bipolar Input Mode: Off
// ADC Auto Trigger Source: None
// Digital input buffers on ADC0: Off, ADC1: Off, ADC2: Off, ADC3: On
// ADC4: On, ADC5: On, ADC6: On, ADC7: On
DIDR0=0x07;
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0x8B;
ADCSRB&=0x7F;
ADCSRB|=0x10;

// Watchdog Timer initialization
// Watchdog Timer Prescaler: OSC/8k
// Watchdog Timer interrupt: On
#pragma optsize-
#asm("wdr")
WDTCSR=0x1A;
WDTCSR=0x4A;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif

// Global enable interrupts
#asm("sei")

while (1)
      {
      // Place your code here

      };
}

Но единица на соответствующем порту так и не появляется, то есть программа никогда не попадает в обработчик прерывания от WDT. Сброс МК тоже не происходит (пробовал по нажатию кнопок менять ШИМ). Думал, может чего с самим МК не так, попытался запустить в "Протеусе" - ситуация аналогичная.
Помогите, пожалуйста, разобраться.


Вернуться наверх
 
Организация питания на основе надежных литиевых аккумуляторов EVE и микросхем азиатского производства

Качественное и безопасное устройство, работающее от аккумулятора, должно учитывать его физические и химические свойства, профили заряда и разряда, их изменение во времени и под влиянием различных условий, таких как температура и ток нагрузки. Мы расскажем о литий-ионных аккумуляторных батареях EVE и нескольких решениях от различных китайских компаний, рекомендуемых для разработок приложений с использованием этих АКБ. Представленные в статье китайские аналоги помогут заменить продукцию западных брендов с оптимизацией цены без потери качества.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: ATtiny24 не стартует WDT...
СообщениеДобавлено: Сб дек 08, 2012 18:32:39 
Открыл глаза

Карма: 2
Рейтинг сообщений: 7
Зарегистрирован: Вт мар 20, 2012 07:16:43
Сообщений: 47
Рейтинг сообщения: 0
Возможно выставлены неправильные настройки сторожевого таймера, в СИшном коде мало понимаю. Скинул скриншот с настройками из книги "Микроконтроллеры AVR семейств Tiny Руководство пользователя". В Протеусе есть пошаговая отладка, не пробовал там смотреть чем занят микроконтроллер?


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

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

Подробнее>>
Не в сети
 Заголовок сообщения: Re: ATtiny24 не стартует WDT...
СообщениеДобавлено: Вс дек 09, 2012 02:50:06 
Друг Кота
Аватар пользователя

Карма: 46
Рейтинг сообщений: 590
Зарегистрирован: Вт май 19, 2009 09:27:30
Сообщений: 3258
Откуда: Украина
Рейтинг сообщения: 0
Благодарю за ответ.
В качестве настройки в регистр таймера последовательно записываются два значения
WDTCSR=0x1A;
WDTCSR=0x4A;
затем разрешается глобальный флаг прерываний
#asm("sei")
Но, похоже, что этого не достаточно и нужно ещё где-то чего-то разрешить.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ATtiny24 не стартует WDT...
СообщениеДобавлено: Вс дек 09, 2012 19:27:22 
Открыл глаза

Карма: 2
Рейтинг сообщений: 7
Зарегистрирован: Вт мар 20, 2012 07:16:43
Сообщений: 47
Рейтинг сообщения: 0
ELcat:
WDTCSR=0x4A=1001010;

WDIF-WDIE-WDP3-WDCE-WDE-WDP2-WDP1-WDP0
0______1____ 0_____0____1____0_____1____0

Бит WDIE - разрешение прерывания от сторожевого таймера.
Бит WDE - должен быть сброшен в 0. См. файл который я прикреплял, он взят из книги "Микроконтроллеры AVR семейств Tiny Руководство пользователя.djvu".

P.S. извиняюсь, в первый раз переклинило, перепутал малость :shock:


Последний раз редактировалось стьюдент Вс дек 09, 2012 22:52:51, всего редактировалось 1 раз.

Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ATtiny24 не стартует WDT...
СообщениеДобавлено: Вс дек 09, 2012 21:27:25 
Друг Кота
Аватар пользователя

Карма: 46
Рейтинг сообщений: 590
Зарегистрирован: Вт май 19, 2009 09:27:30
Сообщений: 3258
Откуда: Украина
Рейтинг сообщения: 0
стьюдент писал(а):
WDIF-WDIE-WDP3-WDCE-WDE-WDP2-WDP1-WDP0
0______0____ 1_____0____0____0_____1____0
Не догнал...
Ты пишешь, что WDTCSR=0x4A=1001010; и тут же рисуешь биты 0010 0010, что в hex будет 0х22, почему??? Там что, записью "1" меняется состояние на противоположное? Поясни, пожалуйста.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ATtiny24 не стартует WDT...
СообщениеДобавлено: Вс дек 09, 2012 21:33:54 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 21
Рейтинг сообщений: 143
Зарегистрирован: Сб фев 21, 2009 13:11:40
Сообщений: 1900
Откуда: Москва
Рейтинг сообщения: 0
вы названия битов то прочтите.

_________________
Ставим плюсы: )


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ATtiny24 не стартует WDT...
СообщениеДобавлено: Вс дек 09, 2012 22:58:38 
Открыл глаза

Карма: 2
Рейтинг сообщений: 7
Зарегистрирован: Вт мар 20, 2012 07:16:43
Сообщений: 47
Рейтинг сообщения: 0
Отредактировал сообщение :shock: сейчас должно быть все правильно


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ATtiny24 не стартует WDT...
СообщениеДобавлено: Вс дек 09, 2012 23:46:06 
Друг Кота
Аватар пользователя

Карма: 46
Рейтинг сообщений: 590
Зарегистрирован: Вт май 19, 2009 09:27:30
Сообщений: 3258
Откуда: Украина
Рейтинг сообщения: 0
Блин, не люблю загадки!
Может ошибка в том, что сначала необходимо установить только один бит - бит разрешение изменения регистра:
WDTCSR |= 0b00010000;
и только потом внести сами настройки:
WDTCSR |= 0b01001010; ???
То есть 0х10 и 0х4А ???


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ATtiny24 не стартует WDT...
СообщениеДобавлено: Пн дек 10, 2012 00:08:30 
Друг Кота
Аватар пользователя

Карма: 46
Рейтинг сообщений: 590
Зарегистрирован: Вт май 19, 2009 09:27:30
Сообщений: 3258
Откуда: Украина
Рейтинг сообщения: 0
Нихрена не помогает. Складывается такое впечатление, как будто даташит написан к какому-то другому микроконтроллеру. Кроме того нигде в инете не встречал подобного примера настройки и использования WDT в режиме генерации прерываний. Конечно, далеко не все AVR-ки имеют такую функцию у встроенного WDT, но всё же надеялся найти хотябы какой-нибудь пример...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ATtiny24 не стартует WDT...
СообщениеДобавлено: Чт дек 13, 2012 23:51:15 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 12
Рейтинг сообщений: 67
Зарегистрирован: Пт авг 27, 2010 05:57:06
Сообщений: 2482
Откуда: Тюмень
Рейтинг сообщения: 0
как насчет того, чтобы не путаться в битовых и других магических константах и сделать вот так:
WDTCSR = (1<<WDE)|(1<<WDIE)|(1< WDP1);

А насчет загадок могу сказать, что вам код генератор уже создал нравильную последовательность активации таймера собаки, осталось выбрать правильный режим, на картинке , которую вам привели описано, что есть несколько режимов, если ваш Мк будет всегда уходить в перезагруз, то никаких лампочек вы не увидите. попробуйте в основном цикле сделать:
1 зажечь лампу
2 сбросить собаку


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ATtiny24 не стартует WDT...
СообщениеДобавлено: Пт дек 14, 2012 10:08:13 
Друг Кота
Аватар пользователя

Карма: 67
Рейтинг сообщений: 1012
Зарегистрирован: Чт сен 18, 2008 12:27:21
Сообщений: 18798
Откуда: Столица Мира Санкт-Петербург
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Честно говоря, не имел дело ни с 24-й Тинькой, ни с собакой.
Но! После прочтения соотв. раздела ДШ по диагонали, кое-что прояснилось:
Помимо фьюзов, включать/выключать собаку можно программно.
В зависимости от конфигурации, собака может вызывать ресет или своё прерывание.
Для конфигурирования собаки надо выставить бит WDCE: Watchdog Change Enable и в течение 4-х тактов внести изменения.
Есть какие-то два safety level, которые влияют на возможность отключения сторожа :facepalm:

_________________
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Измерить нннада?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ATtiny24 не стартует WDT...
СообщениеДобавлено: Пт дек 14, 2012 10:34:57 
Вымогатель припоя

Карма: 22
Рейтинг сообщений: 114
Зарегистрирован: Пн июн 14, 2010 13:07:29
Сообщений: 630
Откуда: Жуковский
Рейтинг сообщения: 0
в Safety level 1 (WDTON не запрограммирован) можно выставлять таймаут и без WDTCE.
Тоже хочется разобраться с WD, но под рукой контроллера нет, а Proteus, похоже, некорректно работает с WDT.
ELcat, попробуйте в железе для проверки простой тест:
Код:
ISR(SIG_WATCHDOG_TIMEOUT)
{
  PORTA ^= 0xFE;
}

int main(void)
{
  DDRA = 0xFF;

  WDTCSR = (1<<WDCE) | (1<<WDE);
  WDTCSR = (1<<WDIE) | (1<<WDP1) | (1<<WDP2);
  sei();

  while(1)
  {
    PORTA ^= 1;
    _delay_ms(500);
  }
}
только CLKDIV8 не программировать.
в основном цикле дергание ножкой PA0 1 Гц, а если прерывание WD будет работать, то будут дергаться остальные PA7-PA1 0.5 Гц.
скомпилированный HEX прилагается.


Вложения:
main.hex [394 байт]
Скачиваний: 961
Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ATtiny24 не стартует WDT...
СообщениеДобавлено: Пт дек 14, 2012 22:44:44 
Друг Кота
Аватар пользователя

Карма: 46
Рейтинг сообщений: 590
Зарегистрирован: Вт май 19, 2009 09:27:30
Сообщений: 3258
Откуда: Украина
Рейтинг сообщения: 0
a_skr, к сожалению, мне этот код в "девайс" лить нельзя, поскольку "девайс" уже полностью спаянный и частично работает (без "спячки" пока, разумеется). На РА.7 повешен затвор HexFETa, и если туда вместо корректного ШИМ подать "1" на полсекунды, то буду иметь "пичальку" с погоревшими детальками бустера. Если можно, перепишите код, пожалуйста, исключительно для РВ.0, РВ.1 и РВ.2 (подключены светодиоды). Все остальные линии портов надо оставить "плавающими", то есть входами без "подтяжек".

По поводу подозрений в том, что я "мог не поймать ресет". Сейчас в основном цикле программы опрашиваются кнопки с частотой около 10Гц. По нажатию инкрементируется/декрементируется содержимое регистра OCR0B, по которому и формируется выходной сигнал ШИМ. То есть, если бы были сбросы, то при попытке установить какой-либо уровень скважности он периодически сбрасывался бы в 0х00, поскольку именно это число в моём коде пишется в OCR0B при инициализации таймера 0. Но тем не менее этого не происходило при любой записываемой мной комбинации в WDTCSR.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ATtiny24 не стартует WDT...
СообщениеДобавлено: Пн дек 17, 2012 09:33:44 
Вымогатель припоя

Карма: 22
Рейтинг сообщений: 114
Зарегистрирован: Пн июн 14, 2010 13:07:29
Сообщений: 630
Откуда: Жуковский
Рейтинг сообщения: 0
ok. давайте попробуем. используются PB.0 - основной цикл, PB.1 - таймаут WD:
Код:
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>

ISR(SIG_WATCHDOG_TIMEOUT)
{
  PORTB ^= 2;
}

int main(void)
{
  DDRB = 3;
  WDTCSR = (1<<WDCE) | (1<<WDE);
  WDTCSR = (1<<WDIE) | (1<<WDP1) | (1<<WDP2);
  sei();
  while(1)
  {
    PORTB ^= 1;
    _delay_ms(500);
  }
}


Вложения:
main.hex [394 байт]
Скачиваний: 1109
Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ATtiny24 не стартует WDT...
СообщениеДобавлено: Вт дек 18, 2012 21:02:05 
Друг Кота
Аватар пользователя

Карма: 46
Рейтинг сообщений: 590
Зарегистрирован: Вт май 19, 2009 09:27:30
Сообщений: 3258
Откуда: Украина
Рейтинг сообщения: 0
a_skr, прошу прощения, что долго не отвечал. Отец ушёл. Похороны. Ваш код работает, мигают оба светодиода (со снятым фузом CKDIV8). Проблема не в фузе. Мой вариант на CVAVR так и не запускается. Выкладываю архив проекта. Прошу вас взглянуть что в нём не так.


Вложения:
DL.ZIP [30.29 KiB]
Скачиваний: 908
Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ATtiny24 не стартует WDT...
СообщениеДобавлено: Ср дек 19, 2012 08:36:53 
Вымогатель припоя

Карма: 22
Рейтинг сообщений: 114
Зарегистрирован: Пн июн 14, 2010 13:07:29
Сообщений: 630
Откуда: Жуковский
Рейтинг сообщения: 0
сожалею :(
по программе. про фьюз CKDIV8 я указал просто, чтобы задержка нормально работала.
я так понял, что сброс по WD не интересует, только таймаут, так?
если так, то попробуйте поменять Ваши строчки:
WDTCSR=0x1A;
WDTCSR=0x4A;
на следующие:
WDTCSR=0x18;
WDTCSR=0x42;
таймаут 64 mS, правильно?
из обработчика таймаута WD уберите WDTCSR|=0x40;
кстати, в обработчике у Вас просто включается светодиод.
для проверки на первое время можно просто помигать им из обработчика, не трогая в главном цикле.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ATtiny24 не стартует WDT...
СообщениеДобавлено: Ср дек 19, 2012 20:08:55 
Друг Кота
Аватар пользователя

Карма: 46
Рейтинг сообщений: 590
Зарегистрирован: Вт май 19, 2009 09:27:30
Сообщений: 3258
Откуда: Украина
Рейтинг сообщения: 0
Благодарю за соболезнования. Он пережил операцию, мучался больше года. Мы все до последнего момента верили, но чуда так не произошло. Онкология никого не щадит. Для нашей семьи, друзей и знакомых это невосполнимая потеря. Он был видным общественным деятелем и очень уважаемым человеком.

a_skr писал(а):
попробуйте поменять Ваши строчки:
WDTCSR=0x1A;
WDTCSR=0x4A;
на следующие:
WDTCSR=0x18;
WDTCSR=0x42;
Не помогло.


Вложения:
DL.ZIP [30.72 KiB]
Скачиваний: 960
Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 228 ]  1, , , , ...  

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


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

Сейчас этот форум просматривают: Google [Bot], veso74 и гости: 29


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

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


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