Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 10 maja 2026, o 21:48


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 21 ] 
Autor Wiadomość
PostNapisane: 14 lut 2014, o 14:04 
Offline
Użytkownik

Dołączył(a): 08 wrz 2012
Posty: 505
Pomógł: 6

Witam
Mam trochę niedosyt w sprawie UART-a. Mirek przekazuje ogrom informacji, ale jakoś nie dopatrzyłem się za dużo o wspomnianym uarcie chyba, że gdzieś coś było a ja nie doszukałem się.
Chciałbym przesyłać po RS-sie np taką informację " ;W(tu wartość od 0 do 255)"
; -pozwoli mi rozpoznać, że wysłana informacja jest "dla mnie"
W -decyduje do czego odnosi się dana ramka np będzie to LED1
0-255 - to wartość np.pwm decydująca z jakim wypełnieniem ma sie świecić LED1

Szczerze to nie bardzo wiem jak do tego podejść. Stworzyłem sobie prosty program odbierający dane po RS-sie i zapalający/gaszący led- a. Niestety nie wiem jak poradzić sobie z taką ramką jak powyżej. Myślałem o sprawdzaniu po kolei co mam w buforze czyli jeśli jest ";" to przechodzę dalej, jeśli jest "W" to już wiem, że następną wartość to pwm_led1 i tu zaczynają się dla mnie schody. Jak przesłać dziesiętną wartość np 200, w ASCII? Trochę było opisane to w niebieskiej książce, ale mało tego był albo czegoś nie załapałem.
Podsuńcie proszę jak to ugryźć.
Pozdrawiam
Tomasz



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 lut 2014, o 14:09 

Pomógł: 0

Parsowanie danych jest opisane dosyć dokładnie w Zielonej książce Mirka. Sam mocno z tego korzystam w swoich projektach.

PS. Porównywanie stringów masz niezależne od bibliotek Mirka, mnie bardzo pomaga ta stronka http://cpp0x.pl/dokumentacja/standard-C ... nakow-C/11



Góra
  
cytowanie selektywne  Cytuj  
PostNapisane: 14 lut 2014, o 14:15 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27460
Lokalizacja: Szczecin
Pomógł: 1045

Tom277 napisał(a):
Mam trochę niedosyt w sprawie UART-a


Dlatego, że podzieliłem obsługę UART'a na dwie książki

w GreenBooku znajdziesz pełną obsługę jeśli chodzi o odbieranie ramek ASCII, ale także obsługę np własnych komend AT.

Dlaczego trafiło to do drugiej książki ?

ano dlatego, że aby omówić bardzo fajny sposób na parsowanie danych nadlatujących przez UART, potrzebowałem aby czytelnik już sprawnie władał takimi bardziej zaawnasowanymi metodami jak Callbacki czy EVENT's (zdarzenia), które delikatnie poruszam dopiero pod koniec Bluebooka, natomiast przez cały GreenBook do ostatniego rozdziału rozwijam tą tematykę. I dlatego w ostatnim rozdziale Greenboka mogłem sobie dopiero pozwolić na to co wcześniej zresztą zaplanowałem.

A wiem co robię - i jak dostosowuję tematykę, bo myślę, że każdy kto ma Greenboka potwierdzi - że bez przejścia i bez ćwiczeń z Callbackami i Eventami na poziomie Greenbooka ciężko byłoby zaskoczyć w pełni ostatni rozdział o parsowaniu danych przez RS232 i własne komendy AT

dlatego też na forum już dawno temu osoby, które jeszcze nie miały Greenbooka, ćwiczyły sobie własne podejście do próby organizacji odbierania stringów w ASCII pod moim okiem do czego gorąco zachęcałem zresztą - ponieważ wiedziałem że później to jeszcze lepiej pozwoli na zrozumienie tego o czym będę pisał w kolejnej książce.

tobie też polecam takie podejście a i przeszukanie forum bo na dzień dzisiejszy to już od groma jest tych podejść wielu czytelników, nadmienię że udanych podejść - więc będzie ci łatwiej niż tym pierwszym .... Za to ci pierwsi o wiele bardziej docenili sobie takie ćwiczenia bo poziom doświadczenia (skill) wzrósł i to bardzo ;)

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 lut 2014, o 14:24 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 07 lut 2013
Posty: 600
Pomógł: 47

W tym poradniku przy okazji struktur jest komunikacja przez UART
http://mirekk36.blogspot.com/2012/11/av ... iazek.html

_________________
https://www.instagram.com/myfirstquadcopter/



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 lut 2014, o 14:32 
Offline
Użytkownik

Dołączył(a): 08 wrz 2012
Posty: 505
Pomógł: 6

Dzięki za szybką odpowiedź.
Mam zielona książkę więc wezmę w dłoń i będę szukał i walczył. Owe parsowanie przewinęło mi się przed oczami kilkukrotnie nie wiedziałem tylko, że to do tego. Tak zapytam nieśmiało :oops: , może jakiś video poradnik o uarcie?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 lut 2014, o 14:39 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 07 lut 2013
Posty: 600
Pomógł: 47

W zielonej książce bodajże ostatni dział jest on mocno powiązany z poradnikiem który ci wcześniej podałem.

_________________
https://www.instagram.com/myfirstquadcopter/



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 lut 2014, o 14:45 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27460
Lokalizacja: Szczecin
Pomógł: 1045

Tom277 napisał(a):
może jakiś video poradnik o uarcie?


książka - przede wszystkim książka ... to akurat nie jest wprost (jak dla mnie na poradnik video) bo temat zbyt rozległy i podstawy tego typu to do książki zapraszam .... tym bardziej, że jak piszesz masz zieloną ;) i nawet nie zajrzałeś ... eeeeeeś

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 lut 2014, o 14:52 

Pomógł: 0

Powiem tylko że parsowanie AT jest zaczęte w rozdziale o pilotach IR w zielonej ;). Tam jest wyjaśniona obsługa parsowania, rozdział o uarcie i AT to już bardziej eventy i jak by złożenie tych dwu zagadnień w całość.

Ogólnie parsowanie to głównie lawirowanie na stringach za pomocą gotowych funkcji bibliotecznych. No i przez to też przydaje się właśnie zaleta eventów, że mimo iż w danym momencie parsujemy sobie jakąś daną to żadne ramki nam nie wypadają z obiegu ;).



Góra
  
cytowanie selektywne  Cytuj  
PostNapisane: 14 lut 2014, o 15:00 
Offline
Użytkownik

Dołączył(a): 08 wrz 2012
Posty: 505
Pomógł: 6

No co Ty jak nie zajrzałem. Powiedź mi czy kupiłeś coś kiedyś na co długo czekałeś i jak wróciłeś do domu to odłożyłeś to coś w kąt. Mirek nie chcę tu wazelinować, ale twoje poradniki i książki jak wielu to pisze są drogą przewodnią. Dla mnie to ciastko z kremem. Jedyny problem to, że jest w tym ogrom wiedzy i żeby to ogarnąć potrzeba czasu. Nie raz kimnąłem oglądając twoje poradniki i nie dlatego że były nudne tylko dla tego, że 5 godzin snu to maksymalny luksus na jaki mogę sobie pozwolić w tygodniu i jak tak sobie o tym wszystkim myślę, to zastanawiam się skąd Ty bierzesz na to czas. Może Szczecin to inna galaktyka, macie tam jakąś dłuższą dobę? Jeszcze raz dziękuję za zainteresowanie, sukcesywnie będę pogłębiał swoją wiedzę.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 lut 2014, o 17:45 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27460
Lokalizacja: Szczecin
Pomógł: 1045

Tom277 napisał(a):
Może Szczecin to inna galaktyka, macie tam jakąś dłuższą dobę?


Pracujemy nad tym intensywnie :lol: na razie udaje mi się wyciągnąć dobę dodatkowo tylko o jakieś 3-4 godziny ale w planach jest przedłużenie jej co najmniej o jakieś 17,5 do 19,2 godzin :lol:

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 lut 2014, o 11:29 
Offline
Użytkownik

Dołączył(a): 08 wrz 2012
Posty: 505
Pomógł: 6

Dziękuję za sugestie gdzie powinienem znaleźć komplet informacji na temat UART-a i ASCII. Niestety rozdział, o którym piszecie jest na końcu zielonej książki, czyli jeszcze daleko. Bazując na wielokrotnych upomnieniach Mirka żeby nie „skakać” po książce, ale czytać po kolei i w całości, z czym się jak najbardziej zgadzam, jeszcze dużo nauki przede mną. Tymczasem potrzebuję zastosować komunikację wykorzystującą UART już. Dlatego będę nadal drążył temat z waszą pomocą.
Proszę o wyjaśnienie pewnej kwestii.
W programie do odbioru danych z UART-a z niebieskiej książki wykorzystany jest bufor cykliczny. Rozumiem, że dane, które odebrane są w tle trafiają do tegoż właśnie bufora i tam czekają na pobranie. W tym momencie mam pewien bałagan myśli. Czy wszystkie dane, jakie trafiły do bufora są jakby w jednym worku, czy są one w swoich szufladkach(komórkach)? Jak mogę pobrać np. pierwszy bajt, który „wpadł” do bufora, jako pierwszy? Czy dobrze rozumiem, że jak pobiorę ten bajt to wtedy zmniejszam licznik RxHead, co fizycznie zmniejsza ilość bajtów w buforze? Nie dokończa ogarniam to, w jaki sposób pobieram osiem bitów danych z bufora. Skąd będę miał pewność, że bajt, który pobiorę jest całym właściwym bajtem, że nie jest to np. zlepek połowy poprzedniego i połowy następnego, co da w sumie 8 bitów, ale nie takich, jakie miały być.

Pozdrawiam
Tomek



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 lut 2014, o 12:51 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27460
Lokalizacja: Szczecin
Pomógł: 1045

ale co ty się pytasz skąd masz pewność ?

czy piszesz sam bibliotekę i nie masz pewności co piszesz ?

czy chcesz skorzystać z tej biblioteki w książce i co nie masz tam funkcji do pobrania bajtu danych z tego bufora ? Już nie wspomnę o dokładnym opisie i to PUNKTACH w tabeli jak to działa. Zrozumienie istoty działania buforów cyklicznych to jak widzisz PODSTAWA bo bufory FIFO stosuje się później bardzo często i nie tylko do RS232. Zajrzyj do książki - zacznij czytać po kolei rozdział o buforowaniu cyklicznym i jak to działa - a jeśli po drodze będziesz miał konkretne pytanie bo czegoś nie rozumiesz to pytaj

zamiast zadawać tak ogólne pytania - skąd masz mieć pewność ? .... tak jakby biblioteka była napisana "tak sobie" i raz zadziała a innym razem nie - na chybił trafił

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 lut 2014, o 13:01 

Pomógł: 0

Mówiąc najogólniej działa to w ten sposób że rozpoznawane są znaki końca linii, czyli CRLF i taka dana leci sobie do bufora. Okrojona z CR/LF co zresztą widać po kodzie ;).
Czyli od strony megi biblioteka zachowuje się jak taki terminal, na który przylatują ramki tekstu i wyświetla się tylko tekst.
Parsowanie znaków typu kropki, przecinki etc. trzeba zrobić juz j.w pisałem w samym kodzie obsługującym potem dane. Bo dzięki temu nie interesuje nas tak naprawdę co się dzieje na styku RS232/UART/Procesor.
Nas interesuje że wlatuje nam do bufora po prostu jakiś string, czy tam znaki ASCII które trzeba potem sparsować, wyświetlić czy co tam z nimi chcemy robić.
Całe clue bibliotek z zielone polega właśnie na tym, że nie musimy się zajmować tą "sprzętową" częścią kodu, jak również nie musimy się przejmować że nam się coś przywiesi.
Ot przylatuje ramka zakończona CR/LF wywołujemy przez zdarzenie naszą funkcję która już potem robi z danymi co nam tam potrzebne.



Góra
  
cytowanie selektywne  Cytuj  
PostNapisane: 17 lut 2014, o 13:48 
Offline
Użytkownik

Dołączył(a): 08 wrz 2012
Posty: 505
Pomógł: 6

Toś mnie Mirek nic nie zrozumiał ;) tak to jest jak się „gada” za pomocą klawiatury.
Wykorzystuję bibliotekę z niebieskiej książki. Napisałem, że nie mam pewności, bo brak mi wiedzy i umiejętności. Po prostu jakoś to, co napisałeś w książce (w tym temacie) nie do końca do mnie dotarło. Pewnie, dlatego, że zboczyłem gdzieś swoim rozumieniem tematu i teraz trudno jest mi odnaleźć punkt, od którego zacząłem źle to interpretować. Nie bierz absolutnie tego, jako krytykę. Jak pewnie wiesz nie jest możliwe, a przynajmniej bardzo trudne napisać książkę, którą zrozumie 100% czytelników. Cały materiał, który przerabiałem w twoich książkach jest dla mnie mniej lub bardziej zrozumiały, łatwiejszy i trudniejszy, myślę, że to jak najbardziej jest normalne. Gdyby twoje książki były tak łatwe do zrozumienia, twoje poradniki nie byłyby potrzebne, a tak są znakomitym uzupełnieniem dla tych, którzy nie do końca zrozumieli, „co autor miał na myśli pisząc ten wiersz”. Dla jasności mojej zagmatwanej wypowiedzi, opisy i wyjaśnienia kodów w książce są jak najbardziej ok. i nic do nich nie mam. Język C jest jak mówisz i piszesz super sprawą, ale łatwy nie jest. Gdyby był łatwy to twoje książki i w ogóle obecne forum nie powstało by.
Dzięki rezasurmar, maleńki kroczek do przodu.

Pozdrawiam



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 lut 2014, o 14:03 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27460
Lokalizacja: Szczecin
Pomógł: 1045

Tom277 napisał(a):
Gdyby był łatwy to twoje książki i w ogóle obecne forum nie powstało by


Ale nie bierz mojej wypowiedzi jako atak - ja bardzo dobrze rozumiem że temat nie jest ot taki hop-siup

i dlatego tylko poleciłem jakby zabrać się za czytanie rozdziału od nowa i zadać pytanie WŁAŚNIE w miejscu gdzie się gubisz. To jest ważne - bo często moment gdzie się zatniemy - powoduje że dalej już nijak nie idzie zrozumieć

a łatwiej coś wyjaśnić, doprecyzować (przynajmniej mi) gdy ktoś zadaje precyzyjne pytanie szczególnie dotyczące jakiegoś fragmentu książki czy kodu z książki - rozumiesz ?

więc też się nie gniewaj na mnie że odsyłam do przeczytania tego rozdziału bo absolutnie nie robię tego złośliwie - tylko chcę pomóc i wskazuję jaką drogą

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 lut 2014, o 14:08 

Pomógł: 0

Sam przyznam się że skacze po książce zależnie od problemu nad jakim siedzę i ani razu nie udało mi się jeszcze przeczytać od początku do końca :lol:, ale ja to masochista jestem.

Eventy są fajnie wyjaśnione w poradnikach Mirkowych na youtubie. I w sumie nie trzeba wiele by zaskoczyć tą Mirkową obsługę uarta za pomocą eventów.
Na początku polecam po prostu potraktować to jako czarną skrzynkę obsługującą przylatujące ramki, a parsowanie załatwić jak w sofcie do IR :).
Czyli przyjmujemy na klate stringa obdanego z CR/LF

Sam przyznaje się, że nie potrafię zaczynać od migania diodą, tylko rzucam się na głęboką wodę i tak długo macham rękami aż dopłynę do jakiejś kłody :lol:



Góra
  
cytowanie selektywne  Cytuj  
PostNapisane: 17 lut 2014, o 14:19 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 07 lut 2013
Posty: 600
Pomógł: 47

To i ja się przyznam że za czołem od ostatniego działu GreenBook bo mi był potrzebny na już temat komunikacji miedzy uC a Smartfon-em, a teraz sobie czytam od początku tak jak się należy :lol:

_________________
https://www.instagram.com/myfirstquadcopter/



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 lut 2014, o 14:27 
Offline
Użytkownik

Dołączył(a): 08 wrz 2012
Posty: 505
Pomógł: 6

No co Ty! Przecież już wielokrotnie wszyscy deklarowali się że: się nie obrażamy, nie fochamy, i nie uważamy za urażonych. Takie są zasady tego forum (powinno być to wpisane w regulaminie na samym początku). Kiedyś czytając Twoje wypowiedzi uważałem, że są dość agresywne i nadpobudliwe. Co ciekawe oglądając twoje poradniki widziałem super przyjaznego, życzliwego człowieka. Obserwując Twoja walkę z „życzliwymi” tego świata już wiem co i jak. Dzisiaj twoje wypowiedzi interpretuję już inaczej, tak więc bez obaw. Chyba wszyscy mamy spaczone postrzeganie świata dzięki niezwykle przyjaznemu forum elektr…. .
Wracając do meritum.
Tak mnie naszła myśl.
Czy może ktoś umieścić kawałek kodu korzystający z bufora cyklicznego i pobierający jakieś dane z bufora. Niech pobrany bajt danych będzie przypisany do jakieś zmiennej. Może to mnie oświeci, ale nie nalegam. :)
Czy w którymś miejscu w książce jest taki przykład? Kod w niebieskiej książce str. 268 obsługuje przerwanie, umieszcza dane w buforze ale nie jest pobierany bajt danych z bufora i wykorzystywany w funkcji main.

Bez skakanie się nie da. Początkowe rozdziały czytam non stop i za każdym razem coś nowego zauważam, coś nowego rozumiem. W końcu to jest książka naukowa nie powieść.

Pozdrawiam
Tomek

rezasurmar "mniej/więcej" w którym poradniku?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 lut 2014, o 14:34 

Pomógł: 0

A tu http://mirekk36.blogspot.com/2013/04/si ... i-w-c.html

Tom277 napisał(a):
Czy może ktoś umieścić kawałek kodu korzystający z bufora cyklicznego i pobierający jakieś dane z bufora

Szukaj po moich tematach, a na pewno znajdziesz.



Góra
  
cytowanie selektywne  Cytuj  
PostNapisane: 17 lut 2014, o 14:39 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27460
Lokalizacja: Szczecin
Pomógł: 1045

biblioteka i rozważania w Bluebooku jeśli chodzi o obsługę UART'a kończą się (jeśli chodzi o odbiór danych) właśnie niestety na małej funkcji

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


i tu masz przecież kod jak się pobiera dane z tego bufora - tyle że znak po znaku a nie od razu cały string

od tego trzeba zaczynać - ale też sam widzisz - że gdybym do tego - co jak sam uważasz nie jest i tak proste - dorzucił jeszcze zawartość ostatniego rozdziału z Greenbooka - to chyba przyznasz że wtedy wyszedłby z tego wszystkiego bełkot ...

Z kolei w rozdziale o pseudo-wielowątkowości "Wstęp do systemów czasu rzeczywistego" masz właśnie przykład zastosowania funkcji uart_getc() w kodzie w main ... a więc masz przykłady

odnośnie książek i czytania po kolei to ja zawsze powtarzam tylko jedną rzecz. Że proszę aby RAZ chociaż JEDEN RAZ przeczytać całość - i pewnie to już zrobiłeś - a potem to normalne chyba że już można poruszać się po dowolnych rozdziałach które czytelnika interesują

REASUMUJĄC

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


to odbiór pojedynczych znaków z UART'a

a w Greenboku już masz funkcje typu:

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


i jak zajrzysz do tej z greenboka to zobaczysz że w jej brzuchu sieci i działa sobie uart_getc() jako mniejszy i podstawowy klocek przygotowany w bluebooku ;)

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 lut 2014, o 08:10 
Offline
Użytkownik

Dołączył(a): 08 wrz 2012
Posty: 505
Pomógł: 6

Dziękuję za odpowiedzi na skutek których mam już pewien trop. Prześledzę to teraz dokładnie i jak się "zatkam" wrócę z mam nadzieję konkretnym pytaniem. Dzięki za cierpliwość. :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 21 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 7 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO