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 23 maja 2025, o 15:32


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 10 ] 
    Autor Wiadomość
    PostNapisane: 9 lis 2011, o 22:13 
    Offline
    Użytkownik

    Dołączył(a): 04 paź 2011
    Posty: 8615
    Pomógł: 338

    Witam

    Piszę ponieważ mam dylemat ..
    Problem polega na tym, że zwykle do kodowania czy zmiany konfiguracji programu używałem/używam
    typowych przełaczników listwowych zwanych DIP SWITH, każdy wie jak takie ustrojstwo wygląda prawda??

    Stosuje w tedy kodowanie 4/6/8 bit czyli odpowiednie ułożenie switchy wybiera konfiguracje programu
    np:

    używam 4 pinow procka dla 4 bitowego kodu DIPSwitch mam do dyspozycji parę kombinacji :

    0000
    0001
    0011
    0111
    1001

    itd ...

    Sprawa prosta programowo do zrealizowania zero problemu z wykonaniem itd.

    Więc dlaczego piszę ??

    Ano dlatego że ze wzgledu na rozmiar urządzenia, i mały procek M168 oraz konieczność użycia 16 wariantów
    konfiguracji programu, jedyną możliwością jest użycie obrotowego dipswitcha pracującego w trybie hexagonalnym
    i tu mam problem ...

    Jak wspomniałem wymagany do realizacji projektu jest ustrojstwo hexagonalne:
    Obrazek
    które wygląda tak jak na fotce wyżej ,
    Tu jest nota ustroju z której jasno wynika tryb pracy switcha :
    http://www.te.com/commerce/DocumentDelivery/DDEController?Action=showdoc&DocId=Customer+Drawing%7F1825008%7FA4%7Fpdf%7FEnglish%7FENG_CD_1825008_A4.pdf%7F1825008-4


    I tu mały opis działania dla chętnych pomocy w rozgryzieniu ustrojstwa:
    - cały swith ma 8 wyprowadzeń
    2 z nich to wejście oznaczone w tabelce jako "C" tu podajemy stan GND lub VCC
    zależnie od potrzeby
    - pozostałe 4 to wyjścia kodu hex gdzie pojawiają się nam stany zgodnie z tabelką
    gdzie X to 1 a 0 to poprostu brak stanu ustalonego (jakby noga wisiała w powietrzu)


    I tu teraz pytanie jak to ugryźć w "C" dla AVR ??
    Chodzi o np. uzyskanie napisu na terminalu lub LCD odpowiadającemu wyborowi na RDSW

    * RDSW -- Rotary Dip Switch

    --- odrazu powiem ze kombinowanie z switch case mija się z celem
    probowałem konwersji hex ASCII i też nic mi to nie dało

    Z 10 pozycyjnymi RDSW nie mam problemu , ale one pracuja w kodzie BCD ,
    w zwiazku z czym próbowałem konwersji HEX -> BCD z mizernym skutkiem

    I w związku z tym pytam tu bowiem już mi brakło pomysłów , nie podaję kodów źródłowych
    dlatego, że chciałbym aby rozwiązanie powstało nie jako od zera bez powielania moich nawyków
    i błedów .

    No i czekam na propozycje ugryzienia problemu.

    UPS... Wkradł się bład w opisie działania RDSW --
    mianowicie żle opisałem , a powinno być tak :

    Obrazek

    piszę tu bo to moze wpłynąc na ocenę działania

    a teraz jasno wynika ze X = 1 a 0 = 0 w tabelce .

    _________________
    Zbuduj swój system [url=https://helion.pl/ksiazki/w-labiryncie-iot-budowanie-urzadzen-z-wykorzystaniem-ukladow-esp8266-i-esp32-andrzej-gromczynski,wlablo.htm#format/d]IOT[/url]



    Ostatnio edytowano 9 lis 2011, o 22:57 przez SunRiver, łącznie edytowano 2 razy

    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 9 lis 2011, o 22:24 
    Offline
    Moderator
    Avatar użytkownika

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

    Ale możesz podać przykład o jaki napis na LCD albo na terminalu chodzi ? tzn w jakiej postaci chcesz to mieć ? w postaci liczby HEX ? czy dziesiętnej ? czy jeszcze jakoś inaczej ? Albo może ja czegoś jeszcze nie zrozumiałem do końca?

    _________________
    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: 9 lis 2011, o 22:44 
    Offline
    Użytkownik

    Dołączył(a): 04 paź 2011
    Posty: 8615
    Pomógł: 338

    Mirku np zgodny z wybranym na RDSW -- masz w tabelce 0-9 A-F :)

    Chodzi o powiazanie wskazania rotora z tym co się wyswietli gdziekolwiek ....

    np. wybrałem B więc zgodnie z tabelką uzyskam na wyjściach kod 0D w HEX
    co z kolei powoduje ustawienie na np. PB1-4 ustawienie 1101

    _________________
    Zbuduj swój system [url=https://helion.pl/ksiazki/w-labiryncie-iot-budowanie-urzadzen-z-wykorzystaniem-ukladow-esp8266-i-esp32-andrzej-gromczynski,wlablo.htm#format/d]IOT[/url]



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 9 lis 2011, o 22:59 
    Offline
    Moderator
    Avatar użytkownika

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

    Ja przepraszam, bo po całym dzisiejszym dniu mogę być zakręcony. Co do tabelki i pierwszej części pytania to jak dla mnie "mucha nie siada" ;) .... ale .... hmmm teraz jeszcze bardziej nie rozumiem i proszę o wyrozumiałość dla mnie ;)

    piszesz, że gdy wybierzesz B to uzyskasz na wyjściach kod 0D w HEX - ale jakim cudem? tzn zaraz - może ustalmy właśnie jak go np podłączamy, czy piny 1,2,4,8 podłączasz np kolejno do bitów 0,1,2,3 jakiegoś portu ??? czy odwrotnie ? bo nijak nie mogę zrozumieć dlaczego wybranie B daje ci 0x0D ??? przecież to powinno dać albo 0x0B albo 0x04 po zanegowaniu. (czy może właśnie wyjścia RSDW 1,2,4,8 łączysz z bitami 1,2,3,4 jakiegoś portu?)

    ale abstrahując od powyższego - czy np w efekcie końcowym chcesz uzyskać na LCD np jakiś "napis1", napis2",..... , "napis16" ???? czy wystarczy właśnie że pokaże się sam kod HEX, np 0x0B ????

    na prawdę sorki jeśli coś mieszam za mocno - ale jak nie zrozumiem po kolejnym twoim wyjaśnieniu - to wtedy spróbuję to przeczytać dopiero jutro ;) tymczasem czekam na wyjaśnienie - może jeszcze dzisiaj

    _________________
    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: 9 lis 2011, o 23:14 
    Offline
    Użytkownik

    Dołączył(a): 04 paź 2011
    Posty: 8615
    Pomógł: 338

    Sprawa jest prosta mamy :

    mamy dwa wejscia C - sygnałów GND i VCC
    oraz 4 wyjscia (4bity) rotor ma oznaczenie hexagonalne czyli 0123456789ABCDEF

    dla wybranego rotorem wskazania B układ na wyjściach 1,2,4,8 bedzie obrazowany przez stany
    odpowiednio 1101 binarnie co w hexie jest równe 0D dlatego dla B dostaniemy 0D
    to tyle co wynika z tabelki

    podłaczenie jak updatowałem wyżej czyli wejścia C po jednym na VCC i GND
    a PINY 1,2,4,8 do portów mikrokontrolera np PORTB bity 4,5,6,7 czyli PB4 , itd przez rezystory 220om

    i nparzykład na tej podstawie chcę wyswietlić np wybrane B na rotorze :)

    to tylko przykład teoretyczny bo układ jak napisałem to ma służyć docelowo wybieraniu 16 mozliwych ustawień programu , ale utknołem właśnie na czytaniu tego wrednego hex obrotowego ,
    zaczynam się zastanawiac czy czasem jakoś źle go nie potraktowałem bo przeca uzywałem z powodzeniem mniejszych braci mających 10 pozycji tyle że one generowały na wyjściu BCD

    _________________
    Zbuduj swój system [url=https://helion.pl/ksiazki/w-labiryncie-iot-budowanie-urzadzen-z-wykorzystaniem-ukladow-esp8266-i-esp32-andrzej-gromczynski,wlablo.htm#format/d]IOT[/url]



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 9 lis 2011, o 23:57 
    Offline
    Moderator
    Avatar użytkownika

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

    SunRiver napisał(a):
    podłaczenie jak updatowałem wyżej czyli wejścia C po jednym na VCC i GND
    a PINY 1,2,4,8 do portów mikrokontrolera np PORTB bity 4,5,6,7 czyli PB4 , itd przez rezystory 220om


    No to może jednak tutaj kolega się myli ? Już mówię o co chodzi. Bo jeśli dla ciebie ustawienie pozycji B na rotorze to wartość 0x0D to by oznaczało, że pozycja E na rotorze to wartość 0x07 tak ??? a np pozycja 1 to wartość 0x08 tak ??

    No to nawet nie można powiedzieć, że to zależy "jak na to spojrzeć", bo to przecież zależy tylko i wyłącznie "jak to podłączyć".

    Spójrz może na ten rysunek poniżej czy nie mam racji - że punkt widzenia zależy od podłączenia ? ;)

    Obrazek

    dlatego jeśli podłączysz sobie wg tego sposobu po prawej to masz ładnie po kolei stany na wyjściach rotora zgodne z kodami, wtedy pozycja B to będzie kod 0x0B , pozycja E to będzie kod 0x0E (tzn tak mi się wydaje - bo nigdy takich rotorków nie miałem okazji używać)

    a skoro tak ? no to wystarczy sobie już bez żadnego problemu zamienić wartość binarną odczytaną na pinach portu i zamienić ją na postać HEX. Jeśli podłączysz do jednak do 1 - PB4, 2 - PB5, 4 - PB6, 8 - PB7

    no to sam zapewne już widzisz że przed konwersją BIN na HEX wystarczy zrobić sobie przesunięcie:

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


    i teraz jakąś funkcją wywalić na LCD, np:

    Kod:
    lcd_put_string( bin_to_hex( val ) );


    albo zrobić sobie tablicę stringów:

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


    i potem:

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


    dobrze mówię ?

    _________________
    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: 10 lis 2011, o 15:47 
    Offline
    Użytkownik

    Dołączył(a): 04 paź 2011
    Posty: 8615
    Pomógł: 338

    No tak Mirku coś w tym jest , ale jakie ma to znaczenie jakimi portami czytam skoro odczytana wartośc z pozycji przykładowej "B" = 1101 wiec czy podepne to tak czy inaczej ta wartość nie ulega zmianie
    bo czytam z rotora 1101 , chyba sam się już zaplątałem i już widzę gdzie popełniłniam bład. I przez traktowanie go na siłę jako hexagona stracvilem wątek :)


    faktycznie powinienem czytać go odwrotnie wtedy pod pozycją "B" mam 1011 a nie 1101 co z koleji wzięło się z używania 10 pozycyjnych z kodowaniem BCD i teraz pokutuje.

    W istocie fizycznie ten sw wystawia przecierz stan binarnie i tu łatwo się z nim rozprawić :)
    a ja oczywiście zamotałem się na konwersji konwersji z postaci bin na BCD , BCD na HEX i HEX na ASCII

    ot widzisz na starość człowiek głupieje :)

    Dzieki za pomoc. Bo sam się na siłe zamotałem :)

    Oczywiście jak masz jakiś ciekawy pomysł lub ktos inny z tym oto ustrojem to zapraszam do pogawędki :)

    _________________
    Zbuduj swój system [url=https://helion.pl/ksiazki/w-labiryncie-iot-budowanie-urzadzen-z-wykorzystaniem-ukladow-esp8266-i-esp32-andrzej-gromczynski,wlablo.htm#format/d]IOT[/url]



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 11 lis 2011, o 00:04 
    Offline
    Użytkownik

    Dołączył(a): 04 paź 2011
    Posty: 8615
    Pomógł: 338

    Idąc dalej teraz Switha widze w innym świetle i traktuje go jak powinienem czyli :
    czyli poprostu jako zwykły 16 pozycyjny coder binarny :)

    a więc mniej więcej obsługę widzę tak:
    używając bit maskingu:
    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.


    oczywiście w tej chwili niema znaczenia prawidłowość bo chodzi mi o zobrazowanie jak się za to coś zabrać

    Jak to działa?

    Bit masking jest techniką, w którym binarne operacje są używane do pobierania danych. Wykorzystuje proste algorytmy Boole'a do ustalenia, czy konkretna wartość znajduje się w zestawie bitów. "wynik = X & wartość" jest to fragment procedury maskowania. Zmienna "Wartość" reprezentuje "zdemaskowane" dane odczytane z przełacznika, "X" jest maską, a zamaskowane dane reprezentuje zmienna "wynik". Maskowanie Bitów jest procesem analizy związanej z bitami i zbieraniem wyników. Odbywa się to za pomocą operacji logicznych i operatora AND. W efekcie jeśli zamaskowane dane są takie same jak maska , a maska jest obecna jako podzbiór danych następuje porównanie.

    Przykładowo:
    Analiza wartości dla 7 pozycji SWitcha -- sprawdzenie czy jest aktywny

    Kod:
    0111   wartość binarna odczytana przez mikrokontroler
    1000   maska  określająca pozycje 7 reprezentujaca SW7
    -------------
    0111   wynik  0x07  włacznik aktywny na pozycji 7

     

    hmmm no mam nadzieje ze nie zamotałem zabardzo
    :)

    _________________
    Zbuduj swój system [url=https://helion.pl/ksiazki/w-labiryncie-iot-budowanie-urzadzen-z-wykorzystaniem-ukladow-esp8266-i-esp32-andrzej-gromczynski,wlablo.htm#format/d]IOT[/url]



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 11 lis 2011, o 01:44 
    Offline
    Moderator
    Avatar użytkownika

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

    Wiesz ... obsługę to można zrobić na miliard dwieście tysięcy sposobów, w zależności od potrzeb ;) .... ja jednak nie za bardzo jakby nadal widzę tego co chcesz uzyskać - tzn nie widzę całości/celu .... dlatego ciężko mi np coś jeszcze innego zaproponować czy wnieść do dyskusji.

    Tzn np nie rozumiem po co ci aż tyle zmiennych tych chkDipX ???? skoro masz tylko jeden rotor i możliwa jest tylko jego jedna wartość przecież.

    przecież po odczycie wartości portu (zakładając, że rotor podłączony jest do najstarszych bitów)

    Kod:
    uint8_t chkDip = PINB >> 4;


    masz od razu w takiej jednej zmiennej wartość binarną wybraną przez tenże rotor (wartości od 0 do 15)

    więc teraz gdybym chciał sprawdzić czy aktywna jest wartość 7 to wystarczyłby warunek:

    Kod:
    if( chkDip == 7 ) .....


    albo wczytanie do innej zmiennej wartości true lub false:

    Kod:
    wartosc = chkDip == 7;


    i wtedy wartosc = 1 (true) jeśli rotor jest w pozycji 7 albo wartosc = 0 (false) jeśli jest w innej pozycji.

    No chyba że ty go chcesz użyć właśnie w jakimś takim celu o jakim ja nie mam pojęcia? ;)

    _________________
    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: 11 lis 2011, o 11:47 
    Offline
    Użytkownik

    Dołączył(a): 04 paź 2011
    Posty: 8615
    Pomógł: 338

    Masz racje Mirku troche zamotałem ale faktycznie wydaje mi się iż użycie algorytmu Boole'a ma sens
    choć szukam szybszego rozwiazania, które by pozwalało odczytać stan switcha porównać, odczytaną
    wartość z maską i przekazać tą informacje do programu , który wykona w zależności od wartości określonej przez powyższe .... wykonać przypisane procedury:)

    ---------
    a teraz przedstawie kawałek układanki :)

    Obrazek

    _________________
    Zbuduj swój system [url=https://helion.pl/ksiazki/w-labiryncie-iot-budowanie-urzadzen-z-wykorzystaniem-ukladow-esp8266-i-esp32-andrzej-gromczynski,wlablo.htm#format/d]IOT[/url]



    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 20 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