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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2015-01-25T11:26:45+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=58&amp;t=9997&amp;mode</id>
<entry>
<author><name><![CDATA[xaoc]]></name></author>
<updated>2015-01-05T15:33:34+01:00</updated>
<published>2015-01-05T15:33:34+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9997&amp;p=112458#p112458</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9997&amp;p=112458#p112458"/>
<title type="html"><![CDATA[Re: Podstawy C. Dziwny problem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9997&amp;p=112458#p112458"><![CDATA[
Znalazłem jeszcze bardziej optymalne rozwiązanie i odp <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br />[syntax=c]#if USE_RW == 1<br />    static inline uint8_t LCD_readHalf(void)<br />            {<br />            #if USE_ONEPORT == 1<br />     <br />                          //  _delay_us(1); //!Bez tego nie działa. No i niby dlaczego?<br />                         asm(&quot;nop&quot;);<br />                         asm(&quot;nop&quot;);<br />                            return (PIN(LCD_PORT) &amp; 0xF0);<br />            #else<br />                    uint8_t r = 0;<br />                     if(PIN(LCD_D7PORT) &amp; (1&lt;&lt;LCD_D7))      r |= (1&lt;&lt;7); //teoretycznie też nie powinno działać i powinno być opóźnienie ...<br />                     if(PIN(LCD_D6PORT) &amp; (1&lt;&lt;LCD_D6))      r |= (1&lt;&lt;6);<br />                     if(PIN(LCD_D5PORT) &amp; (1&lt;&lt;LCD_D5))      r |= (1&lt;&lt;5);<br />                     if(PIN(LCD_D4PORT) &amp; (1&lt;&lt;LCD_D4))      r |= (1&lt;&lt;4);<br />                    return r;<br />            #endif<br />            }<br />    #endif[/syntax]<br /><br />I zawsze trzeba czekać przy odczytywaniu PINów co najmniej 2 nopy bo to jednak mega szybko się dzieje i nie zdąży urosnąć napięcie do odpowiedniego poziomu.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=5432">xaoc</a> — 5 sty 2015, o 15:33</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[xaoc]]></name></author>
<updated>2015-01-05T00:16:28+01:00</updated>
<published>2015-01-05T00:16:28+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9997&amp;p=112369#p112369</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9997&amp;p=112369#p112369"/>
<title type="html"><![CDATA[Re: Podstawy C. Dziwny problem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9997&amp;p=112369#p112369"><![CDATA[
<div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />możliwe że LCD potrzebuje troszkę czasu na &quot;zastanowienie&quot;.<br /></div><br />a możliwe, że nie... <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> <br />[edit] to wygląda jak by było nie grzeczne w stosunku do autora ale nie miałem takiego zamiaru.<br /><br />Zresztą najważniejsze i jedyne wykorzystywana część przezemnie to BusyFlag BF.I on znajduje się na lini<br />[syntax=c]if(PIN(LCD_D7PORT) &amp; (1&lt;&lt;LCD_D7))      r |= (1&lt;&lt;7); //teoretycznie też nie powinno działać i powinno być opóźnienie[/syntax]<br />No i tu teoretycznie też nie powinno być opóźnienia.<br /><br />Asembler<br />ONEPORT + delay<br />[syntax=asm]000000fc &lt;_LCD_read_byte&gt;:<br />  fc:81 b3       inr24, 0x11; 17<br />  fe:8f 70       andir24, 0x0F; 15<br /> 100:81 bb       out0x11, r24; 17<br /> 102:91 9a       sbi0x12, 1; 18<br /> 104:90 9a       sbi0x12, 0; 18<br /> 106:82 e0       ldir24, 0x02; 2<br /> 108:8a 95       decr24<br /> 10a:f1 f7       brne.-4      ; 0x108 &lt;_LCD_read_byte+0xc&gt;<br /> 10c:00 c0       rjmp.+0      ; 0x10e &lt;_LCD_read_byte+0x12&gt;<br /> 10e:90 b3       inr25, 0x10; 16<br /> 110:90 98       cbi0x12, 0; 18<br /> 112:90 9a       sbi0x12, 0; 18<br /> 114:82 e0       ldir24, 0x02; 2<br /> 116:8a 95       decr24<br /> 118:f1 f7       brne.-4      ; 0x116 &lt;_LCD_read_byte+0x1a&gt;<br /> 11a:00 c0       rjmp.+0      ; 0x11c &lt;_LCD_read_byte+0x20&gt;<br /> 11c:20 b3       inr18, 0x10; 16<br /> 11e:90 98       cbi0x12, 0; 18<br /> 120:22 95       swapr18<br /> 122:2f 70       andir18, 0x0F; 15<br /> 124:89 2f       movr24, r25<br /> 126:80 7f       andir24, 0xF0; 240<br /> 128:82 2b       orr24, r18<br /> 12a:08 95       ret[/syntax]<br /><br />ONEPORT bez delaya <br />[syntax=asm]000000e6 &lt;_LCD_read_byte&gt;:<br />  e6:81 b3       inr24, 0x11; 17<br />  e8:8f 70       andir24, 0x0F; 15<br />  ea:81 bb       out0x11, r24; 17<br />  ec:91 9a       sbi0x12, 1; 18<br />  ee:90 9a       sbi0x12, 0; 18<br />  f0:90 b3       inr25, 0x10; 16<br />  f2:90 98       cbi0x12, 0; 18<br />  f4:90 9a       sbi0x12, 0; 18<br />  f6:20 b3       inr18, 0x10; 16<br />  f8:90 98       cbi0x12, 0; 18<br />  fa:22 95       swapr18<br />  fc:2f 70       andir18, 0x0F; 15<br />  fe:89 2f       movr24, r25<br /> 100:80 7f       andir24, 0xF0; 240<br /> 102:82 2b       orr24, r18<br /> 104:08 95       ret[/syntax]<br /><br />By Mirek36<br />[syntax=asm]000000da &lt;LCD_readHalf&gt;:<br />  da:87 9b       sbis0x10, 7; 16<br />  dc:02 c0       rjmp.+4      ; 0xe2 &lt;LCD_readHalf+0x8&gt;<br />  de:80 e8       ldir24, 0x80; 128<br />  e0:01 c0       rjmp.+2      ; 0xe4 &lt;LCD_readHalf+0xa&gt;<br />  e2:80 e0       ldir24, 0x00; 0<br />  e4:86 99       sbic0x10, 6; 16<br />  e6:80 64       orir24, 0x40; 64<br />  e8:85 99       sbic0x10, 5; 16<br />  ea:80 62       orir24, 0x20; 32<br />  ec:84 99       sbic0x10, 4; 16<br />  ee:80 61       orir24, 0x10; 16<br />  f0:08 95       ret<br /><br /><br />0000011c &lt;_LCD_read_byte&gt;:<br /> 11c:cf 93       pushr28<br /> 11e:8f 98       cbi0x11, 7; 17<br /> 120:8e 98       cbi0x11, 6; 17<br /> 122:8d 98       cbi0x11, 5; 17<br /> 124:8c 98       cbi0x11, 4; 17<br /> 126:91 9a       sbi0x12, 1; 18<br /> 128:90 9a       sbi0x12, 0; 18<br /> 12a:d7 df       rcall.-82     ; 0xda &lt;LCD_readHalf&gt;<br /> 12c:c8 2f       movr28, r24<br /> 12e:90 98       cbi0x12, 0; 18<br /> 130:90 9a       sbi0x12, 0; 18<br /> 132:d3 df       rcall.-90     ; 0xda &lt;LCD_readHalf&gt;<br /> 134:82 95       swapr24<br /> 136:8f 70       andir24, 0x0F; 15<br /> 138:90 98       cbi0x12, 0; 18<br /> 13a:8c 2b       orr24, r28<br /> 13c:cf 91       popr28<br /> 13e:08 95       ret[/syntax]<br /><br />Co ciekawe w przypadku ONEPORT kompilator słucha sugest inline w przypadku orginalnej wersji tworzy dodatkową funkcję.<br />Teraz dodatkowo wiedzę, że moja optymalizacja nie jest tak do końca bez sensu <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> Jestem z siebie zadowolony.<br />Dobry początek dnia.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=5432">xaoc</a> — 5 sty 2015, o 00:16</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Zaba]]></name></author>
<updated>2015-01-04T23:14:54+01:00</updated>
<published>2015-01-04T23:14:54+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9997&amp;p=112347#p112347</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9997&amp;p=112347#p112347"/>
<title type="html"><![CDATA[Re: Podstawy C. Dziwny problem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9997&amp;p=112347#p112347"><![CDATA[
możliwe że LCD potrzebuje troszkę czasu na &quot;zastanowienie&quot;.<br /><br />Kiedy były ustawiane linie portu po kolei jednak odbywało się to <br />trochę wolniej niż kiedy ustawiasz pół portu od razu jako wejście.<br /><br />Musiałbyś podejrzeć plik asemblera w jednym i drugim przypadku<br />żeby mieć pewność.<br />Ważne że działa <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=1044">Zaba</a> — 4 sty 2015, o 23:14</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[xaoc]]></name></author>
<updated>2015-01-04T21:23:16+01:00</updated>
<published>2015-01-04T21:23:16+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9997&amp;p=112324#p112324</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9997&amp;p=112324#p112324"/>
<title type="html"><![CDATA[Re: Podstawy C. Dziwny problem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9997&amp;p=112324#p112324"><![CDATA[
Dam większy kontekst bo może w sumie być ciężko z tamtego to zobaczyć<br /><br />[syntax=c]#if USE_RW == 1<br />static inline uint8_t LCD_readHalf(void)<br />{<br />#if USE_ONEPORT == 1<br /><br />_delay_us(1); //!Bez tego nie działa. No i niby dlaczego?<br />return (PIN(LCD_PORT) &amp; 0xF0);<br />#else<br />uint8_t r = 0;<br /> if(PIN(LCD_D7PORT) &amp; (1&lt;&lt;LCD_D7))r |= (1&lt;&lt;7); //teoretycznie też nie powinno działać i powinno być opóźnienie ... <br /> if(PIN(LCD_D6PORT) &amp; (1&lt;&lt;LCD_D6)) r |= (1&lt;&lt;6);<br /> if(PIN(LCD_D5PORT) &amp; (1&lt;&lt;LCD_D5))r |= (1&lt;&lt;5);<br /> if(PIN(LCD_D4PORT) &amp; (1&lt;&lt;LCD_D4))r |= (1&lt;&lt;4);<br />return r;<br />#endif<br />}<br />#endif[/syntax]<br /><br />i funkcja wywołująca<br /><br />[syntax=c]#if USE_RW == 1<br />uint8_t _LCD_read_byte(void)<br />{<br />uint8_t result=0;<br />#if USE_ONEPORT == 1<br />DDR(LCD_PORT) = (DDR(LCD_PORT)&amp; 0x0F); // wszystkie piny jako wejscia<br />#else<br />DDR(LCD_D7PORT) &amp;= ~(1&lt;&lt;LCD_D7);<br />DDR(LCD_D6PORT) &amp;= ~(1&lt;&lt;LCD_D6);<br />DDR(LCD_D5PORT) &amp;= ~(1&lt;&lt;LCD_D5);<br />DDR(LCD_D4PORT) &amp;= ~(1&lt;&lt;LCD_D4);<br />#endif<br /><br />SET_RW;<br />SET_E;<br />result = LCD_readHalf();<br />CLR_E;<br /><br />SET_E;<br />result |= (LCD_readHalf()&gt;&gt;4);<br />CLR_E;<br />return result;<br />}<br />#endif[/syntax]<br /><br />ONEPORT to takie moje odciążenie kodu. Chciałem zrobić coś sam w czasie nauki.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=5432">xaoc</a> — 4 sty 2015, o 21:23</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[xaoc]]></name></author>
<updated>2015-01-03T17:48:00+01:00</updated>
<published>2015-01-03T17:48:00+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9997&amp;p=112007#p112007</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9997&amp;p=112007#p112007"/>
<title type="html"><![CDATA[Re: Podstawy C. Dziwny problem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9997&amp;p=112007#p112007"><![CDATA[
Nie, to też nie to. Po prostu kompiluje się ładnie ale na wyświetlaczu nie pojawia się nic.<br /><br />EDIT:<br />Znalazłem rozwiązanie ale nie do końca go rozumiem. Pewnie jest to związane z czasem ustalania się stanu na pinach... Ale dlaczego działało to w przypadku pokazany wyżej i nie było potrzebne opóźnienie ?! Chyba że ostatni PIN zawsze nie był czytany poprawnie.... Ale to wydaje się wątpłe bo inaczej mirek36 wspomniał by o tym w książce.<br />[syntax=c]static inline uint8_t LCD_readHalf(void)<br />{<br />#if USE_ONEPORT == 1<br />_delay_us(1);<br />return (PIN(LCD_PORT) &amp; 0xF0);<br />#else[/syntax]<br /><br />//..........<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=5432">xaoc</a> — 3 sty 2015, o 17:48</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[elerbe]]></name></author>
<updated>2015-01-03T14:19:23+01:00</updated>
<published>2015-01-03T14:19:23+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9997&amp;p=111944#p111944</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9997&amp;p=111944#p111944"/>
<title type="html"><![CDATA[Re: Podstawy C. Dziwny problem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9997&amp;p=111944#p111944"><![CDATA[
a może:<br />[syntax=c]r |= ( PIN(LCD_PORT)  &amp;  (0xF0) );[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=5342">elerbe</a> — 3 sty 2015, o 14:19</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[xaoc]]></name></author>
<updated>2015-01-03T09:31:21+01:00</updated>
<published>2015-01-03T09:31:21+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9997&amp;p=111900#p111900</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9997&amp;p=111900#p111900"/>
<title type="html"><![CDATA[Re: Podstawy C. Dziwny problem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9997&amp;p=111900#p111900"><![CDATA[
Ok. Niestety to nie to.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=5432">xaoc</a> — 3 sty 2015, o 09:31</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[artur85]]></name></author>
<updated>2015-01-03T09:04:23+01:00</updated>
<published>2015-01-03T09:04:23+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9997&amp;p=111897#p111897</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9997&amp;p=111897#p111897"/>
<title type="html"><![CDATA[Re: Podstawy C. Dziwny problem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9997&amp;p=111897#p111897"><![CDATA[
Witam, tak na pierwszy rzut oka, to brakuje średnika w linii<br />[syntax=c]r = PIN(LCD_PORT) &amp; (0xF0)[/syntax]<br />i jeszcze przeczytaj ten post <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> <!-- l --><a class="postlink-local" href="http://forum.atnel.pl/topic7402.html" >topic7402.html</a><!-- l --><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1212">artur85</a> — 3 sty 2015, o 09:04</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[xaoc]]></name></author>
<updated>2015-01-25T11:26:45+01:00</updated>
<published>2015-01-03T07:53:41+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9997&amp;p=111895#p111895</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9997&amp;p=111895#p111895"/>
<title type="html"><![CDATA[Podstawy C. Dziwny problem [ROZWIĄZANY]]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9997&amp;p=111895#p111895"><![CDATA[
Witam, po nocnych zmaganiach... znalazłem powód dlaczego mój program nie działa poprawnie z RW podłączonym do procesora.<br />Niestety czegoś tutaj nie wiem, najwidoczniej na temat C. Czy ktoś mógł by mi wytłumaczyć co przeoczyłem?<br />[syntax=c]#define USE_ONEPORT 1//Cały wyświetlacz jest podpięty do jednego portu w tym dane przesyłane są przez starszą część portu<br />#define USE_RW 1// RW podbięte do procesora 1. RW podpięte do GND 0<br />#if USE_ONEPORT == 1<br />#define LCD_PORT D<br />#define LCD_D7 7<br />#define LCD_D66<br />#define LCD_D5 5<br />#define LCD_D4 4<br /><br />#define LCD_RS 2<br />#if USE_RW == 1<br />#define LCD_RW 1<br />#endif<br />#define LCD_E 0<br /><br />static inline uint8_t LCD_readHalf(void)<br />{<br />#if USE_ONEPORT == 1<br />uint8_t r = 0;<br /> if(PIN(LCD_PORT) &amp; (1&lt;&lt;LCD_D7))r |= (1&lt;&lt;7);<br /> if(PIN(LCD_PORT) &amp; (1&lt;&lt;LCD_D6)) r |= (1&lt;&lt;6);<br /> if(PIN(LCD_PORT) &amp; (1&lt;&lt;LCD_D5))r |= (1&lt;&lt;5);<br /> if(PIN(LCD_PORT) &amp; (1&lt;&lt;LCD_D4))r |= (1&lt;&lt;4);<br />return r;<br />#else<br />//kod<br />#endif<br />}<br /><br />//!!A tu druga teoretycznie taka sama<br />static inline uint8_t LCD_readHalf(void)<br />{<br />#if USE_ONEPORT == 1<br />uint8_t r = 0;<br /> r = PIN(LCD_PORT) &amp; (0xF0);<br />return r;<br />#else<br />//kod<br />#endif<br />}[/syntax]<br /><br />Jak na moją głowę są to te &quot;same&quot; programy i powinny spełniać tę samą funkcję. Czego nie widzę?(Bo pierwszy działa, drugi nie).<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=5432">xaoc</a> — 3 sty 2015, o 07:53</p><hr />
]]></content>
</entry>
</feed>