Przyszła kryska na Matyska, znaczy się nadszedł czas ucywilizować się i zainstalować jakiegoś cms-a, bo statycznych stron, to już od kilku lat mi sie nie chciało robić, a niestety byłoby co opisywać.
Zachęcam do odwiedzenia co jakiś czas – może coś ciekawego się tu pojawi? 🙂
GPS logger do samodzielnego złożenia
Trochę historii
Na grupie pl.misc.elektronika ktoś wspomiał o tanich modułach gps firmy Axiom z Allegro. Jak grzyby po deszczu zaczęły napływać raporty kolejnych ludzi, którzy kupili i uruchomili. Mi również udało się załapać na promocyjną cenę i również zacząłem dłubać.
Oprócz polutowania mikroskopijnego złącza, to reszta już była banalna. Na początek MAX232, zasilanie +5V wzięte wtyczki PS/2 komputera i coś wypluwa: znaczy się dobry.
Kolej na antenę. Chwilowo w finansowym dołku decyduję się na zrobienie własnej. Google długo nie wyrzucają nic ciekawego, aż w końcu trafiam na artykuł (pdf) z jakiejś gazety, który wygląda zachęcająco i biorę się do roboty. Później jeszcze znajduję ze dwa projekty, ale ten jest z nich najlepszy (stosunkowo mała antena i niezły zysk).
Pierwsze odczyty prawdziwej pozycji! Kilka resetów i sporo czasu ponownego szukania satelitów i pozycji od nowa skłaniają mnie od razu do domontowania bateryjki podtrzymującej pamięć (CR2032 z płyty głównej). Elektronika ląduje w pudełku od zapałek:-)
Pierwsze ślady zrobione na rowerze z laptopem…
Niestety, przerwy w śladzie (luźna wtyczka zasilania), waga laptopa i sposób jazdy z
jednak dosyć delikatnym ładunkiem nie pozwalają spocząć na laurach – trzeba kombinować dalej.
CEL: urządzenie rejestrujące ślady, najlepiej w postaci 'czarnej skrzynki’.
A najlepiej jakby potrafiło zarejestrować cały wyjazd Harpaganowy (3-4 dni)…
Mając kilka złomowatych baterii od DELL-a mam pomysł, żeby wsadzić całość właśnie do takiej baterii. Idea była taka, żeby na wyjazdach z laptopem nie zajmowało to dodatkowego miejsca, łatwo się ładowało (z laptopa) i awaryjnie również zasilało laptopa. Po załadowaniu do baterii czterech 'nowych’ ogniw Li-Ion (zamiast 8 jak jest orginalnie) upadło już jedno założenie: elektronika baterii dalej myśli, że ogniwa mają 3.6Ah i ładuje je za dużym prądem 🙁
Po pierwszych testach i padzie dwóch ogniw (były wadliwe) elektronika baterii wogóle fiksuje i nie chce nawet oddawać prądu do laptopa -> śmietnik.
Hardware
Chwilowo wygląda to tak:
Można to nazwać wersją 1.0, bo działa tak jak trzeba, ale w miarę jedzenia apetyt rośnie 🙂
Jest to wersja prototypowa (procesor w DIL, płytka uniwersalna itp).
Co widać i z czego w końcu to się składa:
- 2 akumulatorki Li-Ion (docelowo 4, ale po padzie dwóch muszę odrobić straty)
- przetworniczka do 3.3V na LM2675 (za radą RoMana), przy 4 ogniwach sprawność jej wynosiła 78%. Zielona płytka widoczna w lewym dolnym rogu. Z braku kondensatorów low ESR na napięcie ok. 20-25V dałem dwa zwykłe równolegle. Dla porównania najpierw zrobiłem przetwornicę na MAX832, ale tamta miała sprawność 71%
- moduł GPS Axiom zamontowany na płytce 'do góry nogami’. Pod nim wkomponowana bateria CR2032 (ekran modułu 'umasiony’ robi od razu za ujemny styk baterii).
- Procesor ATMEGA8L z zewnętrznym kwarcem 8Mhz
- kieszonka na kartę pamięci SD/MMC
- pod kieszonką na kartę zamontowanych kilka elementów biernych, jeden tranzystor, kwarc itp
- 2 przełączniki bistabilne (jeden do włączania zasilania, drugi do przełączania wyjścia rs232 procesor<>gps, jeden mikroswitch (jeszcze nie wiem po co:-))
- złączka do podłączenia wyświetlacza (w planach). Służy również do ładowania akumulatorów.
- wykastrowany kabel od komórki (Siemens) robiący z powodzeniem za max3232, taniej i nie zabierając miejsca na płytce
- złączka SMA z krótkim kabelkiem i wtyczką MMCX do GPS-a
- dwie diody świecące (czerwona i żółta)
Schemat:
Jak widać jest to wersja beta (możnaby wywalić kilka oporników podciągających, pozmieniać trochę wartości kondensatorów, bo dałem jakie miałem:-)). JP1 dodany 'z musu’ po stracie dwóch ogniw i obniżeniu napięcia zasilania.
Robi w tej chwili
- procesor odbiera po rs-ie dane nmea z gps-a i zapisuje sobie w buforze w pamięci (na przerwaniach)
- po uzbieraniu się co najmniej 512 bajtów zapisuje dane na kartę SD
- zapamiętuje ostatni sektor zapisany w eepromie, żeby można było później dalej nagrywać na kartę od przerwanego miejsca (nawet po wyłączeniu zasilania)
- działa hot-swap karty (sprawdzanie obecności i inicjalizacja przy włożeniu, nie zapisywanie danych w ciemno)
- mierzone jest napięcie baterii przez wewnętrzny ADC, wypluwany status co 10s na wyjście mikroprocesora (rs) oraz zapisywane na karcie pomiędzy komunikatami nmea (inteligentnie – czeka z zapisem do cr/lf)
- czerwona dioda: świeci gdy brak karty lub był błąd w zapisie, miga krótko podczas zapisu sektora
- żółta dioda: miga krótko przy każdym odebranym bajcie po interfejscie szeregowym z gps-a
- zrobione proste cli umożliwiające resetowanie licznika sektorów karty, pokazanie aktualnego stanu licznika oraz stanu baterii, krótki help.
Software
Ściągnij: pliki na sourceforge.net
- Licencja GPL
- Asembler
- Do kompilacji używam avra – nie gwarantuję, że czymkolwiek innym się to skompiluje
- Ponieważ kod na chwilę obecną zajmuje ok 1kB, a pamięci jest tam aż 8KB, to nie jest on specjalnie optymalizowany pod kątem zajętości pamięci. Głównym priorytetem jest
na razie jego czytelność i spójność logiczna. Jeżeli masz jakieś uwago do kodu, to nie obrażaj się jak odpowiem 'tak ma być, bo tak jest ładniej’. Słaba optymalizacja pod względem objętości nie oznacza to oczywiście niechlujstwa i stosowania makr bezsensownie powiększających kod. - Obsługa karty SD/MMC przeklepana z Yampp-a z dodaniem timeoutu przy zapisie, bo była pętla nieskończona w pewnych warunkach (brak odpowiedzi karty po wysłaniu danych do zapisu).
- Jak na razie można doszukać się tam kilku reguł:
- definicje rejestrów, bitów wraz z opisami na początku
- wszystkie rejestry mają swoje nazwy robocze, więc nie używam nazw nic nieznaczących typu r18 itp. Wyjątkiem może być r0, bo czasem jest to jedyny rejestr na którym coś działa
- makra
- wektory przerwań
- głowny program
- procedury obsługi przerwań
- inne pomocnicze procedury
- stałe (dane)
- zmienne (ram i eeprom)
- procedury dotyczące karty sd zaczynają się na sd_, obsługi rs232-a na rs_, ogólne spi na spi_ itp.
- w sofcie może być trochę śmieci, bo jest to wersja robocza i oprócz tego co działa już są zaczątki innych rzeczy (niekoniecznie będzie to docelowo tak wyglądać)
UWAGA!: ponieważ soft nagrywa dane sektor po sektorze, więc prawdopodobieństwo odczytania takiej karty pod windowsem jest mizerne. Pod Linuksem i innymi systemami, które nie mają problemów z dostępem do urządzeń bez filesystemu i partycji w większości wypadków wystarczy użyć komendy
i ewentualnie wyciąć z końca pliku śmieci
TO DO
- obsługa jakiegoś filesystemu na karcie zamiast zapisu 'żywych’ sektorów
- więcej logiki i sterowania do procesora
- kalibracja napięcia baterii poprzez cli
- rozpoznawania różnych kart (a przynajmniej wielkości)
- oprogramowanie mikroswitcha
- podłączenie wyświetlacza od Siemensa S65
- oprogramowanie wyświetlacza (wyświetlanie map???)
- czujnik ruchu roweru (kontraktron + magnes na kole) i automatyczne zaznaczanie waypointów
- trochę elektroniki dla baterii (może ładowarka 'zewsząd’ ze step-up sterowana prockiem?)
- wersja angielska i ewentualne przenosiny na avrgps.sourceforge.net
Do wersji 2.0 elektroniki:
- zmiana sposobu zasilania pozwalająca procesorowi odciąć zasilanie dla modułu gps-a
- zmiana połączenia ogniw na dające 7.2V (teraz 14.4V) -> większa sprawność przetwornicy, łatwiejsze ładowanie i kontrola baterii, ale do podświetlenia wyświetlacza trzeba będzie dorobić przetworniczkę step-up
- zmiana procka na ATMEGA128, ATMEGA162 lub inny z 2xUART, bo to zwiększy elastyczność
- dodanie jakiegoś multipleksera zamiast przełącznika wejść (pewnie będzie CPLD Xilinxa)
- czujnik przyśpieszenia do wykrywania stanu nieruchomego i uśrednianie pozycji przy bezruchu
- lepsze zasilanie przetwornika ADC, pomiar napięcia poszczególnych ogniw (?)
- podłączenie kamerki MCA-25 od Ericssona
- zintegrowanie wyświetlacza
ChangeLog
- 2006.02.27: dodane D2, D3, C7 i R9 dla możliwości wyłączenia przetwornicy i samoodcięcia zasilania przez procesor w przypadku zbytniego rozładowania baterii (trzeba uaktualnić soft!).
- 2006.02.27: strona i kod już w subversion
- 2006.03.02: pliki na sourceforge.net. Migracja strony chyba też wkrótce
- 2006.03.02: poprawiony troche hardware, w sofcie już autowyłączanie przy za niskim stanie baterii, trochę drobnych poprawek w kodzie
- 2006.03.19: interpreter komend (cli). Można teraz przez konsolę po rs-ie zresetować licznik sektorów, odczytać aktualny sektor, włączać/wyłączać raportowanie statusu baterii na konsolę, krótki help. Dodatkowo dolny poziom stanu baterii przy którym wyłączana jest przetwornica jest zapisany w eepromie zamiast na stałe z kodzie.
- 2006.04.06: uzupełnienie www
- 2006.07.10: dodanie buzzera piszczącego przy niskim stanie baterii (pod PB0)
Pomocne linki
- http://www.arrl.org/files/file/Technology/tis/info/pdf/0210036.pdf – An Inexpensive External GPS Antenna
- http://www.ggrweb.com/article/gulley.html – GPS Helix Antenna
- http://www.sp2swj.sp-qrp.pl/gps/gps_Axiom_Swift_B2.htm – duuużo materiału o module GPS Axiom Swift
- http://www.laptop.net.pl/gps_swift/ – pakiet softu i specyfikacja modułu GPS Axiom Swift
AVRGPS 2.0
Work is still in progress…
2007.02.13, first LCD code:
2007.02.20, parse GPRMC and display some basic data, LCD library done:
2007.03.06, parse GPGSA and GPGSV, math library done, added flying sats:
Update 2012.08.25
Strona przeniesiona do bloga, data wpisu ustawiona ostatnią datę modyfikacji.
Projekt nie jest już wspierany od dawna, chociaż sprzęt nadal działa i jest używany.
Pewnie niedługo dorzucę tu lub na SourceForge żródła softu w wersji z wyświetlaczem…
(English) My 1-wire mini projects
Watchdog LCD
Watchdog z wyświetlaczem LCD
Co i dlaczego: większość kompów się prędzej czy później wiesza. Jak masz serwerek, to wiesz dobrze, że wieszanie nie jest najbardziej pożądaną właściwośią systemu. Można temu zaradzić robiąc watchdoga.
Wiadomo, że do watchdoga coś trzeba wysyłać co jakiś czas, żeby wiedział, że wszystko żyje. Dodatkowo nie może to być jakiś totalnie prymitywny układ, bo watchdog musi być na tyle inteligentny, żeby się włączyć na żądanie i od razu wyłączyć po wygenerowaniu reseta. Czyli mikroprocesorek, bo na układach dyskretnych byłoby za dużo rzeźbienia.
Mamy procesorek do którego coś trzeba wysyłać – najbardziej 'ludzkim’ interfejsem służącym do komunikacji z każdym komputerem i nie sprawiający żadnych problemów w oprogramowaniu jest RS232.
Ok. Mamy procesor, który coś dostaje od komputera i … ma to wyrzucać w kosmos? Marnotrastwo. Na Allegro można dostać sporo różnych tanich wyświetlaczy, które można podpiąć pod taki bezczynny procesorek!
No i mamy wstępną listę części potrzebnych do budowy:
- Atmel AT90S2313-10 – mikroprocesor, który ma w sobie zegary do zrobienia watchdoga, UART i jeszcze sporo nóżek w sam raz do podłączenia wyświetlacza
- MAX232 – konwerter sygnału TTL na RS232
- wyświetlacz DM157A – najtańszy na allegro i jednocześnie największy pod względem liczby wyświetlanych znaków (3×24 znaki) z mieszczących sie jeszcze w wymiarach pojedynczego slota 5.25″ (mieści sie w zaślepce)
- troche drobnicy:
- kwarc 8MHz i kondensatory do niego 2x 12pF
- kondensatory 4x 1uF do przetwornicy w MAX232
- opornik 33 Ohm – do zasilania podświetlenia wyświetlacza
- potencjometr 50K – regulacja kontrastu wyświetlacza
- podstawka pod mikroprocesor
- wtyczka DB9 żeńska
- wtyczka dwupinowa jak do płyty głównej do reseta
- wtyczka molex lub usb, żeby ukraść z wnętrza komputera troche fazy (+5V)
- troche kabelków (w tym przyda się kawałek starej taśmy od fdd lub hdd)
- jakaś płytka uniwersalna (lub hardcorowcy mogą sobie od razu wytrawić porządną)
- jakiś LED (bardziej dla poprawy samopoczucia i sprawdzenia czy wogóle coś działa)
- lutownica, cyna, kalafonia
Zaczniemy od schematu:
Jak widać nie ma tu prawie co robić:-)
UWAGA: Na schemacie nie ma narysowanego podłączenia zasilania do MAX232. +5V ma być podłączony do nóżki 16, masa do 15.
Klejenie układu
Wyświetlacz ma dosyć nietypowy rozstaw pinów na taśmie i dostanie do niego odpowiedniej złączki jest praktycznie niewykonalne. Zostaje więc tylko przylutowanie wyświetlacza do układu. Oznacza to troche kabelków. Najpraktyczniejszym wyjściem jest kawałek starej taśmy od FDD lub HDD, bo rozstaw jest praktycznie idealny i nie trzeba sie bawić za dużo w dopasowywanie, przytrzymywanie i celowanie.
Trzeba sobie przygotować kawałek taśmy 20 żyłowej, odizolować końce na ok. 1-2mm i pocynować. Taśmę wyświetlacza najlepiej przykleić sobie jakoś do biurka, żeby nie uciekała (najlepiej też rozebrać wyświetlacz). No i trzeba zacząć to lutować. Nie należy żałować kalafonii lub innego topnika, bo łatwo mogą się kontakty skleić, a później już zaczyna sie problem z odsysaniem itp.
Generalnie ta część roboty jest najbardziej precyzyjna i wymaga uwagi. Po przylutowaniu obowiązkowo trzeba sprawdzić czy nie ma zwarć (i czy jest przejście).
Dla odprężenia możemy sie teraz troche wyżyć fizycznie przeprowadzając mały tuning wyświetlacza przy pomocy brzeszczota. Trzeba po prostu uciąć wystające kawałki czarnego plastiku, bo z nimi nie zmieści się w standardowej zaślepce do obudowy.
Lutujemy sobie w międzyczasie resztę części na płytkę uniwersalną. Dla niecierpliwych jest właśnie dioda świecąca – po zamontowaniu procesora (zaprogramowanego!!), kwarcu, dwóch kondensatorów 12pF, LEDa i podłączeniu zasilania dioda powinna migać co ok. 1 sekunde. Jak wlutujemy resztę części, to po podłączeniu do komputera i uruchomieniu tam terminala (prędkość 38400N1, kontrola przepływu sprzętowa i programowa wyłączona) powinniśmy dostawać echo wysyłanych znaków, dodatkowo dioda powinna migać za każdym wysłanym znakiem (oprócz zwykłego migania co 1s.).
Czas na przylutowanie wyświetlacza:
No i testy. Po włączeniu trzeba wyregulować kontrast – potencjometrem pokręcić dosyć blisko +5V aż zacznie być widać powoli pikselki na czarno. Jeżeli wszystko jest zmontowane dobrze, to powinniśmy zobaczyć też migający kursor. Tylko podłączyć do komputera i zobaczyć co się tam wyświetla:
Jeżeli wszystko jest ok, to trzeba się zabrać za kosmetykę: usztywnić i zaizolować lutowanie taśm przy wyświetlaczu, wpasować to do obudowy. Polecam przykleić obudowe układu do tyłu wyświetlacza.
Jak wszystko działa, to możemy się już cieszyć wyświetlaczem!
Pozostaje jeszcze znaleźć jakąś zaślepkę do obudowy, zrobić w niej dziurę i wkleić tam wyświetlacz.
Reszta
- podłączenie resetu do płyty głównej: UWAGA – jeżeli odwrotnie podłączymy złączkę resetu, to płyta się nie uruchomi
- po włączeniu watchdog nie jest aktywny
- aktywacja watchdoga: na 74 pozycji do wyświetlenia (aktualnie to już poza widoczną częścią wyświetlacza) jeżeli będzie znak #, to watchdog zacznie działać
- oprogramowanie ma zaszyty czas nieaktywności na 3 minuty – od chwili aktywacji watchdoga musimy coś wysyłać do wyświetlacza, w przeciwnym wypadku wyświetlacz zresetuje nam płytę
- sygnał resetu jest przytrzymywany ok. 1 s.
- po wygenerowaniu resetu, watchdog przestaje być aktywny aż do ponownej aktywacji przy pomocy #
- pod linuksem, żeby coś wyświetlić wystarczy na początku stty do ustawienia prędkości portu lub jakis prosty programik, a poźniej już tylko co jakiś czas:
echo "jakis tekst" >/dev/ttyS0
- ’wsad’ do zaprogramowania mikroprocesora jest tutaj
- na schemacie i zdjęciach jest pokazane branie zasilania z portu usb. Oczywiście można wziaść zasilanie +5V z molexa, albo choćby z baterii płaskiej:-)
- jeżeli chcesz tanio kupić wyświetlacz DM157A, to sprawdź aukcje użytkownika enercon (tam ostatnio kupiłem i jestem zadowolony)
- jeżeli funkcjonalność watchdoga Cie nie obchodzi, to nie musisz lutować dwóch kabelków lub podłączać gdziekolwiek tego wyjścia. Natomiast sam watchdog bez podłączonego wyświetlacza najprawdopodobniej nie będzie działał, bo w programie jest kilka miejsc, gdzie procesor czeka na reakcję wyświetlacza.
Update 2013.03.13:
Strona przeniesiona do bloga z zachowaniem oryginalej daty publikacji.
Co do ewentualnych źródeł programu, to obawiam się, że ich już nie znajdę 🙁
O mnie
Strona domowa Marka Wodzińskiego
- GPS do samodzielnego złożenia
- 1-wire (english) – moje boje z 1-wire
- rex.mamy.to (english) – Kiedyś był taki mały PDA wielkości kary PCMCIA: REX 6000. Miał też opcję ładowania stron wml-owych do wewnętrznej pamięci do późniejszego oglądania offline. Strony ładowało się ze specjalnego serwisu webowego udostępnionego przez Xircom-a. Wszystko było fajnie do czasu aż Intel przejął Xircoma i przestał udostępniać tą usługe. Wtedy napisałem własną wersję tego portalu wzorowaną troche funkcjonalnością na Avantgo – człowiek może sam definiować 'content’, wybierać z już dostępnego, automatyczne pobieranie ze stron www i konwersja do wml-a też jest zaimplementowana.
- wizytowka.mamy.to – Mała dystrybucja live cd wielkości
ok. 30MB (tyle mieści się na płytce formatu wizytówki). Projekt z czasów Slackware 7.1. - Slackpkg
- drobne poprawki, które weszły do wersji 1.3.1
- interfejs dialogowy do wyboru pakietow dla wersji 1.4.1: patch
- patche do 1.5.2: slackpkg-1.5.2-majek-base.diff(patch do ostatniej wersji) +
slackpkg-1.99beta-dialog.diff(interfejs dialogowy – uaktywnienie przez chmod +x /usr/libexec/slackpkg/functions.d/dialog-functions.sh) + slackpkg-1.99beta-diff.diff(pokazuje różnice w plikach konfiguracyjnych)
- Watchdog zintegrowany z wyświetlaczem LCD – elektronika dla serwerka w wersji 'zrób to sam’
- Harpagan – moja ulubiona impreza – uczestniczę już od ponad 5 lat w prawie
każdej edycji. Tutaj znajdziesz kilka map dla orientacji jak to wygląda w praktyce. - www.freesco.pl – wpierana przeze mnie duchowo i serwerowo minidystybucja linuksa w wersji polskiej. Jestem też członkiem PGF (Polskiej Grupy Freesco), grupy która trzyma władzę w tym rejonie:-)
- Sieci amatorskie to nie tylko małe białe literki na czarnym tle i nie zawsze takie sieci prowadzą amatorzy:-)
- www.mamy.to – mój serwis, na moim serwerze i w mojej domenie.
- Przez dłuższy czas (gdzieś od 1992) zajmowałem się również reklamą. Tutaj jest to co z tego pozostało.
- …