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



Teraz jest 28 gru 2024, o 12:00


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 ]
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: 27320
Lokalizacja: Szczecin
Pomógł: 1041

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: 27320
Lokalizacja: Szczecin
Pomógł: 1041

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
Avatar użytkownika

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

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 ]
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 ]
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
Avatar użytkownika

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

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
Avatar użytkownika

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

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
Avatar użytkownika

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

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
Avatar użytkownika

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

ż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
Avatar użytkownika

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

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
Avatar użytkownika

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

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