Mirku spokojnie nic nie trzeba będzie tłumaczyć

, to nie chodzi o ten wskaźnik z *

Ostatnio przeglądając forum trafiłem na temat w którym jeden z naszych kolegów napisał programik w którym był zrobiony wskaźnik
na "naszym nieśmiertelnym" wyświetlaczu 2x16 lub jak kto woli HD44780. Ale wracając do tego programu tak patrzę i patrzę ......
i przyszła mi do głowy pewna myśl "chłopie ale ty sobie komplikujesz życie", a można przecież prościej.
Do wszytskich przykładów został użyty zestaw ATB i znana nam biblioteka do wyświetlacza.
LCD podpięty jest do portu D, przetwornik natomiast podpięty jest pod PA0 i mierzy napięcie w zakresie 0-5V z dokładnością 9 bitów, czyli wartości przekazywane z przetwornika będą w zakresie od 0 do 511 nazwijmy je "jednostkami"
Przykład takiego programu :
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Osobiście nie mam nic przeciwko takiej wersji wykonania wskaźnika na wyświetlaczu, bo przecież działa,a to jest najważniejsze

Tylko tak jakoś nie wyraźnie mi się zrobiło bo tak dużo pisania do tak prostego efektu , hmmmm......
Postanowiłem więc pokazać wam że można prościej

Na początek troszkę matematyki

Jak wszyscy wiemy wyświetlacz ten składa się z dwóch linii ( my zajmiemy się jedną ), każda linia składa się z 16 znaków, natomiast każdy znak składa się z 5-ciu pionowych linii. Te informacje okażą się dosyć ważne przy późniejszych wersjach naszego wskaźnika.
Na początek zabierzmy się za przeróbkę pierwszej wersji kodu.
Żeby opracować taki wskaźnik musimy się dowiedzieć przy jakich wartościach ADC powinien zapalać się kolejny segment naszego wyświetlacza, dlatego dzielimy wartość maksymalną ADC przez ilośc segmentów.
512/16=32
Z tego wynika że każdy segment wyświetlacza powienien zapalać się po przekroczeniu kolejnych 32 jednostek z naszego ADC
Ja do wykonania tej czynności użłem pętli for i małej pseudo sztuczki. Sztuczka polega na tym że nie będę inicjalizował zmiennej dla pętli for wartością stałą,a zmienną w której mamy wartość pomiaru z ADC. Dlatego napisałem że to pseudo sztuczka ponieważ nie wiele osób wie lub zdaje sobie sprawę że też tak można.
Nie przedłużając przedstawiam kod programu który robi to samo ale jest o niebo krótszy

język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
No dobrze, wszytsko działa, tylko ale jak się dokładniej przyjrzymy to przecież taki wskaźnik ma bardzo dużą tolerancję.
Więc sprawdźmy to jak się sprawa ma przy 5 V, w ziązku stym musimy obliczyć jakie napięcie przypada nam na jedną jednostkę ADC ponieważ ta wartość będzie nam potrzebna do obliczenia co jaką wartość będzie nam się zapalał kolejny segment i równocześnie będzie to nasz rozdzielczość wskaźnika ( tolerancja)
5V /512=0,009765625V <--- obliczenie napięcia przypadającego dla jednej jednostki z ADC
0,009765625V*32=0,3125V <--- obliczenie napięcia dla całego segmentu
Okazuje się że każdy następny segment wyświetlacza będzie się zapalał przy zwiększaniu się napięcia o 0,3125V.
Niby nie wiele, ale jak troszkę policzymy to się nagle okazuje że to jest aż 6,25% z naszych pięciu volt, jak dla mnie to już jest dużo.
Dlatego zacząłem się zastanawiać jak zmniejszyć błąd naszego wskaźnika, i w końcu znalazłem .............
Przecież wskaźnik nie składa się tylko z 16 segmentów, ale także z pięciu pionowych linii w każdym z segmentów, a to już daje nam aż 80 pionowych linii które możemy wykorzystać w celu zwiększenia precyzji wskaźnika.
Co by nam dało błąd o wartości 5V/80=0,0625V czyli jakieś 1,25%, według mnie to już naprawdę nie jest źle biorąc pod uwagę na jakim wyświetlaczu pracujemy.
Taaak...., tylko jak się za to zabrać .........
Otóż nic trudnego

, sami wiecie Kto, nie będę wymawiał Jego imienia głośno

nauczył nas jak wgrać dodatkowe fonty do tego LCD.
W związku z tym musimy opracować pięć dodatkowych fontów które będą nam zapełniać 1,2,3,4 lub 5 linii określonego segmentu i zostaną załadowane do pamięci CGRAM wyświetlacza
Pozostaje nam jeszcze przeliczenie jaka wartość z naszego ADC przypada na jedną linię z tych 80.
512/80=6,4
I mały klops, wyszła wartość z miejscami po przecinku, ale to nie jest nic aż tak strasznego poniewąz częściowo ominiemy tą niedogodność poprzez zapalanie całych segmentów zamiast linii dlatego że jeden segment ma przecież wartość 6,4*5=32

Kolejny przykładzik wskaźnika na podtswie przemyśleń
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Dodatko zamieszczam lekko zmodyfikowany kod, który pozwala na wskaźniku obserwować zmiany wartośći w zakresie 4-5V i którego nie będę już opisywał ponieważ rózni się od poprzedniego jedynie dodatkowym warunkiem IF.
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Mam nadzieję że się komuś przydadzą te moje wywody

Dla tych co nie mają ochoty sprawdzić łopatologicznie tych kodów załączam
filmik