Paweł Zadrożniak

Sesja się zbliża, więc tradycyjnie zacząłem już prokrastynować (a Wy? ;-) ). Ostatnio zacząłem pisać bibliotekę do obsługi klawiatury PS/2 w C dla AVR i postanowiłem na szybko w godzinkę lub dwie stworzyć jakiś praktyczny projekt w celu jej przetestowania. Początkowo nie planowałem tego publikować, ale pokazałem to kilku osobom i się spodobało, więc być może spodoba się i Wam. Mi zabawa tym wynalazkiem sprawia radochę jak dziecku ;-) .

Oto moje elektroniczne „pianino” z komputerowej klawiatury PS/2.
Od strony elektronicznej układ jest bardzo prosty – mikrokontroler ATMega, kondensatory, głośnik, gniazdo PS/2, które barbarzyńsko wyciąłem wraz z kawałkiem uszkodzonej płyty głównej, gdyż nie chciało mi się go wylutowywać i klawiatura PS/2 ze złomu, którą wspaniale oznakowałem zielonym markerem i powyciągałem kilka klawiszy by układ klawiszy przypominał klawiaturę pianina.

Na zdjęciach widać moją uniwersalną płytkę, w której siedzi m.in. Mega32 i programator USB DIY – USBAsp. Głośnik pochodzi z obudowy komputerowej.

Czas wspomnieć coś o softwarze, który jest główną częścią projektu. Być może kogoś to zainteresuje.

Jak już wspomniałem, napisałem go w C i skompilowałem pod AVR-GCC. Program dzieli się na dwie części – obsługa PS/2 i właściwy program – pianino.

Warstwa fizyczna PS/2 jest bardzo prosta. W przypadku klawiatury oprócz VCC/GND wykorzystywane są jedynie linie DATA i CLK. Opis można znaleźć m. in.
[TUTAJ] . W chwili naciśnięcia/puszczenia przycisku klawiatura przesyła 11 bitów (start, data(8), parity, stop) generując przy tym zegar na linii CLK. Zegar połączyłem z wejściem INT0 mikrokontrolera i włączyłem zewnętrzne przerwanie. Dane można odebrać na dwa sposoby – w momencie wystąpienia przerwania można odebrać wszystkie 11 bitów lub odbierać po 1 bicie w każdym przerwaniu. Ja zastosowałem drugą opcję. Dlaczego? Dzięki temu nie marnuję czasu pomiędzy bitami. Jeśli odbierałbym cały bajt, musiałbym czekać na aż klawiatura prześle wszystkie 11, a że działoby się to w przerwaniu zablokowałbym inne przerwania aż do zakończenia odczytu, co mogłoby być niepożądane w przypadku korzystania innych często występujących przerwań. Minusem jest możliwość utraty synchronizacji, kiedy na linii CLK pojawi się jakiś „śmieć” (moja klawiatura ze złomu jest lekko upośledzona i czasem je wysyła ;-) ) – można to wyeliminować wywołując co jakiś czas funkcję synchronizującą.
Po odebraniu 11-go bitu, bajt trafia do kolejki klawiatury – struktury zawierającej bufor o definiowalnej wielkości i flagi. Dzięki zastosowaniu bufora główna pętla nie musi „interesować się” życiem klawiatury – wystarczy jedynie ściągnąć z kolejki klawisz (o ile tam się znajduje). Ponadto takie podejście umożliwia podłączenie dwu lub więcej klawiatur – wystarczy tylko stworzyć dodatkową strukturę i przerobić funkcje tak, by operowały na wskaźnikach zamiast na globalnej strukturze (stworzyłem globalną dla zwiększenia wydajności/wygody).

Co do algorytmu pianina – mikrokontroler generuje proste tony (przebiegi prostokątne) za pomocą wbudowanego sprzętowego timera. W momencie, gdy chcę wygenerować dźwięk, przeliczam wartość docelowej częstotliwości na odpowiednią wartość wpisywaną do rejestru (właściwie rejestrów, bo jest to liczba 2-bajtowa) timera, zależną od częstotliwości taktowania i zmieniam stan wyjścia, do którego podłączony jest głośnik przy każdym przerwaniu.
Pianino posiada własną kolejkę klawiszy – dzięki niej program „pamięta”, jakie klawisze są aktualnie wciśnięte i zmienia ton w odpowiedni sposób.
Niestety mając tylko jeden kanał niewiele można zdziałać, ale przy zastosowaniu pewnego triku można nieco urozmaicić dźwięk. Zastosowałem taki sam trik jak w starych DOSowych grach (to były czasy, nie? ;-D ) – w momencie wciśnięcia dwu klawiszy częstotliwość jest przełączana z jednego tonu na drugi 20-50ms, co daje (przynajmniej częściowe) wrażenie dwóch tonów jednocześnie. Tryb dwutonu można wyłączyć/wyłączyć za pomocą odpowiednich klawiszy.

Na koniec najciekawsza opcja – nagrywanie sampli. Pozwala ona nagrać 4 sample o długości do 65 nut (w przypadku, gdy wszystkie dźwięki/przerwy są krótsze od 4 sek.). Podczas nagrywania zapisuję w pamięci zdarzenie (wciśnięcie/puszczenie klawisza N) i odstęp od poprzedniego zdarzenia w rozdzielczości około 16ms (1/64) do zajmuje 2B. Jedna nuta to wciśnięcie i puszczenie klawisza. 65*2*2B*4 sample daje 1040B potrzebnej pamięci na sample. oczywiście, można by to bardziej skompresować, ale nie było sensu marnować czasu na pisanie efektywniejszego algorytmu, bo nie taki był cel tego projektu. W przypadku ATMegi8/16 trzeba by zmniejszyć ten obszar o połowę – potrzebna jeszcze miejsca na kolejki, zmienne pomocnicze i stos (no końcu). Sample możnaby też zapisywać na EEPROMie – były by trwałe.
Sample można odtwarzać i jednocześnie grać drugą linię. Algorytm odtwarzania ma małe niedociągnięcia, które widać przy przełączaniu oktaw, ale jak już pisałem, celem projektu była biblioteka PS/2.

A teraz najważniejsze – 2 filmiki: na jednym demonstracja działania tryby dwutonowego i sampli na znanej piosence polskiego zespołu a na drugim… marsz turecki ;-) .

Jeśli będą chętni, to udostępnię kod programu/bibliotekę PS/2 jak tylko ją dokończę i napiszę dokumentację – pisać.
Jak mi się zechce, to dopiszę obsługę myszki – można by modulować nią dodatkowo tony klawiszy (coś na zasadzie wajchy w keyboardach ).
Jeśli ktoś chciałby się pobawić, to załączam skompilowany program dla ATMegi32 (8MHz). Schemat połączenia (tak jak było mi wygodnie na mojej płytce testowej):
ATMEGA.PORTD.2 (INT0) - PS2.CLK
ATMEGA.PORTC.1 - PS2.DATA
ATMEGA.PORTD.6 - SPEAKER

Do tego oczywiście głośnik do masy, VCC=5V dla atmegi i klawiatury i do tego jakiś elektrokit filtrujący miedzy VCC a GND i kondensatory do kwarcu 8MHZ około 27-30p. Program dodatkowo wysyła dane pomocne w debugowaniu po RS232 i czasem się przywiesi na starcie co jest powodem synchronizacji PS/2, której w bibliotece jeszcze nie ma .

Link do mojego tematu w serwisie elektroda.pl:
http://www.elektroda.pl/rtvforum/viewtopic.php?p=9574045#9574045

Firmware v. 0.1 (alpha):
  Pobierz plik: avrpiano/arvpiano_aplha_0_1_m32_8MHz.hex
  Rozmiar: 25.62 KB, pobrany 2579 razy.

Ostatnio postanowiłem udoskonalić mój poprzedni rejestrator temperatury. Celem było stworzenie mniejszego i stabilnego urządzenia. Projekt został całkowicie przebudowany.

Płytka uległa znacznemu zmniejszeniu, gniazdo na kartę pamięci poszło pod spód, przez co mogłem zrezygnować z górnej warstwy. Po długiej zabawie z edytorem layoutów w Eaglu udało mi się zmieścić układ w obszarze ~8x7cm. Dodałem tranzystory sterujące zasilaniem peryferiów (zegar/termometr/karta/lcd) i podświetleniem wyświetlacza oraz drugi rezonator kwarcowy 32k dla zegara wybudzającego z trybu uśpienia. Jak poprzednio, wszystkie elementy są w obudowach do montażu przewlekanego (za wyjątkiem gniazda na SD/MMC. Układ można łatwo rozbudować dodając dodatkowe gniazda np. na czujnik wilgotności, ciśnienia, anemometr itp.

Program w C również dużo się zmienił. Przepisałem go prawie od nowa. W przeciwieństwie do niedbale napisanego i niedokończonego softu w wersji 0.2x (includy .c w main, etc.), jest ładnie podzielony na moduły, zoptymalizowany i stabilny. Nie zawiesza się już po wyjęciu i włożeniu karty itp. Ponadto zrezygnowałem z biblioteki Dharmaniego, w której znalazłem błędy na rzecz dużo lepszej – FATFS. Teraz oprócz FAT32 rejestrator obsługuje systemy FAT12 i FAT16. Dopisałem również obsługę oszczędzania energii. W trybie oszczędnym wyświetlacz jest wyłączony, peryferia włączane tylko kiedy potrzeba, a po zapisie mikrokontroler przechodzi w stan uśpienia do następnego pomiaru, co znacznie zmniejszyło pobór mocy. Według mojego taniego, chińskiego multimetru rejestrator pobiera około 13-14uA w uśpieniu.

Aktualnie testuję wstępną wersję programu (0.30A). Pierwsze testy wypadły bardzo pozytywnie.

Zmiany w wersji 0.30A
tryb oszczędzania energii – możliwość włączenia na stałe;
– obsługa FAT12/16/32;
– wyeliminowany problem niekompatybilności z niektórymi kartami;
– LCD 2×16 znaków z podświetleniem i regulacja jasności.
– zwiększona stabilność

Planowane zmiany w docelowej wersji 0.30:
– zamiana beepera z generatorem na membranę piezo (taką jak w poprzedniej wersji) i – w chwili montażu miałem tylko beeper ;-) ;
– pominięcie napisu „oszczędzanie energii” przy starcie w trybie oszczędnym – aktualnie jest tylko w celach testowych;
– obsługa pozostałych błędów zapisu – np. brak wolnego miejsca na karcie
– kilka drobnych poprawek

Demo wstępnej wersji:

Na razie nie udostępniam schematu/programu.

*** Aktualizacja: 20-12-2010 23:17***

Dziś ku mojemu zdziwieniu projekt matrycy pojawił się na popularnych portalach, co mnie bardzo ucieszyło. Matryca jest już gotowa. Składa się z dwóch paneli, które można ułożyć w kwadrat 32×32 lub prostokąt 64×16. Końcowy efekt można zobaczyć na filmiku poniżej.

Jeśli podoba Ci się ten projekt, zagłosuj na mnie w konkursie na portalu elektroda.pl klikając „fajne” (wymaga zalogowania się):

http://www.elektroda.pl/rtvforum/topic1851303.html

Aktualizacja: 20-12-2010 23:17

Oprócz wyświetlania świątecznych grafik wyświetlacz świetnie nadaje się również do innych rzeczy. Oto kolejne dwa filmiki prezentujące jego możliwości tekst\grafika i analizator widma (plugin do WinAmpa; działa również z FooBarem 2000 i pluginem foo_vis_schpeck) – konfiguracja 64×16 i 32×32. Niestety z powodu kiepskiego aparatu widać smużenie – w rzeczywistości tego nie ma i obraz wygląda o wiele lepiej a przy analizatorze widma uzyskałem całkiem niezły framerate.

Jak to jest zrobione?

Pomysł na wyświetlacz powstał już jakiś czas temu, lecz zabrałem się za to gdy kolega przypadkowo znalazł tanie matryce 8×8 5mm na Allegro ;-) . Zakupione 16 sztuk czekało w pudełku aż znajdę dla nich trochę czasu.

Układ

Mój wyświetlacz to standardowa konstrukcja – 8 logicznych multipleksowanych wierszy. Każdy wiersz to długi rejestr przesuwny z zatrzaskiem (74HC595). Zaprojektowałem płytki tak, aby można było dołączyć kolejne panele szeregowo wydłużając rejestr. Obecnie zbudowałem 2 takie matryce. Matrycami obecnie steruje ATMega32 z 32kB pamięci flash i 2kB RAMu na mojej płytce testowej. Taki sam układ będzie docelowo na płytce sterownika – jeśli kiedyś dobuduję dodatkowe panele to przyda się więcej RAMu (obecnie wykorzystuję niecałe 0,5kB). Sterownik komunikuje się z komputerem za pomocą sprzętowego UARTa z konwerterem napięć TTL<->COM (MAX232) przy prędkości 115,2k baud i w celu jak najmniejszego błędu w transmisji mikrokontroler jest taktowany zewnętrznym kwarcem 11,0592MHz. Obecnie to wystarcza bez problemu. W przypadku większej ilości matryc w szeregu można będzie zwiększyć częstotliwość do 14Mhz lub przetaktować układ do 18\22MHz.

Płytki zaprojektowałem w Eagle’u i wykonałem metodą termotransferu –  wyszły całkiem nieźle, zwłaszcza jak na swój rozmiar.


W chwili obecnej została mi do zaprojektowania płytka sterownika. Na pewno znajdą się na niej 2 lub więcej gniazd na szeregi paneli na przyszłość. Zastanawiam się nad złączem kart SD – można by wtedy wyświetlać obraz bez użycia komputera. Myślę również nad osobną płytką podłączaną do sterownika wyświetlacza z kilkoma przyciskami i mikrokontrolerem z zaimplementowanymi prostymi gierkami.

Software

Program dla mikrokontrolera napisałem w C (środowisko AVR Studio). Aktualnie zajmuje około 4kB i na chwilę obecną używa 485B RAMu (2 „strony” w pamięci obrazu plus 128-bajtowy bufor na dane od PCta).

Obecnie protokół komunikacji z PCtem to zaledwie kilka komend takich jak czyszczenie ekranu, ramka 64B (dla 32×16) lub 128B (dla 2 paneli) czy przesunięcie zawartości ekranu w lewo\prawo\górę\dół. Każdą komendę rozpoczyna się przez wysłanie bajtu oznaczającego jej numer a następnie wysłaniu liczby bajtów odpowiadającej danej komendzie. W celu uniknięcia problemów z synchronizacją przed każdą komendą komputer wystawia impuls na lini DTR, na co sterownik reaguje powrotem do odczytu numeru komendy (jeśli jest np. w stanie odbierania ramki z orbazem).

Program do wysyłania grafiki napisałem w środowisku Delphi. Posiada możliwość wyświetlania przewijającego się tekstu oraz wyświetlania grafik BMP jako obraz statyczny\przewijany lub animację. Aplikacja ma również możliwość wyboru układu paneli i podgląd na żywo.

Programy udostępnię w niedalekiej przyszłości i przy okazji dopiszę więcej szczegółów odnośnie jego działania. Muszę jeszcze zrobić kilka poprawek i trochę uporządkować\udokumentować kod – na pewno nikt nie chciałby przeglądać tego bałaganu ;-) .

PLIKI:

  Pobierz plik: ledmatrix/lm_layout_v_0_1.png
  Rozmiar: 732.37 KB, pobrany 2099 razy.

Zapraszam do komentowania i zadawania pytań!

Dzisiaj przeniosłem stronę (i domenę) z mojego serwera na hosting WWW (unixstorm.org).
Strona działa teraz o wiele szybciej.
Zasoby ze starego serwera dostępne są teraz pod adresem http://server.silent.it.cx/<ścieżka> .

Ponadto ostatnio skończyłem budowę drugiego panelu LED – niedługo pojawi się aktualizacja w poprzednim wpisie.

*** AKTUALIZACJA: 2010-10-03 – czytaj niżej ***

Dawno tu nic nie pisałem…
Ostatnio zacząłem budowę matrycy LED, składającej się z dwóch modułów 32×16, które będzie można ułożyć w prostokąt 64×13 lub kwadrat 32×32.

Budowa jest dość prosta – standardowa konstrukcja z szeregiem rejestrów przesuwnych z zatrzaskami połączonych z 8 wierzami multipleksowanymi na zmianę. Wyświetlacz tworzą matryce LED 8×8 (5mm) kupione niedawno na Allegro w dobrej cenie.

Jak dotąd złożyłem pierwszy moduł. Płytkę zaprojektowałem w Eagle’u i wykonałem metodą termotransferu. Pomimo swojego rozmiaru, wyszła bardzo dobrze – tym razem zamiast żelazka użyłem laminatora do dokumentów, który kupiłem niedawno w Lidlu za 49,99 ;-) . Być może niedługo napiszę o tym więcej.

Wiercenie i lutowanie podstawek okazało się dość męczące – na płycie znajduje się około 600-700 otworów. Matryce umieściłem na podstawkach pod goldpiny – wchodzą dość ciężko, ale jeszcze się mieszczą. Całość jest niestety mało sztywna – następny moduł będzie na grubszym laminacie (1,6mm).

Całość jest sterowana przez mikrokontroler ATMega32 na mojej uniwersalnej płytce testowej. Docelowo animacja będzie przesyłana z komputera przez RS232 (COM lub adapter USB-RS232) w czasie rzeczywistym lub będzie ją można wgrać na stałe do sterownika. Aktualnie jest ona wkompilowana w program.

Panel prezentuje się następująco:


W rzeczywistości nie mieni się tak jak na filmie.

Aktualnie zabieram się za pisanie programu w C dla mikrokontrolera do odbioru danych z komputera oraz drugiego programu dla PC do obsługi wyświetlacza.
Oprócz tego do zrobienia został jeszcze projekt płytki sterownika oraz drugi panel.

Jak skończę projekt, opublikuje schematy \ layouty PCB oraz programy.

*** AKTUALIZACJA: 2010-10-03 ***

Projekt idzie do przodu – dzisiaj skończyłem pisać wstępną wersję programu do komunikacji z wyświetlaczem. Software posiada podstawowe możliwości – przewijanie tekstu w każdym kierunku, wyświetlanie monochromatycznych grafik BMP – jako animacja lub przewijany obraz statyczny. Ciekawym dodatkiem jest plugin do Winampa, który wyświetla na żywo analizator widma.

Sterownik matrycy komunikuje się z PCtem za pomocą RS232. Prędkość transmisji 115,2 kBaud\s w zupełności wystarczy do wyświetlania płynnej animacji, jak i do wyświetlania analizatora widma. Przy dwóch panelach 32×16 sterownik powinien uciągnąć 50-60 klatek\sek.

Demo #2 – tekst, grafika i spectrum analyzer:

Do zrobienia pozostał drugi panel, mniejsze poprawki w protokole transmisji i dodanie funkcji wyboru rozmiaru matrycy w sofcie dla PC (32×16 \ 64×16 \ 32×32). Niedługo opiszę dokładniej cały projekt.

Tak jak obiecałem, przedstawiam druga nową konstrukcję. Jest to stroik do każdego typu gitary (powinien też działać z innymi instrumentami strunowymi) wykorzystujący efekt stroboskopowy.

Zasada działania jest bardzo prosta. Mocne diody LED mrugają z częstotliwością wybranego tonu. W przypadku, gdy struna jest dobrze nastrojona (drga z taką samą częstotliwością co diody), to po oświetleniu jej w czasie gdy drga, widać dokładnie jedną cienką linię. Przy niewielkim odchyleniu częstotliwości linia oscyluje powoli na boki, a przy dużym rozstrojeniu widać kilka rozmazanych kresek. Strojenie polega na „unieruchomieniu” świetlnej kreski. Niestety, nie udało mi się tego uchwycić aparatem.

Układ jest bardzo prosty – zbudowałem go na mikrokontrolerze ATMega8 z użyciem podwójnego wyświetlacza segmentowego oraz dwóch mocnych diod LED 10mm. Dodatkowo dołączyłem beeper, który wydaje aktualnie wybrany ton. Dźwięk jest wybierany za pomocą pierwszych dwóch przycisków, natomiast trzeci aktywuje brzęczyk.

Program wymaga jeszcze drobnych kalibracji, ponieważ (jak to zwykle bywa w praktyce) teoretycznie poprawnie wyliczone wartości nie zapewniają idealnie dokładnej częstotliwości. Kod źródłowy wraz ze skompilowanym HEXem oraz projektem w Eagle (schemat + layout) dostępne poniżej. W planie mam dokładniejszą kalibrację oraz dodanie takich funkcji jak metronom oraz opcje strojenia, np. „niskie D” lub C. Oczywiście zapraszam do pisania komentarzy.

  Pobierz plik: strobetuner/strobetuner_0.1_a8_8mhz.hex
  Rozmiar: 11.19 KB, pobrany 2093 razy.

  Pobierz plik: strobetuner/strobetuner_0.1_src.zip
  Rozmiar: 39.75 KB, pobrany 566 razy.

  Pobierz plik: strobetuner/strobetuner_eagle.zip
  Rozmiar: 62.17 KB, pobrany 1478 razy.

Oto nowa wersja rejestratora temperatury. Tym razem jest to dedykowana płytka dwustronna wykonana metodą termotransferu zamiast uniwersalnej. Układ został wzbogacony o wyświetlacz alfanumeryczny, klawiaturę oraz beeper.

Klawiatura posiada 6 przycisków połączonych w matrycę – „strzałki”, „OK” (lewy-dolny) oraz „Powrót” (prawy-dolny). Po przetrzymaniu przycisku OK w czasie startu rejestratora (reset) włącza się tryb konfiguracji w którym można ustawić aktualny czas (w przyszłości będzie tam więcej opcji). Wyświetlacz, to 16-znakowy moduł na sterowniku zgodnym z HD44780 kupiony za jedyne 5,5zł w sklepie Lispol ;-) . Wyświetlana jest na nim aktualna godzina oraz temperatura naprzemiennie z datą. W przeciwieństwie do pierwszej wersji, na płytce znajdują się trzy diody sygnalizacyjne (zasilanie, status – mruga co 5 sekund, zapis\odczyt z SD(SPI)\RTC(I2C)\Termometra(1Wire)) oraz beeper, który wydaje dźwięki podczas wciskania przycisków przy konfiguracji oraz sygnały kontrolne przy starcie. Dodatkowo na płytce znajduje się wyprowadzenie RS232 (TTL) przydatne przy debugowaniu.

Program nie jest jeszcze w pełni ukończony – wymaga trochę zmian w celu optymalizacji (był pisany „na szybko” – co widać np. przy budowie sekcji konfiguracji – ustawienia daty\godziny) oraz dodania kilku nowych funkcji. Rejestrator działa od początku lutego i jak na razie sprawuje się bardzo dobrze.

Firmware, przeglądarka (wersje skompilowane jak i źródła) dostępne poniżej! Jeśli podoba Ci się projekt, zostaw swój komentarz.

FOLDER PROJEKTU:

  Otwórz folder:
  TEMPLOGGER2/

FIRMWARE:

Aktualna wersja: 0.20

  Pobierz plik: templogger2/firmware/tl_firmware_0.20_a32_8mhz.hex
  Rozmiar: 56.05 KB, pobrany 2562 razy.

  Pobierz plik: templogger2/firmware/tl_firmware_0.20_src.zip
  Plik niedostępny!

* Program wymaga wyłączenia JTAGa – piny PC1…PC5 są używane (LCD).
Przykładowa konfiguracja w AVR8-Burn-o-mat:

do zrobienia m.in:

- zapisywanie wartości średniej z kilku pomiarów zamiast z jednego;
- opcja wyłączenia dźwięku, lub wyłączenia beepa kontrolnego podczas startu w godzinach nocnych – przydatne kiedy wyłączają i włączają prąd o 4 rano :-) ;
- uruchomienie watchdoga na wypadek zawieszenia się programu;
- automatyczna reinicjalizacja karty po wyjęciu w trakcie działania urządzenia;
- ogólna optymalizacja kodu, np. menu

znane błędy:

- zawieszanie się rejestratora po wyjęciu (i włożeniu) karty SD przy próbie zapisu (wymagany reset)

UKŁAD:

Aktualna wersja: 1.1

Schemat wykonałem przede wszystkim w celu wygodnego stworzenia layoutu płytki e Eagle, więc jest trochę niedokładny ;-)

DODATKI:

- Przeglądarka (Win32; aktualna wersja: 1.0); program napisany w Delphi (7).
  Pobierz plik: templogger2/viewer/tl_viewer_1.0_bin.zip
  Rozmiar: 210.92 KB, pobrany 938 razy.

  Pobierz plik: templogger2/viewer/tl_viewer_1.0_src.zip
  Plik niedostępny!

- Przeglądarka online (aktualna wersja: 1.0); napisana w PHP – jeśli chcesz zobaczyć kod źródłowy, napisz do mnie.

WYNIKI POMIARÓW (offline):

Folder „dane” z plikami tekstowymi powinien znajdować się w jednym folderze razem z TLViewer.exe.
  Otwórz folder:
  TEMPLOGGER2/DANE/

Strona jest znów dostępna po 6-tygodniowej przerwie z powodu remontu w miejscu gdzie stoi serwer oraz tajemniczego podprowadzenia switcha ;-) .
W najbliższym czasie opublikuję 2 nowe projekty, o ile kontroler RAID nie nawali bo coś ostatnio zgłaszał błędy związane z akumulatorem.

Napisałem wstępną wersję generatora wykresów z rejestratora temperatury w PHP. Niestety, od 1 marca jest kilkudniowa luka, ponieważ niezidentyfikowany domownik odłączył zasilacz rejestratora od prądu i dopiero teraz to zauważyłem ;-) .

Przeglądarka dostępna jest tutaj:

http://silent.org.pl/templogger/

Kod PHP dostępny na życzenie.

Dzisiaj postanowiłem udostępnić 2 proste gierki oraz ich kody źródłowe, które kiedyś napisałem w Delphi. Są to aplikacje wykorzystujące silnik 3D. W sieci dostępnych jest dużo darmowych silników 3D dla różnych środowisk. Ja użyłem w swoich dwóch programach silnika GLScene. Jest to rozbudowany silnik na OpenGL’u oferujący dużo funkcji – więcej informacji tutaj: http://www.glscene.org/ .
Oto i one:

STetris
Tetris z dodatkowym utrudnieniem, którym jest ruchoma plansza.

.EXE
  Pobierz plik: delphi3d/stetris_b1.exe
  Rozmiar: 1017.5 KB, pobrany 1755 razy.

KOD ŹRÓDŁOWY
  Pobierz plik: delphi3d/stetris_b1_src.zip
  Plik niedostępny!

Kostka Rubika
Kostka Rubika z widokiem 3D oraz siatki 2D.

.EXE
  Pobierz plik: delphi3d/rubik.exe
  Rozmiar: 713 KB, pobrany 1923 razy.

KOD ŹRÓDŁOWY
  Pobierz plik: delphi3d/rubik_src.zip
  Plik niedostępny!