Treker (Damian Szymański) Luty 22, 2011 Autor tematu Udostępnij Luty 22, 2011 Kurs nie jest już związany bezpośrednio z nami, takie pytania zadawać najlepiej bezpośrednio do autora kursu przez jego stronę: http://hobby.abxyz.bplaced.net/index.php?pid=4&cid=1 Cytuj Link do komentarza Share on other sites More sharing options...
Nider Luty 23, 2011 Udostępnij Luty 23, 2011 Właśnie mam problem z ustawieniem odpowiednio rejestrów tak żeby wszystko działało. Ogólnie wiem jak PWM działa, ale nie wiem jak ustawić każdy z rejestrów, który rejestr ustawić i wogóle Cytuj Link do komentarza Share on other sites More sharing options...
RafI Luty 23, 2011 Udostępnij Luty 23, 2011 Dokumentację techniczną procesora widziałeś? Tam jest wszystko opisane, łącznie z rejestrami, co do PWMu to masz tabelę z trybami pracy Timerów, znajdziesz tam potrzebne Ci ustawienia rejestrów. Pytanie brzmi w jakim stopniu opanowałeś już C? Cytuj Link do komentarza Share on other sites More sharing options...
matrix Kwiecień 10, 2011 Udostępnij Kwiecień 10, 2011 Słuchajcie, czy zamiast zapisów typu i++ mogę stosować zapis zrozumiały dla mnie czyli i=i+1 i=i+5 itp? Cz w C mogę stosować zapisy podobne do języka Bascom? Mam tu na myśli na przykład warunki. Ja bym chciał warunek zapisywać jak w Bascom czyli: If i = coś tam bądź if i > coś tam then coś tam Co ze sformułowaniem typu then? Jak się pisze w C? Czy w ponizszym kawałku kodu: if(wrong_card>4) { int_licz1=0; wrong_card=0; BUZZ=0; PRZ=0; po wyrażeniu if(wrong_card>4) jest jakby wyrażenie then ? Czy dobrze rozumiem że jeśli spełniony jest warunek w linii if(wrong_card>4) to: - zmienna int_licz przyjmuje wartość 0 - zmienna wrong_card też 0 - BUZZ również 0 - PRZ też 0 ? Cytuj Link do komentarza Share on other sites More sharing options...
Polecacz 101 Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Produkcja i montaż PCB - wybierz sprawdzone PCBWay! • Darmowe płytki dla studentów i projektów non-profit • Tylko 5$ za 10 prototypów PCB w 24 godziny • Usługa projektowania PCB na zlecenie • Montaż PCB od 30$ + bezpłatna dostawa i szablony • Darmowe narzędzie do podglądu plików Gerber Zobacz również » Film z fabryki PCBWay
gohandi Kwiecień 10, 2011 Udostępnij Kwiecień 10, 2011 W C nie ma czegoś takiego jak then. Poprostu pierwsza komenda lub blok komend ujętych w nawiasach {} jest wykonywany dla spełnionego warunku. Pamietaj, że w C znak równości to ==. Pojedynczy znak = to znak przypisania. Jest to częsty błąd. Szczególnie uciążliwy z tego względu, że w C znak przypisania zwraca wartość jaka została przypisana do zmiennej. Dla przykładu: int c = 0; if (c==12) { tutaj jest to co sie ma wykonać } Tutaj program nie wejdzie do bloku komend po ifie z tego względu że 0 nie równa sie 12 int c = 0; if (c=12) { tutaj jest to co sie ma wykonać } W tym wypadku natomiast już wejdzie ponieważ komedna przypisania zwróci wartość przypisywaną (tutaj 12) natomiast if traktuje jako false tylko i wyłącznie zero. Każda inna wartość jest traktowana jako logiczna jedynka. Wynika to z faktu, że w samy C nie ma zmiennych logicznych czy binarny Możesz tworzyć zapisy typu i=i+1 nic nie stoi na przeszkodzie tylko ze i++ jest poprostu szybsze. Jeśli chcesz zmieniać o wartość inna niż jeden możesz używać zapisu a+=4 jest on równoznaczny z a=a+4 Pozdrawiam Cytuj Link do komentarza Share on other sites More sharing options...
matrix Kwiecień 10, 2011 Udostępnij Kwiecień 10, 2011 Dla mnie to wszystko jest niezrozumieałem bo inne niż to czego nauczyłem się do tej pory. Dla mnie równe to znak = więc taki zapis int c = 0; if (c==12) traktuję jako sprawdzenie czy zmienna c przyjęła wartość 12 ? Natomiast tego zapisu int c = 0; if (c=12) zupełnie nie czaję. Co to jest? Sprawdzenie warunku i od razy wpisanie do zmiennej c wartości 12 ? Cytuj Link do komentarza Share on other sites More sharing options...
pawel Kwiecień 10, 2011 Udostępnij Kwiecień 10, 2011 W c jest osobny operator wpisania i sprawdzenia równości. Wpisanie odbywa się poprzez operator =, a sprawdzenie równości poprzez ==. Jeżeli w nawiasach gdzie powinien być warunek dasz operacje do wykonania, to po wykonaniu jej będzie sprawdzony warunek, czyli czy różne od 0 czy 0. ten drugi program można zapisać także jako: int c = 0; c = 12; if (c) { jakieś tam instrukcje; } Taki program sprawdza wartość c i jak będzie 0 to nie robi instrukcji w pętlach, a jak coś innego to wykonuje te instrukcje. Cytuj Link do komentarza Share on other sites More sharing options...
gohandi Kwiecień 10, 2011 Udostępnij Kwiecień 10, 2011 traktuję jako sprawdzenie czy zmienna c przyjęła wartość 12 ? Dobrze to traktujesz. zupełnie nie czaję. Co to jest? Sprawdzenie warunku i od razy wpisanie do zmiennej c wartości 12 ? Przypisanie wartości 12 do zmiennej c i ta wartość jest od razu umieszczana w warunku if'a Zwracam na to uwagę ponieważ sam często się na tym łapałem ze zapominałem dać == i dawałem samo =. Program się kompiluje jakoś działa, ale działa źle. Ciężko potem taki błąd odszukać jeśli się nie jest na to wyczulonym. Niekiedy taki zapis jest pożądany, może się wydawać że to nie ma sensu ale popatrzmy na to z trochę innej strony: while((g=getchar())!='p'){ putchar((g+12)%256); } Wyżej napisany kod pobiera znak z domyślnego wejścia i wypisuje znak przesunięty o 12 oczek w tabeli ascii. Program wyjdzie z pętli jeśli znak jaki wciśniemy to będzie p. Jest to program bardziej na komputer, aczkolwiek taki szablon na pewno znajdzie zastosowanie w programowaniu mikrokontrolerów. Od razu napisze, że to wcale nie musi tak wyglądać. Jest to jednak zapis który skraca kod a nadal jest czytelny. Pozdrawiam Cytuj Link do komentarza Share on other sites More sharing options...
matrix Kwiecień 10, 2011 Udostępnij Kwiecień 10, 2011 Przypisanie wartości 12 do zmiennej c i ta wartość jest od razu umieszczana w warunku if'a Więc dla mnie to jest bez sensu ponieważ wtedy nie trzeba pisać warunku tylko od razu instrukcję do wykonania. To tak jakby chciał sprawdzać czy już woda na kawę zagotowana skoro już zalałem kawę. Cytuj Link do komentarza Share on other sites More sharing options...
gohandi Kwiecień 10, 2011 Udostępnij Kwiecień 10, 2011 Zwracam na to uwagę ponieważ sam często się na tym łapałem ze zapominałem dać == i dawałem samo =. Program się kompiluje jakoś działa, ale działa źle. Ciężko potem taki błąd odszukać jeśli się nie jest na to wyczulonym. Niekiedy taki zapis jest pożądany, może się wydawać że to nie ma sensu ale popatrzmy na to z trochę innej strony: Nie mówie, że samo if(c=12) ma sens, tylko że przez niedopatrzenie czasem taki kwiatek sie znajdzie i przy pisaniu programu, a szczególnie przy debugowaniu, trzeba na to uważać. Tak jak napisałem wcześniej są też przypadki gdzie taki mechanizm jezyka C jest użyteczny. Pozdrawiam Cytuj Link do komentarza Share on other sites More sharing options...
GAndaLF Kwiecień 10, 2011 Udostępnij Kwiecień 10, 2011 Ale przecież to jest taka dodatkowa opcja, nic nie stoi na przeszkodzie, żebyś rozbijał kod na dodatkowe linie. Możesz używać nawiasu w ifie do samego zapisania warunku, a możesz też skrócić kod przypisując jednocześnie nowe wartości zmiennym. Np w tym kodzie gohandiego z getchar masz przypisanie zmiennej g nowej wartości a następnie porównanie jej z zadaną stałą. Gdybyś chciał to robić oddzielnie, musisz się zastanowić w którym miejscu nadawać zmiennej wartość bo jeśli dasz g = xxx przed pętlą to wykona się tylko raz, a jeżeli dasz na końcu pętli to nie wykona się za pierwszym razem. Po prostu jeżeli już się oswoisz z tym zapisem to jest on bardzo przydatny i na pewno będziesz go sobie chwalił. Natomiast jeśli chodzi o samą przesiadkę z bascoma na C to rzeczywiście możesz mieć problemy. Ja co prawda patrzę na problem z przeciwnej strony - umiem pisać w C, nigdy nic nie robiłem w bascomie, tylko czytałem czasem cudzy kod i znam mniej więcej składnię. W każdym razie mi się wydaje, że bascom jest kompletnie nielogiczny więc wiem co teraz czujesz 😃 Dlatego najlepszą metodą będzie dla ciebie zapomnienie na chwilę o bascomie i nie szukanie jakiś analogii w składni bo się tylko niepotrzebnie pogubisz. I nie oceniaj na razie czy coś jest sensowne czy nie tylko spróbuj najpierw samemu napisać jakieś proste programy, może nawet lepiej jeżeli będą na konsolę a nie avry (do tego możesz wykorzystać np program Dev-C++). Wtedy się przekonasz że tak naprawdę wszystko jest logiczne tylko po prostu inne. Inna sprawa, że nie powinieneś się zrażać, bo C wyrobi w tobie dobre nawyki, które są standardem w większości współczesnych języków programowania. Dzięki temu będziesz mógł potem łatwo w visualu napisać aplikację windowsową sterującą robotem przez port szeregowy czy w javie aplet do sterowania przez przeglądarkę albo aplikację na komórkę. Cytuj Link do komentarza Share on other sites More sharing options...
matrix Kwiecień 10, 2011 Udostępnij Kwiecień 10, 2011 A na przykład tu: if(!check_card() && bin!=0 && bin!=65535 && licz_kart<20) Jaki jest sens podwójnego stosowania operatorów logicznych i po co w ogóle są te operatory? Do tej pory (w bascom) używałem funkcji porównywania sprawdzania czy zmienna jest większa czy mniejsza i takie tam a tu po co to wszystko? Co do pisania w C na konsolę to już mam za sobą jakiś przelicznik prędkości do modelu zdalnie sterowanego w skali 1:10 i pisałem to właśnie w devC++, ale to było dawno i było to raczej proste. Wyglądało to tak: -> PLIK DO POBRANIA <- Natomiast co do szukania analogii to ja ich nie szukam tylko próbuję sobie całość ułatwić znajdując jakieś podobieństwa. Chodzi o to by mi się to jakoś kojarzyło. Cytuj Link do komentarza Share on other sites More sharing options...
GAndaLF Kwiecień 10, 2011 Udostępnij Kwiecień 10, 2011 tutaj zapisujesz złożony warunek w jednym ifie: if(111 && !(222) && 333) Znak && to AND natomiast warunki są zamieniane na wartości 1 lub 0 i analizowane przez ifa. Jeśli jednocześnie jest spełniony 111 i negacja 222 i 333 to wykonaj ifa. Znowu bez tego byś musiał pisać trzy ify zagnieżdżone i kod staje się mniej czytelny, możesz się pogubić w zamykaniu nawiasów itp Tak samo możesz używać ora || albo łączyć oba znaki. Wtedy są czytane od lewej do prawej. A z tym pisaniem programów na konsoli to najlepiej właśnie zrób proste programiki które wywalają jakiś tekst na ekran i używają właśnie za każdym razem jeden z tych trudnych dla ciebie zapisów. Dzięki temu zobaczysz w praktyce jak działają i potem możesz próbować łączyć ze sobą po kilka w bardziej skomplikowane twory i patrzeć czy działają tak jak myślałeś. Cytuj Link do komentarza Share on other sites More sharing options...
gohandi Kwiecień 10, 2011 Udostępnij Kwiecień 10, 2011 Jeśli chodzi operatory sumy i iloczynu to trzeba je podzielić na 2 grupy Logiczne i Bitowe Logiczne są to operatory && oraz || Bitowe są to operatory & oraz | Różnica jest znaczna. Przy operatorach logicznych bierzesz sumaryczną wartość danego rejestru natomiast przy operatorach bitowych porównywane są poszczególne bity rejestru a = 3; //0b00000011 b = 4; //0b00000100 a&&b daje 1 //jest to wartosc prawdy a&b daje 0 // jest to operacja iloczynu na każdej parze bitow Jak widać jest znacząca różnica. Zastanów się dla czego jeśli a=9 i b =13 to a&b daje 5. Pozdrawiam Cytuj Link do komentarza Share on other sites More sharing options...
matrix Kwiecień 10, 2011 Udostępnij Kwiecień 10, 2011 Jeśli chodzi operatory sumy i iloczynu to trzeba je podzielić na 2 grupy Logiczne i Bitowe Logiczne są to operatory && oraz || Bitowe są to operatory & oraz | Różnica jest znaczna. Przy operatorach logicznych bierzesz sumaryczną wartość danego rejestru natomiast przy operatorach bitowych porównywane są poszczególne bity rejestru a = 3; //0b00000011 b = 4; //0b00000100 a&&b daje 1 //jest to wartosc prawdy a&b daje 0 // jest to operacja iloczynu na każdej parze bitow Jak widać jest znacząca różnica. Zastanów się dla czego jeśli a=9 i b =13 to a&b daje 5. Pozdrawiam Myślałem że jestem dość inteligentny facet ale widzę że to (język C) chyba nie dla mnie. Kompletnie nic nie rozumiem z powyższego cytatu. Nic. Cytuj Link do komentarza Share on other sites More sharing options...
Pomocna odpowiedź
Dołącz do dyskusji, napisz odpowiedź!
Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!