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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2015-10-19T17:28:13+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=13284&amp;mode</id>
<entry>
<author><name><![CDATA[SunRiver]]></name></author>
<updated>2015-10-19T17:28:13+01:00</updated>
<published>2015-10-19T17:28:13+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13284&amp;p=142838#p142838</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13284&amp;p=142838#p142838"/>
<title type="html"><![CDATA[Re: Jedna biblioteka dla wielu takich samych urzadzeń]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13284&amp;p=142838#p142838"><![CDATA[
<div class="quotetitle">korpikn napisał(a):</div><div class="quotecontent"><br />Dziękuję wszystkim za pomoc. Pomysł z magistralą odpowiada mi najbardziej. Pozdrawiam.<br /></div><br /><br />OD tego jest forum by sobie pomagać <br />nie mniej to najlepsze rozwiązanie w tym przypadku ... osobiście polecam moduły oparte o MCP23017<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=58">SunRiver</a> — 19 paź 2015, o 17:28</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[korpikn]]></name></author>
<updated>2015-10-19T12:00:20+01:00</updated>
<published>2015-10-19T12:00:20+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13284&amp;p=142831#p142831</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13284&amp;p=142831#p142831"/>
<title type="html"><![CDATA[Re: Jedna biblioteka dla wielu takich samych urzadzeń]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13284&amp;p=142831#p142831"><![CDATA[
Dziękuję wszystkim za pomoc. Pomysł z magistralą odpowiada mi najbardziej. Pozdrawiam.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11146">korpikn</a> — 19 paź 2015, o 12:00</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[SunRiver]]></name></author>
<updated>2015-10-18T20:25:57+01:00</updated>
<published>2015-10-18T20:25:57+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13284&amp;p=142807#p142807</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13284&amp;p=142807#p142807"/>
<title type="html"><![CDATA[Re: Jedna biblioteka dla wielu takich samych urzadzeń]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13284&amp;p=142807#p142807"><![CDATA[
Niema nad czym się zastanawiać musisz tylko sobie wybrać expander <br />PCF8574  czy MCP23017 i używać <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=58">SunRiver</a> — 18 paź 2015, o 20:25</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[korpikn]]></name></author>
<updated>2015-10-18T19:52:12+01:00</updated>
<published>2015-10-18T19:52:12+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13284&amp;p=142800#p142800</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13284&amp;p=142800#p142800"/>
<title type="html"><![CDATA[Re: Jedna biblioteka dla wielu takich samych urzadzeń]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13284&amp;p=142800#p142800"><![CDATA[
Wow! 8 wyświetlaczy w sieci. Robi wrażenie <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" />. Muszę to przemysleć.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11146">korpikn</a> — 18 paź 2015, o 19:52</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[SunRiver]]></name></author>
<updated>2015-10-18T19:31:32+01:00</updated>
<published>2015-10-18T19:31:32+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13284&amp;p=142793#p142793</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13284&amp;p=142793#p142793"/>
<title type="html"><![CDATA[Re: Jedna biblioteka dla wielu takich samych urzadzeń]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13284&amp;p=142793#p142793"><![CDATA[
ja używam w takim wypadku I2C  lub Moich SunUART_LCD <br />i problem z głowy ....<br /><br />Pomyśl kolego podpinasz LCD na I2C do procka , masz różne adresy odwołania <br />a biblioteka jedna <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" />  Przemyślcie to wszyscy po co wyważać drzwi lub wymyślać koło od nowa ??<br /><br />kosztuje grosze ....  a jakie mozliwości<br /><br /><a href="https://obrazkiforum.atnel.pl/58/098684d0bd73a50090052046e4b5dce5.jpg"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/58/098684d0bd73a50090052046e4b5dce5.jpg" alt="Obrazek" /></a><br /><br /><br />Przykładowo ....<br /><br /><a href="https://obrazkiforum.atnel.pl/58/acc3315c6240d12007ffe92fee872ed4.jpg"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/58/acc3315c6240d12007ffe92fee872ed4.jpg" alt="Obrazek" /></a><br /><br />Zdjęcie z sieci ....<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=58">SunRiver</a> — 18 paź 2015, o 19:31</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Bartek123]]></name></author>
<updated>2015-10-18T19:33:10+01:00</updated>
<published>2015-10-18T19:10:53+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13284&amp;p=142789#p142789</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13284&amp;p=142789#p142789"/>
<title type="html"><![CDATA[Re: Jedna biblioteka dla wielu takich samych urzadzeń]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13284&amp;p=142789#p142789"><![CDATA[
Trzeba się chwile zastanowić i ja bym to zrobił tak jedna zmienna przechowującą pin a druga który port i tak dla każdego pinu lcd, a funkcje zmodyfikować tak aby korzystały z tych zmiennych np<br />[syntax=c]if(port == 1)<br />   PORTA |= (1&lt;&lt;pin);<br />if(port == 2)<br />  PORTC |= (1&lt;&lt;pin);[/syntax]<br />i tak dalej wystarczy tylko zmienić funkcje pierwszego rzędu trochę kodu niestety przyrośnie.Można też zrobić poprostu tak:<br />[syntax=c]funkcja_wysyłająca_bajt()<br />{<br />if(sposob_podlaczenia_1)<br />{<br />     //tu wysyłanie bajtu na pierwszy wyświetlacz<br />}<br />if(sposob_podłaczenia_2)<br />{<br />//tu wysyłanie bajtu na drugi wyświetlacz.<br />}[/syntax]<br />Niestety trzeba będzie powielić trochę programu ale to nic w porównanie z kopiowaniem 2 bibliotek.Chyba, że ktoś zna lepszy sposób od mojego pomysłu. <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /><br />Na podobnej zasadzie można napisać funkcje która steruję pinem r/w i innymi. <img src="https://forum.atnel.pl/images/smilies/icon_cool.gif" alt="8-)" title="Cool" /> Podpowiem, że przy użyciu pętli można jeszcze zmniejszyć objętość programu. <img src="https://forum.atnel.pl/images/smilies/icon_lol.gif" alt=":lol:" title="Śmieje się" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=10617">Bartek123</a> — 18 paź 2015, o 19:10</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[korpikn]]></name></author>
<updated>2015-10-18T18:28:37+01:00</updated>
<published>2015-10-18T18:28:37+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13284&amp;p=142784#p142784</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13284&amp;p=142784#p142784"/>
<title type="html"><![CDATA[Re: Jedna biblioteka dla wielu takich samych urzadzeń]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13284&amp;p=142784#p142784"><![CDATA[
Przedstawię problem dokładniej.<br />W pliku lcd.h są definicje portów i numerów pinów, które lcd używa w bibliotece.<br />[syntax=c]#define LCD_RS_PORTB<br />#define LCD_RSPB0<br />#define LCD_RW_PORTB<br />#define LCD_RWPB1<br />#define LCD_E_PORTB<br />#define LCD_EPB2[/syntax]<br />W pliku lcd.c są rozwijane za pomocą makr<br />[syntax=c]#define PORT(x) XPORT(x)<br />#define XPORT(x) (PORT##x)<br />#define PIN(x) XPIN(x)<br />#define XPIN(x) (PIN##x)<br />#define DDR(x) XDDR(x)<br />#define XDDR(x) (DDR##x)[/syntax]<br />do postaci np.:<br />[syntax=c]PORT(LCD_RS_PORT) |= (1&lt;&lt;LCD_RS);[/syntax]<br />która kompiluje się do postaci zajmującej tylko 2 bajty w pamięci programu:<br />[syntax=asm]8e:28 9a       sbi0x05, 0; 5[/syntax]<br /><br />Problem jest taki, że chciałbym zastosować dwa oddzielne LCD podłączone do jednego mikrosterownika. I tutaj zrodził się problem z którym nie moge sobie poradzić. Bo najprościej byłoby kopiować całą bibliotekę (pliki lcd.h i lcd.c na lcd2.h i lcd2.c), a następnie zmienić definicje portów i pinów. Ale powoduje to kolejne problemy do rozwiązania. W języku C nie można przeładowywać funkcji, więc należałoby zmienić również nazwy wszystkich funkcji w bibliotece drugiego lcd. Rozmiar kodu robiącego prawie to samo, zwiększyłby się dwukrotnie, co uważam za bezsens. Więc jak to zrobić? Podsumowując chciałbym mieć dodatkowy plik nagłówkowy dla każdego lcd, w którym byłyby zdefiniowane porty i piny, ale kod funkcji był jednokrotnie napisany. Coś w rodzaju:<br />[syntax=c]//lcd1_cfg.h<br />#define LCD1_RS_PORTB<br />#define LCD1_RSPB0<br />#define LCD1_RW_PORTB<br />#define LCD1_RWPB1<br />#define LCD1_E_PORTB<br />#define LCD1_EPB2[/syntax]<br /><br />[syntax=c]//lcd2_cfg.h<br />#define LCD2_RS_PORTC<br />#define LCD2_RSC0<br />#define LCD2_RW_PORTC<br />#define LCD2_RWPC1<br />#define LCD2_E_PORTC<br />#define LCD2_EPC2[/syntax]<br /><br />Więc jak to zrobić?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11146">korpikn</a> — 18 paź 2015, o 18:28</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kicajek]]></name></author>
<updated>2015-10-18T17:54:12+01:00</updated>
<published>2015-10-18T17:54:12+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13284&amp;p=142781#p142781</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13284&amp;p=142781#p142781"/>
<title type="html"><![CDATA[Re: Jedna biblioteka dla wielu takich samych urzadzeń]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13284&amp;p=142781#p142781"><![CDATA[
Witam<br /><div class="quotetitle">Grzegorz... napisał(a):</div><div class="quotecontent"><br />Nie bardzo rozumiem o co Ci &quot;biega&quot;.<br /></div><br />Ja szczerze mówiąc też, ale mam taki projekcik który w zasadzie działa na trzech różnych rodzajach podłączeń do płytki wyświetlacza ( co prawda 7_led ale w zasadzie o to samo biega) i musiałem w pliku konfiguracyjnym dać kompilacje warunkowe i w zależności od płytki wpisuję jedną cyferkę.<br />U mnie była to konieczność: 1.płytka testowa  2.projektI  3.projekt z tańszymi wyświetlaczami.<br />Tyle że mam stały PORT a różnie podłączone poszcz. segmenty.<br /><br />Pozdr.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=826">kicajek</a> — 18 paź 2015, o 17:54</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2015-10-18T17:47:13+01:00</updated>
<published>2015-10-18T17:47:13+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13284&amp;p=142780#p142780</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13284&amp;p=142780#p142780"/>
<title type="html"><![CDATA[Re: Jedna biblioteka dla wielu takich samych urzadzeń]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13284&amp;p=142780#p142780"><![CDATA[
Takich ale i mnóstwa innych rzeczy uczy właśnie ta książka:<br /><!-- m --><a class="postlink" href="http://atnel.pl/mikrokontrolery-avr-jezyk-c.html" >http://atnel.pl/mikrokontrolery-avr-jezyk-c.html</a><!-- m --><br /><br />i jest tam właśnie przedstawiony sposób jak można podchodzić do takiego pisania bibliotek .... warto się z nią zapoznać ....<br /><br />Bo pytania na końcu to zadałeś TAK ogólne ... a pewnie odpowiedzi się spodziewasz w jednym zdaniu, która będzie czarodziejskim tajnym przepisem. Nie ma tajnych przepisów i nie ma jednego cudownego sposobu na wszystko. Bo wszystko zależy od podejścia i od programisty ...<br /><br />poza tym:<br /><br /><div class="quotetitle">korpikn napisał(a):</div><div class="quotecontent"><br />Pytanie: Jak w C zrobić bibliotekę dla wielu LCD tego samego typu tak, aby nie powielać kodu oraz aby kod wynikowy był nadal efektywny jak wcześniej (tzn. jego rozmiar był mały)? Po chłopsku mówiąc jak zastąpić stałe portu i pinu na zmienne?<br /></div><br />Jedno pytanie nie ma NIC wspólnego z drugim. <br /><br />Poza tym, żeby coś konkretnie podpowiedzieć to jeszcze warto byłoby przynajmniej odnieść się do jakiegoś swojego przynajmniej fragmentu kodu - a nie takie raczej beletrystyczne opisy .... Gdy jest kod i do niego konkretne pytanie - wtedy można czasem coś pomóc.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 18 paź 2015, o 17:47</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Grzegorz...]]></name></author>
<updated>2015-10-18T17:43:41+01:00</updated>
<published>2015-10-18T17:43:41+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13284&amp;p=142779#p142779</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13284&amp;p=142779#p142779"/>
<title type="html"><![CDATA[Re: Jedna biblioteka dla wielu takich samych urzadzeń]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13284&amp;p=142779#p142779"><![CDATA[
Nie bardzo rozumiem o co Ci &quot;biega&quot;.<br />Przecież jak masz definicje w pliku *.h to zmieniając fizycznie piny tylko w tym jednym miejscu zmieniasz definicje - bardzo ślicznie i logicznie <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" />.<br />Po co Ci zmienne?<br />Będziesz w czasie pracy urządzenia zmieniał &quot;pinologię&quot; LCD?<br /><br />Nadal nie mogę zrozumieć &quot;o co kaman&quot;?<br /><br />-- <br />Grzegorz...<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1748">Grzegorz...</a> — 18 paź 2015, o 17:43</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[korpikn]]></name></author>
<updated>2015-10-18T17:16:19+01:00</updated>
<published>2015-10-18T17:16:19+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13284&amp;p=142776#p142776</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13284&amp;p=142776#p142776"/>
<title type="html"><![CDATA[Jedna biblioteka dla wielu takich samych urzadzeń]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13284&amp;p=142776#p142776"><![CDATA[
Witam. To mój pierwszy post, więc na początku pozdrawiam wszystkich forumowiczów i stałych bywalców.<br /><br />Mam mały dylemat, który nie daje mi spać po nocach. Otóż od pewnego czasu programuję ATMega328P w Eclipse w języku C. Pod młotek biorę bibliotekę LCD 4-bit na 7 pinach. Każdy pin ma zdefiniowany na stałe port i numer pinu w pliku nagłówkowym. Te stałe są używane w funkcjach biblioteki. Kod wynikowy jest bardzo efektywny. Kompilator używa tylko rozkazów do modyfikowania bitów sbi, cbi, in, out. Pytanie: Jak w C zrobić bibliotekę dla wielu LCD tego samego typu tak, aby nie powielać kodu oraz aby kod wynikowy był nadal efektywny jak wcześniej (tzn. jego rozmiar był mały)? Po chłopsku mówiąc jak zastąpić stałe portu i pinu na zmienne?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11146">korpikn</a> — 18 paź 2015, o 17:16</p><hr />
]]></content>
</entry>
</feed>