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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2024-12-10T12:56:48+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=8&amp;t=23125&amp;mode</id>
<entry>
<author><name><![CDATA[czerwan]]></name></author>
<updated>2024-12-10T12:56:48+01:00</updated>
<published>2024-12-10T12:56:48+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23125&amp;p=238662#p238662</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23125&amp;p=238662#p238662"/>
<title type="html"><![CDATA[Re: nie mogę odpalić olea Atnela po SPI. pomocy]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23125&amp;p=238662#p238662"><![CDATA[
oled Atnela lata po SPI jak usuniemy dodatkowo zworkę z adresem I2C<br /><br /><br /><a href="https://obrazkiforum.atnel.pl/20591/6eb91661e5e828838020303a113a9791.jpg"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/20591/6eb91661e5e828838020303a113a9791.jpg" alt="Obrazek" /></a><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=20591">czerwan</a> — 10 gru 2024, o 12:56</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[micky]]></name></author>
<updated>2020-05-19T17:23:37+01:00</updated>
<published>2020-05-19T17:23:37+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23125&amp;p=227369#p227369</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23125&amp;p=227369#p227369"/>
<title type="html"><![CDATA[Re: nie mogę odpalić olea Atnela po SPI. pomocy]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23125&amp;p=227369#p227369"><![CDATA[
Retro żyje i ma się bardzo dobrze. Poza sprzętem wychodzą i gry i demka <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1546">micky</a> — 19 maja 2020, o 17:23</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[moscow]]></name></author>
<updated>2020-05-15T12:53:03+01:00</updated>
<published>2020-05-15T12:53:03+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23125&amp;p=227252#p227252</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23125&amp;p=227252#p227252"/>
<title type="html"><![CDATA[Re: nie mogę odpalić olea Atnela po SPI. pomocy]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23125&amp;p=227252#p227252"><![CDATA[
<div class="quotetitle">Egzorcysta napisał(a):</div><div class="quotecontent"><br />[...]<br /><div class="quotetitle">moscow napisał(a):</div><div class="quotecontent">czywiście jak się wysyła dane bez żadnej optymalizacji, to jest naprawdę &quot;słabo&quot;... ale jak się trochę pomyśli i zrobi parę &quot;sztuczek&quot; rodem ze sceny ośmiobitowców lat 80-tych, to zaczyna to nawet fajnie działać :-)<br /></div><br /></div><br /><div class="quotetitle">Egzorcysta napisał(a):</div><div class="quotecontent"><br />Mozesz uzasadnić sens stosowania sztuczek, gdy mikrokontroler z wymaganymi zasobami kosztuje przysłowiowe grosze?<br /></div><br />Pod ręką miałem AVRa i akurat ten konkretny wyświetlacz... i chwilę czasu, żeby się pobawić. Być może inny procek kosztuje grosze, ale po pierwsze akurat takiego innego nie miałem pod ręką, po drugie jakbym go zamówił, to pewnie bym czekał kolejne parę dni na dostawę i jeszcze spędził pewnie więcej czasu nad poinstalowaniem całego środowiska.<br />W sumie to nie są jakieś nie wiadomo jakie sztuczki, razem z wymyśleniem i zaprogramowaniem zajęło mi to może parę godzin. <br /><strong>Więcej czasu spędziłem nad rozkminieniem dlaczego mam sieczkę na ekranie - a o tym jest ten wątek i swoje rozwiązanie oraz dojście do tego problemu tutaj pokazałem.</strong><br />O wyższości świąt nie bardzo mam ochoty dyskutować...<br /><br /><div class="quotetitle">Egzorcysta napisał(a):</div><div class="quotecontent"><br />Jest &quot;sztuka dla sztuki&quot; ale po co? Jak mam się męczyć miesiąc aby uzyskać jakiś efekt wole wybrać TAŃSZY mikrokontroler z większymi zasobami aby efekt uzyskac w kilka godzin.<br /></div><br />Pewnie można kupić gotowe urządzenie &quot;od Chińczyka&quot;... ale można też trochę pobawić się samemu i czegoś nauczyć, poćwiczyć szare komórki... dla mnie to jest hobby, w czasie wolnym robię to co lubię i nie mam specjalnie ochoty tłumaczyć się, dlaczego nie zrobiłem tego inaczej.<br /><br /><div class="quotetitle">Egzorcysta napisał(a):</div><div class="quotecontent"><br />Lata 80 minęły, nikt nic poważnego za Atari nie buduje.<br /></div><br />A to byś się zdziwił... moda na &quot;retro&quot; wraca i się okazuje, że jest to całkiem niezły biznes. To raczej nie jest to forum, żeby o taki rzeczach pisać, ale ostatnio sobie poskładałem ZXUno i MiSTer'a (repliki sprzętu na FPGA) i zabawa jest naprawdę przednia :-)<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=20760">moscow</a> — 15 maja 2020, o 12:53</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2020-05-15T12:42:48+01:00</updated>
<published>2020-05-15T12:42:48+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23125&amp;p=227251#p227251</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23125&amp;p=227251#p227251"/>
<title type="html"><![CDATA[Re: nie mogę odpalić olea Atnela po SPI. pomocy]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23125&amp;p=227251#p227251"><![CDATA[
<div class="quotetitle">Egzorcysta napisał(a):</div><div class="quotecontent"><br />Pokaz mi transmisje z max prędkością na AVR do np wyświetlacza.<br /></div><br />Proszę cię czytaj uważniej co piszę, bo zafixowałeś się na czymś i nie odpuszczasz bez sensu<br /><br />Nigdzie nie pisałem, żeby akurat do wyświetlacza pchać 10MHz ! <br /><br />ostatni raz<br /><br />Jeśli mam możliwość przesyłania danych po SPI z prędkością (chodzi TYLKO o clock a nie o durne odstępy między bajtami co do których się uparłeś jak ...) 1-2 MHz  to mam dużo szybsze odświeżanie ekranów niż po I2C z clockiem 600 kHz mówi ci to coś ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 15 maja 2020, o 12:42</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2020-05-15T11:35:08+01:00</updated>
<published>2020-05-15T11:35:08+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23125&amp;p=227248#p227248</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23125&amp;p=227248#p227248"/>
<title type="html"><![CDATA[Re: nie mogę odpalić olea Atnela po SPI. pomocy]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23125&amp;p=227248#p227248"><![CDATA[
<div class="quotetitle">Egzorcysta napisał(a):</div><div class="quotecontent"><br />Jestem zaskoczony, bo mam I2C na kilku metrach. Owszem, użyłem ekspanderów bo niby po co sa produkowane P82B96 i P82B715?<br /></div><br />Dziwnie się z tobą dyskutuje - tu mówimy o standardowym I2C i SPI a ty mi tu o expanderach i wydłużaniu magistrali ... a ja o prędkości przesyłania danych do sterownika wyświetlacza ... a ty dodatkowo jakieś bzdury o menu i andruino .... <br /><br />Zrozum, taki SSD1306 po SPI potrafi łykać dane z clockiem (nie pamietam teraz dokładnie ale ok 1-2MHz) a po I2C tylko ok 600KHz<br /><br />rozumiesz to czy nie ... ?<br /><br />I nie pisz mi tu bajek o tym, że przy 10MHz clocka dla SPI będzie jakaś wolna transmisja bo czas pomiędzy bajtami będzie mniejszy niż między bitami ... no sorki ale ręce opadają.<br /><br />Krótko mówiąc SPI daje większe możliwości gdy chcesz robić zaawansowane animacje do czegoś na LCD. Jak nie chcesz - to obojętnie co użyjesz czy SPI czy I2C. Bez animacji ja zawsze wybrałbym I2C bo mniej linii i to tyle<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 15 maja 2020, o 11:35</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[fofex]]></name></author>
<updated>2020-05-15T11:11:39+01:00</updated>
<published>2020-05-15T11:11:39+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23125&amp;p=227247#p227247</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23125&amp;p=227247#p227247"/>
<title type="html"><![CDATA[Re: nie mogę odpalić olea Atnela po SPI. pomocy]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23125&amp;p=227247#p227247"><![CDATA[
<div class="quotetitle">Egzorcysta napisał(a):</div><div class="quotecontent"><br />Realnie można uzyskać ok 6Mb/s o ile jest to funkcja blokująca, bez użycia przerwań. Po użyciu przerwań jest tylko gorzej.<br />Praw fizyki nie da się nagąć, przy 10Mb/s, transmisja bajtu zajmuje 20 cykli zegara. Ile rozkazów można wykonać w tym czasie? Jakieś 12-15. Może to starczy na wejście w przerwanie ale nie jego wykonanie i wyjście z przerwania.<br /></div><br />Przerwanie jest oczywiście bez sensu, ale w pollingu, być możę (bardzo ciasno!) dało by się wyciągnąć te 10MHz. Z tym, że być może, konieczna by była wstawka asemblerowa, by zapewnić odpowiednią sekwencję instrukcji.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=21072">fofex</a> — 15 maja 2020, o 11:11</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[moscow]]></name></author>
<updated>2020-05-15T11:08:07+01:00</updated>
<published>2020-05-15T11:08:07+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23125&amp;p=227246#p227246</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23125&amp;p=227246#p227246"/>
<title type="html"><![CDATA[Re: nie mogę odpalić olea Atnela po SPI. pomocy]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23125&amp;p=227246#p227246"><![CDATA[
<div class="quotetitle">Egzorcysta napisał(a):</div><div class="quotecontent"><br /><div class="quotetitle"><b>Quote:</b></div><div class="quotecontent">[...]<br /><strong><span style="color: #808000">------------------------ [ Dodano po: 2 minutach ]</span></strong><br /><br /><div class="quotetitle">moscow napisał(a):</div><div class="quotecontent">PS. A u mnie działa na AVR z kolorowym OLEDem ;-)<br /></div><br />W czasie transmisji do wyświetlacza CPU może realizować inne zadania w pętli głównej?<br />Intensywane używanie przerwań nie spowalnia komunikacji do wyświetlacza?<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 5 minutach ]</span></strong><br /><br />Jak widzę &quot;szybkość&quot; wyświetlania menu, to jakbym widział program na Arduino.</div></div><br /><br />Pytanie co to znaczy &quot;w czasie transmisji&quot; i co to znaczy &quot;inne zadania&quot;.<br />Generalnie akurat moje podejście polegało na wysyłaniu całej potrzebnej komunikacji SPI w &quot;jednym bloku&quot; w pętli głównej. Jeśli coś działało &quot;w tle&quot; to były to przerwania timerów. A kiedy ta komunikacja się kończyła, to procek przechodził do innych zadań.<br />Co do &quot;szybkości&quot; to przy moim podejściu zależy trochę od tego co dokładnie na wyświetlaczu jest robione, ale przy zastosowaniach typu MK Menu, czy programach przykładowych biblioteki MK GLCD uzyskiwałem niewiele gorsze wyniki niż przy podobnej wielkości wyświetlaczach monochromatycznych z użyciem standardowej biblioteki MK GLCD .<br />Niektóre przykłady nie poszły na Atmega32 (okazało się, że trochę za mało pamięci i czasem heap się nadpisywał), ale już m644 dał radę jak widać na załączonym obrazku.<br />Program nie jest na Arduino - tylko native C dla AVR :-)<br /><div class="quotetitle">Egzorcysta napisał(a):</div><div class="quotecontent"><br />Temat kolorowych wyświetlaczy był poruszany na Forbocie. Był tam przykład na AVR i na STM32 z podejściem ARM-owym. Szybkość działania żałosna.<br /></div><br />Oczywiście jak się wysyła dane bez żadnej optymalizacji, to jest naprawdę &quot;słabo&quot;... ale jak się trochę pomyśli i zrobi parę &quot;sztuczek&quot; rodem ze sceny ośmiobitowców lat 80-tych, to zaczyna to nawet fajnie działać :-)<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=20760">moscow</a> — 15 maja 2020, o 11:08</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[moscow]]></name></author>
<updated>2020-05-15T10:22:46+01:00</updated>
<published>2020-05-15T10:22:46+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23125&amp;p=227240#p227240</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23125&amp;p=227240#p227240"/>
<title type="html"><![CDATA[Re: nie mogę odpalić olea Atnela po SPI. pomocy]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23125&amp;p=227240#p227240"><![CDATA[
Też miałem podobny problem, ale próbując zaadaptować bibliotekę MK_GLCD do kolorowego wyświetlacza SSD1331. Nie wiem, czy w Twoim przypadku to też będzie rozwiązanie, ale być do niego doprowadzi.<br /><br />W plikach HARDWARE/mk_TYP_WYSWIETLACZA.c<br />Na poziomie funkcji mk_XXXXX_cmd( uint8_t cmd) <br />jest mniej więcej taka konstrukcja<br /><br />[syntax=c]&#91;...&#93;<br />CS_LO;<br />spi_xmit_byte( cmd );<br />CS_HI; // &lt;-----<br />&#91;...&#93;[/syntax]<br /><br />Żeby ten wyświetlacz mi zadziałał zakomentowałem wywołanie CS_HI;<br />sygnał CHIP_SELECT podnoszę dopiero po wysłaniu całego bloku - czyli niestety trzeba to umieścić w każdej funkcji gdzieś na końcu która wykorzystuje wyżej wymienione mk_XXXXX_cmd<br />Jeśłi jest to jedyne urządzenie SPI podłączone do procka, to działo mi to nawet jak CS był zawsze na LO<br /><br />Mimo tego, że w teorii zgodnie z notami wszystko powinno działać kiedy linia CS zmienia się po każdym wysłaniu bajta, to po prostu to nie działało.<br /><br />A jak do tego doszedłem? Do każdego wyświetlacza dołączone jest oprogramowanie referencyjne dla różnych procków - zwykle również dla Arduino. Po prostu ściągnąłem sobie tą referencyjną bibliotekę i na jakiejś płytce arduino odpaliłem przykładowy program. Podłączyłem analizator stanów logicznych i patrzyłem, czym różnią się sygnały w moim programie oraz w programie referencyjnym.<br />W końcu doszedłem do tego, że akurat w przypadku mojego wyświetlacza jedyna różnica to były latające w górę i w dół sygnały CHIP_SELECT i zmiana tego zachowania okazało się rozwiązaniem.<br /><br /><br /><div class="quotetitle">Egzorcysta napisał(a):</div><div class="quotecontent"><br />[...]<br />SPI ma sens w kolorowych wyświetlaczach ale to już raczej nie na możliwości AVR.<br /></div><br />PS. A u mnie działa na AVR z kolorowym OLEDem ;-)<br /><br /><div style="width: 583px; height: 471px; margin: 0 auto; padding-left: 26px; padding-top: 48px; background: url('https://www.atnel.pl/download/atnel_tv.png') no-repeat;"> <strong>iframe</strong> </div><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=20760">moscow</a> — 15 maja 2020, o 10:22</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2020-05-15T09:57:13+01:00</updated>
<published>2020-05-15T09:57:13+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23125&amp;p=227236#p227236</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23125&amp;p=227236#p227236"/>
<title type="html"><![CDATA[Re: nie mogę odpalić olea Atnela po SPI. pomocy]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23125&amp;p=227236#p227236"><![CDATA[
<div class="quotetitle">Egzorcysta napisał(a):</div><div class="quotecontent"><br />SPI będzie szybsze ale może być problem z dłuższymi połączeniami. I2C bez problemu działa na przerwaniach,<br /></div><br />Trochę tu kolega miesza pojęcia ale już wyjaśniam - bo co mają wspólnego dłuższe połączenia SPI z działaniem I2C na przerwaniach ?<br /><br /><div class="quotetitle">Egzorcysta napisał(a):</div><div class="quotecontent"><br />SPI przy małych prędkościach też ale wtedy po co SPI? Sama straty - więcej drutów.<br /></div><br />To już jest (bez urazy) herezja<br /><br />a teraz wyjaśnienie:<br /><br />Zarówno SPI jak i I2C to są magistrale przeznaczone TYLKO I WYŁĄCZNIE do pracy wewnątrz urządzenia, czyli w ramach najlepiej jednej płyty PCB ew kilku PCB ale połączonych krótkimi przewodami czy w slotach - i nadal TYLKO wewnątrz urządzenia. I nie ma że boli - żadna z tych magistral nie służy do komunikacji pomiędzy dwoma różnymi urządzeniami na odległości np 1m - to już dużo za dużo. <br /><br />Poza tym jak można pisać, że SPI nie działa na przerwaniach <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> Owszem można w ogóle bez przerwań i to może być często też szybsze niż I2C na przerwaniach ale pal pies. SPI na przerwaniach przy clocku F_CPU/2 czyli maksymalnym dla AVR, możesz przy taktowaniu procka np 20MHz mieć dla SPI clock = 10 MHz <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> no i teraz powiedz mi ile maksymalnie możesz mieć dla I2C.<br /><br />Ale teraz uwaga - bo ty pisząc o SPI na przerwaniach myślisz o jakimś dziwnym zaawansowanym protokole ? Po co ? bez żadnych przerwań ! tylko SPI w oparciu o moduł sprzętowy SPI a nie metodę programową - i to puszczasz na clocku 10MHz ! Nie wiem wprawdzie czy SSD1306 zdzierży  - ale 1 MHz napewno a i więcej.<br /><br /><div class="quotetitle">Egzorcysta napisał(a):</div><div class="quotecontent"><br />program główny działa wolno w czasie transmisji po SPI - para idzie w gwizdek.<br /></div><br />Tutaj to już kolega niestety popłynął albo w jakiś przedziwny sposób pisze oprogramowanie z udziałem SPI i dlatego może ja nie rozumiem kompletnie tych słów<br />Owszem niektóre wyświetlacze OLED właściwie kontrolery jak SSD1306 mogą śmigać z I2C na prędkości ok 600 kHz !!! ale zwykle nie więcej. <br /><br />A zatem jak ma się 600 kHz clock I2C do 10 MHz clock dla SPI ?<br /><br /><div class="quotetitle">Egzorcysta napisał(a):</div><div class="quotecontent"><br />SPI ma sens w kolorowych wyświetlaczach ale to już raczej nie na możliwości AVR.<br /></div><br /><br />Obejrzyj sobie moje filmiki z OLEDowymi wyświetlaczami i animacjami - to zrozumiesz w czym rzecz<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 15 maja 2020, o 09:57</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2020-05-14T18:58:45+01:00</updated>
<published>2020-05-14T18:58:45+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23125&amp;p=227199#p227199</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23125&amp;p=227199#p227199"/>
<title type="html"><![CDATA[Re: nie mogę odpalić olea Atnela po SPI. pomocy]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23125&amp;p=227199#p227199"><![CDATA[
<div class="quotetitle">Egzorcysta napisał(a):</div><div class="quotecontent"><br />W przypadku tych wyświetlaczy SPI ma same wady.<br /></div><br />Sorki ale kolega nie wie co pisze niestety. PODSTAWOWA zaleta gdy jest SPI - to dużo większa szybkość obsługi wyświetlacza a co za tym idzie lepsze i szybsze animacje szczególnie na wyświetlaczach typu OLED.<br /><br />Wada SPI - więcej przewodów ...<br /><br />---------------<br /><br />Zaleta I2C - tylko dwa przewody SDA i SCL plus dwa na zasilanie, jeśli chodzi o animacje nieco wolniej ale bez przesady nie jest aż tak źle <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> i kto tam zaraz powymyśla tak szybkie animacje. Poza tym dla np wyświetlaczy COG nawet nie ma co myśleć o szybkich animacjach ze względu na bardzo kocie czasy odświeżania.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 14 maja 2020, o 18:58</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[czerwan]]></name></author>
<updated>2020-05-14T16:16:01+01:00</updated>
<published>2020-05-14T16:16:01+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23125&amp;p=227193#p227193</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23125&amp;p=227193#p227193"/>
<title type="html"><![CDATA[nie mogę odpalić olea Atnela po SPI. pomocy]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23125&amp;p=227193#p227193"><![CDATA[
witam<br />przelutowałem oleda na konfigurację SPI.<br />na oledzie szum. testowałem na ATB 1.05a 16MHz dzielnik 16 w konfiguracji SPI<br />oled działa prawidłowo na I2C.<br />Prawidłowo działa też aplikacja na COG-u po SPI.<br />nie mogę zaświecić oleda a SPI z Atnela<br />konfiguracja na SPI od cog-a rożni sie wyłącznie :<br />1. zmiana rodzaju wyświetlacza na oled 1306 <br />2. wyłączeniu podświetlania<br /><br />miał ktoś taki problem?<br />kompiluje prawidłowo. szum na ekranie<br /><br /><a href="https://obrazkiforum.atnel.pl/20591/525c7ccb363f70bf0eb5ab7c53e0f7c5.jpg"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/20591/525c7ccb363f70bf0eb5ab7c53e0f7c5.jpg" alt="Obrazek" /></a><br /><br /><br />mk_spi.h<br /><br />#ifndef MK_SPI_MK_SPI_H_<br />#define MK_SPI_MK_SPI_H_<br /><br />//********************************************** SPI CONFIG ******************<br />#define USE_SOFT_SPI 0// 1-tryb Software SPI, 0-tryb Hardware SPI<br /><br />#define SEND_ONLY0// 1-jeśli mają być tylko wysyłane dane, linia MISO nie używana (tylko dla trybu MASTER)<br /><br />/* PINY dla SPI, w przypadku SOFT SPI mogą być dowolne na dowolnym porcie! */<br />#define aSS           PB4                     // SS (CS Chip Select)<br />#define aMOSI    PB5                     // MOSI pin<br />#define aMISO    PB6                     // MISO pin<br />#define aSCK     PB7                     // SCK pin<br /><br /><br />#define MOSI_DIRDDRB// jeśli używasz hardware SPI<br />#define MOSI_PORTPORTB// wystarczy skonfigurować tylko te dwie linie<br /><br />//------------------------------- część konfiguracji tylko na potrzeby soft spi ---<br />#define MISO_DIRDDRB<br />#define MISO_PORTPORTB<br />#define MISO_PINPINB<br /><br />#define SCK_DIRDDRB<br />#define SCK_PORTPORTB<br />//-------------------------------- koniec ------------------------<br /><br />#define SS_DIRDDRB<br />#define SS_PORTPORTB<br /><br /><br />/* Sck Speed options<br /> * SCK_FOSC_DIV_4(default)<br /> * SCK_FOSC_DIV_16<br /> * SCK_FOSC_DIV_64<br /> * SCK_FOSC_DIV_128<br /> *<br /> * SCK_FOSC_DIV_2<br /> * SCK_FOSC_DIV_8<br /> * SCK_FOSC_DIV_32<br /> */<br />#define SCK_SPEEDSCK_FOSC_DIV_16// taktowanie SPI<br /><br />#defineSPI_DATA_ORDERMSB_FIRST// MSB_FIRST (default), LSB_FIRST<br />#define SCK_POLARITY 0// 0-Low when idle (default), 1-High when idle<br />#define SCK_PHASE0// 0-Data Sampled on First Edge (default), 1-Data Sampled on Second Edge<br /><br />#define MASTER_SPI_DELAY_US0<br /><br />//----------------------------------- SPI CONFIG as SLAVE only in hardware mode -------------------<br /><br />#define USE_SLAVE_MODE_HW_SPI0<br /><br />//********************************************** SPI CONFIG END ***********************************<br /><br /><br /><br /><br /><br /><br /><br /><br />//-----------------------------------------------------------------------------<br /><br />typedef uint8_t (*THWSPI_CALLBACK_ISR)( uint8_t byte );<br /><br /><br />#ifdef SPCR0<br />#define SPCRSPCR0<br />#define SPSRSPSR0<br />#define SPIF    SPIF0<br />#define SPDRSPDR0<br />#define SPESPE0<br />#define MSTRMSTR0<br />#define CPOLCPOL0<br />#define DORDDORD0<br />#define CPHACPHA0<br />#endif<br /><br /><br /><br /><br />#define SPRxMASK0x03<br />#define SPI2XMASK0x01<br /><br />#define MSB_FIRST0x00<br />#define LSB_FIRST0x01<br /><br />#define SCK_FOSC_DIV_40x00<br />#define SCK_FOSC_DIV_160x01<br />#define SCK_FOSC_DIV_640x02<br />#define SCK_FOSC_DIV_1280x03<br /><br />#define SCK_FOSC_DIV_20x10<br />#define SCK_FOSC_DIV_80x11<br />#define SCK_FOSC_DIV_320x12<br /><br />#define SPI_DIR MOSI_DIR<br />#define SPI_PORT     MOSI_PORT<br />#define SPI_PIN      MISO_PIN<br /><br />#define SS           (1&lt;&lt;aSS)                     // SS (CS Chip Select)<br />#define MOSI    (1&lt;&lt;aMOSI)                   // MOSI pin<br />#define MISO    (1&lt;&lt;aMISO)                   // MISO pin<br />#define SCK     (1&lt;&lt;aSCK)                    // SCK pin<br /><br /><br />#define SS_LOSS_PORT &amp;= ~SS<br />#define SS_HISS_PORT |= SS<br /><br />#define SCK_LOSCK_PORT &amp;= ~SCK<br />#define SCK_HISCK_PORT |= SCK<br /><br />#define MOSI_LOMOSI_PORT &amp;= ~MOSI<br />#define MOSI_HIMOSI_PORT |= MOSI<br /><br />#define MISO_LOMISO_PORT &amp;= ~MISO<br />#define MISO_HIMISO_PORT |= MISO<br /><br /><br /><br /><br /><br /><br />//-----------------------------------------------------------------------------<br /><br />/* inicjalizacja SPI */<br />void spi_init( void );<br /><br />#if USE_SLAVE_MODE_HW_SPI == 1 &amp;&amp; USE_SOFT_SPI == 0<br />void register_spi_hw_callback_isr( THWSPI_CALLBACK_ISR callback );<br />#endif<br /><br /><br />#if SEND_ONLY == 0<br />/* nadawanie i odbiór jednego bajtu */<br />uint8_t spi_xmit_byte( uint8_t byte );<br />#else<br />/* nadawanie jednego bajtu */<br />void spi_xmit_byte( uint8_t byte );<br />#endif<br /><br />/* nadawanie słowa 16-bitowego */<br />void spi_send_word( uint16_t word );<br /><br />/* nadawanie danych z bufora */<br />void spi_send_buf( void * buf_out, uint8_t size );<br /><br />/* nadawanie i odbieranie danych do i z - bufora. Bufor może być ten sam, nastąpi wymiana danych */<br />void spi_xmit_buf( void * buf_in, void * buf_out, uint8_t size );<br /><br />/* wysłanie stringa */<br />void spi_master_puts( char * str );<br /><br />/* odebranie stringa (zakończonego CR, albo LF albo NULL */<br />char * spi_master_gets( char * buf );<br /><br />#if USE_SOFT_SPI == 1<br />uint16_t spi_xmit_n_bits( uint8_t bits_cnt, uint16_t bits_word );<br />#endif<br /><br />#endif /* MK_SPI_MK_SPI_H_ */<br /><br /><br /><br /><br />mk_glcd_config.h<br /><br />#ifndef MK_GLCD_CONFIG_H_<br />#define MK_GLCD_CONFIG_H_<br /><br />//^^^^^^^^^^^^^^^^^^^^^^^ KONFIGURACJA BIBLIOTEKI ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^<br /><br />//..... wybór chipsetu - rodzaju wyświetlacza - odkomentuj właściwą linię ............................<br />#define USE_SSD1306// OLED<br />//#define USE_SSD1309// OLED<br />//#define USE_COG_ST7565R// COG<br />//#define USE_NOKIA_PCD8544// NOKIA<br />//#define USE_UC1701// LCX<br />//#define USE_ST7920// DIGOLE<br /><br /><br />//..... wybór rozdzielczości - wyświetlacza - odkomentuj właściwą linię ...............................<br />#define GLCD_RES_128_64// OLED / COG / LCX / DIGOLE<br />//#define GLCD_RES_128_32// OLED<br />//#define GLCD_RES_84_48// NOKIA<br /><br />//..... ręczne ustawienie rozdzielczości - jeśli wiesz co robisz ......................................<br />//..............w przeciwnym wypadku użyj ustawień predefiniowanych powyżej GLCD_RES_xx_xx ............<br />//..... aby wymusić ręczne ustawienie rozdzielczości - zakomentuj wszystkie predefiniwane .............<br />#define GLCD_WIDTH                  128<br />#define GLCD_HEIGHT                 64<br /><br /><br /><br />//........ ustawienia pinów sterujących ...............................................................<br /><br />#define USE_RST_PIN1// jeśli pin RST sterowany z uC = 1<br /><br />#define USE_BACKLIGHT0// jeśli podświetlenie sterowane z uC = 1<br />#define BACKLIGHT_ACTIVE_HIGH0// 0-jeśli podświetlenie załączane stanem niskim, 1-jeśli załączane stanem wysokim<br /><br />#define DC (1&lt;&lt;2)// &lt;---- A0/DC/RS<br />#define DC_PORT  PORTD<br />#define DC_DDRDDRD<br /><br />#if USE_BACKLIGHT == 1<br />#define BACKLIGHT_PORT  PORTD<br />#define BACKLIGHT_DDRDDRD<br />#define BACKLIGHT(1&lt;&lt;7)//   &lt;---- podświetlenie (BackLight)<br />#endif<br /><br /><br />#if USE_RST_PIN == 1<br />#define RST  (1&lt;&lt;7)// &lt;---- RST<br />#define RST_PORT  PORTC<br />#define RST_DDRDDRC<br />#endif<br /><br /><br /><br /><br />//..... wybór magistrali I2C lub SPI dla OLED ................................................<br />#define USE_I2C0// 0-use SPI, 1-use I2C<br /><br /><br />//................ Ustawienia I2C ............................................................<br />#define GLCD_I2C_BITRATE400// kHz<br /><br />//..... wybór adresu wyświetlacza na magistrali I2C ..........................................<br />#define GLCD_I2C_ADDRESS0x78// 0x78, 0x7A (dla chipsetu SSD1306)<br /><br /><br /><br /><br /><br />//..... wyświetlanie do celów testowych przy uruchomieniu ekranu DEMO po inicjalizaji ........<br />#define SHOW_DEMO_SCREEN1<br /><br /><br /><br />#defineFX_MAX_IDX9<br /><br /><br /><br /><br />//^^^^^^^^^^^^^^^^^^^^^^^ KONFIGURACJA - KONIEC ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^<br /><br /><br /><br /><br />#if USE_BACKLIGHT == 1<br />#if BACKLIGHT_ACTIVE_HIGH == 1<br />#define BACKLIGHT_OFFBACKLIGHT_PORT &amp;= ~BACKLIGHT<br />#define BACKLIGHT_ONBACKLIGHT_PORT |= BACKLIGHT<br />#else<br />#define BACKLIGHT_ONBACKLIGHT_PORT &amp;= ~BACKLIGHT<br />#define BACKLIGHT_OFFBACKLIGHT_PORT |= BACKLIGHT<br />#endif<br /><br />#define BACKLIGHT_TOGBACKLIGHT_PORT ^= BACKLIGHT<br />#endif<br /><br />#if USE_RST_PIN == 1<br />#define RST_LO RST_PORT &amp;= ~RST<br />#define RST_HI RST_PORT |= RST<br />#endif<br /><br />#define DC_LO DC_PORT &amp;= ~DC<br />#define DC_HI DC_PORT |= DC<br /><br />#define CS_LO SS_LO<br />#define CS_HI SS_HI<br /><br /><br />#ifdef GLCD_RES_128_64<br />#undef GLCD_WIDTH<br />#undef GLCD_HEIGHT<br />#define GLCD_WIDTH                  128<br />#define GLCD_HEIGHT                 64<br />#endif<br /><br />#ifdef GLCD_RES_128_32<br />#undef GLCD_WIDTH<br />#undef GLCD_HEIGHT<br />#define GLCD_WIDTH                  128<br />#define GLCD_HEIGHT                 32<br />#endif<br /><br />#ifdef GLCD_RES_84_48<br />#undef GLCD_WIDTH<br />#undef GLCD_HEIGHT<br />#define GLCD_WIDTH                  84<br />#define GLCD_HEIGHT                 48<br />#endif<br /><br /><br /><br />#define GLCD_BUF_SIZE ( GLCD_WIDTH * GLCD_HEIGHT / 8 )<br /><br />#endif /* MK_GLCD_CONFIG_H_ */<br /><br /><br />main.c<br /><br /><br />#include &lt;avr/io.h&gt;<br />#include &lt;avr/pgmspace.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;avr/eeprom.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;stdlib.h&gt;<br />#include &lt;stdio.h&gt;<br /><br /><br />/*<br /> * UWAGA! w tym przykładzie użyto dużych fontów R2L !!!!!!!!!!!!!!!!!!!!!!!!!!!<br /> *<br /> * w związku z tym zmienione zostało ustawienie kompilacji:<br /> *<br /> * #define USE_TWO_FONTS_BITORIENT1<br /> *<br /> * na JEDEN - w pliku mk_glcd_text.h<br /> *<br /> * zabiera to nieco więcej pamięci FLASH ale umożliwia obsługę fontów w dwóch orientacjach<br /> * bitów, zarówno domyślne T2B jak też R2L<br /> *<br /> * Fonty R2L pozwala generować Pixel Factory w swojej podstawowej funkcjonalności na podstawie<br /> * dowolnych fontów zawartych w MS Windows. Trzeba do tego używać najnowszej wersji<br /> * Pixel Factory (minimum) 2.0.0.7 lub wyższej<br /> *<br /> */<br /><br /><br />#include &quot;MK_GLCD/mk_glcd_base.h&quot;<br />#include &quot;bitmapy.h&quot;<br /><br /><br />void mkDelay( uint16_t ms ) {<br />while( --ms ) _delay_ms(1);<br />}<br /><br /><br /><br /><br /><br /><br />int main( void ) {<br /><br /><br />glcd_init();<br /><br />glcd_backlight( 0 );// dla OLED nie istotne - i tak nie działa - może nie być w ogóle tej funkcji dla OLEDów<br />glcd_flip_vertical( 0,0 );// sprawdź jak działa z różnymi parametrami<br />glcd_inverse( 0 );// sprawdź z argumentem = 1<br /><br />/* &lt;------ od wersji 1.1 domyślny font ładowany jest przy inicjalizacji, więc nie trzeba pamiętać o ręcznym ładowaniu -----&gt; */<br />//setCurrentFont( &amp;DefaultFont5x8 );<br /><br /><br /><br />#ifdef GLCD_RES_84_48<br />glcd_fast_drawBitmap( logoAtnelNokia );<br />#endif<br />#ifdef GLCD_RES_128_64<br />glcd_fast_drawBitmap( logoAtnel );<br />#endif<br />#ifdef GLCD_RES_128_32<br />glcd_fast_drawBitmap( oled128x32logo );<br />#endif<br />glcd_display();<br />mkDelay(2500);<br />glcd_cls();<br /><br />setCurrentFont( &amp;DefaultFont5x8 );<br />text_align = _center;<br />uint8_t alw = (GLCD_HEIGHT/2) - (currentFont.heightPixels/2);<br /><br />#ifdef GLCD_RES_128_32<br />alw = 20;<br />setCurrentFont( &amp;FixedSys5x12 );<br />#endif<br /><br />glcd_puts_P( GLCD_WIDTH-1, alw, PSTR(&quot;MK-GLCD Icons&quot;), 1 );<br /><br /><br /><br />#ifndef GLCD_RES_84_48<br />uint8_t a=1;<br />glcd_drawBitmap( 0, 0, network, 1 );<br />glcd_drawBitmap( 16+1+a++, 0, tools, 1 );<br />glcd_drawBitmap( 32+2+a++, 0, notepad, 1 );<br />glcd_drawBitmap( 48+3+a++, 0, speaker, 1 );<br />glcd_drawBitmap( 64+4+a++, 0, key, 1 );<br />glcd_drawBitmap( 80+5+a++, 0, save, 1 );<br />glcd_drawBitmap( 96+6+a++, 0, pwr, 1 );<br />#else<br />glcd_drawBitmap( 0, 0, network, 1 );<br />glcd_drawBitmap( 16+1, 0, tools, 1 );<br />glcd_drawBitmap( 32+2, 0, notepad, 1 );<br />glcd_drawBitmap( 48+3, 0, speaker, 1 );<br />glcd_drawBitmap( 64+4, 0, key, 1 );<br />glcd_drawBitmap( 80+5, 0, save, 1 );<br />glcd_drawBitmap( 96+6, 0, pwr, 1 );<br />#endif<br /><br /><br /><br />#ifdef GLCD_RES_128_64<br />a=1;<br />glcd_drawBitmap( 0, GLCD_HEIGHT-16, wifi, 1 );<br />glcd_drawBitmap( 16+1+a++, GLCD_HEIGHT-16, save, 1 );<br />glcd_drawBitmap( 32+2+a++, GLCD_HEIGHT-16, pwr, 1 );<br />glcd_drawBitmap( 48+3+a++, GLCD_HEIGHT-16, gear, 1 );<br />glcd_drawBitmap( 64+4+a++, GLCD_HEIGHT-16, signal, 1 );<br />glcd_drawBitmap( 80+5+a++, GLCD_HEIGHT-16, tools, 1 );<br />glcd_drawBitmap( 96+6+a++, GLCD_HEIGHT-16, notepad, 1 );<br />#endif<br /><br />#ifdef GLCD_RES_84_48<br />glcd_drawBitmap( 0, GLCD_HEIGHT-16, wifi, 1 );<br />glcd_drawBitmap( 16+1, GLCD_HEIGHT-16, save, 1 );<br />glcd_drawBitmap( 32+2, GLCD_HEIGHT-16, pwr, 1 );<br />glcd_drawBitmap( 48+3, GLCD_HEIGHT-16, gear, 1 );<br />glcd_drawBitmap( 64+4, GLCD_HEIGHT-16, signal, 1 );<br />glcd_drawBitmap( 80+5, GLCD_HEIGHT-16, tools, 1 );<br />glcd_drawBitmap( 96+6, GLCD_HEIGHT-16, notepad, 1 );<br />#endif<br /><br />glcd_display();<br /><br />mkDelay(5000);<br />glcd_cls();<br /><br /><br />setCurrentFont( &amp;DefaultFont5x8 );<br />text_align = _right;<br />glcd_puts_P( GLCD_WIDTH-1, 0, PSTR(&quot;zdaanie na cały ekran&quot;), 2 );<br /><br />setCurrentFont( &amp;FixedSys5x12 );<br /><br />glcd_puts_P( GLCD_WIDTH-1, 10, PSTR(&quot;czerwan&quot;), 2 );<br /><br />#ifndef GLCD_RES_128_32<br />text_align = _center;<br />#ifdef GLCD_RES_84_48<br />setCurrentFont( &amp;RockwellCondensed14x18 );<br />#else<br />setCurrentFont( &amp;mkFontL2R );<br />#endif<br />glcd_puts_P( GLCD_WIDTH-1, 26, PSTR(&quot;06:35&quot;), 2 );<br /><br />szachownica = 6;<br />glcd_drawRect( 2,23, GLCD_WIDTH-2, currentFont.heightPixels+6, 1 );<br />szachownica = 2;<br />glcd_drawRect( 3,24, GLCD_WIDTH-4, currentFont.heightPixels+4, 1 );<br /><br />glcd_drawBitmap( 1, 1, speaker, 1 );<br /><br />glcd_display();<br />mkDelay(1000);<br /><br />#else<br />setCurrentFont( &amp;FixedSys5x12 );<br />text_align = _left;<br />glcd_puts_P( 22, 16, PSTR(&quot;[06:35]&quot;), 2 );<br />#endif<br /><br /><br /><br />setCurrentFont( &amp;FixedSys5x12 );<br />text_align = _right;<br />glcd_puts_P( GLCD_WIDTH-1, 10, PSTR(&quot;czerwan&quot;), 2 );<br /><br /><br />while(1) {<br />glcd_puts_P( GLCD_WIDTH-1, 10, PSTR(&quot;BUDZIK!&quot;), 2 );<br />glcd_drawBitmap( 1, 1, speaker, 2 );<br />glcd_display();<br />mkDelay(1000);<br />glcd_puts_P( GLCD_WIDTH-1, 10, PSTR(&quot;BUDZIK!&quot;), 2 );<br />glcd_drawBitmap( 1, 1, speaker, 2 );<br />glcd_display();<br />mkDelay(500);<br />}<br /><br /><br />}<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=20591">czerwan</a> — 14 maja 2020, o 16:16</p><hr />
]]></content>
</entry>
</feed>