Например TDA7294

Форум РадиоКот • Просмотр темы - Прошивка ATmega8A-PU через самодельный SKT200
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Вс июл 27, 2025 21:37:29

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


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



Начать новую тему Ответить на тему  [ Сообщений: 18 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: Прошивка ATmega8A-PU через самодельный SKT200
СообщениеДобавлено: Пн янв 23, 2017 14:54:58 
Родился

Зарегистрирован: Пн янв 23, 2017 14:09:59
Сообщений: 7
Рейтинг сообщения: 0
Доброго времени суток! Нужно было зашить прошивку в МК, выбрал ATmega8A-PU (видел что народ шьёт и весьма удачно, да и по характеристикам устроил). Но, как известно, чтобы прошить МК нужен программатор. Готовые стоят бешеных цен, так что взял ещё M74HC244, и начал паять.
Вот такая платка под атмегу (20 МГц для другого нужно, никак с атмегой не связано. 4МГц - распаял место под кварц просто на всякий случай, даже кварц ещё не покупал):
Изображение
и по схеме
Изображение
сделал платку для программатора:
Изображение
(не кусайте за кривость, пожалуйста, недавно начал всем этим заниматься :) )
Написал сначала нужную программку, но потом решил сделать нечто попроще, ну так для себя, чисто порж... проверить работоспособность.
ПоставилCodeVisionAVR, через визард задал выходную ножку, написал кодик:
Спойлер#include <mega8.h>

// Declare your global variables here

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

// Input/Output Ports initialization
// Port B initialization
// Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
DDRB=(0<<DDB7) | (0<<DDB6) | (0<<DDB5) | (0<<DDB4) | (0<<DDB3) | (0<<DDB2) | (1<<DDB1) | (0<<DDB0);
// State: Bit7=T Bit6=T Bit5=T Bit4=P Bit3=P Bit2=P Bit1=T Bit0=T
PORTB=(0<<PORTB7) | (0<<PORTB6) | (0<<PORTB5) | (1<<PORTB4) | (1<<PORTB3) | (1<<PORTB2) | (0<<PORTB1) | (0<<PORTB0);

// Port C initialization
// Function: Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
DDRC=(0<<DDC6) | (0<<DDC5) | (0<<DDC4) | (0<<DDC3) | (0<<DDC2) | (0<<DDC1) | (0<<DDC0);
// State: Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T
PORTC=(0<<PORTC6) | (0<<PORTC5) | (0<<PORTC4) | (0<<PORTC3) | (0<<PORTC2) | (0<<PORTC1) | (0<<PORTC0);

// Port D initialization
// Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
DDRD=(0<<DDD7) | (0<<DDD6) | (0<<DDD5) | (0<<DDD4) | (0<<DDD3) | (0<<DDD2) | (0<<DDD1) | (0<<DDD0);
// State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T
PORTD=(0<<PORTD7) | (0<<PORTD6) | (0<<PORTD5) | (0<<PORTD4) | (0<<PORTD3) | (0<<PORTD2) | (0<<PORTD1) | (0<<PORTD0);

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
TCCR0=(0<<CS02) | (0<<CS01) | (0<<CS00);
TCNT0=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer1 Stopped
// Mode: Normal top=0xFFFF
// OC1A output: Disconnected
// OC1B output: Disconnected
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=(0<<COM1A1) | (0<<COM1A0) | (0<<COM1B1) | (0<<COM1B0) | (0<<WGM11) | (0<<WGM10);
TCCR1B=(0<<ICNC1) | (0<<ICES1) | (0<<WGM13) | (0<<WGM12) | (0<<CS12) | (0<<CS11) | (0<<CS10);
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer2 Stopped
// Mode: Normal top=0xFF
// OC2 output: Disconnected
ASSR=0<<AS2;
TCCR2=(0<<PWM2) | (0<<COM21) | (0<<COM20) | (0<<CTC2) | (0<<CS22) | (0<<CS21) | (0<<CS20);
TCNT2=0x00;
OCR2=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=(0<<OCIE2) | (0<<TOIE2) | (0<<TICIE1) | (0<<OCIE1A) | (0<<OCIE1B) | (0<<TOIE1) | (0<<TOIE0);

// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
MCUCR=(0<<ISC11) | (0<<ISC10) | (0<<ISC01) | (0<<ISC00);

// USART initialization
// USART disabled
UCSRB=(0<<RXCIE) | (0<<TXCIE) | (0<<UDRIE) | (0<<RXEN) | (0<<TXEN) | (0<<UCSZ2) | (0<<RXB8) | (0<<TXB8);

// Analog Comparator initialization
// Analog Comparator: Off
// The Analog Comparator's positive input is
// connected to the AIN0 pin
// The Analog Comparator's negative input is
// connected to the AIN1 pin
ACSR=(1<<ACD) | (0<<ACBG) | (0<<ACO) | (0<<ACI) | (0<<ACIE) | (0<<ACIC) | (0<<ACIS1) | (0<<ACIS0);
SFIOR=(0<<ACME);

// ADC initialization
// ADC disabled
ADCSRA=(0<<ADEN) | (0<<ADSC) | (0<<ADFR) | (0<<ADIF) | (0<<ADIE) | (0<<ADPS2) | (0<<ADPS1) | (0<<ADPS0);

// SPI initialization
// SPI disabled
SPCR=(0<<SPIE) | (1<<SPE) | (0<<DORD) | (0<<MSTR) | (0<<CPOL) | (0<<CPHA) | (0<<SPR1) | (0<<SPR0);

// TWI initialization
// TWI disabled
TWCR=(0<<TWEA) | (0<<TWSTA) | (0<<TWSTO) | (0<<TWEN) | (0<<TWIE);

while (1)
{
// Place your code here
//if(PORTB.1)
PORTC.0 = 1;
//else
//PORTC.0 = 0;
}
}


Однако ошибка Communication error от меня не отставала. Но в один прекрасный момент всё заработало: флеш память чистилась, прошивка заливалась.... пока я случайно не задел клавиатуру и не нажал лок битс... и всё, появился у меня камень, который всегда подаёт на ножку 1 :)
Высказав себе всё что я о себе думаю, отпаял МК и вставил новый (знал что обязательно что-нибудь пойдёт не так - купил 2). Однако как я не пытался, ошибка никак не пропадала.
Delay Multiplier менял, в биосе поставил режим lpt на Bidirectional, 100 раз перепроверил правильность схемы и платы.
Может кто подсказать как мне избавиться от этого проклятого Communication error?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Прошивка ATmega8A-PU через самодельный SKT200
СообщениеДобавлено: Пн янв 23, 2017 18:27:15 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 41
Рейтинг сообщений: 1217
Зарегистрирован: Ср фев 23, 2011 12:12:31
Сообщений: 2396
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Микроконтроллеры стоит ставить в панельки, лучше цанговые, чтобы не пришлось отпаивать по случаю.
Избавиться от ошибки очень просто: купить нормальный программатор)
СтОят программаторы вполне себе копейки, если заказывать у китайцев на АЛИ.

ЗЫ Кто вас учит так разводить платы? :facepalm: :facepalm: :facepalm:

_________________
Глупый не задает вопросы. Глупый и так все знает.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Прошивка ATmega8A-PU через самодельный SKT200
СообщениеДобавлено: Пн янв 23, 2017 18:54:29 
Мудрый кот
Аватар пользователя

Карма: 24
Рейтинг сообщений: 286
Зарегистрирован: Чт июн 10, 2010 08:55:35
Сообщений: 1810
Откуда: Сибирские Афины
Рейтинг сообщения: 0
Andreey, шлейф (провода) длинные от программатора до МК?
Можно попробовать резисторы на 33 ома заменить на 250-470 ом.
И что-то не пойму по плате, есть или нет блокировочные конденсаторы по питанию. Желательно как можно ближе к выводам питания. На плате с МК и на программаторе. Есть?

_________________
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Прошивка ATmega8A-PU через самодельный SKT200
СообщениеДобавлено: Пн янв 23, 2017 19:44:57 
Опытный кот

Карма: 1
Рейтинг сообщений: 81
Зарегистрирован: Вс мар 17, 2013 18:54:07
Сообщений: 883
Рейтинг сообщения: 0
Вот этот вариант STK-200 работает аки швейцарские часы. :)
http://hardlock.h15.ru/hard/stk200/index.html


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Прошивка ATmega8A-PU через самодельный SKT200
СообщениеДобавлено: Пн янв 23, 2017 20:23:18 
Друг Кота
Аватар пользователя

Карма: 195
Рейтинг сообщений: 8539
Зарегистрирован: Пн ноя 30, 2009 03:00:01
Сообщений: 42347
Откуда: Нерезиновая
Рейтинг сообщения: 0
А я вот таким пользуюсь, уже больше пяти лет.. Никаких проблем.
Изображение
Изображение
Пару лет назад сделал в качестве "довеска" переходник для программирования Мега8 (48/88), или Тини2313/90S2313:
Изображение
Недавно сделал USB программатор :
Изображение
и столкнулся с тем, что под управлением АВР- дудки этот программатор работает, а под управлением СинаПрог-а НЕТ!! Пишет, что "программатор не обнаружен", хотя в системе он висит нормально (дудка - РАБОТАЕТ!!)

(Имхо) Самая лучшая "оболочка" для STK200 - это Унипроф или Понипрог.. :dont_know:

Ну, а так- вообще- то, удобна та программа, к которой привык..


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Прошивка ATmega8A-PU через самодельный SKT200
СообщениеДобавлено: Пн янв 23, 2017 20:31:17 
Родился

Зарегистрирован: Пн янв 23, 2017 14:09:59
Сообщений: 7
Рейтинг сообщения: 0
AndTer писал(а):
ЗЫ Кто вас учит так разводить платы? :facepalm: :facepalm: :facepalm:


Никто, сам научился. Если подскажете что и где не правильно и как правильно - буду благодарен.

Kavka писал(а):
Andreey, шлейф (провода) длинные от программатора до МК?
Можно попробовать резисторы на 33 ома заменить на 250-470 ом.
И что-то не пойму по плате, есть или нет блокировочные конденсаторы по питанию. Желательно как можно ближе к выводам питания. На плате с МК и на программаторе. Есть?


1. Не очень, 15-20 см.
2. Попробую.
3. На программаторе есть, а вот на плате с атмегой нету...
4. Так ведь шилось! Правда недолго из-за моей ошибки с локом. Не понятно почему он не шился много раз, потом начал прошивать, а потом перестал.


nikin_n писал(а):
Вот этот вариант STK-200 работает аки швейцарские часы. :)
http://hardlock.h15.ru/hard/stk200/index.html


Так это она и есть, за исключением резисторов. За это её кто-то ругал, что запарывает камни. Так что где-то у меня с этими часами не так, то ли на ногу одеваю, то ли ремешок забыл застегнуть.

Добавлено after 6 minutes 2 seconds:
АлександрЛ писал(а):
А я вот таким пользуюсь, уже больше пяти лет.. Никаких проблем.

всё гениальное - просто :) Я тоже думал плюнуть на всё и сделать так.

АлександрЛ писал(а):
Недавно сделал USB программатор :

Чтобы сделать USB программатор - надо его прошить через LPT :)

АлександрЛ писал(а):
и столкнулся с тем, что под управлением АВР- дудки этот программатор работает, а под управлением СинаПрог-а НЕТ!! Пишет, что "программатор не обнаружен", хотя в системе он висит нормально (дудка - РАБОТАЕТ!!)

(Имхо) Самая лучшая "оболочка" для STK200 - это Унипроф или Понипрог.. :dont_know:

Ну, а так- вообще- то, удобна та программа, к которой привык..


Я пока не привык, так что мысль попробовать другое ПО - хорошая мысль.


Вернуться наверх
 
Распродажа паяльного оборудования ATTEN!
Паяльные станции, паяльники и аксессуары по самой выгодной цене.

По промокоду radiokot скидка 10%
Не в сети
 Заголовок сообщения: Re: Прошивка ATmega8A-PU через самодельный SKT200
СообщениеДобавлено: Пн янв 23, 2017 21:24:21 
Друг Кота
Аватар пользователя

Карма: 195
Рейтинг сообщений: 8539
Зарегистрирован: Пн ноя 30, 2009 03:00:01
Сообщений: 42347
Откуда: Нерезиновая
Рейтинг сообщения: 0
Andreey писал(а):
Я пока не привык, так что мысль попробовать другое ПО - хорошая мысль.

Попробуйте Uniprof.. Как- то он мне больше нравится, вот только надо внимательно фьюзы программировать- сначала разобраться, какие именно автор написал- "прямые" или "инверсные"..

зы.. Хотя у меня и сним была "странность" - перешивал Мегу128- Унипроф её вроде как перешил, но почему- то "не заработало", а ПониПрог- ом она перешилась и заработала нормально.. :dont_know:
Шил как раз через "пять проводков"..


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Прошивка ATmega8A-PU через самодельный SKT200
СообщениеДобавлено: Пн янв 23, 2017 21:38:56 
Родился

Зарегистрирован: Пн янв 23, 2017 14:09:59
Сообщений: 7
Рейтинг сообщения: 0
АлександрЛ писал(а):
Хотя у меня и сним была "странность"


Да сколько ни читал - у одного одним прошивается, у другого - другим. Вывод я сделал такой - качай и используй всё. Что-нибудь да заработает, если ошибок в коде/фьюзах/железе нету :)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Прошивка ATmega8A-PU через самодельный SKT200
СообщениеДобавлено: Пн янв 23, 2017 21:44:23 
Друг Кота
Аватар пользователя

Карма: 195
Рейтинг сообщений: 8539
Зарегистрирован: Пн ноя 30, 2009 03:00:01
Сообщений: 42347
Откуда: Нерезиновая
Рейтинг сообщения: 0
Andreey писал(а):
Вывод я сделал такой - качай и используй всё. Что-нибудь да заработает, если ошибок в коде/фьюзах/железе нету :)

Это точно..
Кстати, вопреки всем советам у меня кабель "пять проводков" имеет длину - сантиметров 80, наверное..


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Прошивка ATmega8A-PU через самодельный SKT200
СообщениеДобавлено: Вт янв 24, 2017 12:44:45 
Родился

Зарегистрирован: Пн янв 23, 2017 14:09:59
Сообщений: 7
Рейтинг сообщения: 0
5 проводков не запахал. Зато есть успехи с моей стк200. Ну как успехи... Теперь он мне пишет Can't read Chip Signature because LB1=0 & LB2=0. Если считать Lock Bits, то он выдаёт такую красоту:
Изображение
И если согласиться, то выставляет настройки так:
Изображение

Вопрос: какой собаки? Как он смог что-то залочить, когда чип был девственницей и при попытках прошиться выдавал раньше только ошибки?

*Спустя 15 минут.*
Перезапустил CodeVisionAVR, увидел кнопку запрогать лок биты. запрогал. единицы. Думаю отлично. Прочитал сигнатуру, видится. Однако при прошивке флеш, выдаёт что лок биты снова стали нулями.
Записать 1 в лок биты можно, правда если попытаться очистить камень, то выдаёт:
Изображение


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Прошивка ATmega8A-PU через самодельный SKT200
СообщениеДобавлено: Вт янв 24, 2017 19:42:21 
Друг Кота
Аватар пользователя

Карма: 195
Рейтинг сообщений: 8539
Зарегистрирован: Пн ноя 30, 2009 03:00:01
Сообщений: 42347
Откуда: Нерезиновая
Рейтинг сообщения: 1
Andreey писал(а):
5 проводков не запахал.
Странно.. Там вроде и "не пахать" нечему..


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Прошивка ATmega8A-PU через самодельный SKT200
СообщениеДобавлено: Ср янв 25, 2017 10:52:51 
Родился

Зарегистрирован: Пн янв 23, 2017 14:09:59
Сообщений: 7
Рейтинг сообщения: 0
АлександрЛ писал(а):
Странно.. Там вроде и "не пахать" нечему..

Я тоже не понимаю. Но он просто не видит. А стк200 видит, но лок биты == 0. Почему... я не понимаю.
Изображение


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Прошивка ATmega8A-PU через самодельный SKT200
СообщениеДобавлено: Чт янв 26, 2017 14:33:05 
Родился

Зарегистрирован: Пн янв 23, 2017 14:09:59
Сообщений: 7
Рейтинг сообщения: 0
Ура! Заработало! Поставил кварц на 4МГц, код, написанный в CodeVisionAVR, прошивается понипрогом восхитительно. Биты замечательно выходят и выходят :))
Вот только заставить кнопку работать у меня не получается.... К примеру написал PORTC.0 /*led*/ = PORTB.1 /*button*/; , но светодиод темнее ночи. Может что не так с настройками порта для кнопки?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Прошивка ATmega8A-PU через самодельный SKT200
СообщениеДобавлено: Чт янв 26, 2017 19:24:04 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 41
Рейтинг сообщений: 1217
Зарегистрирован: Ср фев 23, 2011 12:12:31
Сообщений: 2396
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Без листинга программы никто не ответит.

_________________
Глупый не задает вопросы. Глупый и так все знает.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Прошивка ATmega8A-PU через самодельный SKT200
СообщениеДобавлено: Чт янв 26, 2017 20:50:07 
Говорящий с текстолитом
Аватар пользователя

Карма: 8
Рейтинг сообщений: 209
Зарегистрирован: Чт июн 10, 2010 20:11:19
Сообщений: 1520
Рейтинг сообщения: 3
Цитата:
PORTC.0 /*led*/ = PORTB.1 /*button*/;

1. Лучше не использовать нестандартную экзотику, характерную для какого-то конкретного диалекта. В обычном Си такая запись неправильна.
2. Чтобы считать реальное состояние порта, читать надо не PORTx, а PINx.
Таким образом, ваш код будет выглядеть так
Код:
DDRB &=~(1<<1); //PB1 настраиваем на вход
PORTC |= (1<<0); //PC0 настраиваем на выход
if( PINB & (1<<1) ){ //если на PB1 лог.1, то
  PORTC |= (1<<0); //выдаем на PB0 лог.1
}else{ //в противном случае
  PORTC &=~(1<<0); //выдаем на PB0 лог.0
}
Если же есть опыт работы с макросами и препроцессором, можно написать более наглядно и кроссплатформенно
Код:
#define BTN B,1,1
#define LED C,0,1
DDR_0( BTN );
DDR_1( LED );
if( PIN_ON( BTN) )PORT_ON(LED); else PORT_OFF(LED);

С использованием моих макросов (пока приводить их не буду - без понимания основ они бесполезны), возможно легко менять порт, куда подключены кнопка и диод, и их "включенный" уровень (лог.0 или лог.1).


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Прошивка ATmega8A-PU через самодельный SKT200
СообщениеДобавлено: Чт янв 26, 2017 20:59:34 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 41
Рейтинг сообщений: 1217
Зарегистрирован: Ср фев 23, 2011 12:12:31
Сообщений: 2396
Рейтинг сообщения: 3
Медали: 1
Получил миской по аватаре (1)
Andreey писал(а):
PORTC.0 /*led*/ = PORTB.1 /*button*/;

Наверное надо так:
Код:
PORTC.0 = PINB.1;

_________________
Глупый не задает вопросы. Глупый и так все знает.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Прошивка ATmega8A-PU через самодельный SKT200
СообщениеДобавлено: Пт янв 27, 2017 10:34:14 
Родился

Зарегистрирован: Пн янв 23, 2017 14:09:59
Сообщений: 7
Рейтинг сообщения: 0
COKPOWEHEU писал(а):
2. Чтобы считать реальное состояние порта, читать надо не PORTx, а PINx.
Таким образом, ваш код будет выглядеть так
Код:
DDRB &=~(1<<1); //PB1 настраиваем на вход
PORTC |= (1<<0); //PC0 настраиваем на выход
if( PINB & (1<<1) ){ //если на PB1 лог.1, то
  PORTC |= (1<<0); //выдаем на PB0 лог.1
}else{ //в противном случае
  PORTC &=~(1<<0); //выдаем на PB0 лог.0
}

AndTer писал(а):
PORTC.0 = PINB.1;

Две здоровенные рыбы этим усатым! Заработало!

Кнопку жму - светодиод загорается на пару секунд... не понятно почему не гаснет сразу.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Прошивка ATmega8A-PU через самодельный SKT200
СообщениеДобавлено: Пт янв 27, 2017 15:47:23 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 41
Рейтинг сообщений: 1217
Зарегистрирован: Ср фев 23, 2011 12:12:31
Сообщений: 2396
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Andreey писал(а):
не понятно почему не гаснет сразу.

Листинг программы выложи уже! Тогда сразу станет всё понятно. И частоту с которой работает МК.

_________________
Глупый не задает вопросы. Глупый и так все знает.


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

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


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

Сейчас этот форум просматривают: ILYAUL и гости: 14


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

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


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