Początek programu – pierwsze okno

     Płytka sterownika polutowana. Zasilacz działa. Można zacząć pisać program.

Z racji zastosowanego mikroprocesora, użyłem dostarczonego przez producenta oprogramowania. Jest nim Atmel Studio. Środowisko teoretycznie powinno posiadać wszystko, co będę potrzebował. Z uC łączę się za pomocą interfejsu PDI. Pozwala on na szybkie zaprogramowanie i co ważniejsze debugowanie stanu procesora. Jest to szczególnie przydatne, kiedy nie ma się wprawy w pisaniu programów. Można ustalić w jakim stanie jest sterownik, jakie wartości mają zmienne oraz wykonywać pracę krokową. Jednym z mankamentów jest konieczność włączenia optymalizacji, aby można było zmieniać taktowanie rdzenia, a to ogranicza łatwość analizy. Jest to spowodowane, tym że kompilator tak przestawia wiersze programu, aby uzyskać optymalny czas cyklu.

Ale zacznijmy od początku. Co chcę aby mój sterownik potrafił. Dokładnej co chcę uzyskać od oprogramowania.

– synoptyka stanu centrali, wyświetlenie temperatur w komorach, wyświetlenie wilgotności itp.,

– możliwość programowania cyklu dziennego i nocnego,

– funkcja przewietrzania,

– ręczne/automatyczne (odzysk chłodu latem, oszranianie zimą) sterowanie klapą by-passu,

– archiwizowanie danych.

To taki szkic programu. Niestety nie ma gotowców. Musiałem sam napisać wszystko od zera. Z powodu braku jakichkolwiek fizycznych klawiszy, musiałem zacząć od opanowania panelu dotykowego.

Sterownik matrycy dotykowej zainstalowany na wyświetlaczu LCD, dostarcza informacji w postaci cyfrowej. Nie trzeba mierzyć rezystancji, na wyjściu. Wszystko dostajemy już gotowe, w postaci cyfrowej. Pierwszym krokiem, jest wykrycie zgłoszenia przerwania przez panel. Informuje  on, że został naciśniety i ma dane do wysłania. Wartości podane przez układ należy jeszcze przeskalować. Są one podane jako współrzędne X i Y. Samo LCD może pracować w dowolnej orientacji, a zsynchronizowanie „dotyku” z obrazem, dokonuje się programowo. Z moich obserwacji, mogę powiedzieć, że użyty panel dużo lepiej sprawdza się, używając rysika, niż palca. Dokładność i powtarzalność, używając palca,  podanych współrzędnych, pozostawia dużo do życzenia. Klikając rysikiem, jest znacznie lepiej. Nie wiem, czy to wina tego egzemplarza czy ten typ tak ma. Nie mam jak sprawdzić. W przyszłości, jak będę robił kolejny sterownik, to sprawdzę, czy ten typ tak ma, czy ten jeden egzemplarz. Jeżeli to wina modelu, to będę musiał poszukać czegoś, co lepiej odczyta pozycję z palca. Do zmiany jednej nastawy nie warto sięgać po rysik.

Samo skalowanie, nie jest konieczne. Udałoby się napisać aplikację bez tego. Dla własnej wygody skalowałem naciskaną pozycję. Po zamontowaniu ekranu na płytce sterownika osie współrzędnych „dotyku” miały punkt zerowy w prawym górnym rogu. Y narastał od zera w dół, X narastał od prawej krawędzi ekranu do lewej. „Obraz” miał punkt 0,0 usytuowany w prawym dolnym rogu, a osie  analogicznie: Y rósł do góry, a X w lewo. Konwersja z wartości podawanych z układu panelu dotykowego, na współrzędne pikseli, dokowane były przez równanie liniowe, o zadanych współczynnikach.

Pierwsze próby dotyczyły napisania procedury kalibracji ekranu. Polegała ona na wyliczeniu współczynników a1, a2, b1, b2. Przez wyświetlenie kolejnych trzech punktów na ekranie i wyliczeniu parametrów prostej przechodzącej prze dwa punkty, można określić szukane parametry.

Proste potrzebne do wyliczenia współczynników kalibracji

Proste potrzebne do wyliczenia współczynników kalibracji

Pozycje punktów są znane, a współczynniki są rozwiązaniami, dwóch układów równań z dwoma niewiadomymi.

Początkowo procedura była wywoływana przy każdym uruchomieniu sterownika, ale było to uciążliwe i postanowiłem, że będzie dostępna z poziomu okna ustawień. Początkowe wartości są zapisane w programie i są przyjmowane przy restarcie sterownika. Po opanowaniu wykrywania dotyku, mogłem zabrać się za ekran.

     Nigdy wcześniej nie miałem styczności z programowaniem wyświetlaczy graficznych. Było to moje pierwsze spotkanie. Producenci tego typu układów, starają się ułatwić przyszłemu użytkownikowi pracę i przygotowują praktycznie całe sterowanie matrycą. Moja praca polegała na sparametryzowaniu układu i opracowaniu procedur wyświetlania. Początkowo ilość dostępnych opcji, przytłaczała mnie. Można dowolnie zmieniać marginesy, orientację wyświetlania, lustrzane odbicia, sposób indeksowania pikseli, kontrast  itp.  Już po tygodniu prób i błędów, udało się wyświetlić pierwszy piksel na ekranie. Było to trochę, jak sztampowe „Hello World”.

Po tym kroku przyszła próba wyświetlenia bit mapy. Temat różni się trochę od wersji na PC, bo każdy kolor zapisany jest na 18 bitach. Kolory w komputerze, zapisywane są na 8, 24, 32 bitach. Do przygotowania plików, potrzebny jest program, który konwertuje pliki na postać zjadliwą dla sterownika. Używam LCD Image Converter (http://www.riuson.com/lcd-image-converter). Jest to prosty darmowy program, do zamiany bitmap na pliki tekstowe, z zapisaną tablicą wartości kolorów. Po przesłaniu takiej tablicy do pamięci GRam wyświetlacza, powinno ukazać się nam nasze zdjęcie.

Komendy wyświetlacza umożliwiają nam ograniczenie ilości przesyłanych danych po magistrali. Zapalenie jednego piksela, wykonywane jest na podstawie podania współrzędnych na ekranie i wartości koloru. Jeżeli chcemy wyświetlać większe obrazy, musimy ograniczyć się do dwóch czynności. Pierwsza – określenie obszaru w jakim będziemy rysować, druga – wysłania tylko danych o numerze koloru.

Przykładowo chcemy wyświetlić obrazek o wymiarach 10 x 10 pikseli. Podajemy współrzędne dwóch przeciwległych narożników(np. 200,200,210,210). Oznacza to, że nasze okno ma prawy dolny narożnik x=200, y=200, a lewy górny x=210, y=210. Wartość koloru przesyłana jest w dwóch krokach. Wysyłając pierwsze 16 bitów koloru, a w drugim brakujące 2. Po wysłaniu 2 bajtów danych, układ wyświetlacza automatycznie zwiększa indeks wskazywanego piksela. Nie musimy wskazywać kolejnej pozycji, a od razu zacząć wysyłać kolejne wartości kolorów. Będzie się tak działo, aż dojdziemy do ostatniego punktu w linii. W takim wypadku sterownik zmieni numer wiersza i zacznie go zapełniać. W jakim kierunku będzie się to odbywało, czy zapełniane są wiersze w X’e czy w Y’ku, zależy od ustawień wyświetlacza. Należy zwrócić uwagę na wymiary wyświetlanego obrazu. Jeżeli nie będą się pokrywać z wielkością okna, ustawionego do wyświetlania, obraz zostanie rozmyty. Punkty należące do pierwszego wiersza mogą się znaleźć w drugim i na odwrót.

Przyszła pora na rysowanie ekranów i ikon. W Internecie jest całe mnóstwo różnych darmowych ikon. Do wyboru do koloru. Mi osobiście one nie pasowały. Jak strzałka była ładna, to kalendarz brzydki itp. Uznałem, że tymczasowo narysuję coś sam, a jak znajdę przypadkiem, to podmienię. Zainstalowałem Inkscape (taki darmowy Corel) i wyskrobałem na szybko przyciski. Grafikiem niestety nie jestem, więc wyszło jak wyszło.

Ikony sterownika

Ikony sterownika

Pod tymi przyciskami są zaprogramowane kolejne okna.

Strzałka w lewo – odpowiednik cofnij.  Wraca do okna z przedstawionymi parametrami pracy centrali.

Okno 1 - Synoptyka centrali

Okno 1 – Synoptyka centrali

Na chwilę obecną, wartości są wyssane z palca, bo centrala nie jest jeszcze podłączona. Tabelka w prawym górnym rogu, przedstawia rzeczywiste obroty wentylatorów oraz stan klapy by-pass’u. Temperatury po prawej stronie przedstawiają odpowiednio temperaturę nawiewu i wywiewu oraz wilgotność powietrza w danych kanałach. Po lewej stronie mamy temperatury na czerpni i wyrzutni. Na podstawie tych parametrów można oszacować  sprawność odzysku ciepła na wymienniku. Podstawiając do wzoru, możemy obliczyć sprawność wymiany. Brakuje tu strat ciepła na rurach doprowadzających. Pomiar temperatur odbywa się w komorach centrali, a nie przy anemostatach. Czy będzie różnica, okaże się zimą kiedy cała instalacja będzie już pracowała. Lewy górny róg to klasyczny zegarek. Dzień tygodnia wyznaczany jest z wzoru Mike’a Keitha:

dt=(dzien+=mies<3?rok–:rok-2,23*mies/9+dzien+4+rok/4-rok/100+rok/400)%7;

gdzie :

dt – numer dnia tygodnia,

dzien – numer dnia miesiąca,

mies – numer miesiąca,

rok – rok.

Genialny w swojej prostocie i co najważniejsze, działa.

Pozostałe ekrany, co w nich się kryje i co można ustawiać opiszę w przyszłym tygodniu.

Grzegorz M.

One thought on “Początek programu – pierwsze okno”

  1. Milosz

    Bardzo przyjazna forma prezentacji :) Jesli projekt zostanie zakonczony sukcesem mysle, ze wiele osob bedzie moglo efektywnie z tej strony skorzystac.

Leave a Comment

Your email address will not be published.

Witryna wykorzystuje Akismet, aby ograniczyć spam. Dowiedz się więcej jak przetwarzane są dane komentarzy.