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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2018-05-16T17:41:34+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=58&amp;t=20650&amp;mode</id>
<entry>
<author><name><![CDATA[andrews]]></name></author>
<updated>2018-05-16T17:41:34+01:00</updated>
<published>2018-05-16T17:41:34+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=20650&amp;p=207841#p207841</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=20650&amp;p=207841#p207841"/>
<title type="html"><![CDATA[Re: Tabela ASCII i wyświetlacz alfanumeryczny HD44780]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=20650&amp;p=207841#p207841"><![CDATA[
Przepraszam, że z takim opóźnieniem kontynuuję wątek. Uznałem, że należałoby jeszcze coś wyjaśnić, ale wcześniej nie miałem czasu.<br /><div class="quotetitle">Robert_1967 napisał(a):</div><div class="quotecontent"><br />Co do funkcji lcd_char_P, czy lcd_str_P() , to myślę, że lepiej je rozgraniczyć (P)<br /></div><br />Wcześniej podałem rozwiązanie z użyciem uniwersalnej funkcji akceptującej zarówno dane we FLASH jak i w RAM. Jeżeli jednak ktoś woli używać osobnych funkcji, nic nie stoi na przeszkodzie. Wystarczy (nawiązując do wcześniejszego przykładu) zastąpić kwalifikator <strong><em>__memx</em></strong> na <strong><em>__flash</em></strong>:[syntax=c]// deklaracja<br />void lcd_str_P( const __flash char* s );<br /> <br />// definicja<br />void lcd_str_P( const __flash char* s )<br />{<br />    while(*s)<br />        { lcd_char( *s++ ); }<br />}[/syntax] i już mamy osobną funkcję z przyrostkiem <strong><em>_P</em></strong>, która akceptuje tylko wskaźniki do pamięci FLASH. Nadal jednak wewnątrz funkcji można uniknąć konieczności używania wiadomych makr do odczytu danych stosując normalny zapis, jak w przypadku danych w RAM.<br /><br />Ważne jest to, że jeśli zdefiniujemy dane we FLASH za pomocą kwalifikatora <strong><em>__flash</em></strong>, nadal musimy używać odpowiednich funkcji z przyrostkiem <strong><em>_P</em></strong> z bibliotek standardowych (takich jak np. <strong><em>memcpy_P()</em></strong> czy też <strong><em>strcmp_P()</em></strong> ), tak jak to robimy w przypadku użycia PROGMEM. To, że autorzy bibliotek standardowych nie użyli funkcji uniwersalnych, tak jak to pokazałem wcześniej, wynika z faktu, że funkcje biblioteczne są zawsze bardzo dokładnie optymalizowane m.in. pod kątem szybkości wykonania. Funkcja uniwersalna używa wskaźników 24-bitowych i potrzebuje kilku dodatkowych taktów do rozróżnienia umiejscowienia danych, przez co jest minimalnie wolniejsza. W wielu przypadkach jednak, takich jak np. opisywane tutaj wyświetlanie danych na LCD lub przykładowo transmisja UART, to spowolnienie jest praktycznie bez znaczenia, więc bez obaw o szybkość kodu można takich funkcji jak najbardziej używać. No i oczywiście to, że funkcja ma przyrostek <strong><em>_P</em></strong> nie musi wcale oznaczać, że była napisana z użyciem makr <strong><em>pgm_read_xxx()</em></strong>, jak pokazałem nieco wyżej <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br /><div class="quotetitle">rskup napisał(a):</div><div class="quotecontent"><br />W końcu trzeba pójść do przodu i poprzerabiać swoje biblioteki na __flash-owe i zacząć już tylko tak używać<br /></div><br />Przerabianie bibliotek wcale nie jest konieczne.<br />Powiedzmy, że mamy gotowy moduł do obsługi UARTa z funkcją zawierającą w nazwie przyrostek <strong><em>_P</em></strong>, np. <strong><em>uart_send_str_P()</em></strong>, przeznaczoną do transmisji danych odczytywanych z pamięci FLASH napisaną z użyciem makr z rodziny <strong><em>pgm_read_xxx()</em></strong>. Możemy normalnie dołączyć ten moduł do naszego projektu bez dokonywania w nim zmian.<br />Jeżeli teraz w pliku <em>main.c</em> zdefiniujemy sobie ciąg znaków we FLASH:[syntax=c]const __flash char mystring&#91;&#93; = &quot;Hello World!&quot;;[/syntax]to możemy przekazać go do naszej &quot;starej&quot; funkcji:[syntax=c]uart_send_str_P( mystring );[/syntax]i będzie ona działać prawidłowo, tak samo jakbyśmy zdefiniowali <strong><em>mystring</em></strong> przy użyciu PROGMEM.<br /><br />Oczywiście dobrze jest zachować pewną systematykę i stosować albo jeden sposób, albo drugi, ale nie musimy przerabiać tych funkcji od razu wszystkich.<br /><br /><div class="quotetitle">Daro69 napisał(a):</div><div class="quotecontent"><br />Możliwe że niebawem, po przeanalizowaniu informacji z Twojej <a href="http://avr8bit.cba.pl/?doc=avr_flash_data"  class="postlink">stronki</a> - sporo tego,   <br />przestawię się na sposób z kwalifikatorem __flash .<br /></div><br />Myślę, że warto się prze<em><strong>kwalifik</strong></em>ować <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br />Co do ilości materiałów, moim zdaniem nie trzeba się zrażać. Starałem się przedstawić sprawę jak najbardziej kompleksowo, pokazać jak najwięcej aspektów sprawy. W rzeczywistości nie jest to jakoś szczególnie skomplikowane, to tylko tak wygląda na pierwszy rzut oka <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> Na początek można pominąć rozdziały o danych w obszarach pamięci powyżej 64KiB lub w zdefiniowanych sekcjach, bo to jest raczej rzadko potrzebne, tym bardziej jeśli do tej pory nie musiałeś korzystać z makr <strong><em>pgm_get_far_address()</em></strong>, <strong><em>pgm_read_word_far()</em></strong> itp.<br /><br />W razie czego można pytać. Postaram się odpowiedzieć na wszelkie wątpliwości (w miarę wolnego czasu oczywiście <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=14165">andrews</a> — 16 maja 2018, o 17:41</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[rskup]]></name></author>
<updated>2018-05-11T21:44:04+01:00</updated>
<published>2018-05-11T21:44:04+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=20650&amp;p=207657#p207657</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=20650&amp;p=207657#p207657"/>
<title type="html"><![CDATA[Re: Tabela ASCII i wyświetlacz alfanumeryczny HD44780]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=20650&amp;p=207657#p207657"><![CDATA[
<div class="quotetitle">andrews napisał(a):</div><div class="quotecontent"><br /><div class="quotetitle">rskup napisał(a):</div><div class="quotecontent">W skrócie działa to tak, że przez odpowiednie zdefiniowanie zmiennej zrzuca się z programisty konieczność późniejszego odpowiedniego odczytywania jej (czyli korzystania z np. pgm_read_byte()).<br /></div><br />Nie bardzo rozumiem, co miałeś na myśli używając określenia &quot;odpowiedniego odczytywania&quot;, ale zapewniam Cię, że odczytywanie danych zdefiniowanych z kwalifikatorem __flash jest na pewno dużo bardziej odpowiednie, niż używanie makr pgm_read_xxx().</div><br />No właśnie o tym pisałem. Przy &quot;starej&quot; metodzie musisz odpowiednio je odczytywać w zależności od miejsca umieszczenia danych (czyli używać makr typu pgm_read_byte()). Przy &quot;nowej&quot; __flash-owej nie ma tego problemu.<br /><br />Dzięki andrews za namawianie do pójścia z duchem czasu. W końcu trzeba pójść do przodu i poprzerabiać swoje biblioteki na __flash-owe i zacząć już tylko tak używać <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br />-- <br />Pozdrawiam,<br />Robert<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3427">rskup</a> — 11 maja 2018, o 21:44</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Robert_1967]]></name></author>
<updated>2018-05-11T20:29:13+01:00</updated>
<published>2018-05-11T20:29:13+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=20650&amp;p=207654#p207654</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=20650&amp;p=207654#p207654"/>
<title type="html"><![CDATA[Re: Tabela ASCII i wyświetlacz alfanumeryczny HD44780]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=20650&amp;p=207654#p207654"><![CDATA[
Witaj andrews.<br />Bardzo dziękuję za tak konkretne wyjaśnienie, wyłożenie tematu. Żeby było jasne na początku. Ja się nigdy nie obrażam jeśli chodzi o dyskusje na forum, a tym<br />bardziej, jeżeli coś pozytywnego z tego wyniosę. Jestem po prosu już za stary, a żeby się przejmować takimi drobiazgami. To, co napisałeś, to wszystko prawda.<br />Początkujący zawsze maja obawy przed czymś nowym i wolą pozostać przy &quot;starym&quot;, póki co. Ja osobiście podziwiam ludzi i jestem im wdzięczny, że znajdują<br />czas i chęci na pomoc innym i dzielenie się wiedzą. Tak się złożyło, że nigdy nie miałem styczności z programowaniem jakimkolwiek i teraz na stare lata, a żeby<br />trochę nadążyć w moim hobby elektronicznym, postanowiłem się w miarę możliwości trochę nauczyć. Cała ta terminologia informatyczna trochę mnie przeraża,<br />ale dzięki książkom Mirka, netu i pomocy innych idzie coraz lepiej, ale wolno. Ja się trzymam  stereotypów, bo od nich zacząłem, a jak będę już trochę bogatszy<br />w wiedzę (mam taką cichą nadzieję), to pewnie inaczej będę myślał. Twoje rozwiązanie ciekawe i fajne. Widzisz andrews, ja kolekcjonuję wiele poradników Mirka,<br />które są po prostu bezcenne, czytam itd, ale może źle się uczę. W szkole było inaczej, program ułożony, wszystko po kolei itd...Tutaj cały materiał do wzięcia<br />od zaraz, no i jak tu nie przeskoczyć kilka tematów dalej, jak już się udało diodą pomigać  <img src="https://forum.atnel.pl/images/smilies/icon_lol.gif" alt=":lol:" title="Śmieje się" />  <img src="https://forum.atnel.pl/images/smilies/icon_lol.gif" alt=":lol:" title="Śmieje się" />  <img src="https://forum.atnel.pl/images/smilies/icon_lol.gif" alt=":lol:" title="Śmieje się" /> . Gotowe sekwencje kodów z książek, z netu. Działa<br />po skompilowaniu, ale dlaczego działa, to już tylko autor wie <img src="https://forum.atnel.pl/images/smilies/icon_lol.gif" alt=":lol:" title="Śmieje się" /> . Myślę, że tu tkwi sedno sprawy. Ale to nic. To ma być zabawa i przyjemność. Ja z tego nie<br />żyję. Cieszę się że znajduję jeszcze czas na taką zabawę i że jest jakiś pozytywny efekt. To nie jest tak, że ja tylko piszę na forum i proszę mi tu dać rozwiązanie.<br />Pracuję, pracuję, ale może nieraz zbyt długo i potem tylko w głowie się kręci i pomroczność ciemna następuje  <img src="https://forum.atnel.pl/images/smilies/icon_lol.gif" alt=":lol:" title="Śmieje się" /> . Ale dobra, dosyć marudzenia. Widzę jeszcze jeden pozytyw. Jakiś czas temu szukałem literek jednym palcem na klawiaturze, a teraz już dwoma palcami jadę i coraz lepiej dzięki forum ATNEL.<br />I tym pozytywnym akcentem kończę i jeszcze raz dzięki kolegom za udział w dyskusji i nauce C  <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=10257">Robert_1967</a> — 11 maja 2018, o 20:29</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Daro69]]></name></author>
<updated>2018-05-11T20:21:36+01:00</updated>
<published>2018-05-11T20:21:36+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=20650&amp;p=207652#p207652</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=20650&amp;p=207652#p207652"/>
<title type="html"><![CDATA[Re: Tabela ASCII i wyświetlacz alfanumeryczny HD44780]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=20650&amp;p=207652#p207652"><![CDATA[
<div class="quotetitle">andrews napisał(a):</div><div class="quotecontent"><br />Wprawdzie tylko kolega Daro69 zainteresował się tematem funkcji uniwersalnej,<br /></div><br />Myślę że nie tylko ja. Po prostu jako pierwszy &quot;wychyliłem&quot; się, a inni nie zdublowali mojej prośby. <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br />Przyznaję że kwalifikatorów __flash nie używałem.<br />Czytając tu na forum wzmianki o nowym/starym sposobie, miałem zamiar oswoić się z tematem, ale ciągle zabieram się do niego ja przysłowiowy pies do jeża.  <img src="https://forum.atnel.pl/images/smilies/icon_rolleyes.gif" alt=":roll:" title="Udaje, że to nie on" /><br />Możliwe że niebawem, po przeanalizowaniu informacji z Twojej <a href="http://avr8bit.cba.pl/?doc=avr_flash_data"  class="postlink"><span style="color: #683400"><strong><span style="text-decoration: underline">stronki</span></strong></span></a> - sporo tego,  <img src="https://forum.atnel.pl/images/smilies/icon_e_confused.gif" alt=":?" title="Boi się" />  <br />przestawię się na sposób z kwalifikatorem __flash .  <img src="https://forum.atnel.pl/images/smilies/icon_cool.gif" alt="8-)" title="Cool" /><br />Dzięki za kod, ( skopiowane i zarchiwizowane w lochach ). <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /><br />Pozdrawiam.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11549">Daro69</a> — 11 maja 2018, o 20:21</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[andrews]]></name></author>
<updated>2018-05-11T18:44:29+01:00</updated>
<published>2018-05-11T18:44:29+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=20650&amp;p=207649#p207649</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=20650&amp;p=207649#p207649"/>
<title type="html"><![CDATA[Re: Tabela ASCII i wyświetlacz alfanumeryczny HD44780]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=20650&amp;p=207649#p207649"><![CDATA[
Teraz mam nieco czasu, więc pozwolę sobie na szerszą odpowiedź.<br /><div class="quotetitle">rskup napisał(a):</div><div class="quotecontent"><br />Tutaj andrews trochę Ci namieszał <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" />, bo namawia Cię do tego co od pewnego czasu avr gcc udostępnia, czyli nowy sposób na definiowanie zmiennych / stałych w pamięciach EEPROM/Flash zwany Named Address Spaces.<br /></div><br />&quot;Namawianie&quot; nie było skierowane do konkretnej osoby, tylko do ogółu czytających ten wątek. <em>Named Address Spaces</em> funkcjonują już od prawie <strong>6 lat</strong> i nie jest to wcale taka nowość. Mimo tego cały czas odnoszę wrażenie, że wielu programistów odczuwa niechęć do czegoś, co naprawdę upraszcza kod i eliminuje kilka poważnych problemów.<br />Szczególnie mam tutaj na myśli właśnie początkujących. Jeśli bowiem ktoś opanuje już pewne podstawowe zagadnienia, wie co to są zmienne, tablice, struktury, potrafi je zdefiniować w RAM i prawidłowo odczytać, a później chce pewne <strong>stałe</strong> dane przenieść do FLASH, by zaoszczędzić nieco pamięci RAM, to (jak pokazałem w swoim przykładowym kodzie) wystarczy do zmiennej globalnej dopisać kwalifikator <strong><em>__flash</em></strong> i kod będzie działał prawidłowo bez modyfikacji. Nie trzeba pamiętać o konieczności użycia makr, nie trzeba się uczyć tych wszystkich makr z rodziny <strong><em>pgm_read_xxx()</em></strong> i godzinami modyfikować kodu (który dla danych w RAM działał przecież prawidłowo), zastanawiając się, które makro użyć, aby odczytać odpowiednią ilość bajtów dla typu odczytywanej zmiennej, jak pobrać prawidłowy adres odczytywanej zmiennej, aby odczytać dokładnie to co chcemy itp.<br /><br /><div class="quotetitle">rskup napisał(a):</div><div class="quotecontent"><br />W skrócie działa to tak, że przez odpowiednie zdefiniowanie zmiennej zrzuca się z programisty konieczność późniejszego odpowiedniego odczytywania jej (czyli korzystania z np. pgm_read_byte()).<br /></div><br />Nie bardzo rozumiem, co miałeś na myśli używając określenia &quot;odpowiedniego odczytywania&quot;, ale zapewniam Cię, że odczytywanie danych zdefiniowanych z kwalifikatorem <strong><em>__flash</em></strong> jest na pewno dużo bardziej odpowiednie, niż używanie makr <strong><em>pgm_read_xxx()</em></strong>. Stosowanie tych makr to nie tylko kwestia niewygody i gorszej czytelności kodu. Jeśli programista ich używa, kompilator traci możliwość kontroli typów, która jest ważnym elementem analizy poprawności kodu. Użycie <strong><em>__flash</em></strong> (lub <strong><em>__memx</em></strong>) eliminuje ten problem.<br /><br />Reasumując, poza siłą przyzwyczajenia i strachem przed nieznanym, osobiście nie widzę argumentów przemawiających za stosowaniem makr <strong><em>pgm_read_xxx()</em></strong>, za to na pewno widzę kilka przeciw <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br /><div class="quotetitle">Robert_1967 napisał(a):</div><div class="quotecontent"><br />Co do funkcji lcd_char_P, czy lcd_str_P() , to myślę, że lepiej je rozgraniczyć (P), ponieważ moim skromnym zdaniem będziemy wiedzieć, co kiedy użyć<br />(nie zwalnia od myślenia). Jeśli funkcja jest uniwersalna, to nie zastanawiamy się, której aktualnie potrzebujemy, bo i tak zadziała.<br /></div><br />Nie obraź się, ale moje skromne zdanie jest akurat dokładnie odwrotne. I wcale nie chodzi o to, że myślenie mnie boli <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> Generalnie języki wyższego poziomu po to zostały stworzone, aby ułatwiać życie programiście, co nie oznacza, że przez to &quot;zwalniają od myślenia&quot;. Po prostu dzięki nim programista może myśleć bardziej globalnie, a oprócz tego, jakiej funkcji użyć w zależności od miejsca zapisania danych, jest na prawdę wiele innych rzeczy, które musi przemyśleć.<br /><br />Nie traktuj tego co powiedziałem jako złośliwość. Nikomu nie chcę odbierać prawa do własnego zdania oraz własnych wyborów i szanuję je nawet, jeśli się z nimi nie zgadzam.<br /><br />Wprawdzie tylko kolega <strong><span style="color: #4080FF">Daro69</span></strong> zainteresował się tematem funkcji uniwersalnej, ale mimo wszystko podpowiem co obiecałem <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />Nie znam kodu funkcji <strong><em>lcd_str()</em></strong>, której używa kolega <strong>Robert_1967</strong>, ale powiedzmy, że to coś w stylu:[syntax=c]// deklaracja<br />void lcd_str( const char* s );<br /><br />// definicja<br />void lcd_str( const char* s )<br />{<br />    while(*s)<br />        { lcd_char( *s++ ); }<br />}[/syntax]<br /><br />&quot;Przerobienie&quot; funkcji polegałoby w takim przypadku na dodaniu kwalifikatora <strong><em>__memx</em></strong> do parametru funkcji (oczywiście tak samo w deklaracji jak i w definicji):[syntax=c]// deklaracja<br />void lcd_str( const __memx char* s );<br /><br />// definicja<br />void lcd_str( const __memx char* s )<br />{<br />    while(*s)<br />        { lcd_char( *s++ ); }<br />}[/syntax]<br /><br />Dane definiujemy globalnie:[syntax=c]// tablica we FLASH<br />__flash const char str_flash&#91;&#93; = &quot;Napis we flash.&quot;;<br /><br />// tablica w RAM<br />char str_ram&#91;&#93; = &quot;Napis w RAM.&quot;;[/syntax]<br /><br />Funkcję wywołujemy:[syntax=c]lcd_str(str_flash); // wyświetlenie tekstu zapisanego we FLASH<br />lcd_str(str_ram); // wyświetlenie tekstu zapisanego w RAM[/syntax]<br /><br />I to by było na tyle...<br /><br />Pozdrawiam<br />   Andrzej<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14165">andrews</a> — 11 maja 2018, o 18:44</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Robert_1967]]></name></author>
<updated>2018-05-11T10:02:40+01:00</updated>
<published>2018-05-11T10:02:40+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=20650&amp;p=207621#p207621</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=20650&amp;p=207621#p207621"/>
<title type="html"><![CDATA[Re: Tabela ASCII i wyświetlacz alfanumeryczny HD44780]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=20650&amp;p=207621#p207621"><![CDATA[
Wielkie dzięki kolegom za szybką odpowiedź.<br />Zajrzę do wskazanego wątku i zgłębię temat.  Pozdrawiam. Robert.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=10257">Robert_1967</a> — 11 maja 2018, o 10:02</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[andrews]]></name></author>
<updated>2018-05-11T08:55:07+01:00</updated>
<published>2018-05-11T08:55:07+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=20650&amp;p=207619#p207619</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=20650&amp;p=207619#p207619"/>
<title type="html"><![CDATA[Re: Tabela ASCII i wyświetlacz alfanumeryczny HD44780]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=20650&amp;p=207619#p207619"><![CDATA[
<div class="quotetitle">rskup napisał(a):</div><div class="quotecontent"><br />W poprzednim poście andrews podał Ci linka do postu z opisem jak to usunąć<br /></div><br />Przyznam się bez bicia, że  dopisałem to troszkę później, więc kolega <strong><em>Robert_1967</em></strong> mógł nie zauważyć.<br /><br /><div class="quotetitle">Robert_1967 napisał(a):</div><div class="quotecontent"><br />Zaciekawiła mnie jeszcze objętość pliku za pierwszym razem. Teraz jest ok.<br /></div><br />Ewidentnie za pierwszym razem miałeś wyłączoną optymalizację. Widać to zarówno w warning-u, jak i w wywołaniu kompilatora (<strong><em>-O0</em></strong>).<br />Dlaczego? Nie wiem, bo mnie przy tym nie było <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br />Drugim razem kompilowałeś z opcją <strong><em>-Os</em></strong>, czyli z optymalizacją z naciskiem na ograniczenie rozmiaru kodu, więc zauważona przez Ciebie różnica do dość normalne zjawisko <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=14165">andrews</a> — 11 maja 2018, o 08:55</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[rskup]]></name></author>
<updated>2018-05-11T08:29:25+01:00</updated>
<published>2018-05-11T08:29:25+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=20650&amp;p=207617#p207617</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=20650&amp;p=207617#p207617"/>
<title type="html"><![CDATA[Re: Tabela ASCII i wyświetlacz alfanumeryczny HD44780]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=20650&amp;p=207617#p207617"><![CDATA[
<div class="quotetitle">Robert_1967 napisał(a):</div><div class="quotecontent"><br />Mimo wszystko dalej podkreśla na żółto __flash const uint8_t tab_flash[]. po najechaniu myszką<br />wyświetla się napis ?syntax error. Niemniej jednak wszystko gra. Nie wiem czemu taka reakcja programu.<br /></div>W poprzednim poście <strong>andrews</strong> podał Ci linka do postu z opisem jak to usunąć <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" />.<br /><div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />Jeśli chodzi o to podkreślenie __flash w kodzie na załączonym obrazku, to rozwiązanie jest tutaj <!-- l --><a class="postlink-local" href="http://forum.atnel.pl/topic15543.html#p162317" >topic15543.html#p162317</a><!-- l --><br /></div><br /><br />-- <br />Pozdrawiam,<br />Robert<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3427">rskup</a> — 11 maja 2018, o 08:29</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Robert_1967]]></name></author>
<updated>2018-05-11T08:16:16+01:00</updated>
<published>2018-05-11T08:16:16+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=20650&amp;p=207616#p207616</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=20650&amp;p=207616#p207616"/>
<title type="html"><![CDATA[Re: Tabela ASCII i wyświetlacz alfanumeryczny HD44780]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=20650&amp;p=207616#p207616"><![CDATA[
Dzięki andrews<br /><br />Utworzyłem projekt od nowa, ponieważ myślałem, ze na szybko coś poknociłem. Projekt się kompiluje i nie zgłasza błędów.<br />Wyświetlanie prawidłowe. Mimo wszystko dalej podkreśla na żółto __flash const uint8_t tab_flash[]. po najechaniu myszką<br />wyświetla się napis ?syntax error. Niemniej jednak wszystko gra. Nie wiem czemu taka reakcja programu.<br /><br />Nie pamiętam, co mam wyłączone, a co nie (na pewno wyłączony debuger), ale cała instalacja eclipse dokładnie w/g poradnika<br />Mirka ponad pół roku temu. Prawie codziennie tworzę jakiś mały projekt dla potrzeb nauki i zawsze tak samo. Mam pierwszy<br />taki komunikat odnośnie util_delay. Mój program z posta o ASCII nie zgłasza problemu z tą biblioteką.<br />Oczywiście nie zrozum mnie źle, Ja tylko opisuję aktualny stan rzeczy i trochę mnie to dziwi, że mam coś takiego. Mam wyłączone<br />sprawdzanie pisowni w/g instrukcji Mirka. To tak w skrócie. Zaciekawiła mnie jeszcze objętość pliku za pierwszym razem. Teraz jest ok.<br /><br />08:54:35 **** Incremental Build of configuration Release for project ASCII_flash_andrews ****<br />make all <br />'Building file: ../main.c'<br />'Invoking: AVR Compiler'<br />avr-gcc -Wall -Os -fpack-struct -fshort-enums -ffunction-sections -fdata-sections -std=gnu99 -funsigned-char -funsigned-bitfields -mmcu=atmega16 -DF_CPU=16000000UL -MMD -MP -MF&quot;main.d&quot; -MT&quot;main.o&quot; -c -o &quot;main.o&quot; &quot;../main.c&quot;<br />'Finished building: ../main.c'<br />' '<br />'Building target: ASCII_flash_andrews.elf'<br />'Invoking: AVR C Linker'<br />avr-gcc -Wl,-Map,ASCII_flash_andrews.map -mmcu=atmega16 -o &quot;ASCII_flash_andrews.elf&quot;  ./LCD/lcd44780.o  ./main.o   <br />'Finished building target: ASCII_flash_andrews.elf'<br />' '<br />'Invoking: AVR Create Extended Listing'<br />avr-objdump -h -S ASCII_flash_andrews.elf  &gt;&quot;ASCII_flash_andrews.lss&quot;<br />'Finished building: ASCII_flash_andrews.lss'<br />' '<br />'Create Flash image (ihex format)'<br />avr-objcopy -R .eeprom -R .fuse -R .lock -R .signature -O ihex ASCII_flash_andrews.elf  &quot;ASCII_flash_andrews.hex&quot;<br />'Finished building: ASCII_flash_andrews.hex'<br />' '<br />'Create eeprom image (ihex format)'<br />avr-objcopy -j .eeprom --no-change-warnings --change-section-lma .eeprom=0 -O ihex ASCII_flash_andrews.elf  &quot;ASCII_flash_andrews.eep&quot;<br />'Finished building: ASCII_flash_andrews.eep'<br />' '<br />'Invoking: Print Size'<br />avr-size --format=avr --mcu=atmega16 ASCII_flash_andrews.elf<br />AVR Memory Usage<br />----------------<br />Device: atmega16<br /><br />Program:    1588 bytes (9.7% Full)<br />(.text + .data + .bootloader)<br /><br />Data:         65 bytes (6.3% Full)<br /><br />Pozdrawiam. Robert.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=10257">Robert_1967</a> — 11 maja 2018, o 08:16</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[andrews]]></name></author>
<updated>2018-05-11T07:36:15+01:00</updated>
<published>2018-05-11T07:36:15+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=20650&amp;p=207613#p207613</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=20650&amp;p=207613#p207613"/>
<title type="html"><![CDATA[Re: Tabela ASCII i wyświetlacz alfanumeryczny HD44780]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=20650&amp;p=207613#p207613"><![CDATA[
<div class="quotetitle">Robert_1967 napisał(a):</div><div class="quotecontent"><br /># warning &quot;Compiler optimizations disabled; functions from &lt;util/delay.h&gt; won't work as designed&quot;<br /></div><br />Ten błąd wynika z tego, że najprawdopodobniej wyłączyłeś optymalizację kompilatora, przez co funkcje z <strong><em>delay.h</em></strong> nie będą działały prawidłowo. Ten błąd nie ma związku z moim kodem. Włączenie optymalizacji jest wymogiem  kodu z biblioteki standardowej <strong><em>delay.h</em></strong>. Po włączeniu optymalizacji powinno być OK. Kod, który przedstawiłem był przeze mnie skompilowany (bez żadnych warning-ów) i sprawdzony.<br /><br />Jeśli chodzi o to podkreślenie <strong><em>__flash</em></strong> w kodzie na załączonym obrazku, to rozwiązanie jest <a href="http://forum.atnel.pl/topic15543.html#p162317"  class="postlink">tutaj</a><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14165">andrews</a> — 11 maja 2018, o 07:36</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Robert_1967]]></name></author>
<updated>2018-05-11T06:22:04+01:00</updated>
<published>2018-05-11T06:22:04+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=20650&amp;p=207611#p207611</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=20650&amp;p=207611#p207611"/>
<title type="html"><![CDATA[Re: Tabela ASCII i wyświetlacz alfanumeryczny HD44780]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=20650&amp;p=207611#p207611"><![CDATA[
Dzięki rskup<br />Ostatnio natrafiłem na innym znanym forum zaczynającym się na e... na temat, o którym piszesz. Na razie staram trzymać się &quot;starych&quot; zasad, ponieważ primo, trochę się do nich przyzwyczaiłem. Po drugie, korzystam w 99% tego super forum. Po trzecie bazuję przede<br />wszystkim na wiedzy przekazywanej z książek Mirka, poradników, ect...No i tak, jak piszesz, na moim etapie...<br />         Co nie oznacza, że wielkie dzięki dla kolegi andrews za pokazanie pomysłu i jak pociągnie dalej temat, to będzie z pożytkiem dla innych. Jeszcze nie testowałem kodu kol. andrews, ale zaraz w wolnej chwili to uczynię. To zn. co tu testować. Na pewno będzie<br />działać  <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> , ale żeby to jeszcze zrozumieć  <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> . Pozdrawiam. Robert.<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 49 minutach ]</span></strong><br /><br />Niestety, nie kompiluje się prawidłowo w moim przypadku.<br />Mam warninga w postaci:<br /><br />07:51:43 **** Incremental Build of configuration Debug for project ASCII_flash_andrews ****<br />make all <br />'Building file: ../main.c'<br />'Invoking: AVR Compiler'<br />avr-gcc -Wall -g2 -gstabs -O0 -fpack-struct -fshort-enums -ffunction-sections -fdata-sections -std=gnu99 -funsigned-char -funsigned-bitfields -mmcu=atmega16 -DF_CPU=16000000UL -MMD -MP -MF&quot;main.d&quot; -MT&quot;main.o&quot; -c -o &quot;main.o&quot; &quot;../main.c&quot;<br />In file included from ../main.c:8:0:<br />c:\program files\atmel\avr tools\avr toolchain\avr\include\util\delay.h:95:3: warning: #warning &quot;Compiler optimizations disabled; functions from &lt;util/delay.h&gt; won't work as designed&quot; [-Wcpp]<br /> # warning &quot;Compiler optimizations disabled; functions from &lt;util/delay.h&gt; won't work as designed&quot;<br />   ^<br />'Finished building: ../main.c'<br />' '<br />'Building target: ASCII_flash_andrews.elf'<br />'Invoking: AVR C Linker'<br />avr-gcc -Wl,-Map,ASCII_flash_andrews.map -mmcu=atmega16 -o &quot;ASCII_flash_andrews.elf&quot;  ./LCD/lcd44780.o  ./main.o   <br />'Finished building target: ASCII_flash_andrews.elf'<br />' '<br />'Invoking: AVR Create Extended Listing'<br />avr-objdump -h -S ASCII_flash_andrews.elf  &gt;&quot;ASCII_flash_andrews.lss&quot;<br />'Finished building: ASCII_flash_andrews.lss'<br />' '<br />'Invoking: Print Size'<br />avr-size --format=avr --mcu=atmega16 ASCII_flash_andrews.elf<br />AVR Memory Usage<br />----------------<br />Device: atmega16<br /><br />Program:    6668 bytes (40.7% Full)<br />(.text + .data + .bootloader)<br /><br />Data:         65 bytes (6.3% Full)<br />(.data + .bss + .noinit)<br /><br /><br /><a href="https://obrazkiforum.atnel.pl/10257/c21ebb6d8dc484c15d5c2f9ca6b7fcfb.jpg"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/10257/c21ebb6d8dc484c15d5c2f9ca6b7fcfb.jpg" alt="Obrazek" /></a><br /><br />Nie za bardzo wiem, co w takiej sytuacji. Robert.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=10257">Robert_1967</a> — 11 maja 2018, o 06:22</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[rskup]]></name></author>
<updated>2018-05-10T21:59:54+01:00</updated>
<published>2018-05-10T21:59:54+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=20650&amp;p=207606#p207606</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=20650&amp;p=207606#p207606"/>
<title type="html"><![CDATA[Re: Tabela ASCII i wyświetlacz alfanumeryczny HD44780]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=20650&amp;p=207606#p207606"><![CDATA[
<div class="quotetitle">Robert_1967 napisał(a):</div><div class="quotecontent"><br />Co do funkcji lcd_char_P, czy lcd_str_P() , to myślę, że lepiej je rozgraniczyć (P)<br /></div>Tutaj <strong>andrews</strong> trochę Ci namieszał <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" />, bo namawia Cię do tego co od pewnego czasu avr gcc udostępnia, czyli nowy sposób na definiowanie zmiennych / stałych w pamięciach EEPROM/Flash zwany <em>Named Address Spaces</em>. W skrócie działa to tak, że przez odpowiednie zdefiniowanie zmiennej zrzuca się z programisty konieczność późniejszego odpowiedniego odczytywania jej (czyli korzystania z np. pgm_read_byte()).<br />Więcej masz w opisie zrobionym w wątku <!-- l --><a class="postlink-local" href="http://forum.atnel.pl/topic19149.html" >topic19149.html</a><!-- l --> (oczywiście także napisanym przez <strong>andrews</strong> <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" />).<br /><br />Jednak proponuję Ci, na Twoim obecnym etapie, zostać na razie przy dwóch różnych funkcjach z _P i bez _P a proponowaną nowoczesną metodę potraktować jako ciekawostkę.<br /><br />-- <br />Pozdrawiam,<br />Robert<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3427">rskup</a> — 10 maja 2018, o 21:59</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Robert_1967]]></name></author>
<updated>2018-05-10T20:07:09+01:00</updated>
<published>2018-05-10T20:07:09+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=20650&amp;p=207602#p207602</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=20650&amp;p=207602#p207602"/>
<title type="html"><![CDATA[Re: Tabela ASCII i wyświetlacz alfanumeryczny HD44780]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=20650&amp;p=207602#p207602"><![CDATA[
Dzięki andrews.<br />Niby taka &quot;prosta&quot; instrukcja for, a wzbudziła trochę dyskusji (oczywiście prosta dla kogoś, kto ją zrozumiał i opanował). No ale to chyba dobrze. Przecież jest<br />wiele osób, które się uczą i na pewno skorzystają z tej pomocy. Co do  pre-inkrementacji i post-inkrementacji, to czytałem oczywiście, aczkolwiek póki co<br />nie do końca ją rozumiem, ale nauczę się. W każdym bądź razie dzisiaj natrafiłem na stwierdzenie (w internecie), że pomijając sam fakt, czy jest to pre, czy<br />post-inkrementacja, to pisanie w stylu I++ jest złe i bardziej &quot;kosztowne&quot; od na przykład ++I. Oczywiście nie podpisuję się pod tym, a tylko podzieliłem się<br />informacją z jakiegoś bloga. Może autorowi tego stwierdzenia chodziło o zajętość programu, czy prędkość wykonywania . Nie wiem. Natomiast w moim konkretnym<br />przypadku napisałem i tak i tak i w obu przypadkach wielkość pliku była identyczna, a sposób działania programu również.<br /><br />Andrews. Jutro rano przetestuję, co napisałeś. Jeśli chodzi o funkcję lcd_str_P(), to nie ukrywam, że przydała by się w bibliotece. Może akurat nie dzisiaj i nie<br />jutro, ale kiedyś przyda się. Fakt, może za niedługo będę w stanie sam napisać, no ale puki co jeszcze nie potrafię. Do tej pory korzystałem bardziej z gotowych<br />rozwiązań i teraz widzę, że trzeba się uczyć. Nie mówię, że kompletnie nic nie umiem, ale zmieniłem podejście. Mój problem leży głównie w tym, że robię wszystko<br />na raz. Trochę zrozumiałem, ale nie do końca i biorę się za następny temat. No ale pewnie nie ja jeden  <img src="https://forum.atnel.pl/images/smilies/icon_lol.gif" alt=":lol:" title="Śmieje się" /> .<br />Nawet, jak zaczynałem dowolnego main.c , to zazwyczaj inkludy były na zasadzie copy and past, no bo szybciej. Ale potem łapałem się, że nie potrafię z pamięci<br />napisać np. #include &lt;util/delay&gt;.h. W poradniku Mirek zwrócił uwagę, że często wpisuje wszystko z palca i ja tak zacząłem. Okazało się, że teraz piszę coraz<br />więcej z pamięci. Niby takie proste, a ile daje  <img src="https://forum.atnel.pl/images/smilies/icon_lol.gif" alt=":lol:" title="Śmieje się" /> .<br />Co do funkcji lcd_char_P, czy lcd_str_P() , to myślę, że lepiej je rozgraniczyć (P), ponieważ moim skromnym zdaniem będziemy wiedzieć, co kiedy użyć<br />(nie zwalnia od myślenia). Jeśli funkcja jest uniwersalna, to nie zastanawiamy się, której aktualnie potrzebujemy, bo i tak zadziała. Dla zaawansowanych to<br />może bez znaczenia, bo i tak wiedza co robią. Nawet, jak nie wiedzą, co robią  <img src="https://forum.atnel.pl/images/smilies/icon_lol.gif" alt=":lol:" title="Śmieje się" />  <img src="https://forum.atnel.pl/images/smilies/icon_lol.gif" alt=":lol:" title="Śmieje się" />  <img src="https://forum.atnel.pl/images/smilies/icon_lol.gif" alt=":lol:" title="Śmieje się" /> . Pozdrawiam. Robert.<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 2 minutach ]</span></strong><br /><br />Daro69<br />To nie jest wątek &quot;na wyłączność  <img src="https://forum.atnel.pl/images/smilies/icon_lol.gif" alt=":lol:" title="Śmieje się" /> . Każdy może pisać, a jeśli podzieli się z Tobą, to przy okazji przecież i ja skorzystam  <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> . Pozdrawiam.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=10257">Robert_1967</a> — 10 maja 2018, o 20:07</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Daro69]]></name></author>
<updated>2018-05-10T19:39:46+01:00</updated>
<published>2018-05-10T19:39:46+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=20650&amp;p=207601#p207601</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=20650&amp;p=207601#p207601"/>
<title type="html"><![CDATA[Re: Tabela ASCII i wyświetlacz alfanumeryczny HD44780]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=20650&amp;p=207601#p207601"><![CDATA[
kurka, <br />@andrews, jak zawsze sypiesz wiedzą i siejesz zainteresowanie. <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /> <div class="quotetitle">andrews napisał(a):</div><div class="quotecontent"><br />to mogę spróbować podpowiedzieć, jak nie pisać osobnej funkcji lcd_str_P(), tylko przerobić funkcję lcd_str() tak, by akceptowała zarówno dane z FLASH, jak i z RAM<br /></div><br />Skoro teraz można użyć lcd_char(), zarówno do flash jak i ram, hmm...<br />Spróbuję zgadnąć.<br />[syntax=c]fun_str( char * str){<br />    for (uint8_t id = 0; id &lt; ARR_COUNT (str); id++){<br />      lcd_char ( str&#91; id &#93;);<br />   }<br />}[/syntax]<br />Tak sobie teraz na biegu wymyśliłem kierunek w jakim chyba bym kombinował,<br />ale oczywiście jeśli możesz to poproszę poprawną wersję, lub nakierowanie. <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br />sorka że w wątku kolegi <strong>Robert_1967</strong>, zakładam że się nie obrazi. <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=11549">Daro69</a> — 10 maja 2018, o 19:39</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Marhef]]></name></author>
<updated>2018-05-10T19:14:33+01:00</updated>
<published>2018-05-10T19:14:33+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=20650&amp;p=207600#p207600</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=20650&amp;p=207600#p207600"/>
<title type="html"><![CDATA[Re: Tabela ASCII i wyświetlacz alfanumeryczny HD44780]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=20650&amp;p=207600#p207600"><![CDATA[
<div class="quotetitle">andrews napisał(a):</div><div class="quotecontent"><br />Mam nadzieję, że kolega Marhef nie potraktuje mojego sprostowania jako złośliwości <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /></div>A skąd <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> jak to mówią, człowiek całe życie się uczy... a i tak umiera głupi. Opisałem, tak jak ja to rozumiem. Ale faktycznie, moje rozumowanie nie było najlepsze.<br />A jeśli ktoś naprostuje... no to przecież po to jest forum, żeby  poprawiać swoje głupoty <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=12752">Marhef</a> — 10 maja 2018, o 19:14</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[andrews]]></name></author>
<updated>2018-05-10T18:09:57+01:00</updated>
<published>2018-05-10T18:09:57+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=20650&amp;p=207598#p207598</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=20650&amp;p=207598#p207598"/>
<title type="html"><![CDATA[Re: Tabela ASCII i wyświetlacz alfanumeryczny HD44780]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=20650&amp;p=207598#p207598"><![CDATA[
Zapewne niektórzy pomyślą, że czepiam się szczegółów, ale jednak czasami szczegóły są bardzo istotne.<br /><br />Chciałbym nieco sprostować opis pętli <strong><em>for</em></strong>:<div class="quotetitle">Marhef napisał(a):</div><div class="quotecontent"><br />Krótka instrukcja działania pętli for:<br />1) jeżeli program napotka pętle for, wykonuje najpierw to, co jest przed pierwszym średnikiem. W tym przypadku, ustawi wartość zmiennej pozycja_do_edycji na 0<br />2) program sprawdzi to, co jest pomiędzy pierwszym i drugim średnikiem. Czyli sprawdzi, czy przypadkiem zmienna pozycja_do_edycji nie przekroczyła wartości 62. A tak przy okazji, wyświetla się 63. znak?<br />3) program wykona to, co jest po drugim średniku. Zazwyczaj jest to inkrementacja/dekrementacja zmiennej sterującej pętlą.<br />4) wykonuje się to, co jest wewnątrz pętli. I tu uwaga: jeżeli po drugim przecinku zapiszesz zmienna++, to operacje wykonają się na starej wartości zmiennej, przed zwiększeniem. Ale jeśli napiszesz ++zmienna, to najpierw zwiększy się wartość zmiennej, a później zostanie ona wzięta do obliczeń.<br />5) po wykonaniu wszystkich instrukcji pętli program wraca do punktu 2)<br /></div><br />Punkty 3 i 4 powinny być w odwrotnej kolejności, czyli najpierw jest wykonanie bloku instrukcji, a dopiero później wykonywana jest inkrementacja zmiennej.<br /><br />Odnośnie uwagi w punkcie 4 - nie ma znaczenia czy użyta będzie pre-inkrementacja (<strong><em>++i</em></strong>) czy też post-inkrementacja (<strong><em>i++</em></strong>), pętla wykona się tak samo:<br />[syntax=c]for( uint8_t i = 0; i &lt; 5; i++ ) { / *blok instrukcji */ }<br />for( uint8_t i = 0; i &lt; 5; ++i ) { / *blok instrukcji */ }[/syntax]<br />Powyższe dwie pętle wykonają się dokładnie tak samo, czyli pięć obiegów oraz zakres wartości zmiennej <strong><em>i</em></strong> od <strong><em>0</em></strong> do <strong><em>4</em></strong>.<br /><br />To, o czym pisałeś mogłoby mieć zastosowanie np. w sytuacji, kiedy inkrementacja następuje w momencie sprawdzania warunku:<br />[syntax=c]for( uint8_t i = 0; ++i &lt; 5; ) { / *blok instrukcji */ }<br />for( uint8_t i = 0; i++ &lt; 5; ) { / *blok instrukcji */ }[/syntax]<br />W pierwszym przypadku najpierw wykonywana jest inkrementacja, a dopiero później porównanie wartości. W efekcie pętla będzie miała <strong><em>4</em></strong> obiegi oraz zakres wartości zmiennej <strong><em>i</em></strong> od <strong><em>1</em></strong> do <strong><em>4</em></strong>.<br />W drugim przypadku najpierw wykonywane jest porównanie wartości, a dopiero później inkrementacja. W efekcie pętla będzie miała <strong><em>5</em></strong> obiegów oraz zakres wartości zmiennej <strong><em>i</em></strong> od <strong><em>1</em></strong> do <strong><em>5</em></strong>.<br /><br />Mam nadzieję, że kolega <span style="color: #0080FF"><strong>Marhef</strong></span> nie potraktuje mojego sprostowania jako złośliwości <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />Teraz na temat danych we FLASH.<br /><div class="quotetitle">Robert_1967 napisał(a):</div><div class="quotecontent"><br />żeby nie pisać za każdym razem pgm_read_byte...<br /></div><br />Rozpatrzmy Twój przykład. Możesz przetestować coś takiego:<br />[syntax=c]/*<br /> * Author : andrews<br /> */ <br /><br />#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;avr/pgmspace.h&gt;<br />#include &quot;LCD/lcd44780.h&quot;<br /><br />#define ARR_COUNT(t) sizeof(t)/sizeof(t&#91;0&#93;)<br /><br />// tablica we FLASH<br />__flash const uint8_t tab_flash&#91;&#93; = {<br />     48,  49,  50,  51,  52,  53,  54,  55,  56,  57,  65,  66,<br />     67,  68,  69,  70,  71,  72,  73,  74,  75,  76,  77,  78,<br />     79,  80,  81,  82,  83,  84,  85,  86,  87,  88,  89,  90,<br />     97,  98,  99, 100, 101, 102, 103, 104, 105, 106, 107, 108,<br />    109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120,<br />    121, 122<br />};<br /><br />// tablica w RAM<br />const uint8_t tab_ram&#91;&#93; = {<br />     48,  49,  50,  51,  52,  53,  54,  55,  56,  57,  65,  66,<br />     67,  68,  69,  70,  71,  72,  73,  74,  75,  76,  77,  78,<br />     79,  80,  81,  82,  83,  84,  85,  86,  87,  88,  89,  90,<br />     97,  98,  99, 100, 101, 102, 103, 104, 105, 106, 107, 108,<br />    109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120,<br />    121, 122<br />};<br /><br />int main (void)<br />{<br />    lcd_init();<br />        <br />    while(1)<br />    {<br />        for (uint8_t id=0; id &lt; ARR_COUNT(tab_flash); id++ )<br />        {<br />            lcd_cls();<br />            <br />            lcd_locate(1,3);<br />            // wyświetlenie znaku z RAM<br />            lcd_char( tab_ram&#91;id&#93; );<br />            lcd_locate(2,3);<br />            // wyświetlenie znaku z FLASH<br />            lcd_char( tab_flash&#91;id&#93; );<br />            <br />            lcd_locate(1,6);<br />            // wyświetlenie dziesiętnego kodu znaku z RAM<br />            lcd_int( tab_ram&#91;id&#93; );<br />            lcd_locate(2,6);<br />            // wyświetlenie dziesiętnego kodu znaku z FLASH<br />            lcd_int( tab_flash&#91;id&#93; );<br />            <br />            <br />            lcd_locate(1,12);<br />            // wyświetlenie heksadecymalnego kodu znaku z RAM<br />            lcd_hex( tab_ram&#91;id&#93; );<br />            lcd_locate(2,12);<br />            // wyświetlenie heksadecymalnego kodu znaku z FLASH<br />            lcd_hex( tab_flash&#91;id&#93; );<br />                        <br />            _delay_ms(500);<br />        }<br />        <br />    }<br />}[/syntax]<br />Przy założeniu, że obydwie tablice mają tyle samo elementów i elementy mają te same wartości, obydwie linie wyświetlacza powinny być takie same.<br /><br />Jeśli zda egzamin i ktoś będzie zainteresowany, to mogę spróbować podpowiedzieć, jak nie pisać osobnej funkcji <strong><em>lcd_str_P()</em></strong>, tylko przerobić funkcję <strong><em>lcd_str()</em></strong> tak, by akceptowała zarówno dane z FLASH, jak i z RAM <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=14165">andrews</a> — 10 maja 2018, o 18:09</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Robert_1967]]></name></author>
<updated>2018-05-10T11:43:39+01:00</updated>
<published>2018-05-10T11:43:39+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=20650&amp;p=207576#p207576</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=20650&amp;p=207576#p207576"/>
<title type="html"><![CDATA[Re: Tabela ASCII i wyświetlacz alfanumeryczny HD44780]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=20650&amp;p=207576#p207576"><![CDATA[
Witaj Marhef<br />Już żeby do końca rozjaśnić, to we wcześniejszych postach w kodzie w pętli for była wartość 63, ale po przeczytaniu Twojego<br />posta wywaliłem z kodu ifa i pozbyłem się wartości 63. Pozdrawiam. Robert.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=10257">Robert_1967</a> — 10 maja 2018, o 11:43</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Marhef]]></name></author>
<updated>2018-05-10T11:37:11+01:00</updated>
<published>2018-05-10T11:37:11+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=20650&amp;p=207574#p207574</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=20650&amp;p=207574#p207574"/>
<title type="html"><![CDATA[Re: Tabela ASCII i wyświetlacz alfanumeryczny HD44780]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=20650&amp;p=207574#p207574"><![CDATA[
<div class="quotetitle">Robert_1967 napisał(a):</div><div class="quotecontent"><br />Mam dokładnie 62 naki, czyli wyświetla się od pozycji 0 do 61. Ale jeśli zrobiłbym w kodzie pozycja_do_edycji &lt; 61; , to ostatni znak (122) się nie wyświetla.<br /></div>Właśnie tego nie mogłem załapać. Wydawało mi się, że piszesz o 63 znakach, stąd moje pytania<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=12752">Marhef</a> — 10 maja 2018, o 11:37</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Robert_1967]]></name></author>
<updated>2018-05-10T11:07:25+01:00</updated>
<published>2018-05-10T11:07:25+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=20650&amp;p=207573#p207573</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=20650&amp;p=207573#p207573"/>
<title type="html"><![CDATA[Re: Tabela ASCII i wyświetlacz alfanumeryczny HD44780]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=20650&amp;p=207573#p207573"><![CDATA[
Witaj Marhef<br />Mam dokładnie 62 naki, czyli wyświetla się od pozycji 0 do 61. Ale jeśli zrobiłbym w kodzie pozycja_do_edycji &lt; 61; , to ostatni znak<br />(122) się nie wyświetla.<br /><br /><div class="quotetitle">Marhef napisał(a):</div><div class="quotecontent"><br />Prawie <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> pomyliłeś nicki <img src="https://forum.atnel.pl/images/smilies/icon_razz.gif" alt=":P" title="Pokazuje język" /><br /></div><br /><br />A gdzie tam ???. Przecież to Ty pisałeś  <img src="https://forum.atnel.pl/images/smilies/icon_lol.gif" alt=":lol:" title="Śmieje się" /> .<br /><br />a tu nawiązywałem do kolegi rskup:<br /><br /><div class="quotetitle">Robert_1967 napisał(a):</div><div class="quotecontent"><br />Jedyne, z czym mam problem, to utworzenie własnej funkcji<br />lcd_char_P() z funkcji lcd_char(), jak sugerował kol. rskup, a żeby nie pisać za każdym razem pgm_read_byte...<br /></div><br /><br />Pozdrawiam. Robert.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=10257">Robert_1967</a> — 10 maja 2018, o 11:07</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Marhef]]></name></author>
<updated>2018-05-10T10:17:26+01:00</updated>
<published>2018-05-10T10:17:26+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=20650&amp;p=207571#p207571</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=20650&amp;p=207571#p207571"/>
<title type="html"><![CDATA[Re: Tabela ASCII i wyświetlacz alfanumeryczny HD44780]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=20650&amp;p=207571#p207571"><![CDATA[
<div class="quotetitle">Robert_1967 napisał(a):</div><div class="quotecontent"><br /><div class="quotetitle">micky napisał(a):</div><div class="quotecontent">A tak przy okazji, wyświetla się 63. znak?<br /></div><br />O przy okazji wreszcie udało mi się wstawić cytat <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /></div>Prawie <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> pomyliłeś nicki <img src="https://forum.atnel.pl/images/smilies/icon_razz.gif" alt=":P" title="Pokazuje język" /><div class="quotetitle">Robert_1967 napisał(a):</div><div class="quotecontent"><br />Nie, nie wyświetla się, ponieważ w tablicy nie ma. Tu właśnie nie byłem pewny, czy nie robię babola.<br /></div>Nie chce mi się liczyć, ile masz znaków w tablicy. To może inaczej: tych znaków jest 62 czy 63? Bo z taką pętlą, jaką masz, wyświetlą się 62 znaki, o indeksach od 0 do 61.<br />Pytam, bo nie wiem, czy dobrze zrozumiałem założenia<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=12752">Marhef</a> — 10 maja 2018, o 10:17</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Robert_1967]]></name></author>
<updated>2018-05-10T10:09:32+01:00</updated>
<published>2018-05-10T10:09:32+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=20650&amp;p=207570#p207570</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=20650&amp;p=207570#p207570"/>
<title type="html"><![CDATA[Re: Tabela ASCII i wyświetlacz alfanumeryczny HD44780]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=20650&amp;p=207570#p207570"><![CDATA[
Dzięki Marhef za chęć wyjaśnienia.<br /><br />Ja czytałem oczywiście o pętli for i z książek Mirka i z netu. Niby rozumiałem, ale jak widzę, to w niektórych sytuacjach nie do<br />końca.<br /><br /><div class="quotetitle">micky napisał(a):</div><div class="quotecontent"><br />A tak przy okazji, wyświetla się 63. znak?<br /></div><br /><br />O przy okazji wreszcie udało mi się wstawić cytat  <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> . Nie, nie wyświetla się, ponieważ w tablicy nie ma. Tu właśnie nie byłem<br />pewny, czy nie robię babola. Jednak okazuje się, że if jest zbędny, jak pisałeś.<br />Ja myślałem, że kiedy dojdzie do ostatniego znaku z tablicy, to ja muszę sam wyzerować zmienną i z tond ten if(pozycja_do_edycji ==63)        pozycja_do_edycji = 0;. Nie wiedziałem, że się samo wyzeruje i zacznie od nowa...O ile słusznie prawię.<br /><br />Teraz poprawiłem kod na taki i wyświetla mi się wszystko prawidłowo. Jedyne, z czym mam problem, to utworzenie własnej funkcji<br />lcd_char_P() z funkcji lcd_char(), jak sugerował kol. rskup, a żeby nie pisać za każdym razem pgm_read_byte...<br /><br /><br />[syntax=c]for (uint8_t pozycja_do_edycji=0; pozycja_do_edycji &lt; 62;  pozycja_do_edycji++)<br />{<br />lcd_locate(2,3);// wyswietlenie DEC z tabeli ASCII z FLASH<br />lcd_int(pgm_read_byte(&amp;tab_znaki&#91;pozycja_do_edycji&#93;));<br />//lcd_locate(2,3);// wyswietlenie DEC z tabeli ASCII z RAM<br />//lcd_int(tab_znaki&#91;pozycja_do_edycji&#93;);<br /><br />lcd_locate(2,9);// wyswietlenie znaku z tabeli ASCII z FLASH<br />lcd_char(pgm_read_byte(&amp;tab_znaki&#91;pozycja_do_edycji&#93;));<br />//lcd_locate(2,9);// wyswietlenie znaku z tabeli ASCII z RAM<br />//lcd_char(tab_znaki&#91;pozycja_do_edycji&#93;);<br /><br />lcd_locate(2,14);// wyswietlenie HEX z tabeli ASCII z FLASH<br />lcd_hex(pgm_read_byte(&amp;tab_znaki&#91;pozycja_do_edycji&#93;));<br />//lcd_locate(2,14);// wyswietlenie HEX z tabeli ASCII z RAM<br />//lcd_hex(tab_znaki&#91;pozycja_do_edycji&#93;);<br /><br />_delay_ms(500);<br />}[/syntax]<br /><br />Pozdrawiam. Robert.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=10257">Robert_1967</a> — 10 maja 2018, o 10:09</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Marhef]]></name></author>
<updated>2018-05-10T08:16:56+01:00</updated>
<published>2018-05-10T08:16:56+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=20650&amp;p=207560#p207560</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=20650&amp;p=207560#p207560"/>
<title type="html"><![CDATA[Re: Tabela ASCII i wyświetlacz alfanumeryczny HD44780]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=20650&amp;p=207560#p207560"><![CDATA[
<div class="quotetitle">Robert_1967 napisał(a):</div><div class="quotecontent"><br />Jeśli pozycja_do_edycji &lt; 62, to zwiększaj, ponieważ musi dojść do te 62 (122 w tab.)<br />Ale jeśli osiągnie 63, to wyzeruj i od nowa...Co prawda w tablicy nie ma 63, ale jeśli dałem ==62, to 62 nie zdążyło się wyświetlić<br />i przeskakiwało na 0 w tab.<br /></div>Nie musisz sprawdzać warunku[syntax=c]if(pozycja_do_edycji ==63)[/syntax]Pętla for sama zadba o to, żeby nie udało się takiej wartości osiągnąć (tak, wiem, są pewne możliwości, ale nie na tym poziomie skomplikowania programu).<br />Krótka instrukcja działania pętli for:<br />1) jeżeli program napotka pętle for, wykonuje najpierw to, co jest przed pierwszym średnikiem. W tym przypadku, ustawi wartość zmiennej pozycja_do_edycji na 0<br />2) program sprawdzi to, co jest pomiędzy pierwszym i drugim średnikiem. Czyli sprawdzi, czy przypadkiem zmienna pozycja_do_edycji nie przekroczyła wartości 62. A tak przy okazji, wyświetla się 63. znak?<br />3) program wykona to, co jest po drugim średniku. Zazwyczaj jest to inkrementacja/dekrementacja zmiennej sterującej pętlą.<br />4) wykonuje się to, co jest wewnątrz pętli. I tu uwaga: jeżeli po drugim przecinku zapiszesz zmienna++, to operacje wykonają się na starej wartości zmiennej, przed zwiększeniem. Ale jeśli napiszesz ++zmienna, to najpierw zwiększy się wartość zmiennej, a później zostanie ona wzięta do obliczeń.<br />5) po wykonaniu wszystkich instrukcji pętli program wraca do punktu 2)<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=12752">Marhef</a> — 10 maja 2018, o 08:16</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[micky]]></name></author>
<updated>2018-05-10T07:32:10+01:00</updated>
<published>2018-05-10T07:32:10+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=20650&amp;p=207558#p207558</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=20650&amp;p=207558#p207558"/>
<title type="html"><![CDATA[Re: Tabela ASCII i wyświetlacz alfanumeryczny HD44780]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=20650&amp;p=207558#p207558"><![CDATA[
Poczytaj o pętli for.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1546">micky</a> — 10 maja 2018, o 07:32</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Robert_1967]]></name></author>
<updated>2018-05-10T07:25:07+01:00</updated>
<published>2018-05-10T07:25:07+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=20650&amp;p=207557#p207557</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=20650&amp;p=207557#p207557"/>
<title type="html"><![CDATA[Re: Tabela ASCII i wyświetlacz alfanumeryczny HD44780]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=20650&amp;p=207557#p207557"><![CDATA[
Witaj.<br />No to ok, ale jak już napisałem, że opiszę moją interpretację, to dokończę  <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> <br />W tablicy mam zmienne od 48 do 122. 48=0 w tablicy, a 122=62 w tablicy. I teraz kod:<br /><br />[syntax=c]for (uint8_t pozycja_do_edycji=0; pozycja_do_edycji &lt; 62; pozycja_do_edycji++)<br />{<br />if(pozycja_do_edycji ==63)pozycja_do_edycji = 0;<br /><br />                 ............<br />                 ............<br />                }[/syntax]<br /><br />Jeśli pozycja_do_edycji &lt; 62, to zwiększaj, ponieważ musi dojść do te 62 (122 w tab.)<br />Ale jeśli osiągnie 63, to wyzeruj i od nowa...Co prawda w tablicy nie ma 63, ale jeśli dałem ==62, to 62 nie zdążyło się wyświetlić<br />i przeskakiwało na 0 w tab.<br />Być może z punktu logiki popełniam tu błąd i przy zastosowaniu podobnego toku myślenia, ale w innej sytuacji, a nie tylko wyświetlanie sobie literek miałbym zonka. Tutaj musiałby się może jeszcze ktoś wypowiedzieć. W tej konkretnej sytuacji<br />program zachowuje się zgodnie z tym, co zamierzałem. Jeszcze raz pozdrowionka.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=10257">Robert_1967</a> — 10 maja 2018, o 07:25</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Daro69]]></name></author>
<updated>2018-05-10T06:53:03+01:00</updated>
<published>2018-05-10T06:53:03+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=20650&amp;p=207554#p207554</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=20650&amp;p=207554#p207554"/>
<title type="html"><![CDATA[Re: Tabela ASCII i wyświetlacz alfanumeryczny HD44780]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=20650&amp;p=207554#p207554"><![CDATA[
No dobra, to ja mam chochliki w oczach. <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br />Zinkrementuje do max wartości i wyjdzie z pętli,<br />Obsługując ja następnym razem, znowu zostanie zainicjowana wartością 0.<br />for(uint8_t zmienna=0 ; ...<br /><br />Wysłane z mojego Lenovo K33a42 przy użyciu Tapatalka<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11549">Daro69</a> — 10 maja 2018, o 06:53</p><hr />
]]></content>
</entry>
</feed>