Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki

KURS HOME ASSISTANT

Chcesz zautomatyzować swój dom bez skomplikowanego kodowania?
Zastanawiasz się nad wyborem sprzętu, oprogramowania i aplikacji?
Od czego zacząć przygodę z HA w 2025? Co będzie najlepsze na start?

Nasz kurs Home Assistant nauczy Cię krok po kroku, jak łatwo zautomatyzować swój dom i oszczędzić na rachunkach za prąd i ogrzewanie. Bez chmur, bez zbędnych abonamentów. Twoja przygoda z Home Assistant zaczyna się tutaj!

↓↓↓

    Szanujemy Twoją prywatność. Możesz wypisać się w dowolnym momencie.




    Teraz jest 8 kwi 2025, o 01:48


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 4 ] 
    Autor Wiadomość
    PostNapisane: 17 kwi 2020, o 18:19 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 11 sie 2015
    Posty: 205
    Lokalizacja: UK
    Pomógł: 10

    Witam,

    Kilka lat temu udało mi się stworzyć projekt sprzętowy o nazwie VirtualQuiz (jeżeli ktoś nie miał jeszcze okazji się zapoznać, zachęcam do przeczytania opisu na forum https://forum.atnel.pl/topic19010.html :D ). Ostatnio, z uwagi na sporą ilość wolnego czasu, postanowiłem raz jeszcze podjąć wyzwanie i stworzyć system do popularnej gry kasynowej Blackjack (Jeżeli nie miałeś jeszcze okazji się z nią zapoznać, zasady na szybko są wyjaśnione tutaj: https://pl.wikipedia.org/wiki/Blackjack) w wersji numerycznej, ale nie tylko! ;) Dlaczego? Otóż uznałem, że najwyższy czas stworzyć projekt utrwalający wiedzę z książek Mirka (w końcu praktyka czyni mistrza) oraz przetestować kilka posiadanych już bibliotek w języku C. Dodatkowo, w mojej szufladzie znajduje się wiele PCB zamówionych na potrzeby innych, przeszłych projektów. Po zdecydowaniu się na jedną z nich, powstały poniższe założenia:

    ZAŁOŻENIA:

    - Serce układu - Atmega88P
    - User interface oparty na wyświetlaczu dotykowym NEXTION - Przedstawiam przy okazji obsługę takiego wyświetlacza w kodzie źródłowym, być może komuś się przyda :)
    - Komunikacja za pomocą SoftUART pomiędzy MCU a wyświetlaczem (na podstawie biblioteki Mirka),
    - Komunikacja za pomocą sprzętowego UART pomiędzy MCU a komputerem/aplikacją w trybie manualnym (w trakcie oprogramowywania :D ),
    - Zabudowany system pasków LED WS2812B (wskazujący, na przykład, wynik rozgrywki, lub kolejkę danego gracza)


    KOD ŹRÓDŁOWY

    Aby maksymalnie uprościć kodowanie i przyszłe modyfikacje, większość operacji sprzętowych (np. stan wciśnięcia przycisków) wykonywana jest za pomocą przerwań timerowych, jak i zewnętrznych PCINT. Najważniejsze zmienne opakowałem w struktury, co pozwoliło mi dodatkowo przećwiczyć korzystanie ze wskaźników! Plik main.c, common.c, oraz nagłówkowy common.h załączone są poniżej.

    main.c
    Składnia: [ Pobierz ] [ Ukryj ] [ Zaznacz wszystko ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



    common.h
    Składnia: [ Pobierz ] [ Ukryj ] [ Zaznacz wszystko ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.




    common.c
    Składnia: [ Pobierz ] [ Ukryj ] [ Zaznacz wszystko ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


    KILKA WAŻNYCH ASPEKTÓW:

    Chciałbym zwrócić uwagę na kilka szczegółów, które być może przydadzą się również w waszych projektach. ;) Po pierwsze, w jaki sposób uporałem się z pseudolosowością funkcji rand(). Jeżeli wczytaliście się wcześniej w opis jej działania, lub też testowaliście ją na żywo na pewno zwróciliście uwagę na fakt, iż pierwsze wartości przez nią zwracane zawsze będą takie same (w niniejszym projekcie takie działanie byłoby niedopuszczalne). Aby to zmienić należy raz, na początku programu, zainicjować zmienną "seed" (ziarno) daną wartością w trakcie inicjalizacji, tak aby za każdym razem ciąg pseudolosowy był inny. W programowaniu na komputery klasy PC możnaby spokojnie zrobić to poprzez przekazanie czasu systemowego jako argument funkcji srand(). Niemniej, tu takiej możliwości nie było. Rozwiązaniem tego problemu było proste podstawienie wartości rejestru timera TCNT0 (wers 45. pliku main.c). W ten sposób, napisana przeze mnie funkcja random_blc_hand() zawsze zwraca losową zmienną o wartości od 1 do 10. Nie jest to na pewno najlepszy sposób, jednak empirycznie mogę potwierdzić, że jak na razie nie udało mi się zaobserwować takich samych ciągów liczb, a to dobry znak! :mrgreen:

    Zmienne p1,p2 oraz p3 specjalnie nie są zdefiniowane w pliku głównym, gdyż wykorzystywane są one w przerwaniu, którego funkcje znajdują się w common.c. Oczywiście, mógłbym przekopiować je do main.c a następnie przekazywać je za pomocą wskaźników (jak ma to miejsce ze zmienną typu GAME). Przyznam szczerze, nie wiem na ile aktualne podejście jest poprawne. W każdym razie u mnie działa bez problemu. :D Gdy program bardziej się skomplikuje najpewniej rozważę zmianę.

    Warto wspomnieć w jaki sposób komunukuję się z wyświetlaczem NEXTION. Każda ramka danych wysyłana do niego zakończona musi być trzema bitami [0xff]. Natomiast w przypadku odbioru danych, wysyła on następującą ramkę danych:

    [0x65] (początek ramki) [0x01] (numer strony) [0x02] (numer elementu) (...) [0xff][0xff][0xff] (koniec ramki)

    Drgania styków! Aby się z nimi uporać przerobiłem lekko mechanizm przedstawiony na blogu, tak aby można było korzystać z niej w przerwaniu Timera.

    Dodam na koniec tylko, że wsad można podmienić wstrzykując nowy za pomocą RS232 poprzez bootloader (wyprowadzenie USB drukarkowego widać na krawędzi obudowy).

    PREZENTACJA:
    Z opisu to by chyba było na tyle. ;) Zapraszam Was do obejrzenia filmu z prezentacją oraz zapoznania się ze zdjęciami.


    ObrazekObrazek

    ObrazekObrazek





    Pozdrawiam :D

    _________________
    MMT Technologies



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 17 kwi 2020, o 21:05 
    Offline
    Moderator
    Avatar użytkownika

    Dołączył(a): 03 paź 2011
    Posty: 27366
    Lokalizacja: Szczecin
    Pomógł: 1043

    Ja cię nie mogę! ... Panie kochany - ty chyba możesz się zatrudnić w Las Vegas ! ;) w tamtejszych kasynach ... no już dawno TAKIEGO bajeru, tak ładnie dopracowanej konstrukcji nie widziałem !!! ;)

    GRATULACJE - śliczny projekt - prześliczny !

    _________________
    zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 18 kwi 2020, o 17:05 
    Offline
    Nowy

    Dołączył(a): 21 kwi 2016
    Posty: 16
    Lokalizacja: Mińsk Mazowiecki
    Pomógł: 1

    Projekt dopieszczony nie tylko od strony sprzętowej, jestem pod wrażeniem czystości kodu i konsekwencji w dążeniu do ideału :-)



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 18 kwi 2020, o 20:20 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 11 sie 2015
    Posty: 205
    Lokalizacja: UK
    Pomógł: 10

    roberto_k_w napisał(a):
    Projekt dopieszczony nie tylko od strony sprzętowej, jestem pod wrażeniem czystości kodu i konsekwencji w dążeniu do ideału :-)


    Dzięki Robert! Prawda jest taka, że we wszystkich poprzednich projektach zawsze brakowało mi odpowiedniego podejścia od strony właśnie programistycznej. Dlatego uznałem, po obejrzeniu wielu poradników dotyczących struktur, wskaźników itd., że czas najwyższy napisać porządnie program. Jak wiadomo, projekt służył tutaj głównie celom motywacyjnym. ;)

    _________________
    MMT Technologies



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    Wyświetl posty nie starsze niż:  Sortuj wg  
    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 4 ] 

    Strefa czasowa: UTC + 1


    Kto przegląda forum

    Użytkownicy przeglądający ten dział: Majestic-12 [Bot] i 2 gości


    Nie możesz rozpoczynać nowych wątków
    Nie możesz odpowiadać w wątkach
    Nie możesz edytować swoich postów
    Nie możesz usuwać swoich postów
    Nie możesz dodawać załączników

    Szukaj:
    Skocz do:  
    Sitemap
    Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
    phpBB SEO