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 10 lip 2025, o 09:04


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 17 ] 
    Autor Wiadomość
    PostNapisane: 11 kwi 2012, o 12:02 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 11 kwi 2012
    Posty: 59
    Pomógł: 1

    Witam,
    Program dotyczy multipleksowania podwójnego wyświetlacza LED, gdzie liczby zmieniają się w zakresie 00-99.
    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.


    Byłbym wdzięczny, gdyby ktoś mógł wytłumaczyć po kolei jak wykonywane są pętle i dlaczego własnie tak.
    Pozdrawiam.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 11 kwi 2012, o 12:25 
    Offline
    Moderator
    Avatar użytkownika

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

    Najpierw mi napisz dlaczego masz w kodzie coś takiego:

    #define F_CPU 1000000

    ????

    Poza tym to wyrwałeś jakiś fragment kodu z kontekstu, a co u ciebie tzn jaka funkcja zajmuje się tym multipleksowaniem ?

    Można tylko się domyślać co to robi ale to trochę bez sensu ?

    czy przerabiałeś rozdział o multipleksowaniu z mojej książki ? Bo tutaj to coś mi się wydaje, że to jakiś fragment, który wykorzystuje jakiś inny sposóbmultipleksowania, a jak widzę zapis bezpośrednio do portu w pętli głównej to niestety pachnie mi to tym, że jest to sposób "do góry nogami" :(

    Więc nawet z tego powodu próby tłumaczenia czegoś co jest źle robione mijają się z celem....

    Chyba żebyś pokazał cały kod tego multipleksowania

    bo tak to widać , że bezpośrednio na PORTB, który być może odpowiedzialny jest za segmenty, wywalane są stablicowane dane ... tyle że jak mówię - to jest pomysł "nieteges"

    _________________
    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 kwi 2012, o 14:59 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 14 lut 2012
    Posty: 598
    Lokalizacja: Warszawa
    Pomógł: 13

    To ja zapytam się tak:
    A jak według ciebie one się wykonują ?
    Ty nam napisz jak to rozumiesz, a my w razie czego naprostujemy twoje myślenie ;)

    Mirku myślę że to nie jest fragment z kontekstu tylko kolega Stanley stara się zrozumieć jak działają pętle, a że sprawdza to za pomocą prostego ( multipleksowania ) licznika należy wybaczyć to jemu. ;) A do multipleksowania mogę się założyć że jeszcze nie dotarł.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 11 kwi 2012, o 15:25 
    Offline
    Moderator
    Avatar użytkownika

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

    Malutki_27 napisał(a):
    Mirku myślę że to nie jest fragment z kontekstu ..............., a że sprawdza to za pomocą prostego ( multipleksowania ) licznika należy wybaczyć to jemu. ;) ...


    Tzn, ja myślę że to jest fragment wyrwany z kontekstu, ale broń boże nie mam nic przeciwko temu i wcale się nie gniewam czy coś .... ja po prostu zawsze lubię wiedzieć co z czego wynika u pytającego - bo wtedy lepiej i łatwiej mi wymyślić jakieś skuteczne wytłumaczenie - rozumiesz ? Stąd moje częste dociekania tego typu.... A często też bywa tak, że gdy już autor poda podstawy to wyjaśnianie można skierować na całkiem inne tory i lepiej to przedstawić.

    Innymi słowy czasem ktoś zadaje pytanie - jak coś tam zrealizować - chociaż potencjalny dawca wyjaśnienia od razu widzi, że można to coś uzyskać w dużo prostszy sposób i chce go na to naprowadzić zamiast męczyć się wraz z autorem na zbyt krętej drodze..... Oczywiście nie zawsze musi się dobrze wydawać - temu potencjalnemu dawcy wyjaśnienia - czyli np mnie ;) stąd te pytania uzupełniające ...


    Malutki_27 napisał(a):
    To ja zapytam się tak:
    A jak według ciebie one się wykonują ?
    Ty nam napisz jak to rozumiesz, a my w razie czego naprostujemy twoje myślenie ;).


    A to jest właśnie jedna z najlepszych metod porad - zamiast od razu wyjaśniać - też dopytać - jak autor to rozumie ;) .... żeby móc wskoczyć w jego tok myślenia i zacząć go ew uzupełniać i naprowadzać na właściwe tory ;)

    _________________
    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 kwi 2012, o 15:53 
    Offline
    Użytkownik

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

    Stara zasada żydów odpowiadać pytaniem na pytanie -- daje to czas do namysłu :)

    choć zasadniczo w sprawie tego przykładu można w tej właśnie chwili powiedzieć iż jeden rabin powie " tak" , a drugi rabin powie "nie"

    choć w tym przykładzie z kodu kolegi Stanley-a

    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.


    można by od razu nakreślić jak i dlaczego w ten sposób , niemniej właśnie odniosę sie do wypowiedzi kolegi Malutkiego

    Niech kolega Stanley napisze nam co rozumie przez ten kod

    rozpisze go na pojedyncze wiersze i napisze co myśli o tym kodzie i jak go widzi :)

    oczywiście posłużę się małym podstępem i zapytam w tym miejscu kolegę Stanley :


    Jak kolego Stanley rozumiesz poniższy schemat??

    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  
    PostNapisane: 11 kwi 2012, o 17:13 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 11 kwi 2012
    Posty: 59
    Pomógł: 1

    Może najpierw pokażę schemat połączeń:
    Obrazek
    Kod zmodyfikowałem tyle żeby odpowiadał pod schemat połączeń. Wartości tablicy również zmodyfikowałem.
    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.

    Po podłączeniu zasilania układ działa tak:
    start = 00, cyfra jedności zmienia się co 0,1s, natomiast cyfra dziesiątek zmienia się co 1s. Wszystko sobie elegancko tyka do liczby 99, zerowanie 00, i znowu dalej pętla leci.
    Problem w tym, że nie rozumiem dlaczego tak się dzieje wg tego kodu. (nie widzę jakoś tych czasów przełączeń, które są na wyświetlaczu)


    mirekk36 napisał(a):
    Najpierw mi napisz dlaczego masz w kodzie coś takiego:

    #define F_CPU 1000000


    Dla avr studio4 dzięki temu makru nie muszę ustawiać w configuration options częstotliwości taktowania procka.

    Multipleksowanie, które jest przedstawione w Twojej książce Mirek jest dla mnie zrozumiałe, na timerach wszystko ładnie widać, ten przykład jest z innej książki, ale niestety nie mogę go załapać..



    Ostatnio edytowano 11 kwi 2012, o 17:29 przez Stanley, łącznie edytowano 1 raz

    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 11 kwi 2012, o 17:27 
    Offline
    Użytkownik

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

    Kolego Stanley :)

    odnieś się do rysunku do mojego postu , masz tam schemat działania pętli for

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


    popatrz na rysunek w moim poście wyżej i popatrz na te 2 linijki

    masz tu 2 pętle FOR
    1 jedna zakładamy że główna , i druga zawarta w ciele pętli głównej
    wiec co tu się dzieje w tym kodzie ??

    przeczytaj to ta :

    for(i=0; i<=9; i++)
    czyli po naszemu:

    DLA (I=0; sprawdź czy i<= 9; jeśli nie zwiększ i o 1)

    sprawa jest prosta startujesz i z wartością 0 , a skoro i = 0 wiec warunek jest pętli czyli
    sprawdzenie wartości pętli jest spełniony bo i nie jest = 9 a 0 więc pętla się wykona i do i zostanie dodane 1 , czyli po powrocie do pętli przy ponownym sprawdzeniu i=1 ale dalej nie 9
    wiec wykona się znowu , a gdy i osiągnie wartość 9 pętla zostanie opuszczona bo warunek nie jest spełniony gdyż i nie jest mniejsze lub =9

    więc już widzisz że i zmieni wartość od 0 do 9 - pętla wykona się 9razy co odpowiada
    wskazaniom dziesiątek na wyświetlaczu , a pętla wewnątrz zrobi to samo i odpowiada to
    wyświetlaniu jednostek prawda ??

    myślę ze resztę zrozumiesz z analizy kodu podałem ci trochę informacji
    jak widzisz pętle śą bardzo przydatne i proste w działaniu :)

    _________________
    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 kwi 2012, o 17:45 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 11 kwi 2012
    Posty: 59
    Pomógł: 1

    Same działanie pętli jest dla mnie jasne. :)
    Z tego co widać na wyświetlaczu, to dla i=0, k tyknie od 0 do 9, wskakuje i=1, k tyknie znowu od 0 do 9, wskakuje i=2...

    No bo najpierw cyfra dziesiątek jest równa zero, a jedności kręcą się od 0 do 9, następuje zwiększenie o 1 cyfry dziesiątek, a jedności znowu lecą od 0 do 9 itd.

    Można by wstawić jakoś tutaj nawiasy, żeby było bardziej widocznie co po kolei się dzieje?
    To _delay_ms(5) to jest czas pomiędzy przełączaniem tranzystorów dobrze rozumiem? Tylko jak dojść do tego z tego programu, że cyfra dziesiątek zmienia się co 1s, a cyfra jedności co 0.1s?



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 11 kwi 2012, o 17:50 
    Offline
    Użytkownik

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

    a zobacz co się dzieje w 3ciej pętli ??

    policz czas na wykonanie 10 przebiegów wraz z delayami ile wychodzi ??

    _________________
    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 kwi 2012, o 18:31 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 11 kwi 2012
    Posty: 59
    Pomógł: 1

    Faktycznie... rozpisałem sobie w kolumnach na kartce te przełączanie i mam tą 0.1s i 1s. :)
    Dzięki. Tylko jeszcze zastanawia mnie sprawa z kolejnością wykonywania pętli.
    Dlaczego kompilator odbiera to właśnie w ten sposób, że gdy "i" tyknie raz, to "k" tyknie 10 razy?
    Obowiązuje tu jakaś kolejność, zasada?



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 11 kwi 2012, o 18:38 
    Offline
    Użytkownik

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

    zobacz to w kodzie

    1 .for (i xxxxxxxxxxxxx) -- ma sie wykonac 9x ale
    2. for(k xxxxxxxxxxx) -- zawarta jest w ciele i teraz ona się musi wykonać 9 razy żeby móc wrócić do i
    3. for (m xxxxxxxxxx) --- zanim skończy się 1 obieg pętli k musi się ta pętla wykonać 10 razy

    i teraz dopiero można wrócić 2 i znowu warunek spełniony wiec k+1 i znowu 10x m i dopiero jak k wykona sie 9 x wróci do i +1 i od nowa rozumiesz ?? teraz

    dlatego wcięcia w kodzie są ważne bo widać wyraźnie co kiedy się wykona :)

    innymi słowy i=0 tak długo aż k będzie =9 , a k będzie = 0 aż m osiągnie 10

    czyli dla jednego przebiegu pętli 1 czyli z I pętla 2 wykona się 9 razy , a w tym czasie pętla 3 wykona się 90 razy :)

    chyba wyszło masło maślane :) ale tak to działa że żadne z for i =0 nie zmieni się na i=1 do puki k nie będzie = 9, a wartość k = 0 nie zmieni się na k= 1 do puki m nie będzie =10


    dodam jeszcze ze pętla poprzedzająca for i, k , m czyli for(;;) nigdy się nie skończy bo jej warunek zawsze będzie spełniony i dlatego licznik lata sobie wkoło od 00 do 99 :)


    dla for (i xxxx) warunek nie będzie spełniony gdy i <= 9
    wtedy nastąpi zakończenie pętli i powrót do pętli for(;;) która wywoła wszystko od nowa

    _________________
    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 kwi 2012, o 18:52 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 11 kwi 2012
    Posty: 59
    Pomógł: 1

    Mocny zawodnik z Ciebie SunRiver.
    Dobra robota! Dzięki!



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 11 kwi 2012, o 18:56 
    Offline
    Użytkownik

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

    żaden problem ciężko to jakoś tak wyjaśnić obrazowo , no ale cieszę się że jakoś dałem rade ci pomóc :)

    _________________
    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 kwi 2012, o 18:59 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 11 kwi 2012
    Posty: 59
    Pomógł: 1

    Mnie głównie zmyliło to, że nie ma nawiasów klamrowych i nie czułem tego, że pętla "k" jest wewnątrz pętli "i". :)



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 11 kwi 2012, o 19:02 
    Offline
    Użytkownik

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

    no ale właśnie to widać ładnie po wcięciach w kodzie :) a ze ciałem pętli for i jest pętla k , a jej ciałem jest pętla m i dopiero jej ciałem są instrukcje operacji na portach to niema tu potrzeby stosowania nawiasów :) sa one dopiero w pętli m :)

    _________________
    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 kwi 2012, o 19:10 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 11 kwi 2012
    Posty: 59
    Pomógł: 1

    Nigdy nie stosowałem pętli zagnieżdżonych i stąd nie pomyślałem.
    Fakt mogłem skojarzyć to np jak to jest w warunku: if (a<0 && b=2) PORTB=(1<<PB1) <--- tutaj też niepotrzebne są klamry i działa, nie wiem czy dobra analogia :D.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 11 kwi 2012, o 19:17 
    Offline
    Użytkownik

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

    ujmę to tak :

    w pętlach FOR nie jest wymagane stosowanie nawiasów jeśli jej ciało stanowi inna pętla for :)
    ale kompilator i tak sobie je widzi :)
    takie uproszczenie zapisu dla programującego bo przy wielu pętlach łatwo zapomnieć któryś zamknąć:)

    _________________
    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: 17 ] 

    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