tag:blogger.com,1999:blog-6085382734211687437.post1893186367415725079..comments2024-03-21T08:13:48.283+01:00Comments on Mikrokontrolery Jak zacząć - zbiór najczęściej udzielanych porad: Pułapki AVR: Zerowanie bitu przez wpisanie jedynkiUnknownnoreply@blogger.comBlogger9125tag:blogger.com,1999:blog-6085382734211687437.post-59013728335100397572015-01-24T16:11:25.586+01:002015-01-24T16:11:25.586+01:00Dlaczego uważasz, że to badziewne rozwiązanie? To ...Dlaczego uważasz, że to badziewne rozwiązanie? To taka sama umowa, jak, że np. zerujemy wpisjując zero. Przy czym zerowanie poprzez wpisanie jeden ma kilka zalet, m.in. taką, że możesz coś wpisać do rejestru, tak, aby nie zmieniać bitów stanu. Czasami w rejestrze stanu jest kilka flag i wtedy możliwość zerowania tylko określonych ma sens. Takie rozwiązanie jest stosowane powszechnie w mikrokontrolerach, nie tylko AVR.tmfnoreply@blogger.comtag:blogger.com,1999:blog-6085382734211687437.post-5540007931133966612015-01-23T19:39:56.743+01:002015-01-23T19:39:56.743+01:00Skoro tak - to już jest oczywista: "taniej wy...Skoro tak - to już jest oczywista: "taniej wyszło" zostawić rozwiązanie badziewne, niż je dopracować.Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-6085382734211687437.post-74946780756057184852015-01-22T21:31:21.410+01:002015-01-22T21:31:21.410+01:00Owszem, jest techniczne uzasadnienie dla takiego d...Owszem, jest techniczne uzasadnienie dla takiego działania - wynika ono ze sprzętowej implementacji tego typu flag z użyciem przerzutników. Przejrzyj tabele prawdy dla tego typu układów i odpowiedź stanie się oczywista.tmfnoreply@blogger.comtag:blogger.com,1999:blog-6085382734211687437.post-89786688766968196792015-01-22T18:36:48.772+01:002015-01-22T18:36:48.772+01:00Czy jest znane jakieś techniczne uzasadnienie taki...Czy jest znane jakieś techniczne uzasadnienie takiego, jak się nasuwa wprost: głupiego, nielogicznego zupełnie rozwiązania, które (nie ma rady) "trzeba znać"? Czy też po prostu jest to zwyczajna wada projektowa, której usunięcie producent uznał za "zbyt kosztowne", no i teraz sobie klepie tak "upiększone" kostki?Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-6085382734211687437.post-19122969539971679602014-03-08T17:30:51.556+01:002014-03-08T17:30:51.556+01:00Zgadzam się z Anonimowym. TWINT już było ustawione...Zgadzam się z Anonimowym. TWINT już było ustawione na 1 przed zamianą, więc się nie zmieniło (trochę jak obracanie czegokolwiek o 360°).Sobsznoreply@blogger.comtag:blogger.com,1999:blog-6085382734211687437.post-19880791234440901002013-03-29T14:10:12.815+01:002013-03-29T14:10:12.815+01:00Nie ma za co przepraszać. Wszedłem od razu na Twój...Nie ma za co przepraszać. Wszedłem od razu na Twój post i czytając go nie patrzyłem, co jest powyżej. Tamten temat kiedyś zawierał także problem opisany w tym artykule, a później stał się spisem treści, bo artykuł był za długi (podział na poszczególne problemy). Stąd znajdują się w nim komentarze dot. tego artykułu. :-)<br /><br />---------------------------<br /><br />Odpowiadając na Twoje pytanie:<br /><br />TWINT jest ustawiany na 1 <b>po zakończeniu pracy</b>:<br /><br />"This <b>bit is set by hardware when the TWI has finished its current job</b> and expects application software response."<br /><br />i oczekuje reakcji programu. Następnie program (np. poprzez przerwanie lub tzw. pulling) robi co ma robić i musi także zgasić TWINT:<br /><br />"The TWINT Flag must be cleared by software by writing a logic one to it. Note that this flag is not automatically cleared by hardware when executing the interrupt routine."<br /><br />Użyłem słowa "zgasić" przez co rozumiemy zgodnie z datasheet wyzerowanie bitu TWINT, co zgodnie z powyższym cytatem wymaga wpisania jedynki, czyli tak jak opisuje ten artykuł.<br /><br />Czy teraz wszystko jasne?Donduhttps://www.blogger.com/profile/00935153382439363150noreply@blogger.comtag:blogger.com,1999:blog-6085382734211687437.post-68406173437789951812013-03-28T12:45:31.907+01:002013-03-28T12:45:31.907+01:00Napisałem ten komentarz, gdyż zauważyłęm że inni k...Napisałem ten komentarz, gdyż zauważyłęm że inni komentowali ów TWINT właśnie w spisie treście, wiec przepraszam. <br /><br />PO pierwsze w mojej wypowiedzi popełniłem jeden błąd:<br /><br />"Flaga TWINT musi być wyzerowana poprzez wpisanie za TWINT zera." (ostatnie zdanie mojego tłumaczenia.)<br /><br />Miałem napisać:<br /><br />"Flaga TWINT musi być wyzerowana poprzez wpisanie za TWINT jedynki."<br /><br />Ale wracając do meritum sprawy - chodziło mi o to że, czy to na pewno jest "bit szalony" który może zostać zmodyfikowany za pomocą: "TWCR |= (1<<TWINT);" ?<br /><br />Przecież zgodnie z tym co pisze w datasheet, kiedy TWI kończy pracę, wystawia flagę TWINT ustawiając ZERO na tym bicie. A my jak będziemy gotowi, (ustawimy nowy bajt do wysłania itp.) wyzerujemy flagę, czyli ustawimy JEDEN na bicie TWINT rejestru TWCR. <br /><br />I teraz mamy sytuację która jest przedstawiona w artykule - chcemy zmienić tylko bit TWEA. Początkowo rejestr TWCR miał wartośc 10000100. na pierwszym miejscu jest 1 - czyli flaga TWINT jest opuszczona czyli TWI coś robi. Potem instrukcją <br /><br />TWCR |= (1<<TWINT);<br /><br />zmieniamy wartość rejestru TWCR czyli 11000100. Czyli nie zmieniliśmy wartości TWINT. TWI dalej sobei pracuje, a jak skończy ustawi TWCR na: 01000100. <br /><br />Moje pytanie brzmi: (czy/gdzie) w moim rozumowaniu jest błąd?<br /><br />PS: w spisie treści jest Twój (Dondu) komentarz daty "23 stycznia 2013 22:36".<br />Tam piszesz że "Gdy jest ustawiony (ma wartość 1) oznacza, że wystąpiło przerwanie z TWI. Gdy jest zerem oznacza, że przerwanie nie wystąpiło." A nie jest czasem właśnie na odwrót? Wcześniej nie zauważyłem tego komentarza - ao to mi zasadniczo chodzi - czy czasem nie jest na odwrót - jeśli zerowanie flagi TWINT oznacza wpisanie JEDEN do TWINT, to że flaga (czyli wystąpienie przerwania) jest podniesiona gdy TWINT = 0?<br /><br />00:41 Campi się po nocach, co? :DAnonymousnoreply@blogger.comtag:blogger.com,1999:blog-6085382734211687437.post-380171766978606832013-03-28T00:41:03.397+01:002013-03-28T00:41:03.397+01:00Hej,
Przeniosłem tutaj Twój post ze spisu treści...Hej, <br /><br />Przeniosłem tutaj Twój post ze spisu treści tego cyklu artykułów, ponieważ chyba o ten artykuł Ci chodziło. Czy tak?<br /><br />Czytałem dwa razy, nie bardzo rozumie co właściwie pytasz. Może dlatego, że już dość późno :D<br /><br />W tym artykule omawiamy jak to ująłem "szalone bity" w zakresie ich zerowania przez wpisanie jedynki. Nie omawiam tutaj innych aspektów.<br /><br />BTW: <br />O co chodzi z tą osobą?<br /><br /><br />Donduhttps://www.blogger.com/profile/00935153382439363150noreply@blogger.comtag:blogger.com,1999:blog-6085382734211687437.post-11214644202011903352013-03-28T00:31:48.403+01:002013-03-28T00:31:48.403+01:00Hmm, niedawno rozpoczełem przygodę z i2c więc oczy...Hmm, niedawno rozpoczełem przygodę z i2c więc oczywiście rzecz będzie o TWINT. W datasheecie stoi: <br /><br />"This bit is SET by hardware when the TWI has finished its current job and expects application<br />software response. If the I-bit in SREG and TWIE in TWCR are set, the MCU will<br />jump to the TWI Interrupt Vector. While the TWINT Flag is set, the SCL low period is<br />stretched.<br />The TWINT Flag must be cleared by software by writing a logic one to it."<br /><br />Bit ten (TWINT) jest USTAWIANY/modyfikowany PRZEZ interfejs wiedy TWi skończy robotę. Oznacza to że MCu skoczy do obsługi przerwania. KIEdy TWINT jest ustawiony przez hardware, scl nie tyka (?). Flaga TWINT musi być wyzerowana poprzez wpisanie za TWINT zera.<br /><br />Czyli to nie jest poprostu tak, że interfejs ustawia TWINT na ZERO jeśli skończy robotę? TWINT=0 (skończył poprzednią robotę -> ustawiamy dane do wysłania -> ustawiamy JEDEN na TWINT -> "oho jest jeden, jest robota, myśli TWI, skończe robotę i ustawie na zero, czyli nie ma nic do roboty". Nie tak to czasem idzie?<br /><br />A w przykładzie Dondu (świetny blog! ) że tam programista ustawia TWEA psując TWINT, przecież początkowy stan, przed ustawieniem TWEA, a po ustawieniu... różni się tylko TWEA'em.<br /><br /><br />POzdrawiam :)<br /><br />PS. Widzę pewną analogię do Mirka Krenca... a on w końcu przyznał rację... ;)Anonymousnoreply@blogger.com