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? 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 12 lip 2025, o 08:52


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 10 ] 
    Autor Wiadomość
    PostNapisane: 15 lip 2015, o 12:48 
    Offline
    Użytkownik

    Dołączył(a): 01 cze 2015
    Posty: 30
    Pomógł: 2

    Obrazek
    Witam wszystkich.

    Pracując nad projektem wykorzystuję klawiaturę membranową 4x4. Do tej pory łączyłem ową klawiaturę do uC wykorzystując 8 pinów uC.
    Czytając niebieską książkę natknąłem się na rozdział 4.8.1 o klawiaturze analogowej.
    Postanowiłem wykorzystać pomysł i zastosować w moim projekcie.

    Założenia:
    - wykorzystanie klawiatury 4x4 (16 przycisków)
    - minimalne wykorzystanie pinów
    - wybudzenie uC z uśpienia

    Schemat:
    Obrazek

    Podłączona klawiatura do zestawu ATB:
    Obrazek
    Obrazek

    Działanie:

    Objaśnienie co jest na wyświetlaczu:
    U: [mierzone_napięcie] V [minimalny_adc]
    C: [licznik] [mierzone_adc] [maksymalne_adc]

    ObrazekObrazekObrazek
    ObrazekObrazekObrazek

    Przy założeniu, że napięcie nie będzie się zmieniać klawiatura działa bardzo dobrze. Wszystkie założenia zostały spełnione:
    - klawiatura działa poprawnie
    - wykorzystanie pinów z ośmiu (8) zmniejszyło się do jednego (1)!
    - rezystory zostały dobrane, aby stanem wysokim wybudzić uC z uśpienia

    Kod w załączeniu z wykorzystaniem uC Atmega644P.
    Kod wykorzystuje bibliotekę LCD napisaną przez pana Mirka, ale nie umieściłem jej w załączeniu.

    Pozdrawiam,
    Grzegorz


    Załączniki:

    Aby zobaczyć załączniki musisz się zalogować. Tylko zalogowani użytkownicy mogą oglądać i pobierać załączniki.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 15 lip 2015, o 17:36 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 17 lut 2013
    Posty: 158
    Lokalizacja: KTT
    Pomógł: 1

    Fajny pomysł z tą klawiaturką, żeby zaoszczędzić trochę pinów w procku.
    Z tego co wiem to rozwiązanie działa jednak dość powolnie. Jednak z tego co widać na zdjęciach raczej dość stabilnie (min i max wskazanie ADC jest praktycznie identyczne). Ciekawe jak to się sprawdzi w jakimś konkretnym przykładzie. Testowałeś to jakoś kolego?

    _________________
    Gordon



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 15 lip 2015, o 19:58 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 27 gru 2011
    Posty: 186
    Lokalizacja: Dublin
    Pomógł: 8

    Witam rozwiązanie jest bardzo dobre i bardzo użyteczne używam klawiatury ADC w moim projekcie już ponad dwa lata i nie mam z nią żadnych problemów.
    Warto dodać mały kondensator i feryt na wejście.
    Wszystkie rezystory z tolerancją 1% lub lepszą.
    Warto też kupić markowe przyciski np firmy Omron.
    Obrazek
    Obrazek

    Kod napisany w Bascom AVR

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


    Autor postu otrzymał pochwałę


    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 15 lip 2015, o 22:20 
    Offline
    Moderator
    Avatar użytkownika

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

    Bardzo fajny projekt - nawet gdyby miał być tylko do celów edukacyjnych. Ja wręcz POLECAM początkującym w dziedzinie ADC zrobienie czegoś takiego dla treningu - wtedy ADC wchodzi o wiele szybciej do głowy ;)

    A tak nawiasem mówiąc to widziałem sam na własne oczy klawiaturki analogowe na więcej niż 5-10 klawiszy i to w urządzeniach krótkofalarskich ;) ... co ciekawe były akurat realizowane na AVR'ku (ATmega48 albo 88) ... spisywały się świetnie. Ale też trzeba przyznać, że nie była to jakaś mega masowa produkcja.

    _________________
    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: 16 lip 2015, o 07:33 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 27 gru 2011
    Posty: 186
    Lokalizacja: Dublin
    Pomógł: 8

    Przy odpowiednim dobraniu rezystorow można wciskać kilka przycisków na raz i rozpoznawac ukryte funkcję



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 16 lip 2015, o 08:06 
    Offline
    Użytkownik

    Dołączył(a): 01 cze 2015
    Posty: 30
    Pomógł: 2

    mokrowski napisał(a):
    Coś tam w kodzie można oczywiście jeszcze poprawić.

    Kod był pisany na kolanie i zawsze można coś poprawić :) Z miłą chęcią przyjmę każdą zmianę, która pomoże!

    gordon10 napisał(a):
    Testowałeś to jakoś kolego?

    Jeśli odczyty będą stabilne, to wynik będzie prawidłowy. Ważne jest aby odczyty nie nachodziły n a siebie wartościami. To jest coś o czym pisze kolega mokrowski.

    Podłączyłem inną klawiaturę i odczyty się zmieniły.
    Potrzebuję więc stabilniejszych odczytów.

    pikczu napisał(a):
    Warto dodać mały kondensator i feryt na wejście.
    Wszystkie rezystory z tolerancją 1% lub lepszą.

    Niestety nie mam na daną chwilę lepszych rezystorów.
    Nie wiem co to jest feryt, do czego służy i gdzie go można kupić?

    pikczu napisał(a):
    rozwiązanie jest bardzo dobre i bardzo użyteczne używam klawiatury ADC w moim projekcie już ponad dwa lata i nie mam z nią żadnych problemów.

    Dla mnie sygnał jest jeden - idziesz w dobrą stronę :)

    -----------------------
    Edit
    -----------------------
    Zmieniony schemat:
    Obrazek

    Po po zmianie kodu - dostosowaniu wartości do nowej klawiatury oraz dodaniu kondensatora ceramicznego 100uF (dzięki pikczu!) wartości są bardzo stabilne.
    Obrazek


    Załączniki:

    Aby zobaczyć załączniki musisz się zalogować. Tylko zalogowani użytkownicy mogą oglądać i pobierać załączniki.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 16 lip 2015, o 20:12 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 27 gru 2011
    Posty: 186
    Lokalizacja: Dublin
    Pomógł: 8

    Feryty stosuje się do blokowania zakłóceń. Klawiatura działa jak antena więc wskazane jest dołożenie ferytu aby zablokować zakłócenia wysokiej częstotliwości.
    Dodatkowo przydał by się warystor lub dioda dwu kierunkowa zabezpieczająca przed ESDhttp://www.tme.eu/pl/katalog/#id_category=112928&search=feryt&page=1&s_field=accuracy&s_order=DESC



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 17 lip 2015, o 08:27 
    Offline
    Użytkownik

    Dołączył(a): 01 cze 2015
    Posty: 30
    Pomógł: 2

    pikczu napisał(a):
    Feryty stosuje się do blokowania zakłóceń. Klawiatura działa jak antena więc wskazane jest dołożenie ferytu aby zablokować zakłócenia wysokiej częstotliwości.
    Dodatkowo przydał by się warystor lub dioda dwu kierunkowa zabezpieczająca przed ESD

    Bardzo cenna wskazówka!

    Opiszę rezultaty jak tylko dostanę w swoje ręce brakujące komponenty!
    Dziękuję wszystkim za rady aby ulepszyć projekt!



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 17 lip 2015, o 09:30 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 31 mar 2015
    Posty: 310
    Pomógł: 18

    Wiem - funkcja float jest tylko do prezentacji wyników, ale zabiera 3%(3064B) zasobów flash. To tylko taka uwaga ;)



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 20 lip 2015, o 08:37 
    Offline
    Użytkownik

    Dołączył(a): 01 cze 2015
    Posty: 30
    Pomógł: 2

    mokrowski napisał(a):
    1. Myślę że podejście ze zdefiniowaniem wartości centralnej oraz tolerancji, uczyni wykrywanie wciśnięć klawiszy mniej podanym na błędy związane z niedokładnością rezystorów lub zmianami warunków zewnętrznych.
    2. Po zgłoszeniu przerwania zewnętrznego INT0 w obsłudze, warto uruchomić pomiar ADC i poczekać na zgłoszenie przerwania związanego z zakończeniem jego obsługi (obsługi przerwania zakończenia konwersji ADC). Takie podejście uwolni moc obliczeniową traconą w aktywnej pętli while() (linia 53 przykładu).
    3. Wyszukiwanie liniowe z linii 124, średnio do znalezienia klawisza potrzebuje przeglądu 8 wartości tablicy klawiszy (optymistycznie 1 bo od razu trafi, pesymistycznie 16 bo dopiero ostatni dopasuje... przypadek braku dopasowania już pomijam). To mało efektywny algorytm jeśli wartości są posortowane. Warto wtedy użyć wyszukiwania binarnego. W tym przypadku będą to średnio 4 porównania do znalezienia wartości.


    1. Zyskujemy tylko miejsce w pamieci FLASH i RAM.
    2. Bardzo dobry pomysł. Zrobione.
    3. Również bardzo dobry pomysł. Zrobione.

    Poprawiony kod zostawiam w załączniku.


    Załączniki:

    Aby zobaczyć załączniki musisz się zalogować. Tylko zalogowani użytkownicy mogą oglądać i pobierać załączniki.



    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: 10 ] 

    Strefa czasowa: UTC + 1


    Kto przegląda forum

    Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników 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:  
    cron
    Sitemap
    Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
    phpBB SEO