<?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=5453&amp;mode" />

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2014-01-08T19:06:31+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=5453&amp;mode</id>
<entry>
<author><name><![CDATA[Villentre]]></name></author>
<updated>2014-01-08T19:06:31+01:00</updated>
<published>2014-01-08T19:06:31+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5453&amp;p=64303#p64303</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5453&amp;p=64303#p64303"/>
<title type="html"><![CDATA[Re: pin portu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5453&amp;p=64303#p64303"><![CDATA[
<div class="quotetitle">aceton napisał(a):</div><div class="quotecontent"><br />Nie.<br />Denerwuje mnie dostęp do portów, dlatego chce zrobić funkcje / makro.<br />PinDir ( nazwa pinu, funkcja )<br />gdzie <br />nazwa pinu to np PD1<br />funkcja we / wy / we pullup<br /></div><br /><br />Krótko mówiąc - jak <strong>perlon</strong> wspomniał - piny nie mają nazw. Mają jedynie numer i są przyporządkowane do jakiegoś portu..<br /><br />Taka funkcja/makro więc raczej nie 2 a 3 parametry powinna przyjmować: (port, pin, funkcja). Dzięki stablicowaniu adresów uzyskanie czegoś takiego nie będzie trudne. <br /><br />Jeśli to ma być funkcja, to jednak można parametr podać jako string... set_pin(&quot;PA0&quot;, ...), w takim wypadku wyciągnięcie informacji do jakiego portu należy dany pin jest możliwe (ba, nawet nie jest trudne). Ale ma to tylko sens, jeśli ten parametr przychodzi np. od użytkownika przez UART, a nie &quot;żeby programiście uprościć&quot; - bo wtedy zmusza uC do wprost głupiej (całkowicie niepotrzebnej) pracy.<br /><br />Dla makra raczej bardzo Cię nie zaboli pisanie zamiast &quot;PB1&quot; &quot;B, 1&quot;, a pozwoli na zrealizowanie tego co chcesz (bo preprocesor chyba na łańcuchach znaków nie operuje)...<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=517">Villentre</a> — 8 sty 2014, o 19:06</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[perlon]]></name></author>
<updated>2014-01-08T11:30:33+01:00</updated>
<published>2014-01-08T11:30:33+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5453&amp;p=64277#p64277</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5453&amp;p=64277#p64277"/>
<title type="html"><![CDATA[Re: pin portu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5453&amp;p=64277#p64277"><![CDATA[
Kol.Villentre zaproponował stablicowanie adresów portów i stworzenie własnego sposobu dostępu. Podobne rozwiązanie podpowiedzieli ci na elce w twoim temacie zaczerpnięte z Arduino. Nie sądzę jednak (jeżeli dobrze czytam twoją intencję), żeby istniała taka funkcjonalność  :<br />adres_portu = jakas_funkcja( numer_pinu );<br />ponieważ <br />adres_portu = jakas_funkcja( PB1 );  po obróbce przez preprocesor otrzymasz adres_portu = jakas_funkcja( 1 );<br />adres_portu = jakas_funkcja( PD1 );  po obróbce przez preprocesor otrzymasz adres_portu = jakas_funkcja( 1 );<br />w obu przypadkach jakas_funkcja zwraca jeden i ten sam adres portu ponieważ jest identyczny argument wynoszący 1 a to dlatego, że PB1 jest równe 1 i PD1 również jest równe 1. PB1, PD1 etc są to stałe potrzebne wyłącznie do maskowania konkretnych bitów w bajcie będącym adresem portu. Z punktu widzenia otrzymanego wyniku zapisy PORTB |= ( 1 &lt;&lt; PB1 ) i PORTB = ( 1 &lt;&lt; PD1 ) są identyczne; <br /><br />PORTB |= ( 1 &lt;&lt; PB1 ); i PORTD |= ( 1 &lt;&lt; PB1 ); oczywiście są istotnie różne;<br />Konkluzja :<br />Tego czego oczekujesz raczej się nie da.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=382">perlon</a> — 8 sty 2014, o 11:30</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[aceton]]></name></author>
<updated>2014-01-08T10:53:47+01:00</updated>
<published>2014-01-08T10:53:47+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5453&amp;p=64274#p64274</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5453&amp;p=64274#p64274"/>
<title type="html"><![CDATA[Re: pin portu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5453&amp;p=64274#p64274"><![CDATA[
Nie kapuje jak to ma działać <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=772">aceton</a> — 8 sty 2014, o 10:53</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[perlon]]></name></author>
<updated>2014-01-07T10:47:14+01:00</updated>
<published>2014-01-07T10:47:14+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5453&amp;p=64147#p64147</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5453&amp;p=64147#p64147"/>
<title type="html"><![CDATA[Re: pin portu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5453&amp;p=64147#p64147"><![CDATA[
Ja tylko dodam, że PD1, PB2, PC4 ... etc to są stałe symboliczne ( chyba tak to się zwie ) zdefiniowane dyrektywą #define i PD1 == PB1 == 1, PC4 == PD4 == 4 etc. tak więc wyłuskiwanie nazwy portu ( która też jest stałą symboliczną reprezentującą adres i ustawioną dyrektywą #define ) na podstawie nazwy pinu chyba skazane jest na niepowodzenie. Chyba że jest jakiś sposób na rozkrojenie PBx na poszczególne elementy tj osobno P,B,x a potem złożenie tego inaczej podobnie jak to ma Mirek w swoich makrach upraszczających dostęp do portów.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=382">perlon</a> — 7 sty 2014, o 10:47</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Villentre]]></name></author>
<updated>2014-01-06T22:42:26+01:00</updated>
<published>2014-01-06T22:42:26+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5453&amp;p=64118#p64118</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5453&amp;p=64118#p64118"/>
<title type="html"><![CDATA[Re: pin portu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5453&amp;p=64118#p64118"><![CDATA[
Ja wiem, ja wiem! Też chwilę nad tym spędziłem, ale rozpisanie tego na 3/4 ify strasznie mnie irytowało...<br /><br />Tzn, ani nie jest to funkcja, ani makro (którego i tak prawdopodobnie byś użyć nie mógł, bo w końcu zmienną do niego podajesz) - jest to tablica z wskaźnikami na adresy portów (o ile dobrze to rozumiem). <br /><br />[syntax=c]volatile uint8_t * PORT&#91;4&#93; = {&amp;PORTA, &amp;PORTB, &amp;PORTC, &amp;PORTD};<br />volatile uint8_t * DDR&#91;4&#93;  = {&amp;DDRA,  &amp;DDRB,  &amp;DDRC,  &amp;DDRD};<br />volatile uint8_t * PIN&#91;4&#93;  = {&amp;PINA,  &amp;PINB,  &amp;PINC,  &amp;PIND};[/syntax]<br />Co prawda nie jestem pewien czy taki typ tablicy jest najodpowiedniejszy*... Ale taki działa. (;<br /><br />No i potem można używać tak:<br />[syntax=c]*(DDR&#91;port&#93;) |= (1&lt;&lt;pin);<br />*(PORT&#91;port&#93;) |= (1&lt;&lt;pin);[/syntax]<br /><br /><br />Na końcu - ja z tego korzystam na M16 - czyli równo 4 kolejne porty, każdy z 8 pinami - przy czymś mniejszym/większym możliwe, że będziesz musiał trochę warunków pododawać, by nie ustawiać czegoś co nie istnieje.<br /><br /><br /><br />E: * - znalazłem źródło utwierdzające mnie w przekonaniu, że typ jest dobry: <!-- m --><a class="postlink" href="http://www.nongnu.org/avr-libc/user-manual/FAQ.html#faq_port_pass" >http://www.nongnu.org/avr-libc/user-man ... _port_pass</a><!-- m --> - przykład co prawda trochę inny, ale imho łatwiej przekazać jedynie indeks tablicy niż cały adres...<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=517">Villentre</a> — 6 sty 2014, o 22:42</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[aceton]]></name></author>
<updated>2014-01-06T22:31:44+01:00</updated>
<published>2014-01-06T22:31:44+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5453&amp;p=64117#p64117</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5453&amp;p=64117#p64117"/>
<title type="html"><![CDATA[Re: pin portu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5453&amp;p=64117#p64117"><![CDATA[
Nikt nie wie ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=772">aceton</a> — 6 sty 2014, o 22:31</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2014-01-06T21:47:09+01:00</updated>
<published>2014-01-06T21:47:09+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5453&amp;p=64113#p64113</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5453&amp;p=64113#p64113"/>
<title type="html"><![CDATA[Re: pin portu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5453&amp;p=64113#p64113"><![CDATA[
<div class="quotetitle">aceton napisał(a):</div><div class="quotecontent"><br />Nie jestem zawodowym programista<br /></div><br /><br />ZDECYDOWANA większość programistów amatorów po przeczytaniu Bluebooka woli nauczyć się używać DOBREGO STYLU programowania w C bo to popłaca ... i każdy chyba to potwierdzi<br /><br />dlatego polecam ... bo wystarczy troszkę się z tym zaznajomić i okaże się szybko że to bardzo łatwe, proste, przyjemne i UŁATWIA życie i programowanie - .,.....<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 6 sty 2014, o 21:47</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[aceton]]></name></author>
<updated>2014-01-06T21:26:17+01:00</updated>
<published>2014-01-06T21:26:17+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5453&amp;p=64108#p64108</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5453&amp;p=64108#p64108"/>
<title type="html"><![CDATA[Re: pin portu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5453&amp;p=64108#p64108"><![CDATA[
Nie jestem zawodowym programista. Trochę bazgrałem w TP, delphi, bascom, ASM Z80. C ma ta zalete, ze jest bardzo zwarty, ale stare przyzwyczajenia i skladnia C mnie dobija.<br />wole $FF / FFh niz 0xFF <br />Chce napisac kilka mark / funkcji podobnych jak w arduino<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=772">aceton</a> — 6 sty 2014, o 21:26</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[DominikN]]></name></author>
<updated>2014-01-06T20:57:52+01:00</updated>
<published>2014-01-06T20:57:52+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5453&amp;p=64104#p64104</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5453&amp;p=64104#p64104"/>
<title type="html"><![CDATA[Re: pin portu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5453&amp;p=64104#p64104"><![CDATA[
tez tak myslalem na poczatku , ale lepiej jest przemeczyć i utrwalic sobie dokladnie obsługe portów bez makr i innych <br />takich skrótów . dopiero pozniej jak już opanujesz to mozna sie bawic w takie ułatwienia. Bo z czasem <br />bedziesz uzyawał tych swoich makr , a niech sie zdarzy że  np utracisz wszystkie dane , reinstal systemu i co wtedy ? makra odlecą a ty z reką w nocniku<br />nie bedziesz potrafił ustawic mikrokontrolera do migania diodą .<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1653">DominikN</a> — 6 sty 2014, o 20:57</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[aceton]]></name></author>
<updated>2014-01-06T20:34:20+01:00</updated>
<published>2014-01-06T20:34:20+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5453&amp;p=64096#p64096</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5453&amp;p=64096#p64096"/>
<title type="html"><![CDATA[Re: pin portu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5453&amp;p=64096#p64096"><![CDATA[
Nie.<br />Denerwuje mnie dostęp do portów, dlatego chce zrobić funkcje / makro.<br />PinDir ( nazwa pinu, funkcja )<br />gdzie <br />nazwa pinu to np PD1<br />funkcja we / wy / we pullup<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=772">aceton</a> — 6 sty 2014, o 20:34</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Zaba]]></name></author>
<updated>2014-01-06T20:18:17+01:00</updated>
<published>2014-01-06T20:18:17+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5453&amp;p=64090#p64090</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5453&amp;p=64090#p64090"/>
<title type="html"><![CDATA[Re: pin portu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5453&amp;p=64090#p64090"><![CDATA[
Nie bardzo rozumiem pytanie <br />Chcesz odczytać wartość pinu procesora ?<br /><br />O obsłudze pinów uC masz tutaj bardzo przydatny artykół<br /><a href="http://mirekk36.blogspot.com/2012/01/avr-porty-wewy-dir-podstawy.html"  class="postlink">http://mirekk36.blogspot.com/2012/01/avr-porty-wewy-dir-podstawy.html</a><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1044">Zaba</a> — 6 sty 2014, o 20:18</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[aceton]]></name></author>
<updated>2014-01-06T20:03:07+01:00</updated>
<published>2014-01-06T20:03:07+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5453&amp;p=64085#p64085</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5453&amp;p=64085#p64085"/>
<title type="html"><![CDATA[pin portu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5453&amp;p=64085#p64085"><![CDATA[
Jak się dobrać do nazwy portu w/g nazwy pinu ?<br />Jeżeli w funkcji używam PD1 to jak mogę się dobrać do  PORTD ?<br />[syntax=c]void PinDir ( uint8_t pin,uint8_t dir){<br /><br />port= costam( pin);<br /><br />if ( dir == IN ){ (port-1) &amp;=~(1&lt;&lt;pin);} // DDRx=PORTx-1<br />if ( dir == OUT ){ (port-1) |=(1&lt;&lt;pin);}<br />if ( dir == PULL ){ (port-1) &amp;=~(1&lt;&lt;pin);(port) |=(1&lt;&lt;pin); }<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=772">aceton</a> — 6 sty 2014, o 20:03</p><hr />
]]></content>
</entry>
</feed>