Обява

Свий
Няма добавени обяви.

Как да си спретнем проста електроника със сложен микроконтролер.

Свий
X
 
  • Филтър
  • Час
  • Покажи
Изчисти всичко
нови мнения

  • Как да си спретнем проста електроника със сложен микроконтролер.

    Малко като статия в "Направи сам" ще се получи, но поне има шанс да спестя
    на някого безсмисленото лутане, през което минах аз. Изгубих си няколко
    дни с грешни схеми и тъпо написани ръководства. Давам краен работещ
    вариант като база за по-сложни разработки.
    Та, от 20-тна години произвеждат едни благинки, наречени "едночипови
    микрокомпютри", или "микроконтролери".

    Крайна цел на упражнението - работещо устройство за под 10 лева, с разпространени чипове.
    Има ги в почти всеки магазин за електроника. Лично на мен ми трябва един
    таймер - да ми развърта вентилатор. След захранване - да държи реленце за
    минута или повече. Следваща задачка ще е да обработва температурата от
    датчик SMT. По-лесно ми е с контролер, отколкото да проектирам чиста хардуерия.

    Важно за мен условие е - просто като боднеш чипа на захранване и да работи
    . Без кварцове, ресет вериги, pull-up матрици и прочее. Единствено в моя
    случай трябва да се помисли за транзисторче, осигуряващо управление на
    релето. Много далеч съм от тежката артилерия на Спарки, но и целта ми е
    друга.
    Конкретната серия, на която се спрях е Attiny26 - 16PU.
    26L серията като вариант работи от 2,7 до 5,5 волта.
    Kъм 6 лева на магазина. Няма да минавам през обзор на алтернативите, всеки
    производител има място под слънцето, просто това е моят избор. Осигурява
    горните ми изисквания.

    1. Хардуерия
    Програматор. Сглобява се за под час, цялата схемотяхника се свежда до 4
    резистора от 330 ома и куплунзи. Става за почти всички серии на Atmel,
    които поддържат SPI. Трябва да има паралелен порт на компа.
    Платката на програматора може да се ползва и за приложението, просто се
    изважда връзката към паралелния порт. Като приключиш с писането на флаша -
    програматорът пуска ресет веригата и контролерът започва изпълнение на
    кода. С други думи - след записването веднага тръгва да работи.

    Тук е дадено свързването с паралелния. Първия линк е по-чист, но е
    пропуснато захранването на чипа, докато го програмираш
    . Аз го извадих от
    5-те волта на захранването на компа. Трябва бушонче, защото 5-те волта на
    компа дават едни 20 ампера и нагоре!
    http://www.scienceprog.com/simplest-...ega-programmer
    http://elecrom.wordpress.com/2007/10...vr-programmer/

    2. Писане по флаша
    Софта на програматора - http://www.lancos.com/ppwin95.html
    Иска си калибрация първия път, сетват му се настройки на setup -> interface setup.
    Натиснете снимката за да я уголемите

Име:programator.PNG
Прегледи:1
Размер:10.8 КБ
ID:5955064
    В главното меню се казва с какъв контролер работим (горе в дясно).
    Натиснете снимката за да я уголемите

Име:SetTheSeries.PNG
Прегледи:1
Размер:33.4 КБ
ID:5955065
    Това е. Може да работи директно с компилирани hex файлове.

    3. Компилатор.
    http://sourceforge.net/projects/wina...nAVR/20100110/
    Инсталира се, в папката му се намира директория sample. Посоченият zip е мой
    пример с настройки...
    sample.zip
    съдържа файлове с настройки за съотв. контролер Attiny26. След replace на
    файловете в директория sample - сме готови за компилация. Оставих
    компилираните hex файлове, за да може да се тества и преди компилация.
    Посоченото приложение прецъква пин 20 на контролера, малък светодиод и
    резистор 2 килоома визуализират резултата. Компилира се след написване на команда
    make
    в директорията sample.
    Резултатът изглежда така:
    Код:
    -------- begin --------
    avr-gcc (WinAVR 20100110) 4.3.3
    Copyright (C) 2008 Free Software Foundation, Inc.
    This is free software; see the source for copying conditions.  There is NO
    warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
    
    
    Compiling C: test.c
    avr-gcc -c -mmcu=attiny26 -I. -gdwarf-2 -DF_CPU=8000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=./test.lst  -std=gnu99 -MMD -MP -MF .dep/test.o.d test.c -o test.o 
    
    Linking: test.elf
    avr-gcc -mmcu=attiny26 -I. -gdwarf-2 -DF_CPU=8000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=test.o  -std=gnu99 -MMD -MP -MF .dep/test.elf.d test.o --output test.elf -Wl,-Map=test.map,--cref     -lm
    
    Creating load file for Flash: test.hex
    avr-objcopy -O binary -R .eeprom -R .fuse -R .lock test.elf test.hex
    
    Creating load file for EEPROM: test.eep
    avr-objcopy -j .eeprom --set-section-flags=.eeprom="alloc,load" \
        --change-section-lma .eeprom=0 --no-change-warnings -O binary test.elf test.eep || exit 0
    
    Creating Extended Listing: test.lss
    avr-objdump -h -S -z test.elf > test.lss
    
    Creating Symbol Table: test.sym
    avr-nm -n test.elf > test.sym
    
    Size after:
    AVR Memory Usage
    ----------------
    Device: attiny26
    
    Program:     128 bytes (6.3% Full)
    (.text + .data + .bootloader)
    
    Data:          0 bytes (0.0% Full)
    (.data + .bss + .noinit)
    
    
    
    -------- end --------
    Гледам, че дори има един eлементарен warning
    Важно! След инсталиране на WinAVR иска ресет
    на Windows, за да прихване системните променливи.
    В същата папка се намира резултатният hex файл, отваря се с PonyProg, след
    флашкане - програматорът пуска ресета и програмата започва да работи веднага.

    Програмирането не е проста работа, но кода за прости неща е елементарен.

    test.c
    Код:
    #include <avr/io.h>
    #include <util/delay.h>
    
    void main (void)
    {
    
    OSCCAL = 0xFF;
    
    //set PORTB for output
    DDRA = 0xFF;
    
    while (1)
    
    {
    _delay_ms(100);
    PORTA = 1;
    
    _delay_ms(100);
    PORTA = 0;
    
    }
    
    return 1;
    }
    OSCCAL трябва да се провери допълнително - дали е пуснат правилно вътрешния RC осцилатор.
    Явно не е сетнат както трябва, и вътрешният генератор работи на няколко пъти по-ниска честота от
    максималната.
    Приложението дърпа към 5% от 2-та килобайта на флаша.
    След първоначалната инвестиция на време и обучение - решаването на разни
    проблеми с електрики из къщи става с писане на кодец, купуване на чип за 6
    лева, запояване на захранване и управляване периферия - и работи!
    Посоченото чипче има и няколко аналогови 10 битови входа, както и аналогови PWM изходи.
    Kaкто и вграден EEPROM.
    Става за почти всичко за управление из къщи. Подозирам, че има ресурс да управлява дори
    автоматична пералня.
    Последно редактирано от Rabin; 08-01-12, 15:09.

  • #2
    От: Как да си спретнем проста електроника със сложен микроконтролер.

    С програмирането съм леко на "вие" но ми се струва че с тия закъснения по 100 милисекунди направо убиваш производителността на контролера. Нагласи си някой таймер да ти генерира прекъсване на някакъв период и използвай него за твоите си цели. През останалото време можеш да обработваш други неща.
    Отделно, че заигравката винаги е в подробностите - филтриране на сигнали, данни, проверки и т.н. Тъй наречения "blink.c" си е класика, но е едва началото... Нещо като "hello world" в писи програмирането...
    Не чета коментари и не отговарям на такива.

    И коментаторите...

    Коментар


    • #3
      От: Как да си спретнем проста електроника със сложен микроконтролер.

      Първоначално публикуван от ittso Преглед на мнение
      ... но ми се струва че с тия закъснения по 100 милисекунди направо убиваш производителността на контролера. ...
      Това е по-мощно от Правец 8, май. Работи на 16 милиона инструкции в секунда.
      Производителност не ми трябва. Мощните серии са само с 2 лв. по-скъпи, с 16 пъти повече флаш.
      Идеята ми е при най-малкия проблем в къщи - отиваш в магазина, програмираш и решаваш! Иначе Ардуино са направили много удобна среда и опростена среда за сложни решения.

      Примерно - трябват ми 2 термостата с датчик с малка темп. инертност. Имам 2 проточни бойлера на село. Има до нас едно магазичне, сигурно има поне 20 вида термостати. Каквото ми трябва - няма!
      Купих си на Добрикит термостат, който ми върши работа, но е 40-тина лв. И пак трафове, външни мощни релета - "от трън на глог"!
      В случая чисто софтуерно си решавам проблемите за 20 лева. Процесор, датчик, захранване от зарядно за GSM (имам една торба такива). Вместо за 90. И не само това. Мисля за зарядно за акумулатор. Един делител на входа и реле. Другото го имам.
      Ще публикувам кодовете и схемите на тези неща като ги направя. Програматор - всеки може да си запои.
      Такива неща.
      Последно редактирано от Rabin; 08-01-12, 18:43.

      Коментар


      • #4
        От: Как да си спретнем проста електроника със сложен микроконтролер.

        Първоначално публикуван от Rabin Преглед на мнение
        Това е по-мощно от Правец 8, май. Работи на 16 милиона инструкции в секунда...
        Така де. При "delay_100_ms" 1.6 милиона инструкции контролерът не прави нищо. Седи и се чеше по краката...
        За останалото съм съгласен, за още някой лев отгоре може да се закупи значително по-сериозен контролер, но въпреки това не смятам за оправдано да се разхищава машинно време точно по тоя начин...
        Ти си знаеш де. Подобни решения винаги са били приоритет на конструктора занимаващ се с конкретния чарк...
        Не чета коментари и не отговарям на такива.

        И коментаторите...

        Коментар


        • #5
          От: Как да си спретнем проста електроника със сложен микроконтролер.

          Първоначално публикуван от ittso Преглед на мнение
          Така де. При "delay_100_ms" 1.6 милиона инструкции контролерът не прави нищо. Седи и се чеше по краката...
          Не мога да разбера какво те притеснява това.
          Обърнах Нета, разпитвах по форуми - не намерих систематизирано как да подкараш елементарни приложения. Изгубих сума време проба-грешка.
          Ако съм полезен на някой като мен - значи това е и целта на темата. Заготовка за писане на евтин контролер, ама нещата да са проверени! Една грешка може да ти изгори и дъното на компа с това ровене по портовете.

          Коментар


          • #6
            От: Как да си спретнем проста електроника със сложен микроконтролер.

            Целта на постовете ми не е била критика или нещо подобно. Гледай на тях като на "подлед от друг ъгъл".
            Не чета коментари и не отговарям на такива.

            И коментаторите...

            Коментар


            • #7
              От: Как да си спретнем проста електроника със сложен микроконтролер.

              Много си е хубаво цялото нещо. Така или иначе програмата blink не прави нищо полезно, служи само за показване на компилирането и програмирането.

              Класическата hello world също не прави нищо полезно, а изразходва цикли. Но и нея никой не е тръгнал да оптимизира.

              Коментар


              • #8
                От: Как да си спретнем проста електроника със сложен микроконтролер.

                Полезна тема!
                Следващо приложение, предлагам .... подгряване за "нафтова печка", тоест дизелов автомобил.
                Подгряване по време, после свети ламбата да палиш, после то си подгрява на интервали докато температурата на двигателя достигне примерно 10 градуса?
                Само идейка.
                Последно редактирано от CarTest™; 08-01-12, 21:48.
                Кольо "Дупетата вървят и с мастика... "

                Ясен Супер Модератор: "Абе при мене как не увисва?" "хм, представих си Багера по бельо."

                Коментар


                • #9
                  От: Как да си спретнем проста електроника със сложен микроконтролер.

                  Първоначално публикуван от ittso Преглед на мнение
                  Целта на постовете ми не е била критика или нещо подобно. Гледай на тях като на "подлед от друг ъгъл".
                  Не съм ги приемал за критика. Прав си, че времена се връзват през прекъсванията на таймерите, но това за конкретни проекти.

                  Коментар


                  • #10
                    От: Как да си спретнем проста електроника със сложен микроконтролер.

                    Първоначално публикуван от Rabin Преглед на мнение
                    ...не намерих систематизирано как да подкараш елементарни приложения...
                    Най-елементарното приложение е прост безкраен цикъл от 2 реда. В крайна сметка почти във всеки микроконтролер (пък и не само) има такъв цикъл (е, обикновено не от 2 реда).

                    Та, ако има какво съществено да вършиш в тоя цикъл, той става голям, понякога вика куп подпрограми и т.н. и когато имаш някакви работи критични по време, по-удобно е да инициализираш един таймер да ти прави интеръпт през даден период от време, и там да вършиш тия неща, вместо да губиш време в изчакване. При прости приложения разбира се може всякак. Щом върши това, което искаш, значи всичко е наред.

                    При мойта "тежка артилерия" (всъщност далеч съм от това), почти всичко съществено е "тайм критикъл", и съответно е набутано по интеръпти. Най-ниско засега е комуникацията, която е без интеръпти и постоянно се проверява от въпросния безкраен цикъл. А комуникацията не е с интеръпти, просто защото останалите неща са достатъчно малки и бързи, а и в главния цикъл няма други бавни и дълги неща за правене, засега.

                    Та думите на ittso са просто че има и по-елегантно решение, без то да е кой-знае колко по-сложно. Нищо повече. Има хиляди начини да направиш нещо, и както и да си го мислип обикновено все се намира някой да успее да го направи по-добре от теб (по-бързо, или по-малко, или по-просто, или вървящо на процесор струващ 20 стотинки по-малко).
                    Долните твари, измислили перверзията Erlang, имат "много здраве" от мен. Болезнено!

                    Коментар


                    • #11
                      От: Как да си спретнем проста електроника със сложен микроконтролер.

                      Първоначално публикуван от Rabin Преглед на мнение
                      ...Обърнах Нета, разпитвах по форуми - не намерих систематизирано как да подкараш елементарни приложения. Изгубих сума време проба-грешка.
                      Ако съм полезен на някой като мен - значи това е и целта на темата. Заготовка за писане на евтин контролер, ама нещата да са проверени! Една грешка може да ти изгори и дъното на компа с това ровене по портовете.
                      Трябвало е и тук да питаш. Предполагам че все щеше да се намери някой който да даде съвет...
                      В общия случай част от проблемът е, че на хората които са на "ТИ" с тия неща им е досадно да обясняват подобни елементарни неща или им е писнало да повтарят едно и също...
                      Началото винаги е трудно... Както и да е.
                      Най-лесно става като се зададе конкретен въпрос - искам да направя еди си какво, имам такива проблеми... Не ми е ясно следното нещо...
                      Та, питайте. Доколкото мога ще помагам. Предполагам и други колеги ще се включат...

                      Първоначално публикуван от Ясен Преглед на мнение
                      Много си е хубаво цялото нещо. Така или иначе програмата blink не прави нищо полезно, служи само за показване на компилирането и програмирането...
                      Не става въпрос за оптимизация. Дискусията по горе беше повече "по принцип".
                      А въпросното "blink.c" може да бъде реализирано по много начини.
                      Например - Силабс - C8051F350:

                      Код:
                      //-----------------------------------------------------------------------------
                      // F35x_Blinky.c
                      //-----------------------------------------------------------------------------
                      // Copyright 2007 Silicon Laboratories, Inc.
                      //
                      // AUTH: BD
                      // DATE: 06 FEB 04
                      //
                      // This program flashes the green LED on the C8051F35x target board about
                      // five times a second using the interrupt handler for Timer2.
                      //
                      // Target: C8051F35x
                      //
                      // Tool chain: KEIL Eval 'c'
                      //
                      
                      //-----------------------------------------------------------------------------
                      // Includes
                      //-----------------------------------------------------------------------------
                      #include <c8051f350.h>                    // SFR declarations
                      
                      //-----------------------------------------------------------------------------
                      // 16-bit SFR Definitions for 'F35x
                      //-----------------------------------------------------------------------------
                      
                      sfr16 TMR2RL   = 0xca;                    // Timer2 reload value
                      sfr16 TMR2     = 0xcc;                    // Timer2 counter
                      
                      //-----------------------------------------------------------------------------
                      // Global CONSTANTS
                      //-----------------------------------------------------------------------------
                      
                      #define SYSCLK       24500000 / 8         // SYSCLK frequency in Hz
                      
                      sbit LED = P0^7;                          // LED='1' means ON
                      sbit SW2 = P1^0;                          // SW2='0' means switch pressed
                      
                      //-----------------------------------------------------------------------------
                      // Function PROTOTYPES
                      //-----------------------------------------------------------------------------
                      void SYSCLK_Init (void);
                      void PORT_Init (void);
                      void Timer2_Init (int counts);
                      void Timer2_ISR (void);
                      
                      //-----------------------------------------------------------------------------
                      // MAIN Routine
                      //-----------------------------------------------------------------------------
                      void main (void) {
                      
                         // disable watchdog timer
                         PCA0MD &= ~0x40;                       // WDTE = 0 (clear watchdog timer
                                                                // enable)
                      
                         SYSCLK_Init ();                        // Initialize system clock
                         PORT_Init ();                          // Initialize crossbar and GPIO
                         Timer2_Init (SYSCLK / 12 / 10);        // Init Timer2 to generate
                                                                // interrupts at a 10Hz rate.
                      
                         EA = 1;                                            // enable global interrupts
                      
                         while (1) {                            // spin forever
                         }
                      }
                      
                      //-----------------------------------------------------------------------------
                      // SYSCLK_Init
                      //-----------------------------------------------------------------------------
                      //
                      // This routine initializes the system clock to use the internal 24.5MHz / 8
                      // oscillator as its clock source.  Also enables missing clock detector reset.
                      //
                      void SYSCLK_Init (void)
                      {
                         OSCICN = 0x80;                         // configure internal oscillator for
                                                                // its lowest frequency
                         RSTSRC = 0x04;                         // enable missing clock detector
                      }
                      
                      //-----------------------------------------------------------------------------
                      // PORT_Init
                      //-----------------------------------------------------------------------------
                      //
                      // Configure the Crossbar and GPIO ports.
                      // P0.7 - LED (push-pull)
                      //
                      void PORT_Init (void)
                      {
                         XBR0     = 0x00;                       // no digital peripherals selected
                         XBR1     = 0x40;                       // Enable crossbar and weak pull-ups
                         P0MDOUT |= 0x80;                       // enable LED as a push-pull output
                      }
                      
                      //-----------------------------------------------------------------------------
                      // Timer2_Init
                      //-----------------------------------------------------------------------------
                      //
                      // Configure Timer2 to 16-bit auto-reload and generate an interrupt at
                      // interval specified by <counts> using SYSCLK/48 as its time base.
                      //
                      void Timer2_Init (int counts)
                      {
                         TMR2CN  = 0x00;                        // Stop Timer2; Clear TF2;
                                                                // use SYSCLK/12 as timebase
                         CKCON  &= ~0x60;                       // Timer2 clocked based on T2XCLK;
                      
                         TMR2RL  = -counts;                     // Init reload values
                         TMR2    = 0xffff;                      // set to reload immediately
                         ET2     = 1;                           // enable Timer2 interrupts
                         TR2     = 1;                           // start Timer2
                      }
                      
                      //-----------------------------------------------------------------------------
                      // Interrupt Service Routines
                      //-----------------------------------------------------------------------------
                      
                      //-----------------------------------------------------------------------------
                      // Timer2_ISR
                      //-----------------------------------------------------------------------------
                      // This routine changes the state of the LED whenever Timer2 overflows.
                      //
                      void Timer2_ISR (void) interrupt 5
                      {
                         TF2H = 0;                              // clear Timer2 interrupt flag
                         LED = ~LED;                            // change state of LED
                      }
                      Не чета коментари и не отговарям на такива.

                      И коментаторите...

                      Коментар


                      • #12
                        От: Как да си спретнем проста електроника със сложен микроконтролер.

                        Първоначално публикуван от ittso Преглед на мнение
                        Трябвало е и тук да питаш. Предполагам че все щеше да се намери някой който да даде съвет...
                        В общия случай част от проблемът е, че на хората които са на "ТИ" с тия неща им е досадно да обясняват подобни елементарни неща или им е писнало да повтарят едно и също...
                        ...
                        Aми поразучих тук-там, но програмистите си падат малко перфекционалисти. Всеки гони производителност, сякаш, че ще играе 3D игри на тоя чип. Шефчето ми се е запъвал за оптимизации на ДеМорган, това на гигахерцов многопроцесорен сървър са някакви пикосекунди!
                        С кодеца не би трябвало да имам проблеми, дипломната ми беше няколко хиляди реда на Асемблер за 8051. С LCD дисплей, клавиатура, комуникация и външна RAM. Показах им работещо сглобено устройство.

                        Имах на идея да се ориентирам около някой евтин готов кит, че мразя да се занимавам с хардуерия. Нещо не си харесах цена/качество.
                        Зарадвах се на Ардуино, направено е на модулен принцип. Обаче ако някой ми беше казал, как за най-класическия модел Atmega 328 P - PU или се чака 2 седмици, или плащаш двойно - НЕ, благодаря! Не, че се е минало де.
                        Пробвах и с прехваленото AVRstudio5. Хубаво, ама по default са изключили Tiny версиите. 3 чАса инсталация, 2 гигабайта IDE, SQL сървър... малко се минах, но поне пробвах.
                        Върха на тъпотията, наедно с грешните схеми... в ръководството на компилатора, с който работя - тръгнали да пишат tutorial с грешна програма, и са наясно с грешките. Един вид, щяло да е поучително!
                        Ами, никой не ми каза тия неща!
                        Всеки предполага, че ще тръгваш с лаборатория, програматори, осцилоскопи и т.н. , поне тези, с които говорих.
                        Моя случай е с минимум средства да гоня елементарни решения. Опитвам да пазя здрав разум.
                        Намерих 2 примера за електронни термометри с Tiny в тази книга за зли гении.
                        tinyAVR Microcontroller Projects for the Evil Genius (McGraw-Hill, TAB Electronics, 2011, 0071744541).pdf
                        Ще пиша за резултат.
                        Последно редактирано от Rabin; 09-01-12, 19:15.

                        Коментар


                        • #13
                          От: Как да си спретнем проста електроника със сложен микроконтролер.

                          Действай и споделяй. С каквото можем ще помагаме.

                          Има бол цифрови термометри, побрани в мъничък чип. Връзват се към процесора с 2-3 жици и после направо четеш температурата.

                          ...не че не може и с прост диод, ама нали мразиш хардуерия

                          ПП: И каквото и да ти говорят, пикльовците също не са лош вариант. Откъм разнообразие на периферия нямат аналог, въпреки бъговете си. Да не говорим за 16 и 32 битовите. И са евтини, особено тия с малко крака и памет. Това ако някога ти потрябва де. Някак IDE то по-ми харесва от AVR студио. А и програматора до сега не ми е забил нито веднъж, за разлика от AVR-ския.
                          Долните твари, измислили перверзията Erlang, имат "много здраве" от мен. Болезнено!

                          Коментар


                          • #14
                            От: Как да си спретнем проста електроника със сложен микроконтролер.

                            Като спомена PIC - стоя далеч от тях още от преди десет години, с прословутия си хардуерно забит и неразширяем 8 степенен стек. В малките версии намален до 2 степенен. Koлегите в една предишна фирма зарязаха всичките си разработки с PIC заради това. Не успяха да минат на С.
                            Новите PIC дали са се сетили да пуснат стека в RAM като Atmel?
                            Програматорът ми не знам как ще забие.
                            Последно редактирано от Rabin; 09-01-12, 20:06.

                            Коментар


                            • #15
                              От: Как да си спретнем проста електроника със сложен микроконтролер.

                              На PIC24/dsPIC30/33 е в рама. На PIC32 е софтуерен, и можеш да го завреш където ти е кеф. То аз май със осмаците приключих. Не виждам никакъв смисъл, освен ако не се цепи всяка стотинка.

                              Не знам. AVR-ите нещо така и не могат да ме хванат, макар да имам всичко за тях. Скоро дано намеря време да почовъркам Renesas, щото май категорично са най-добре (макар микрочип да ги бият по разнообразие на периферия).
                              Долните твари, измислили перверзията Erlang, имат "много здраве" от мен. Болезнено!

                              Коментар

                              Активност за темата

                              Свий

                              В момента има 1 потребители онлайн. 0 потребители и 1 гости.

                              Най-много потребители онлайн 8,787 в 16:37 на 21-06-23.

                              Зареждам...
                              X