<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pl-pl">
<link rel="self" type="application/atom+xml" href="https://forum.atnel.pl/feed.php?f=4&amp;t=24584&amp;mode" />

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2023-11-17T14:55:40+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=24584&amp;mode</id>
<entry>
<author><name><![CDATA[mario2015]]></name></author>
<updated>2023-11-17T14:55:40+01:00</updated>
<published>2023-11-17T14:55:40+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=24584&amp;p=237665#p237665</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=24584&amp;p=237665#p237665"/>
<title type="html"><![CDATA[Re: Operacje bitowe - podstawy]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=24584&amp;p=237665#p237665"><![CDATA[
<div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />mirekk36 mówił żeby dać delay przed pętlą główną i nie pomogło.<br /></div><br />Ponieważ źle inicjalizujesz piny.<br />A więc jeśli diody sterujesz katodami, to twoja inicjalizacja powinna wyglądać tak:<br />[syntax=c]DDRA |= 0xff; // ustawiasz kierunek portu A jako wyjście<br />PORTA |=0xff; // ustawiasz stan wysoki na cały port A, diody nie świecą[/syntax]<br />Po tej inicjalizacji, nie potrzeba tego delay-a, choć czasami pomaga.<br />Po drugie zmień sterowanie ledami w if-ach w pętli głównej. Ty masz tak:<br />[syntax=c]PORTA = 0b00000111; /* nacisniety */[/syntax] <br />a powinno być tak:<br />[syntax=c]PORTA &amp;= ~0b00000111; // stan niski na pinach 0, 1, 2.   3 diody świecą[/syntax]<br />W kolejnym ifie masz<br />[syntax=c]PORTA = 0b11111111;[/syntax]<br />A powinno być<br />[syntax=c]PORTA |= 0b00000111; // stan wysoki na pinach 0, 1, 2. Diody zgaszone[/syntax]<br />Kolejną rzeczą, którajest nadmiarowa to ( return 0), po prostu jest tam nie potrzebny. Kompilator poradzi sobie bez niego.<br />Na koniec powiem tak. Popraw kodu według tego co ci teraz napisałem i sprawdź jak to działa a jeśli chcesz sterować tylko 3 diodami,<br />to napisz i pokażę ci jak zrobić poprawną inicjalizację nie ruszając innych pinów.<br />Ta inicjalizacja, którą teraz ci podałem jest wystarczająca do takich testów jakie robisz ale...<br />no właśnie, jakbyś chciał na pozostałych pinach tego portu mieć coś innego, to trzeba do tego tematu podejść troszeczkę inaczej i użyć kilku makr.<br />Popraw i przetestuj to co masz i daj znać jak poszło.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=8867">mario2015</a> — 17 lis 2023, o 14:55</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[wirusssunited]]></name></author>
<updated>2023-11-16T21:56:28+01:00</updated>
<published>2023-11-16T21:56:28+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=24584&amp;p=237662#p237662</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=24584&amp;p=237662#p237662"/>
<title type="html"><![CDATA[Re: Operacje bitowe - podstawy]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=24584&amp;p=237662#p237662"><![CDATA[
<div class="quotetitle">mario2015 napisał(a):</div><div class="quotecontent"><br />Najpierw dokonaj prawidłowej inicjalizacji portu, do którego podłączyłeś diody led.<br />Jeśli diody masz na porcie A i są anodami podłączone do VCC a katodami do portu, to inicjalizacja wygląda tek:<br />[syntax=c]DDRA |= 0xff; // ustawiasz kierunek portu A jako wyjście<br />PORTA |=0xff; // ustawiasz stan wysoki na cały port A, diody nie świecą[/syntax]<br />Jeśli diody masz na porcie A i są anodami podłączone do portu a katodami do GND, to inicjalizacja wygląda tek:<br />[syntax=c]DDRA |= 0xff; // ustawiasz kierunek portu A jako wyjście<br />PORTA &amp;= ~(0xff); // ustawiasz stan niski na cały port A, diody nie świecą[/syntax]<br />Najpierw zacznij od tego a potem popraw pętlę główną.<br />Acha. Jeśli chcesz sterować tylko 3 diodami, to to się robi jeszcze inaczej, żeby nie ruszać pozostałych pinów.<br />I napisz z jakiego zestawu korzystasz, czy diody masz podłączone na stałe czy na kabelkach.<br /></div><br /><br /><br />Anodę ma przyłączoną do VCC a katodę do portu mikrokontrolera. <br />Co to znaczy popraw pętlę główną? mirekk36 mówił żeby dać delay przed pętlą główną i nie pomogło.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=18157">wirusssunited</a> — 16 lis 2023, o 21:56</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2023-11-16T20:52:31+01:00</updated>
<published>2023-11-16T20:52:31+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=24584&amp;p=237661#p237661</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=24584&amp;p=237661#p237661"/>
<title type="html"><![CDATA[Re: Operacje bitowe - podstawy]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=24584&amp;p=237661#p237661"><![CDATA[
<div class="quotetitle">wirusssunited napisał(a):</div><div class="quotecontent"><br />Sam je zaproponowałeś więc się nie bulwersuj<br /></div><br />Ja się bulwersuję? grzecznie staram się pomóc a ty mi tu takie teksty sadzisz?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 16 lis 2023, o 20:52</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mario2015]]></name></author>
<updated>2023-11-16T13:55:10+01:00</updated>
<published>2023-11-16T13:55:10+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=24584&amp;p=237659#p237659</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=24584&amp;p=237659#p237659"/>
<title type="html"><![CDATA[Re: Operacje bitowe - podstawy]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=24584&amp;p=237659#p237659"><![CDATA[
Najpierw dokonaj prawidłowej inicjalizacji portu, do którego podłączyłeś diody led.<br />Jeśli diody masz na porcie A i są anodami podłączone do VCC a katodami do portu, to inicjalizacja wygląda tek:<br />[syntax=c]DDRA |= 0xff; // ustawiasz kierunek portu A jako wyjście<br />PORTA |=0xff; // ustawiasz stan wysoki na cały port A, diody nie świecą[/syntax]<br />Jeśli diody masz na porcie A i są anodami podłączone do portu a katodami do GND, to inicjalizacja wygląda tek:<br />[syntax=c]DDRA |= 0xff; // ustawiasz kierunek portu A jako wyjście<br />PORTA &amp;= ~(0xff); // ustawiasz stan niski na cały port A, diody nie świecą[/syntax]<br />Najpierw zacznij od tego a potem popraw pętlę główną.<br />Acha. Jeśli chcesz sterować tylko 3 diodami, to to się robi jeszcze inaczej, żeby nie ruszać pozostałych pinów.<br />I napisz z jakiego zestawu korzystasz, czy diody masz podłączone na stałe czy na kabelkach.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=8867">mario2015</a> — 16 lis 2023, o 13:55</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[wirusssunited]]></name></author>
<updated>2023-11-16T13:16:55+01:00</updated>
<published>2023-11-16T13:16:55+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=24584&amp;p=237658#p237658</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=24584&amp;p=237658#p237658"/>
<title type="html"><![CDATA[Re: Operacje bitowe - podstawy]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=24584&amp;p=237658#p237658"><![CDATA[
Nowy kod<br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br /><br />int main(void) {<br />//OBSZAR INICJALIZACJI<br />DDRA = 0xff; /* Diody są połączone pomiędzy PORTEM a VCC */<br />PORTB |= (1 &lt;&lt; PB7); /* przycisk switch jest połączony pomiędzy PORT a GND*/<br />PORTA=0xff;<br />_delay_us(10);<br />//KONIEC OBSZARU INICJALIZACJI<br /><br />//OBSZAR PĘTLI<br />while (1) { //3 warianty:<br />if (!(PINB &amp; (1 &lt;&lt; PB7)))<br />{ /* czy przycisk został naciśnięty */<br />PORTA = 0b00000111; /* nacisniety */<br />}<br />else { /* nienaciśnięty */<br />PORTA = 0b11111111;<br />}<br />}<br />return (0);<br />}[/syntax]<br /><br /><div class="quotetitle">mirekk36 napisał(a):</div><div class="quotecontent"><br />Dlatego pisałem żebyś po włączeniu wewn podciągania <strong>w obszarze inicjalizacji programu (A NIE W PĘTLI GŁÓWNEJ)</strong> dał małe opóźnienie - ale to rzędu co najwyżej kilku kilkunastu mikrosekund a nie Qurdę 1000ms .... ja miałem na myśli _delay_us(10) co już wystarczy na to aby na pinie wejściowym zdążył się ustabilizować stan wysoki na potrzeby badania go jako przycisku<br />.<br /></div><br />Dwie rzeczy. Ja tu przychodzę po pomoc i wskazówki staram się wdrożyć. Zrobiłem z początku 10us ale nic nie dało więc poszedłem w ms i tam coś się zmieniło. Faktycznie, nie umiem jeszcze powiązać w 100procentach działania programu z elektroniką ale się tego uczę. Więc czy ja nie wiem gdzie jest obszar inicjalizacji? Być może tak, jeśli napisałem źle to proszę popraw. W tej formie dalej diody się na moment zapalają.<br /><div class="quotetitle">mirekk36 napisał(a):</div><div class="quotecontent"><br />A książka panie kochany właśnie uczy pisać programy NIOEBLOKUJĄCE czyli bez ANI JEDNEGO użycia żadnego delaja.<br /></div><br />A druga sprawa dotycząca delay, o których już wiem że nie ma ich w książce. Sam je zaproponowałeś więc się nie bulwersuj że próbuje za ich pomocą rozwiązać ten problem <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" />.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=18157">wirusssunited</a> — 16 lis 2023, o 13:16</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[SylwekK]]></name></author>
<updated>2023-11-16T12:12:22+01:00</updated>
<published>2023-11-16T12:12:22+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=24584&amp;p=237656#p237656</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=24584&amp;p=237656#p237656"/>
<title type="html"><![CDATA[Re: Operacje bitowe - podstawy]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=24584&amp;p=237656#p237656"><![CDATA[
<div class="quotetitle">wirusssunited napisał(a):</div><div class="quotecontent"><br />Czy pracujecie zawodowo z mikrokontrolerami?<br /></div><br />W moim przypadku mikrokontrolery to jeden z działów i wspomaganie innych &quot;wynalazków&quot; <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> Nie skupiam się tylko na programowaniu jednak jeśli już się za coś biorę to staram się doprowadzić to do końca z maksymalnym wykorzystaniem wiedzy i zgodnie ze sztuką. Nie dopuszczam do czegoś takiego, że zrządzeniem losu, przypadku i odrobiny szczęścia  program działa, ale tak naprawdę nie wiadomo dlaczego. Nie! Tu nie ma miejsca na przypadek czy założenia, że może jakaś sytuacja w programie nie wystąpi - każdy świadomie pozostawiony nawet najmniejszy błąd, który ma szansę kiedykolwiek się ujawnić musi być poprawiony, bo wcześniej czy później się to zemści.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1922">SylwekK</a> — 16 lis 2023, o 12:12</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2023-11-16T11:52:28+01:00</updated>
<published>2023-11-16T11:52:28+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=24584&amp;p=237655#p237655</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=24584&amp;p=237655#p237655"/>
<title type="html"><![CDATA[Re: Operacje bitowe - podstawy]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=24584&amp;p=237655#p237655"><![CDATA[
<div class="quotetitle">wirusssunited napisał(a):</div><div class="quotecontent"><br />Zauważam, że im dam większe opóźnienie tym ten impuls trwa krócej, dla 1000ms w ogóle go nie widać, przy czym przez te 1000ms nic nie można zrobić w programie. Czy w komercyjnych projektach też się robi takie opóźnienia, tylko że wtedy na przerwaniach/timerach?<br /></div><br />A widzisz teraz to już mieszasz na maxa - bo skąd ty wziąłeś takie opóźnienia _delay_ms() i to chyba jeszcze dajesz je w pętli głównej skoro piszesz że ci blokuje to działanie programu. <br /><br />Mieszasz bo z kolei nie wiesz, że tu w grę wchodzą zjawiska elektroniczne - i nie umiesz tego powiązać z programem. Skoro w pierwszej wersji programu dajesz podciąganie pinu do VCC i za chwilę pierwszą operacją w pętli jest sprawdzenie stanu tego podciągniętego pinu  to niestety nie zdajesz sobie sprawy, że od rozkazu podciągania do pierwszego sprawdzenia stanu pinu mija kilkanaście nanosekund, a wewn rezystor podciągający ma dużą rezystancję przez co ten stan wysoki ustali się na nim DUUUŻO później niż te kilkanaście nanosekud i dlatego może ci w pierwszym obiegu pętli zapalać się dioda tak jakby był przycisk włączony  - a może nawet i przez dwa obiegi pętli .... Dlatego pisałem żebyś po włączeniu wewn podciągania w obszarze inicjalizacji programu (A NIE W PĘTLI GŁÓWNEJ) dał małe opóźnienie - ale to rzędu co najwyżej kilku kilkunastu mikrosekund a nie Qurdę 1000ms .... ja miałem na myśli _delay_us(10) co już wystarczy na to aby na pinie wejściowym zdążył się ustabilizować stan wysoki na potrzeby badania go jako przycisku<br /><br />A książka panie kochany właśnie uczy pisać programy NIOEBLOKUJĄCE czyli bez ANI JEDNEGO użycia żadnego delaja.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 16 lis 2023, o 11:52</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[wirusssunited]]></name></author>
<updated>2023-11-16T11:21:44+01:00</updated>
<published>2023-11-16T11:21:44+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=24584&amp;p=237652#p237652</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=24584&amp;p=237652#p237652"/>
<title type="html"><![CDATA[Re: Operacje bitowe - podstawy]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=24584&amp;p=237652#p237652"><![CDATA[
Dwa pytania do was Sylwekk oraz micky. Czy pracujecie zawodowo z mikrokontrolerami?<br />Drugie pytanie w takim razie czy jesteście w stanie odpowiedzieć mi na moje pytanie?<br /><br /><div class="quotetitle">wirusssunited napisał(a):</div><div class="quotecontent"><br /><div class="quotetitle">mirekk36 napisał(a):</div><div class="quotecontent"><br />A teraz wracając do tematu rozważań. Co to znaczy brak odpowiedniej inicjalizacji pinów? To co mi przychodzi to żeby przed pętlą while dodać:<br />[syntax=c]PORTA=0xff;<br />_delay_ms(1000);[/syntax]<br /><br />Zauważam, że im dam większe opóźnienie tym ten impuls trwa krócej, dla 1000ms w ogóle go nie widać, przy czym przez te 1000ms nic nie można zrobić w programie. Czy w komercyjnych projektach też się robi takie opóźnienia, tylko że wtedy na przerwaniach/timerach?<br /></div></div><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=18157">wirusssunited</a> — 16 lis 2023, o 11:21</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[SylwekK]]></name></author>
<updated>2023-11-15T23:35:20+01:00</updated>
<published>2023-11-15T23:35:20+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=24584&amp;p=237650#p237650</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=24584&amp;p=237650#p237650"/>
<title type="html"><![CDATA[Re: Operacje bitowe - podstawy]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=24584&amp;p=237650#p237650"><![CDATA[
Jeśli mogę wtrącić swoje 3 grosze nt. książki to powiem Ci, że mój entuzjazm opaddał 3 czy 4 razy za każdym razem kiedy z bascoma próbowałem na C przejść i kiedy już definitywnie chciałem skończyć z przesiadką zaryzykowałem z książką BB... Efekty możesz oglądać w większości moich projektów z mniej więcej 8-9 ostatnich lat.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1922">SylwekK</a> — 15 lis 2023, o 23:35</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[micky]]></name></author>
<updated>2023-11-15T23:20:25+01:00</updated>
<published>2023-11-15T23:20:25+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=24584&amp;p=237649#p237649</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=24584&amp;p=237649#p237649"/>
<title type="html"><![CDATA[Re: Operacje bitowe - podstawy]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=24584&amp;p=237649#p237649"><![CDATA[
Rozumiem, że książka może wydawać się droga, ale zakładając, że będziesz walczył z tematem przez 2 tygodnie po 1 h to książka z przesyłką kosztuje 192zl/14 to daje niecale 14zl/h <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> a gwarantuję, że da Tobie olbrzymi zastrzyk wiedzy i będziesz spijal samą śmietankę <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1546">micky</a> — 15 lis 2023, o 23:20</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2023-11-14T12:54:51+01:00</updated>
<published>2023-11-14T12:54:51+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=24584&amp;p=237632#p237632</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=24584&amp;p=237632#p237632"/>
<title type="html"><![CDATA[Re: Operacje bitowe - podstawy]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=24584&amp;p=237632#p237632"><![CDATA[
<div class="quotetitle">wirusssunited napisał(a):</div><div class="quotecontent"><br />Od razu pytanie, czy kody źródłowe też dostanę przy zakupie czy trzeba przepisywać?<br /></div><br />To akurat jest jedną z najmocniejszych cech naszego wydawnictwa, że do książek są porządnie opracowane kody, z podziałem na lekcje a nie jakieś fragmenty pisane na kolanie<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 14 lis 2023, o 12:54</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mario2015]]></name></author>
<updated>2023-11-14T11:18:52+01:00</updated>
<published>2023-11-14T11:18:52+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=24584&amp;p=237631#p237631</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=24584&amp;p=237631#p237631"/>
<title type="html"><![CDATA[Re: Operacje bitowe - podstawy]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=24584&amp;p=237631#p237631"><![CDATA[
<div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />((PINB &amp; (1 &lt;&lt; PB7))<br /></div><br />to nie to samo co:<br /><div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />(PINB &amp; PB7)<br /></div><br />W pierwszym przypadku porównujesz stan bitu nr7 (1&lt;&lt;7), jedynka przesunięta o siedem miejsc w lewo a w drugim przypadku<br />nie porównujesz bitu nr7, tylko liczbę 7.<br /><div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />A tego to już w ogóle nie rozumiem. Skąd niby PB7=0b00000111?<br /></div><br />Ponieważ tak jak na obrazku masz pokazane liczysz wagę poszczególnych bitów. Tak wygląda zapis liczby 7 w zapisie binarnym a pod makrem PB7, kryje się właśnie liczba7.<br /><a href="https://obrazkiforum.atnel.pl/8867/829e1226a84d5fd576ca70c0a21c3c90.jpg"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/8867/829e1226a84d5fd576ca70c0a21c3c90.jpg" alt="Obrazek" /></a><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=8867">mario2015</a> — 14 lis 2023, o 11:18</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[wirusssunited]]></name></author>
<updated>2023-11-14T10:40:12+01:00</updated>
<published>2023-11-14T10:40:12+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=24584&amp;p=237630#p237630</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=24584&amp;p=237630#p237630"/>
<title type="html"><![CDATA[Re: Operacje bitowe - podstawy]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=24584&amp;p=237630#p237630"><![CDATA[
<div class="quotetitle">mirekk36 napisał(a):</div><div class="quotecontent"><br />1. To nie ma nic wspólnego z przesunięciami - tylko brak odpowiedniej inicjalizacji pinów jeśli nie chcesz żeby mignęły. Do tego zrób małego _delay_ms(10) przed pętlą główną żeby stany się ustaliły prawidłowe<br /><br />2. taki zapis (1&lt;&lt;PB7) traktuj jak gotową liczbę 0b10000000 <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /></div><br /><br />Rozważam bluebooka, tylko że nie ukrywam że dla mnie ta książka jest droga, dlatego postanowiłem że najpierw chcę zobaczyć czy entuzjazm nie opadnie ze mnie przez 2-3 tygodnie nauki a potem może go nabędę. Od razu pytanie, czy kody źródłowe też dostanę przy zakupie czy trzeba przepisywać?<br /><br />A teraz wracając do tematu rozważań. Co to znaczy brak odpowiedniej inicjalizacji pinów? To co mi przychodzi to żeby przed pętlą while dodać:<br />[syntax=c]PORTA=0xff;<br />_delay_ms(1000);[/syntax]<br /><br />Zauważam, że im dam większe opóźnienie tym ten impuls trwa krócej, dla 1000ms w ogóle go nie widać, przy czym przez te 1000ms nic nie można zrobić w programie. Czy w komercyjnych projektach też się robi takie opóźnienia, tylko że wtedy na przerwaniach/timerach? <br /><br /><br /><br /><div class="quotetitle">Marhef napisał(a):</div><div class="quotecontent"><br /><div class="quotetitle">wirusssunited napisał(a):</div><div class="quotecontent">dlaczego if((PINB &amp; (1 &lt;&lt; PB7)) to nie to samo co if((PINB &amp; PB7)<br /></div>Ponieważ PB7 nie ma wartości 0b10000000, tylko 0b00000111, a Ty potrzebujesz mieć 1 na ósmym bicie PINB. Czyli nie PINB &amp; 7, tylko PINB &amp; 128.<br /><br />Przepraszam, przesunąłem za mało. Oczywiście, PB7 to nie 7 tylko 8, czyli 0b00001000</div><br /><br /><br />A tego to już w ogóle nie rozumiem. Skąd niby PB7=0b00000111?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=18157">wirusssunited</a> — 14 lis 2023, o 10:40</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mario2015]]></name></author>
<updated>2023-11-13T19:26:02+01:00</updated>
<published>2023-11-13T19:26:02+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=24584&amp;p=237622#p237622</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=24584&amp;p=237622#p237622"/>
<title type="html"><![CDATA[Re: Operacje bitowe - podstawy]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=24584&amp;p=237622#p237622"><![CDATA[
Skopiowałem twój kod:<br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br />    int main(void) {<br /><br />    DDRC = 0xff; /* Diody są połączone pomiędzy PORTEM a VCC */<br />    PORTB |= (1 &lt;&lt; PB7); /* przycisk switch jest połączony pomiędzy PORT a GND*/<br /><br />    while (1) {<br /><br />            if ((PINB &amp; (1 &lt;&lt; PB7)) == 0) //jeżeli przycisk jest wyłączony to na PB7 jest 1, a gdy naciskamy to na PB7 jest 0<br />            {<br />            PORTC = 0b00000111; /* nacisniety */<br />            }<br />            else { /* nienaciśnięty */<br />           PORTC = 0b11111111;<br />            }<br />    }<br />    return (0);<br />    }[/syntax]<br />zmieniłem tylko port dla ledów, dlatego że diody mam na porcie C.<br />Działa  to tak, że po wciśnięciu przycisku i trzymaniu go, świecą trzy diody i jest OK.<br />Jeśli chcesz, żeby przy nie wciśniętym przycisku świeciły wszystkie to zamiast tak:<br />[syntax=c]PORTC = 0b11111111;[/syntax]<br />wpisz tak:<br />[syntax=c]PORTC &amp;= ~0b11111111;[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=8867">mario2015</a> — 13 lis 2023, o 19:26</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Marhef]]></name></author>
<updated>2023-11-13T19:12:52+01:00</updated>
<published>2023-11-13T19:12:52+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=24584&amp;p=237621#p237621</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=24584&amp;p=237621#p237621"/>
<title type="html"><![CDATA[Re: Operacje bitowe - podstawy]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=24584&amp;p=237621#p237621"><![CDATA[
<div class="quotetitle">wirusssunited napisał(a):</div><div class="quotecontent"><br />dlaczego if((PINB &amp; (1 &lt;&lt; PB7)) to nie to samo co if((PINB &amp; PB7)<br /></div>Ponieważ PB7 nie ma wartości 0b10000000, tylko 0b00000111, a Ty potrzebujesz mieć 1 na ósmym bicie PINB. Czyli nie PINB &amp; 7, tylko PINB &amp; 128.<br /><br />Przepraszam, przesunąłem za mało. Oczywiście, PB7 to nie 7 tylko 8, czyli 0b00001000<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=12752">Marhef</a> — 13 lis 2023, o 19:12</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2023-11-13T19:10:58+01:00</updated>
<published>2023-11-13T19:10:58+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=24584&amp;p=237620#p237620</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=24584&amp;p=237620#p237620"/>
<title type="html"><![CDATA[Re: Operacje bitowe - podstawy]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=24584&amp;p=237620#p237620"><![CDATA[
<div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />Problem 1:<br />Gdy wgrywam program do mikrokontrolera to za każdym razem następuje krótkie mignięcie diód (wykonanie komendy PORTA = 0b00000111) i dopiero wtedy diody gasną i program czeka aż nacisnę przycisk aby móc wykonać komendę PORTA = 0b00000111. Dlaczego tak się dzieje? Coś w moim kodzie jest nie tak?<br /><br />Problem 2:<br />Długo rozważałem dlaczego if((PINB &amp; (1 &lt;&lt; PB7)) to nie to samo co if((PINB &amp; PB7) skoro PB7=0b10000000, co jest wynikiem tego że zadeklarowałem PORTB |= (1 &lt;&lt; PB7). Jak rozumieć inność tych zapisów, bo jeżeli zamienie na ((PINB &amp; PB7) w warunku if (), to nie działa prawidłowo.<br /></div><br />ludzie gadają, że najlepiej na świecie przesunięcia są wyjaśnione w Blurbooku <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><!-- m --><a class="postlink" href="https://atnel.pl/mikrokontrolery-avr-jezyk-c.html" >https://atnel.pl/mikrokontrolery-avr-jezyk-c.html</a><!-- m --><br /><br />zdecydowanie polecam bo po tej książce już czytelnicy nie mogą się odzwyczaić od taki zapisów - tak są przyjazne <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />odnośnie twoich problemów:<br /><br />1. To nie ma nic wspólnego z przesunięciami - tylko brak odpowiedniej inicjalizacji pinów jeśli nie chcesz żeby mignęły. Do tego zrób małego _delay_ms(10) przed pętlą główną żeby stany się ustaliły prawidłowe<br /><br />2. taki zapis (1&lt;&lt;PB7) traktuj jak gotową liczbę 0b10000000 <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 13 lis 2023, o 19:10</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[wirusssunited]]></name></author>
<updated>2023-11-13T18:09:22+01:00</updated>
<published>2023-11-13T18:09:22+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=24584&amp;p=237619#p237619</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=24584&amp;p=237619#p237619"/>
<title type="html"><![CDATA[Operacje bitowe - podstawy]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=24584&amp;p=237619#p237619"><![CDATA[
Cześć, szlifuje operacje na bitach i pojawiły się dwa pytania, ale najpierw wytłumaczę dla porządku działanie programu.<br />Program steruje diodami. Przycisk switch podłączony do PB7 zwieram do masy. W warunku sprawdzam czy naciśnięty przycisk czyli czy w PB7 pojawiło się zero i wtedy poprzez wystawienie 0 na trzech odpowiednich bitach portu A zapalają się diody (realizowana jest komenda PORTA = 0b00000111).<br /><br />Problem 1:<br />Gdy wgrywam program do mikrokontrolera to za każdym razem następuje krótkie mignięcie diód (wykonanie komendy PORTA = 0b00000111) i dopiero wtedy diody gasną i program czeka aż nacisnę przycisk aby móc wykonać komendę PORTA = 0b00000111. Dlaczego tak się dzieje? Coś w moim kodzie jest nie tak?<br /><br />Problem 2:<br />Długo rozważałem dlaczego if((PINB &amp; <strong>(1 &lt;&lt; PB7</strong>)) to nie to samo co if((PINB &amp; <strong>PB7</strong>) skoro PB7=0b10000000, co jest wynikiem tego że zadeklarowałem PORTB |= (1 &lt;&lt; PB7). Jak rozumieć inność tych zapisów, bo jeżeli zamienie na ((PINB &amp; <strong>PB7</strong>)  w warunku if (), to nie działa prawidłowo.<br /><br />Z góry dziękuje za podpowiedzi. <br /><br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br />int main(void) {<br /><br />DDRA = 0xff; /* Diody są połączone pomiędzy PORTEM a VCC */<br />PORTB |= (1 &lt;&lt; PB7); /* przycisk switch jest połączony pomiędzy PORT a GND*/<br /><br />while (1) {<br /><br />if ((PINB &amp; (1 &lt;&lt; PB7)) == 0) //jeżeli przycisk jest wyłączony to na PB7 jest 1, a gdy naciskamy to na PB7 jest 0<br />{<br />PORTA = 0b00000111; /* nacisniety */<br />}<br />else { /* nienaciśnięty */<br />PORTA = 0b11111111;<br />}<br />}<br />return (0);<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=18157">wirusssunited</a> — 13 lis 2023, o 18:09</p><hr />
]]></content>
</entry>
</feed>