SileNT

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 1321 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 824 razy.

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

  Pobierz plik: strobetuner/strobetuner_eagle.zip
  Rozmiar: 62.17 KB, pobrany 261 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 1315 razy.

  Pobierz plik: templogger2/firmware/tl_firmware_0.20_src.zip
  Rozmiar: 229.18 KB, pobrany 1604 razy.

* 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 706 razy.

  Pobierz plik: templogger2/viewer/tl_viewer_1.0_src.zip
  Rozmiar: 10.91 KB, pobrany 589 razy.

- 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 750 razy.

KOD ŹRÓDŁOWY
  Pobierz plik: delphi3d/stetris_b1_src.zip
  Rozmiar: 460.89 KB, pobrany 358 razy.

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

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

KOD ŹRÓDŁOWY
  Pobierz plik: delphi3d/rubik_src.zip
  Rozmiar: 376.04 KB, pobrany 416 razy.

mouse_icon1

Ostatnio w wolnym czasie dla zabawy zbudowałem prosty sterownik myszki szeregowej.
Po podłączeniu do portu COM i wystartowaniu komputera jest wykrywany jako zwykła myszka 2-przyciskowa.
Układ powstał z moich płytek testowych. Jest to najzwyklejsze połączenie mikrokontrolera ATMega8 z COMem przez układ MAX232. Dodatkowo do lini RTS portu podłączyłem tranzystor poprzez diodę prostowniczą i opornik, który uruchamia przerwanie w chwili pojawienia się stanu wysokiego.

Protokół jest bardzo prosty. Po pojawieniu sie +12V na linii RTS układ wysyła bajt 0x4D („M”) w celu inicjacji. Dalsza komunikacja polega na wysłaniu 3-bajtowych pakietów z aktualnym stanem zgodnie z tą tabelką:

Parametry transmisji to 1200 bodów/s, 7\8 bitów danych oraz brak kontroli parzystości. W przypadku 8 bitów danych, najstarszy bit zawsze ma wartość 1. Bit 6 w każdym bajcie jest stały. L i R mają wartość 1 w przypadku wciśniętego przycisku, a X\Y 0-7 to liczba w kodzie U2 (-128 do 127) określająca zmianę położenia kursora.

Krótki program w języku Bascom razem z HEXem skompilowanym dla ATMegi8@12MHz dostępny poniżej. Co 2 sekundy „robi kwadrat” kursorem po ekranie. Można go rozbudować, np. o obsługę klawiatury matrycowej.

  Pobierz plik: mouse_bas.zip
  Rozmiar: 1.02 KB, pobrany 212 razy.

© 2010 Silent's Homepage Administracja Suffusion WordPress theme by Sayontan Sinha