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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2017-01-01T18:04:06+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=8&amp;t=15206&amp;mode</id>
<entry>
<author><name><![CDATA[marekzal22]]></name></author>
<updated>2017-01-01T18:04:06+01:00</updated>
<published>2017-01-01T18:04:06+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15206&amp;p=178761#p178761</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15206&amp;p=178761#p178761"/>
<title type="html"><![CDATA[Re: Problem z wyświetlaczem OLED]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15206&amp;p=178761#p178761"><![CDATA[
<div class="quotetitle">piotr8605 napisał(a):</div><div class="quotecontent"><br />Błąd był w zakomentowanej linijce w pliku ssd1306.c odpowiedzialnej za odświeżanie.<br />Było:<br />[syntax=c]//mk_ssd1306_cmd(refresh);[/syntax]<br />Powinno być:<br />[syntax=c]mk_ssd1306_cmd(refresh);[/syntax]<br /><br />Pozdrawiam  <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /></div><br /><br />Witam <br />Kolego pod arduino nano,uno jak ma wyglądać kod ?<br />Bo też mam problem z tym wyświetlaczem.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=15993">marekzal22</a> — 1 sty 2017, o 18:04</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[piotr8605]]></name></author>
<updated>2016-06-14T21:10:46+01:00</updated>
<published>2016-06-14T21:10:46+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15206&amp;p=162302#p162302</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15206&amp;p=162302#p162302"/>
<title type="html"><![CDATA[Re: Problem z wyświetlaczem OLED]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15206&amp;p=162302#p162302"><![CDATA[
Błąd był w zakomentowanej linijce w pliku ssd1306.c odpowiedzialnej za odświeżanie.<br />Było:<br />[syntax=c]//mk_ssd1306_cmd(refresh);[/syntax]<br />Powinno być:<br />[syntax=c]mk_ssd1306_cmd(refresh);[/syntax]<br /><br />Pozdrawiam  <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=535">piotr8605</a> — 14 cze 2016, o 21:10</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[piotr8605]]></name></author>
<updated>2016-06-14T06:56:58+01:00</updated>
<published>2016-06-14T06:56:58+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15206&amp;p=162204#p162204</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15206&amp;p=162204#p162204"/>
<title type="html"><![CDATA[Re: Problem z wyświetlaczem OLED]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15206&amp;p=162204#p162204"><![CDATA[
Witam,<br />kolego <strong>michal1990</strong> - mam identyczny wyświetlacz jak Twój na zdjęciach i po oglądnięciu dwóch pierwszych poradników działa bez problemu. <br />U mnie ten wyświetlacz działa prawidłowo bez zamiany pinów GND i VCC, (u kolegi <strong>skalarro</strong> piny VCC i GND musiały być zamienione), <br />czyli od lewej GND,VCC,SCL,SDA,RST,D/C.<br />Wyświetlacz podłączony do zestawu ATB 1.04.<br /><br />Jedynie nie widzę reakcji wyświetlacza na odświeżanie, <br />obojętnie jak ustawię parametr REFRESH, na wyświetlaczu widać lekkie migotanie, także przy parametrze REFRESH_MAX.<br />Pewnie gdzieś zrobiłem babola, jednak nie widzę tego błędu...<br /><br />Układ testowałem na zewnętrznym kwarcu 11MHz i wewnętrznym oscylatorze 8MHz.<br /><br />Poniżej wrzucam biblioteki:<br />ssd1306.h<br />[syntax=c]/*<br /> * ssd1306.h<br /> *<br /> *  Created on: 13 cze 2016<br /> *      Author: MSI<br /> */<br /><br />#ifndef OLED_SSD1306_H_<br />#define OLED_SSD1306_H_<br /><br />//definicje sta³ych preprocesora<br /><br /><br />// rozdzielczosc LCD/OLED<br /><br />#define SSD1306_128_64<br /><br />//#define SSD1306_128_32<br /><br /><br />#define USE_CS   0<br />#define USE_RST  1<br /><br />#define SCK (1&lt;&lt;7)       // &lt;---SCL<br />#define MOSI (1&lt;&lt;6)       // &lt;---SDA<br />#define RST (1&lt;&lt;5)       // &lt;---RST<br />#define DC (1&lt;&lt;4)       // &lt;---D/C<br /><br />#define CS (1&lt;&lt;5)       // &lt;---CS<br /><br /><br />#define SCK_PORT     PORTC<br />#define SCK_DDR      DDRC<br /><br />#define MOSI_PORT    PORTC<br />#define MOSI_DDR     DDRC<br /><br />#define RST_PORT     PORTC<br />#define RST_DDR      DDRC<br /><br />#define DC_PORT      PORTC<br />#define DC_DDR       DDRC<br /><br />#define CS_PORT      PORTC<br />#define CS_DDR       DDRC<br /><br /><br /><br />#define RST_LO RST_PORT &amp;= ~RST<br />#define RST_HI RST_PORT |= RST<br /><br />#define CS_LO  CS_PORT &amp;= ~CS<br />#define CS_HI  CS_PORT |= CS<br /><br />#define DC_LO  DC_PORT &amp;= ~DC<br />#define DC_HI  DC_PORT |= DC<br /><br />#define SCK_LO SCK_PORT &amp;= ~SCK<br />#define SCK_HI SCK_PORT |= SCK<br /><br />#define MOSI_LO MOSI_PORT &amp;= ~MOSI<br />#define MOSI_HI MOSI_PORT |= MOSI<br /><br /><br />#define SSD1306_WIDTH 128<br /><br />#if defined SSD1306_128_64<br />#define SSD1306_HEIGHT 64<br />#endif<br /><br />#if defined SSD1306_128_32<br />#define SSD1306_HEIGHT 32<br />#endif<br /><br />#define REFRESH_MIN 0x80<br />#define REFRESH_MID 0xB0<br />#define REFRESH_MAX 0xF0<br /><br />#define SSD1306_SETCONTRAST 0x81<br />#define SSD1306_DISPLAYALLON_RESUME 0xA4<br />#define SSD1306_DISPLAYALLON 0xA5<br />#define SSD1306_NORMALDISPLAY 0xA6<br />#define SSD1306_INVERTDISPLAY 0xA7<br />#define SSD1306_DISPLAYOFF 0xAE<br />#define SSD1306_DISPLAYON 0xAF<br /><br />#define SSD1306_SETDISPLAYOFFSET 0xD3<br />#define SSD1306_SETCOMPINS 0xDA<br /><br />#define SSD1306_SETVCOMDETECT 0xDB<br /><br />#define SSD1306_SETDISPLAYCLOCKDIV 0xD5<br />#define SSD1306_SETPRECHARGE 0xD9<br /><br />#define SSD1306_SETMULTIPLEX 0xA8<br /><br />#define SSD1306_SETLOWCOLUMN 0x00<br />#define SSD1306_SETHIGHCOLUMN 0x10<br /><br />#define SSD1306_SETSTARTLINE 0x40<br /><br />#define SSD1306_MEMORYMODE 0x20<br />#define SSD1306_COLUMNADDR 0x21<br />#define SSD1306_PAGEADDR   0x22<br /><br />#define SSD1306_COMSCANINC 0xC0<br />#define SSD1306_COMSCANDEC 0xC8<br /><br />#define SSD1306_SEGREMAP 0xA0<br /><br />#define SSD1306_CHARGEPUMP 0x8D<br /><br />#define SSD1306_EXTERNALVCC 0x1<br />#define SSD1306_SWITCHCAPVCC 0x2<br /><br />// Scrolling #defines<br />#define SSD1306_ACTIVATE_SCROLL 0x2F<br />#define SSD1306_DEACTIVATE_SCROLL 0x2E<br />#define SSD1306_SET_VERTICAL_SCROLL_AREA 0xA3<br />#define SSD1306_RIGHT_HORIZONTAL_SCROLL 0x26<br />#define SSD1306_LEFT_HORIZONTAL_SCROLL 0x27<br />#define SSD1306_VERTICAL_AND_RIGHT_HORIZONTAL_SCROLL 0x29<br />#define SSD1306_VERTICAL_AND_LEFT_HORIZONTAL_SCROLL 0x2A<br /><br /><br /><br /><br />//deklaracje zmiennych<br /><br /><br /><br /><br /><br />//deklaracje funkcji<br /><br />void mk_ssd1306_init (uint8_t vcc, uint8_t refresh );<br />void mk_ssd1306_cmd (uint8_t cmd);<br />void mk_ssd1306_data (uint8_t dat);<br /><br />void mk_ssd1306_display (void);<br />void mk_ssd1306_setPixel ( int x, int y, uint8_t bw );<br /><br /><br /><br /><br />#endif /* OLED_SSD1306_H_ */[/syntax]<br /><br /><br />ssd1306.c<br />[syntax=c]/*<br /> * ssd1306.c<br /> *<br /> *  Created on: 13 cze 2016<br /> *      Author: MSI<br /> */<br /><br /><br />#include &lt;avr/io.h&gt;<br />#include &lt;avr/pgmspace.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;string.h&gt;<br />#include &lt;stdlib.h&gt;<br /><br />#include &quot;ssd1306.h&quot;<br /><br />uint8_t ssd1306_buf &#91;1024&#93; = {<br /><br /><br />};<br /><br />static void SPIwrite (uint8_t dat) {<br /><br />uint8_t i;<br />for (i=0x80; i; i&gt;&gt;=1) {<br /><br />SCK_LO;<br />if (dat &amp; i) MOSI_HI;<br />else MOSI_LO;<br />SCK_HI;<br />}<br />}<br /><br />void mk_ssd1306_cmd (uint8_t cmd) {<br /><br />#if USE_CS == 1<br />CS_HI;<br />#endif<br /><br />DC_LO;<br /><br />#if USE_CS == 1<br />CS_LO;<br />#endif<br /><br />SPIwrite (cmd);<br /><br />#if USE_CS == 1<br />CS_HI;<br />#endif<br /><br />}<br /><br />void mk_ssd1306_data (uint8_t dat) {<br /><br />#if USE_CS == 1<br />CS_HI;<br />#endif<br /><br />DC_HI;<br /><br />#if USE_CS == 1<br />CS_LO;<br />#endif<br /><br />SPIwrite (dat);<br /><br />#if USE_CS == 1<br />CS_HI;<br />#endif<br /><br />}<br /><br /><br /><br />void mk_ssd1306_display (void) {<br /><br />mk_ssd1306_cmd(SSD1306_SETLOWCOLUMN  | 0x0);<br />mk_ssd1306_cmd(SSD1306_SETHIGHCOLUMN | 0x0);<br />mk_ssd1306_cmd(SSD1306_SETSTARTLINE  | 0x0);<br /><br />#if USE_CS == 1<br />CS_HI;<br />#endif<br /><br />DC_HI;<br /><br />#if USE_CS == 1<br />CS_LO;<br />#endif<br /><br />for (uint16_t i=0; i&lt;(SSD1306_WIDTH*SSD1306_HEIGHT/8); i++) {<br /><br />SPIwrite ( ssd1306_buf&#91;i&#93; );<br /><br />}<br /><br />#if USE_CS == 1<br />CS_HI;<br />#endif<br /><br />}<br /><br /><br />void ssd1306_InitSpi (void) {<br /><br />MOSI_DDR |= MOSI;<br /><br />SCK_DDR |=  SCK;<br />SCK_PORT |= SCK;<br /><br />#if USE_RST == 1<br />RST_DDR |=  RST;<br />RST_PORT |= RST;<br />#endif<br /><br />DC_DDR |= DC;<br /><br />#if USE_CS == 1<br />CS_DDR |= CS;<br />CS_PORT |= CS;<br />#endif<br /><br />}<br /><br />//podstawowa funkcja do wyœwietlania pojedynczego piksela<br />void mk_ssd1306_setPixel (int x, int y, uint8_t bw) {<br /><br /><br />if (( x &lt; 0 ) || (x&gt;= SSD1306_WIDTH) || ( y&lt;0) || (y&gt;=SSD1306_HEIGHT))<br />return;<br /><br />if (bw) ssd1306_buf &#91;x+ (y/8)*SSD1306_WIDTH&#93; |= (1&lt;&lt;(y%8)); //zapal pixel<br />else ssd1306_buf &#91;x +(y/8)*SSD1306_WIDTH&#93; &amp;= ~(1&lt;&lt;(y%8)); //zgaœ pixel<br /><br /><br />}<br /><br />void mk_ssd1306_init (uint8_t vcc, uint8_t refresh ) {<br /><br />ssd1306_InitSpi();<br /><br />#if USE_RST == 1<br />RST_HI;<br />_delay_ms (25);<br />RST_LO;<br />_delay_ms (25);<br />RST_HI;<br />#else<br />CS_HI;<br />_delay_ms (25);<br />CS_LO;<br />_delay_ms (25);<br />CS_HI;<br />#endif<br /><br />mk_ssd1306_cmd(SSD1306_DISPLAYOFF);<br />mk_ssd1306_cmd(SSD1306_SETDISPLAYCLOCKDIV);<br />//mk_ssd1306_cmd(refresh);<br /><br />//ssd1306_command(SSD1306_SETMULTIPLEX);<br />//ssd1306_command(SSD1306_LCDHEIGHT - 1);<br /><br />mk_ssd1306_cmd(SSD1306_SETDISPLAYOFFSET);<br />mk_ssd1306_cmd(0x0);<br />mk_ssd1306_cmd(SSD1306_SETSTARTLINE | 0x0);<br />mk_ssd1306_cmd(SSD1306_CHARGEPUMP);<br /><br />if (vcc == SSD1306_EXTERNALVCC) mk_ssd1306_cmd (0x10) ;<br />else mk_ssd1306_cmd (0x14);<br /><br />mk_ssd1306_cmd(SSD1306_MEMORYMODE);<br />mk_ssd1306_cmd(0x00);<br />mk_ssd1306_cmd(SSD1306_SEGREMAP | 0x1);<br />mk_ssd1306_cmd(SSD1306_COMSCANDEC);<br /><br />mk_ssd1306_cmd(SSD1306_SETCONTRAST);<br /><br />if (vcc == SSD1306_EXTERNALVCC) mk_ssd1306_cmd (0x9F) ;<br />else mk_ssd1306_cmd (0xCF);<br /><br />mk_ssd1306_cmd(SSD1306_SETPRECHARGE);<br /><br /><br />//ssd1306 - 128x32<br /><br />#if defined SSD1306_128_32<br />mk_ssd1306_cmd(SSD1306_SETMULTIPLEX);<br />mk_ssd1306_cmd(0x1F);<br /><br />mk_ssd1306_cmd( SSD1306_SETCOMPINS );<br />mk_ssd1306_cmd( 0x02 );<br />#endif<br /><br /><br />//ssd1306 - 128x64<br /><br />#if defined SSD1306_128_64<br />mk_ssd1306_cmd(SSD1306_SETMULTIPLEX);<br />mk_ssd1306_cmd(0x3F);<br /><br />mk_ssd1306_cmd( SSD1306_SETCOMPINS );<br />mk_ssd1306_cmd( 0x12 );<br />#endif<br /><br />mk_ssd1306_cmd ( SSD1306_DISPLAYALLON_RESUME );<br />mk_ssd1306_cmd ( SSD1306_NORMALDISPLAY );<br /><br />mk_ssd1306_cmd ( SSD1306_DISPLAYON );<br /><br />mk_ssd1306_display();<br /><br /><br /><br /><br />}[/syntax]<br /><br />main.c<br />[syntax=c]/*<br /> * main.c<br /> *<br /> *  Created on: 13 cze 2016<br /> *      Author: MSI<br /> */<br /><br /><br />#include &lt;avr/io.h&gt;<br />#include &lt;avr/pgmspace.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;string.h&gt;<br />#include &lt;stdlib.h&gt;<br /><br />#include &quot;PK_OLED/ssd1306.h&quot;<br /><br />int main(void) {<br /><br />mk_ssd1306_init ( SSD1306_SWITCHCAPVCC, REFRESH_MIN);<br /><br /><br />mk_ssd1306_setPixel ( 40, 8, 1 );<br />//mk_ssd1306_setPixel ( 40, 9, 1 );<br />//mk_ssd1306_setPixel ( 41, 8, 1 );<br />//mk_ssd1306_setPixel ( 41, 9, 1 );<br /><br />uint8_t i;<br />for (i=0; i&lt;128; i++) mk_ssd1306_setPixel (i, 20, 1);<br />mk_ssd1306_display ();<br /><br /><br /><br />while(1) {<br /><br /><br />}<br />}[/syntax]<br /><br />Jeśli któryś z kolegów mógłby sprawdzić moje biblioteki z różną wartością parametru REFRESH, to byłbym bardzo wdzięczny.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=535">piotr8605</a> — 14 cze 2016, o 06:56</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[skalarro]]></name></author>
<updated>2016-05-02T16:41:45+01:00</updated>
<published>2016-05-02T16:41:45+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15206&amp;p=159750#p159750</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15206&amp;p=159750#p159750"/>
<title type="html"><![CDATA[Re: Problem z wyświetlaczem OLED]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15206&amp;p=159750#p159750"><![CDATA[
michal1990 - mam w domu oba OLEDy - i ten Mirkowy i z alle... identyczny jak Ty.<br /><br />Oba działają bez jakichkolwiek przeróbek. Zapewne zwróciłeś uwagę na obecność fabrycznie wyprowadzonego resetu a brak C/S.<br /><br />A czy zamieniłeś piny zasilania?? Ja się złapałem na tym, że sprawdziłem wszystkie piny poza GND i VCC. a właśnie tam też jest odwrotnie. <br />Po zamianie ruszył - nawet przeżył odwrotną polaryzację zasilania.<br /><br />Reasumując - zamieniasz GND z VCC, C/S cię nie interesuje a RST  pełni taką samą funkcję jak ten dokładany atnelowski.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=4850">skalarro</a> — 2 maja 2016, o 16:41</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[anshar]]></name></author>
<updated>2016-05-01T10:10:25+01:00</updated>
<published>2016-05-01T10:10:25+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15206&amp;p=159660#p159660</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15206&amp;p=159660#p159660"/>
<title type="html"><![CDATA[Re: Problem z wyświetlaczem OLED]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15206&amp;p=159660#p159660"><![CDATA[
<div class="quotetitle">michal1990 napisał(a):</div><div class="quotecontent"><br />Sprawdź proszę jakbyś mógł, czy na moich bibliotekach działa Ci dla samego CS, dla samego RST i dla obu.<br /></div><br /><br />Podłączyłem mojego oled'zika i odpaliłem go na twoich bibliotekach. Wszystko pięknie działa.<br />Oled'a mam już przerobionego z wyprowadzonym pinem RST, zakupionym w sklepie atnel.pl, więc nie będzie przecież działał z programowym RST=0.<br />Sprawdziłem za to dla CS=0; z tym, że pin CS wyświelacza podłączyłem do GND. Rónież działa bezproblemowo. <br />Sądzę, że coś nie tak podłączyłeś, sprawdz podłączenia. Zwróc uwagę, że twój wyświetlacz również ma wyprowadzony dodatkowo pin CS tylko wymagane jest podlutowanie przewodu. Podłącz go do GND i sprawdz jeszcze raz, bo może chińczyki coś poknocili.<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 20 minutach ]</span></strong><br /><br />Znalazłem, że ten wyświelacz, który posiadasz ma prawdopodobnie SH1106 kontroler, zamiast SSD1306. Dlatego trzeba zmienić w pliku mk_ssd1306.h:<br />[syntax=c]#define SSD1306_SETLOWCOLUMN 0x00[/syntax]<br />na <br />[syntax=c]#define SSD1306_SETLOWCOLUMN 0x02[/syntax]<br />lub<br />[syntax=c]#define SSD1306_SETLOWCOLUMN 0x04[/syntax] <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=7157">anshar</a> — 1 maja 2016, o 10:10</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[michal1990]]></name></author>
<updated>2016-04-30T22:56:16+01:00</updated>
<published>2016-04-30T22:56:16+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15206&amp;p=159651#p159651</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15206&amp;p=159651#p159651"/>
<title type="html"><![CDATA[Re: Problem z wyświetlaczem OLED]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15206&amp;p=159651#p159651"><![CDATA[
<div class="quotetitle">anshar napisał(a):</div><div class="quotecontent"><br />Poczytaj:<br /><a href="http://forum.atnel.pl/topic7982-90.html?hilit=oled"  class="postlink">http://forum.atnel.pl/topic7982-90.html?hilit=oled</a><br /></div><br /><br />Przeczytałem cały wątek od początku do końca, jednak tam problem dotyczył wyświetlaczy z pinem CS, bez wyprowadzonego pinu RST. Z tego co widzę u siebie w wyświetlaczu pin RST jest.<br /><br />Wrzucam zdjęcia tego wyświetlacza:<br /><br /><a href="https://obrazkiforum.atnel.pl/12798/77eb7d5f25735cb86df418a007b6c748.jpg"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/12798/77eb7d5f25735cb86df418a007b6c748.jpg" alt="Obrazek" /></a><a href="https://obrazkiforum.atnel.pl/12798/af5aeb3c32cafabe92673dc6a3d262d8.jpg"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/12798/af5aeb3c32cafabe92673dc6a3d262d8.jpg" alt="Obrazek" /></a><br /><br />Dodaje jeszcze biblioteki do sprawdzenia:<br />(jednak na wyświetlaczu ATNEL SPI z dodatkowym pinem RST dla podłączonych obu i CS i RST działało)<br /><br />Plik .c:<br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;avr/pgmspace.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;string.h&gt;<br />#include &lt;stdlib.h&gt;<br /><br />#include &quot;mk_ssd1306.h&quot;<br /><br /><br />int cursor_x, cursor_y;<br /><br /><br /><br />uint8_t ssd1306_buf&#91;1024&#93;={<br /><br />};<br /><br />static void SPIwrite ( uint8_t dat) {<br /><br />uint8_t i;<br />for (i = 0x80; i; i &gt;&gt;=1) {<br />SCK_LO;<br />if (dat &amp; i) MOSI_HI;<br />else MOSI_LO;<br />SCK_HI;<br />}<br />}<br /><br /><br />void mk_ssd1306_cmd ( uint8_t cmd ) {<br /><br />#if USE_CS == 1<br />CS_HI;<br />#endif<br /><br />DC_LO;<br /><br />#if USE_CS == 1<br />CS_LO;<br />#endif<br /><br />SPIwrite ( cmd );<br /><br />#if USE_CS == 1<br />CS_HI;<br />#endif<br /><br />}<br /><br /><br />void mk_ssd1306_data ( uint8_t dat ) {<br /><br />#if USE_CS == 1<br />CS_HI;<br />#endif<br /><br />DC_HI;<br /><br />#if USE_CS == 1<br />CS_LO;<br />#endif<br /><br />SPIwrite ( dat );<br /><br />#if USE_CS == 1<br />CS_HI;<br />#endif<br />}<br /><br />void mk_ssd1306_display ( void ) {<br /><br />mk_ssd1306_cmd ( SSD1306_SETLOWCOLUMN | 0x0 );<br />mk_ssd1306_cmd ( SSD1306_SETHIGHCOLUMN | 0x0 );<br />mk_ssd1306_cmd ( SSD1306_SETSTARTLINE | 0x0 );<br /><br />#if USE_CS == 1<br />CS_HI;<br />#endif<br />DC_HI;<br />#if USE_CS == 1<br />CS_LO;<br />#endif<br /><br />for ( uint16_t i=0; i&lt;(SSD1306_WIDTH*SSD1306_HEIGHT/8); i++) {<br />SPIwrite ( ssd1306_buf&#91;i&#93; );<br />}<br /><br />#if USE_CS == 1<br />CS_HI;<br />#endif<br /><br />}<br /><br /><br /><br /><br /><br />void ssd1306_InitSpi (void) {<br /><br />MOSI_DDR |= MOSI;<br /><br />SCK_DDR |= SCK;<br />SCK_DDR |= SCK;<br /><br />#if USE_RST == 1<br />RST_DDR |= RST;<br />RST_PORT |= RST;<br />#endif<br /><br />DC_DDR |= DC;<br /><br />#if USE_CS == 1<br />CS_DDR |= CS;<br />CS_PORT |= CS;<br />#endif<br /><br /><br /><br />}<br /><br /><br />void mk_ssd1306_setPixel (int x, int y, uint8_t bw) {<br /><br />if (( x &lt; 0 ) || ( x &gt;= SSD1306_WIDTH ) || ( y &lt; 0 ) || ( y &gt;= SSD1306_HEIGHT ))<br />return;<br /><br />if (bw) ssd1306_buf&#91;x+ (y/8)*SSD1306_WIDTH&#93; |= (1&lt;&lt;(y%8)); <br />else ssd1306_buf&#91;x+ (y/8)*SSD1306_WIDTH&#93; &amp;= ~(1&lt;&lt;(y%8));   <br /><br />}<br /><br /><br />void mk_ssd1306_cls (void) {<br />memset (ssd1306_buf, 0x00, (1024));<br />}<br /><br /><br /><br />void mk_ssd1306_init ( uint8_t vcc, uint8_t refresh ) {<br /><br /><br />ssd1306_InitSpi();<br /><br />#if USE_RST == 1<br />RST_HI;<br />_delay_ms(25);<br />RST_LO;<br />_delay_ms(25);<br />RST_HI;<br />#else<br />CS_HI;<br />_delay_ms(25);<br />CS_LO;<br />_delay_ms(25);<br />CS_HI;<br />#endif<br /><br />mk_ssd1306_cmd(SSD1306_DISPLAYOFF);<br />        mk_ssd1306_cmd(SSD1306_SETDISPLAYCLOCKDIV);<br />        mk_ssd1306_cmd(refresh);<br /><br />        mk_ssd1306_cmd(SSD1306_SETDISPLAYOFFSET);<br />        mk_ssd1306_cmd(0x00);<br />        mk_ssd1306_cmd(SSD1306_SETSTARTLINE | 0x00);<br />        mk_ssd1306_cmd(SSD1306_CHARGEPUMP);<br /><br />        if(vcc == SSD1306_EXTERNALVCC) mk_ssd1306_cmd(0x10);<br />        else mk_ssd1306_cmd (0x14);<br /><br />        mk_ssd1306_cmd(SSD1306_MEMORYMODE);<br />        mk_ssd1306_cmd(0x00);<br />        mk_ssd1306_cmd(SSD1306_SEGREMAP | 0x01);<br />        mk_ssd1306_cmd(SSD1306_COMSCANDEC);<br /><br />        mk_ssd1306_cmd(SSD1306_SETCONTRAST);<br /><br />        if(vcc == SSD1306_EXTERNALVCC) mk_ssd1306_cmd(0x9F);<br />        else mk_ssd1306_cmd (0xCF);<br /><br />        mk_ssd1306_cmd(SSD1306_SETPRECHARGE);<br /><br />#if defined SSD1306_128_32<br />        mk_ssd1306_cmd(SSD1306_SETMULTIPLEX);<br />        mk_ssd1306_cmd(0x1F);<br /><br />        mk_ssd1306_cmd(SSD1306_SETCOMPINS);<br />        mk_ssd1306_cmd(0x02);<br />#endif<br /><br />#if defined SSD1306_128_64<br />        mk_ssd1306_cmd(SSD1306_SETMULTIPLEX);<br />        mk_ssd1306_cmd(0x3F);<br /><br />        mk_ssd1306_cmd(SSD1306_SETCOMPINS);<br />        mk_ssd1306_cmd(0x12);<br />#endif<br /><br />        mk_ssd1306_cmd(SSD1306_SETVCOMDETECT);<br />        mk_ssd1306_cmd(0x40);<br /><br />        mk_ssd1306_cmd(SSD1306_DISPLAYALLON_RESUME);<br />        mk_ssd1306_cmd(SSD1306_NORMALDISPLAY);<br /><br />        mk_ssd1306_cmd(SSD1306_DISPLAYON);<br /><br />        mk_ssd1306_display();<br /><br />}<br /><br />void mk_ssd1306_drawChar ( int x, int y, char c, uint8_t color, uint8_t bg, uint8_t size ) {<br /><br />if (( x &gt;= SSD1306_WIDTH ) || ( y &gt;= SSD1306_HEIGHT ) || (( x + 6 * size - 1) &lt; 0 ) || (( y + 8 * size - 1 ) &lt; 0  )) return;<br /><br />uint8_t line;<br /><br />for ( int8_t i=0; i&lt;6; i++ ) {<br /><br />if (i == 5)<br />line = 0x0;<br />else<br />line = pgm_read_byte (font+(c*5)+i);<br /><br />for (int8_t j = 0; j&lt;8; j++) {<br />if (line &amp; 0x1 ) {<br />if ( size == 1 )<br />mk_ssd1306_setPixel (x+i, y+j, color);<br />else {<br />mk_ssd1306_fillRect(x+(i*size), y+(j*size), size, size, color);<br />}<br />} else if (bg != color)  {<br />if (size == 1)<br />mk_ssd1306_setPixel (x+i, y+j, bg);<br />else {<br />mk_ssd1306_fillRect(x+i*size, y+j*size, size, size, bg);<br />}<br />}<br />line &gt;&gt;= 1;<br />}<br />}<br /><br />}<br /><br />void mk_ssd1306_fillRect ( int x, int y, int w, int h, uint8_t color ) {<br /><br />for (int16_t i=x; i&lt;x+w; i++) {<br />mk_ssd1306_drawFastVLine (i, y, h, color);<br />}<br /><br />}<br /><br /><br />void mk_ssd1306_drawFastVLine ( int x, int y, int h, uint8_t color ) {<br />mk_ssd1306_drawLine (x, y, x, y+h-1, color);<br />}<br /><br /><br />void mk_ssd1306_drawLine ( int x0, int y0, int x1, int y1, uint8_t color ) {<br /><br />int steep = abs(y1 - y0) &gt; abs (x1 - x0);<br />if (steep) {<br />swap(x0,y0);<br />swap(x1,y1);<br />}<br /><br />if (x0 &gt; x1) {<br />swap(x0, x1);<br />swap(y0, y1);<br />}<br /><br />int dx, dy;<br />dx=x1-x0;<br />dy=abs(y1-y0);<br /><br />int err = dx/2;<br /><br />int ystep;<br /><br />if (y0 &lt; y1) {<br />ystep = 1;<br />} else {<br /><br />ystep = -1;<br />}<br /><br />for (; x0 &lt;= x1; x0++) {<br />if (steep) {<br />mk_ssd1306_setPixel(y0, x0, color);<br />} else {<br />mk_ssd1306_setPixel(x0,y0, color);<br />}<br /><br />err -=dy;<br />if (err &lt; 0 ) {<br />y0 +=ystep;<br />err +=dx;<br />}<br /><br />}<br /><br />}<br /><br /><br />void mk_ssd1306_puts ( int x, int y, char * str, uint8_t txt_size, uint8_t color, uint8_t bg ) {<br /><br />cursor_x = x; cursor_y = y;<br /><br />while ( *str ) {<br /><br />mk_ssd1306_drawChar (cursor_x, cursor_y, *str++, color, bg, txt_size );<br /><br />cursor_x += txt_size*6;<br /><br />}<br />}<br /><br />void mk_ssd1306_put_int ( int x, int y, int data, uint8_t txt_size, uint8_t color, uint8_t bg) {<br /><br />char buf&#91;16&#93;;<br />mk_ssd1306_puts (x, y, itoa( data, buf, 10 ), txt_size, color, bg );<br /><br />}[/syntax]<br /><br />Plik .h<br /><br />[syntax=c]/*<br /><br />#ifndef OLED_MK_SSD1306_H_<br />#define OLED_MK_SSD1306_H_<br /><br /><br /><br /><br />#define USE_CS0<br />#define USE_RST1<br /><br />/// ROZDZIELCZOSC LCD/OLED<br />#define SSD1306_128_64<br />///#define SSD1306_128_32<br /><br /><br /><br /><br />#define SCK (1&lt;&lt;7)              //   &lt;---- SCL<br />#define MOSI (1&lt;&lt;6)             //   &lt;---- SDA<br />#define RST (1&lt;&lt;3)              //       &lt;---- RST<br />#define DC (1&lt;&lt;4)               //       &lt;---- D/C<br />#define CS  (1&lt;&lt;5)              //       &lt;---- CS<br /><br /><br /><br />#define SCK_PORTPORTA<br />#define SCK_DDRDDRA<br /><br />#define MOSI_PORTPORTA<br />#define MOSI_DDRDDRA<br /><br />#define RST_PORTPORTA<br />#define RST_DDRDDRA<br /><br />#define DC_PORTPORTA<br />#define DC_DDRDDRA<br /><br />#define CS_PORTPORTA<br />#define CS_DDRDDRA<br /><br />#define RST_LORST_PORT &amp;= ~RST<br />#define RST_HIRST_PORT |= RST<br /><br />#define CS_LOCS_PORT &amp;= ~CS<br />#define CS_HICS_PORT |= CS<br /><br />#define DC_LODC_PORT &amp;= ~DC<br />#define DC_HIDC_PORT |= DC<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 /><br /><br />#define SSD1306_WIDTH128<br /><br />#if defined SSD1306_128_64<br />#define SSD1306_HEIGHT64<br />#endif<br />#if defined SSD1306_128_32<br />#define SSD1306_HEIGHT32<br />#endif<br /><br /><br />#define REFRESH_MIN 0x80<br />#define REFRESH_MID 0xB0<br />#define REFRESH_MAX 0xF0<br /><br />typedef enum {page0, page1, page2, page3, page4, page5, page6, page7} TPAGE;<br /><br /><br />#define SSD1306_SETCONTRAST 0x81<br />#define SSD1306_DISPLAYALLON_RESUME 0xA4<br />#define SSD1306_DISPLAYALLON 0xA5<br />#define SSD1306_NORMALDISPLAY 0xA6<br />#define SSD1306_INVERTDISPLAY 0xA7<br />#define SSD1306_DISPLAYOFF 0xAE<br />#define SSD1306_DISPLAYON 0xAF<br /><br />#define SSD1306_SETDISPLAYOFFSET 0xD3<br />#define SSD1306_SETCOMPINS 0xDA<br /><br />#define SSD1306_SETVCOMDETECT 0xDB<br /><br />#define SSD1306_SETDISPLAYCLOCKDIV 0xD5<br />#define SSD1306_SETPRECHARGE 0xD9<br /><br />#define SSD1306_SETMULTIPLEX 0xA8<br /><br />#define SSD1306_SETLOWCOLUMN 0x00<br />#define SSD1306_SETHIGHCOLUMN 0x10<br /><br />#define SSD1306_SETSTARTLINE 0x40<br /><br />#define SSD1306_MEMORYMODE 0x20<br /><br />#define SSD1306_COMSCANINC 0xC0<br />#define SSD1306_COMSCANDEC 0xC8<br /><br />#define SSD1306_SEGREMAP 0xA0<br /><br />#define SSD1306_CHARGEPUMP 0x8D<br /><br />#define SSD1306_EXTERNALVCC 0x1<br />#define SSD1306_SWITCHCAPVCC 0x2<br /><br /><br /><br /><br />#define SSD1306_ACTIVATE_SCROLL 0x2F<br />#define SSD1306_DEACTIVATE_SCROLL 0x2E<br />#define SSD1306_SET_VERTICAL_SCROLL_AREA 0xA3<br />#define SSD1306_RIGHT_HORIZONTAL_SCROLL 0x26<br />#define SSD1306_LEFT_HORIZONTAL_SCROLL 0x27<br />#define SSD1306_VERTICAL_AND_RIGHT_HORIZONTAL_SCROLL 0x29<br />#define SSD1306_VERTICAL_AND_LEFT_HORIZONTAL_SCROLL 0x2A<br /><br />#define swap(a,b) { int16_t t = a; a = b; b = t; }<br /><br /><br /><br /><br /><br />extern const uint8_t font&#91;&#93;;<br />extern int cursor_x, cursor_y;<br /><br /><br /><br /><br />void mk_ssd1306_init ( uint8_t vcc, uint8_t refresh );<br />void mk_ssd1306_cmd ( uint8_t cmd );<br />void mk_ssd1306_data ( uint8_t dat );<br /><br />void mk_ssd1306_display ( void );  //jeśli bufor jest pusty, to kasowanie kasowanie wyświetlacza<br /><br /><br />void mk_ssd1306_setPixel (int x, int y, uint8_t bw);<br />void mk_ssd1306_cls (void); //czyszczenie wyswietlacza<br /><br /><br />void mk_ssd1306_drawChar ( int x, int y, char c, uint8_t color, uint8_t bg, uint8_t size );<br />void mk_ssd1306_fillRect ( int x, int y, int w, int h, uint8_t color );<br />void mk_ssd1306_drawFastVLine ( int x, int y, int h, uint8_t color );<br /><br />void mk_ssd1306_drawLine ( int x0, int y0, int x1, int y1, uint8_t color );<br />void mk_ssd1306_puts ( int x, int y, char * str, uint8_t txt_size, uint8_t color, uint8_t bg );<br />void mk_ssd1306_put_int ( int x, int y, int data, uint8_t txt_size, uint8_t color, uint8_t bg) ;<br /><br />#endif /* OLED_MK_SSD1306_H_ */[/syntax]<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 19 minutach ]</span></strong><br /><br /><strong>anshar</strong><br /><br />Sprawdź proszę jakbyś mógł, czy na moich bibliotekach działa Ci dla samego CS, dla samego RST i dla obu.<br /><br />dodaję jeszcze plik oled_font1.c:<br />[syntax=c]#include &lt;avr/io.h&gt;<br /> #include &lt;avr/pgmspace.h&gt;<br /><br /><br /><br />const uint8_t font&#91;&#93; PROGMEM = {<br />0x00, 0x00, 0x00, 0x00, 0x00,<br />0x3E, 0x5B, 0x4F, 0x5B, 0x3E,<br />0x3E, 0x6B, 0x4F, 0x6B, 0x3E,<br />0x1C, 0x3E, 0x7C, 0x3E, 0x1C,<br />0x18, 0x3C, 0x7E, 0x3C, 0x18,<br />0x1C, 0x57, 0x7D, 0x57, 0x1C,<br />0x1C, 0x5E, 0x7F, 0x5E, 0x1C,<br />0x00, 0x18, 0x3C, 0x18, 0x00,<br />0xFF, 0xE7, 0xC3, 0xE7, 0xFF,<br />0x00, 0x18, 0x24, 0x18, 0x00,<br />0xFF, 0xE7, 0xDB, 0xE7, 0xFF,<br />0x30, 0x48, 0x3A, 0x06, 0x0E,<br />0x26, 0x29, 0x79, 0x29, 0x26,<br />0x40, 0x7F, 0x05, 0x05, 0x07,<br />0x40, 0x7F, 0x05, 0x25, 0x3F,<br />0x5A, 0x3C, 0xE7, 0x3C, 0x5A,<br />0x7F, 0x3E, 0x1C, 0x1C, 0x08,<br />0x08, 0x1C, 0x1C, 0x3E, 0x7F,<br />0x14, 0x22, 0x7F, 0x22, 0x14,<br />0x5F, 0x5F, 0x00, 0x5F, 0x5F,<br />0x06, 0x09, 0x7F, 0x01, 0x7F,<br />0x00, 0x66, 0x89, 0x95, 0x6A,<br />0x60, 0x60, 0x60, 0x60, 0x60,<br />0x94, 0xA2, 0xFF, 0xA2, 0x94,<br />0x08, 0x04, 0x7E, 0x04, 0x08,<br />0x10, 0x20, 0x7E, 0x20, 0x10,<br />0x08, 0x08, 0x2A, 0x1C, 0x08,<br />0x08, 0x1C, 0x2A, 0x08, 0x08,<br />0x1E, 0x10, 0x10, 0x10, 0x10,<br />0x0C, 0x1E, 0x0C, 0x1E, 0x0C,<br />0x30, 0x38, 0x3E, 0x38, 0x30,<br />0x06, 0x0E, 0x3E, 0x0E, 0x06,<br />0x00, 0x00, 0x00, 0x00, 0x00,<br />0x00, 0x00, 0x5F, 0x00, 0x00,<br />0x00, 0x07, 0x00, 0x07, 0x00,<br />0x14, 0x7F, 0x14, 0x7F, 0x14,<br />0x24, 0x2A, 0x7F, 0x2A, 0x12,<br />0x23, 0x13, 0x08, 0x64, 0x62,<br />0x36, 0x49, 0x56, 0x20, 0x50,<br />0x00, 0x08, 0x07, 0x03, 0x00,<br />0x00, 0x1C, 0x22, 0x41, 0x00,<br />0x00, 0x41, 0x22, 0x1C, 0x00,<br />0x2A, 0x1C, 0x7F, 0x1C, 0x2A,<br />0x08, 0x08, 0x3E, 0x08, 0x08,<br />0x00, 0x80, 0x70, 0x30, 0x00,<br />0x08, 0x08, 0x08, 0x08, 0x08,<br />0x00, 0x00, 0x60, 0x60, 0x00,<br />0x20, 0x10, 0x08, 0x04, 0x02,<br />0x3E, 0x51, 0x49, 0x45, 0x3E,<br />0x00, 0x42, 0x7F, 0x40, 0x00,<br />0x72, 0x49, 0x49, 0x49, 0x46,<br />0x21, 0x41, 0x49, 0x4D, 0x33,<br />0x18, 0x14, 0x12, 0x7F, 0x10,<br />0x27, 0x45, 0x45, 0x45, 0x39,<br />0x3C, 0x4A, 0x49, 0x49, 0x31,<br />0x41, 0x21, 0x11, 0x09, 0x07,<br />0x36, 0x49, 0x49, 0x49, 0x36,<br />0x46, 0x49, 0x49, 0x29, 0x1E,<br />0x00, 0x00, 0x14, 0x00, 0x00,<br />0x00, 0x40, 0x34, 0x00, 0x00,<br />0x00, 0x08, 0x14, 0x22, 0x41,<br />0x14, 0x14, 0x14, 0x14, 0x14,<br />0x00, 0x41, 0x22, 0x14, 0x08,<br />0x02, 0x01, 0x59, 0x09, 0x06,<br />0x3E, 0x41, 0x5D, 0x59, 0x4E,<br />0x7C, 0x12, 0x11, 0x12, 0x7C,<br />0x7F, 0x49, 0x49, 0x49, 0x36,<br />0x3E, 0x41, 0x41, 0x41, 0x22,<br />0x7F, 0x41, 0x41, 0x41, 0x3E,<br />0x7F, 0x49, 0x49, 0x49, 0x41,<br />0x7F, 0x09, 0x09, 0x09, 0x01,<br />0x3E, 0x41, 0x41, 0x51, 0x73,<br />0x7F, 0x08, 0x08, 0x08, 0x7F,<br />0x00, 0x41, 0x7F, 0x41, 0x00,<br />0x20, 0x40, 0x41, 0x3F, 0x01,<br />0x7F, 0x08, 0x14, 0x22, 0x41,<br />0x7F, 0x40, 0x40, 0x40, 0x40,<br />0x7F, 0x02, 0x1C, 0x02, 0x7F,<br />0x7F, 0x04, 0x08, 0x10, 0x7F,<br />0x3E, 0x41, 0x41, 0x41, 0x3E,<br />0x7F, 0x09, 0x09, 0x09, 0x06,<br />0x3E, 0x41, 0x51, 0x21, 0x5E,<br />0x7F, 0x09, 0x19, 0x29, 0x46,<br />0x26, 0x49, 0x49, 0x49, 0x32,<br />0x03, 0x01, 0x7F, 0x01, 0x03,<br />0x3F, 0x40, 0x40, 0x40, 0x3F,<br />0x1F, 0x20, 0x40, 0x20, 0x1F,<br />0x3F, 0x40, 0x38, 0x40, 0x3F,<br />0x63, 0x14, 0x08, 0x14, 0x63,<br />0x03, 0x04, 0x78, 0x04, 0x03,<br />0x61, 0x59, 0x49, 0x4D, 0x43,<br />0x00, 0x7F, 0x41, 0x41, 0x41,<br />0x02, 0x04, 0x08, 0x10, 0x20,<br />0x00, 0x41, 0x41, 0x41, 0x7F,<br />0x04, 0x02, 0x01, 0x02, 0x04,<br />0x40, 0x40, 0x40, 0x40, 0x40,<br />0x00, 0x03, 0x07, 0x08, 0x00,<br />0x20, 0x54, 0x54, 0x78, 0x40,<br />0x7F, 0x28, 0x44, 0x44, 0x38,<br />0x38, 0x44, 0x44, 0x44, 0x28,<br />0x38, 0x44, 0x44, 0x28, 0x7F,<br />0x38, 0x54, 0x54, 0x54, 0x18,<br />0x00, 0x08, 0x7E, 0x09, 0x02,<br />0x18, 0xA4, 0xA4, 0x9C, 0x78,<br />0x7F, 0x08, 0x04, 0x04, 0x78,<br />0x00, 0x44, 0x7D, 0x40, 0x00,<br />0x20, 0x40, 0x40, 0x3D, 0x00,<br />0x7F, 0x10, 0x28, 0x44, 0x00,<br />0x00, 0x41, 0x7F, 0x40, 0x00,<br />0x7C, 0x04, 0x78, 0x04, 0x78,<br />0x7C, 0x08, 0x04, 0x04, 0x78,<br />0x38, 0x44, 0x44, 0x44, 0x38,<br />0xFC, 0x18, 0x24, 0x24, 0x18,<br />0x18, 0x24, 0x24, 0x18, 0xFC,<br />0x7C, 0x08, 0x04, 0x04, 0x08,<br />0x48, 0x54, 0x54, 0x54, 0x24,<br />0x04, 0x04, 0x3F, 0x44, 0x24,<br />0x3C, 0x40, 0x40, 0x20, 0x7C,<br />0x1C, 0x20, 0x40, 0x20, 0x1C,<br />0x3C, 0x40, 0x30, 0x40, 0x3C,<br />0x44, 0x28, 0x10, 0x28, 0x44,<br />0x4C, 0x90, 0x90, 0x90, 0x7C,<br />0x44, 0x64, 0x54, 0x4C, 0x44,<br />0x00, 0x08, 0x36, 0x41, 0x00,<br />0x00, 0x00, 0x77, 0x00, 0x00,<br />0x00, 0x41, 0x36, 0x08, 0x00,<br />0x02, 0x01, 0x02, 0x04, 0x02,<br />0x3C, 0x26, 0x23, 0x26, 0x3C,<br />0x1E, 0xA1, 0xA1, 0x61, 0x12,<br />0x3A, 0x40, 0x40, 0x20, 0x7A,<br />0x38, 0x54, 0x54, 0x55, 0x59,<br />0x21, 0x55, 0x55, 0x79, 0x41,<br />0x22, 0x54, 0x54, 0x78, 0x42, // a-umlaut<br />0x21, 0x55, 0x54, 0x78, 0x40,<br />0x20, 0x54, 0x55, 0x79, 0x40,<br />0x0C, 0x1E, 0x52, 0x72, 0x12,<br />0x39, 0x55, 0x55, 0x55, 0x59,<br />0x39, 0x54, 0x54, 0x54, 0x59,<br />0x39, 0x55, 0x54, 0x54, 0x58,<br />0x00, 0x00, 0x45, 0x7C, 0x41,<br />0x00, 0x02, 0x45, 0x7D, 0x42,<br />0x00, 0x01, 0x45, 0x7C, 0x40,<br />0x7D, 0x12, 0x11, 0x12, 0x7D, // A-umlaut<br />0xF0, 0x28, 0x25, 0x28, 0xF0,<br />0x7C, 0x54, 0x55, 0x45, 0x00,<br />0x20, 0x54, 0x54, 0x7C, 0x54,<br />0x7C, 0x0A, 0x09, 0x7F, 0x49,<br />0x32, 0x49, 0x49, 0x49, 0x32,<br />0x3A, 0x44, 0x44, 0x44, 0x3A, // o-umlaut<br />0x32, 0x4A, 0x48, 0x48, 0x30,<br />0x3A, 0x41, 0x41, 0x21, 0x7A,<br />0x3A, 0x42, 0x40, 0x20, 0x78,<br />0x00, 0x9D, 0xA0, 0xA0, 0x7D,<br />0x3D, 0x42, 0x42, 0x42, 0x3D, // O-umlaut<br />0x3D, 0x40, 0x40, 0x40, 0x3D,<br />0x3C, 0x24, 0xFF, 0x24, 0x24,<br />0x48, 0x7E, 0x49, 0x43, 0x66,<br />0x2B, 0x2F, 0xFC, 0x2F, 0x2B,<br />0xFF, 0x09, 0x29, 0xF6, 0x20,<br />0xC0, 0x88, 0x7E, 0x09, 0x03,<br />0x20, 0x54, 0x54, 0x79, 0x41,<br />0x00, 0x00, 0x44, 0x7D, 0x41,<br />0x30, 0x48, 0x48, 0x4A, 0x32,<br />0x38, 0x40, 0x40, 0x22, 0x7A,<br />0x00, 0x7A, 0x0A, 0x0A, 0x72,<br />0x7D, 0x0D, 0x19, 0x31, 0x7D,<br />0x26, 0x29, 0x29, 0x2F, 0x28,<br />0x26, 0x29, 0x29, 0x29, 0x26,<br />0x30, 0x48, 0x4D, 0x40, 0x20,<br />0x38, 0x08, 0x08, 0x08, 0x08,<br />0x08, 0x08, 0x08, 0x08, 0x38,<br />0x2F, 0x10, 0xC8, 0xAC, 0xBA,<br />0x2F, 0x10, 0x28, 0x34, 0xFA,<br />0x00, 0x00, 0x7B, 0x00, 0x00,<br />0x08, 0x14, 0x2A, 0x14, 0x22,<br />0x22, 0x14, 0x2A, 0x14, 0x08,<br />0x55, 0x00, 0x55, 0x00, 0x55, // #176 (25% block) missing in old code<br />0xAA, 0x55, 0xAA, 0x55, 0xAA, // 50% block<br />0xFF, 0x55, 0xFF, 0x55, 0xFF, // 75% block<br />0x00, 0x00, 0x00, 0xFF, 0x00,<br />0x10, 0x10, 0x10, 0xFF, 0x00,<br />0x14, 0x14, 0x14, 0xFF, 0x00,<br />0x10, 0x10, 0xFF, 0x00, 0xFF,<br />0x10, 0x10, 0xF0, 0x10, 0xF0,<br />0x14, 0x14, 0x14, 0xFC, 0x00,<br />0x14, 0x14, 0xF7, 0x00, 0xFF,<br />0x00, 0x00, 0xFF, 0x00, 0xFF,<br />0x14, 0x14, 0xF4, 0x04, 0xFC,<br />0x14, 0x14, 0x17, 0x10, 0x1F,<br />0x10, 0x10, 0x1F, 0x10, 0x1F,<br />0x14, 0x14, 0x14, 0x1F, 0x00,<br />0x10, 0x10, 0x10, 0xF0, 0x00,<br />0x00, 0x00, 0x00, 0x1F, 0x10,<br />0x10, 0x10, 0x10, 0x1F, 0x10,<br />0x10, 0x10, 0x10, 0xF0, 0x10,<br />0x00, 0x00, 0x00, 0xFF, 0x10,<br />0x10, 0x10, 0x10, 0x10, 0x10,<br />0x10, 0x10, 0x10, 0xFF, 0x10,<br />0x00, 0x00, 0x00, 0xFF, 0x14,<br />0x00, 0x00, 0xFF, 0x00, 0xFF,<br />0x00, 0x00, 0x1F, 0x10, 0x17,<br />0x00, 0x00, 0xFC, 0x04, 0xF4,<br />0x14, 0x14, 0x17, 0x10, 0x17,<br />0x14, 0x14, 0xF4, 0x04, 0xF4,<br />0x00, 0x00, 0xFF, 0x00, 0xF7,<br />0x14, 0x14, 0x14, 0x14, 0x14,<br />0x14, 0x14, 0xF7, 0x00, 0xF7,<br />0x14, 0x14, 0x14, 0x17, 0x14,<br />0x10, 0x10, 0x1F, 0x10, 0x1F,<br />0x14, 0x14, 0x14, 0xF4, 0x14,<br />0x10, 0x10, 0xF0, 0x10, 0xF0,<br />0x00, 0x00, 0x1F, 0x10, 0x1F,<br />0x00, 0x00, 0x00, 0x1F, 0x14,<br />0x00, 0x00, 0x00, 0xFC, 0x14,<br />0x00, 0x00, 0xF0, 0x10, 0xF0,<br />0x10, 0x10, 0xFF, 0x10, 0xFF,<br />0x14, 0x14, 0x14, 0xFF, 0x14,<br />0x10, 0x10, 0x10, 0x1F, 0x00,<br />0x00, 0x00, 0x00, 0xF0, 0x10,<br />0xFF, 0xFF, 0xFF, 0xFF, 0xFF,<br />0xF0, 0xF0, 0xF0, 0xF0, 0xF0,<br />0xFF, 0xFF, 0xFF, 0x00, 0x00,<br />0x00, 0x00, 0x00, 0xFF, 0xFF,<br />0x0F, 0x0F, 0x0F, 0x0F, 0x0F,<br />0x38, 0x44, 0x44, 0x38, 0x44,<br />0xFC, 0x4A, 0x4A, 0x4A, 0x34, // sharp-s or beta<br />0x7E, 0x02, 0x02, 0x06, 0x06,<br />0x02, 0x7E, 0x02, 0x7E, 0x02,<br />0x63, 0x55, 0x49, 0x41, 0x63,<br />0x38, 0x44, 0x44, 0x3C, 0x04,<br />0x40, 0x7E, 0x20, 0x1E, 0x20,<br />0x06, 0x02, 0x7E, 0x02, 0x02,<br />0x99, 0xA5, 0xE7, 0xA5, 0x99,<br />0x1C, 0x2A, 0x49, 0x2A, 0x1C,<br />0x4C, 0x72, 0x01, 0x72, 0x4C,<br />0x30, 0x4A, 0x4D, 0x4D, 0x30,<br />0x30, 0x48, 0x78, 0x48, 0x30,<br />0xBC, 0x62, 0x5A, 0x46, 0x3D,<br />0x3E, 0x49, 0x49, 0x49, 0x00,<br />0x7E, 0x01, 0x01, 0x01, 0x7E,<br />0x2A, 0x2A, 0x2A, 0x2A, 0x2A,<br />0x44, 0x44, 0x5F, 0x44, 0x44,<br />0x40, 0x51, 0x4A, 0x44, 0x40,<br />0x40, 0x44, 0x4A, 0x51, 0x40,<br />0x00, 0x00, 0xFF, 0x01, 0x03,<br />0xE0, 0x80, 0xFF, 0x00, 0x00,<br />0x08, 0x08, 0x6B, 0x6B, 0x08,<br />0x36, 0x12, 0x36, 0x24, 0x36,<br />0x06, 0x0F, 0x09, 0x0F, 0x06,<br />0x00, 0x00, 0x18, 0x18, 0x00,<br />0x00, 0x00, 0x10, 0x10, 0x00,<br />0x30, 0x40, 0xFF, 0x01, 0x01,<br />0x00, 0x1F, 0x01, 0x01, 0x1E,<br />0x00, 0x19, 0x1D, 0x17, 0x12,<br />0x00, 0x3C, 0x3C, 0x3C, 0x3C,<br />0x00, 0x00, 0x00, 0x00, 0x00  // #255 NBSP<br />};[/syntax]<br /><br />oraz plik main.c[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &quot;OLED/mk_ssd1306.h&quot;<br /><br />int main()<br />{<br /><br />mk_ssd1306_init ( SSD1306_SWITCHCAPVCC, REFRESH_MAX); <br /><br />while(1)<br />{<br />mk_ssd1306_puts (51, 0, &quot;Nie dziala&quot;, 1, 1, 0 );<br />mk_ssd1306_display();<br /><br />}<br />}[/syntax]<br /><br />Ta informacja mogłaby mi dużo dać.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=12798">michal1990</a> — 30 kwi 2016, o 22:56</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[anshar]]></name></author>
<updated>2016-04-30T21:39:25+01:00</updated>
<published>2016-04-30T21:39:25+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15206&amp;p=159649#p159649</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15206&amp;p=159649#p159649"/>
<title type="html"><![CDATA[Re: Problem z wyświetlaczem OLED]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15206&amp;p=159649#p159649"><![CDATA[
Poczytaj:<br /><a href="http://forum.atnel.pl/topic7982-90.html?hilit=oled"  class="postlink">http://forum.atnel.pl/topic7982-90.html?hilit=oled</a><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=7157">anshar</a> — 30 kwi 2016, o 21:39</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[michal1990]]></name></author>
<updated>2016-04-30T17:40:57+01:00</updated>
<published>2016-04-30T17:40:57+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15206&amp;p=159628#p159628</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15206&amp;p=159628#p159628"/>
<title type="html"><![CDATA[Re: Problem z wyświetlaczem OLED]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15206&amp;p=159628#p159628"><![CDATA[
Niestety wyświetlacz okazał się walnięty. Na stronie ATNEL nie było już wyświetlacza SPI, więc zamówiłem z innego źródła. I napotkałem pewien problem:<br /><br />Wyświetlacz ze sklepu ATNEL miał 7pinów (wyprowadzony dodatkowo byl PIN RST, ten który kupiłem ma 6 pinów inaczej nazwanych. Napotkałem problem z podłączeniem wyświetlacza. Mam stworzoną bibliotekę zgodnie z poradnikami Pana Mirosława:<br /><br />[syntax=c]// DEFINICJE STAŁYCH PREPROCESORA<br />#define USE_CS1<br />#define USE_RST1<br /><br />/// ROZDZIELCZOSC LCD/OLED<br />#define SSD1306_128_64<br />///#define SSD1306_128_32<br />// PINY<br />#define SCK (1&lt;&lt;7)              //   &lt;---- SCL<br />#define MOSI (1&lt;&lt;6)             //   &lt;---- SDA<br />#define RST (1&lt;&lt;3)              //       &lt;---- RST<br />#define DC (1&lt;&lt;4)               //       &lt;---- D/C<br />#define CS  (1&lt;&lt;5)              //       &lt;---- CS<br /><br />// PORTY<br /><br />#define SCK_PORTPORTA<br />#define SCK_DDRDDRA<br /><br />#define MOSI_PORTPORTA<br />#define MOSI_DDRDDRA<br /><br />#define RST_PORTPORTA<br />#define RST_DDRDDRA<br /><br />#define DC_PORTPORTA<br />#define DC_DDRDDRA<br /><br />#define CS_PORTPORTA<br />#define CS_DDRDDRA[/syntax]<br /><br />Jak podłączyć ten nowy wyświetlacz i jak ustawić w bibliotece, żeby działał. Dodam, że wersja ze sklepu ATNEL przy tak podłączonych pinach i tak skonfigurowanej bibioletce działała.<br /><br /><a href="https://obrazkiforum.atnel.pl/12798/fcee1d659aca7b914c4e3c69faebe4a5.png"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/12798/fcee1d659aca7b914c4e3c69faebe4a5.png" alt="Obrazek" /></a><a href="https://obrazkiforum.atnel.pl/12798/54b363387988d03bf0562699991ab9ed.jpg"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/12798/54b363387988d03bf0562699991ab9ed.jpg" alt="Obrazek" /></a><br /><br />Ten po prawej miałem (7 pinów), ten po lewej mam teraz.<br /><br />Teraz podłączyłem tak:<br /><br />GDN - masa<br />VCC- +5 V<br />SCL - pin 7 portu A<br />SDA - pin 6 portu A<br />RST - pin 3 portu A<br />DC - pin 4 portu A<br /><br />W bibliotece zminiłem na:<br /><br />#define USE_CS0<br />#define USE_RST1<br /><br />wyświetlacz nie ruszył.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=12798">michal1990</a> — 30 kwi 2016, o 17:40</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[skalarro]]></name></author>
<updated>2016-04-25T08:44:11+01:00</updated>
<published>2016-04-25T08:44:11+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15206&amp;p=159232#p159232</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15206&amp;p=159232#p159232"/>
<title type="html"><![CDATA[Re: Problem z wyświetlaczem OLED]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15206&amp;p=159232#p159232"><![CDATA[
Raczej masz po wyświetlaczu.  Ja mam jeden tez uszkodzony. <br />Spadł mi na podłogę,  wygląda ok ale w dolnym prawym rogu widać mikro rysę na szkiełku kolo sterownika.  Niestety idą tamtędy niewidoczne prawie gołym okiem ścieżki od  sterowania wierszy. Na szczęście idą na zmianę jedna na lewo od scalaka,  druga na prawo. Efekt jest taki ze wyświetlana jest tylko co druga linia.<br /><br />U ciebie pewnie podobna historia ale pękło tam, gdzie sterowane są kolumny.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=4850">skalarro</a> — 25 kwi 2016, o 08:44</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[rskup]]></name></author>
<updated>2016-04-25T01:48:02+01:00</updated>
<published>2016-04-25T01:48:02+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15206&amp;p=159210#p159210</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15206&amp;p=159210#p159210"/>
<title type="html"><![CDATA[Re: Problem z wyświetlaczem OLED]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15206&amp;p=159210#p159210"><![CDATA[
Oj chyba czeka Cię wydatek. Matryca połączona jest z układem sterującym w postaci 128 linii segmentów i 64 linii kolumn. Nie ma podziałów na bloki. Dlatego jak nie działa połowa, to musiałyby się oderwać cały zestaw połączeń. Raczej stawiam, że pękła Ci wewnętrznie matryca.<br />Także jak działa Ci poprawnie inicjalizacja, to masz poprawnie podłączone i działające wszystkie potrzebne piny do sterowania wyświetlaczem.<br /><br />Chyba, ze coś programowo zrobiłeś, że masz taki efekt. Ale jak wcześniej działał, to raczej jest jak wyżej napisałem <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /><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> — 25 kwi 2016, o 01:48</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Daro69]]></name></author>
<updated>2016-04-24T21:18:43+01:00</updated>
<published>2016-04-24T21:18:43+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15206&amp;p=159196#p159196</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15206&amp;p=159196#p159196"/>
<title type="html"><![CDATA[Re: Problem z wyświetlaczem OLED]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15206&amp;p=159196#p159196"><![CDATA[
Kurczę <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /> <br />Cienko to widzę.<br />Szkoda wyświetlacza.<br /><br />Jeżeli było dobrze do chwili pykniecia.?<br /><br />ewentualnie jeżeli <strong>&quot;martwy&quot;</strong> to może poprawić cyną luty na wyświetlaczu, może to puściło tylko na wierzchu .<br /><br />zaznaczam jeżeli martwy, albo najpierw poluzować dokręcone śrubki.Może ożyje jak ustąpi naprężenie i wtedy szukać przerwy. Może nie być łatwo. <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11549">Daro69</a> — 24 kwi 2016, o 21:18</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[michal1990]]></name></author>
<updated>2016-04-24T20:21:02+01:00</updated>
<published>2016-04-24T20:21:02+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15206&amp;p=159187#p159187</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15206&amp;p=159187#p159187"/>
<title type="html"><![CDATA[Re: Problem z wyświetlaczem OLED]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15206&amp;p=159187#p159187"><![CDATA[
Jeżeli coś jest wyświetlane, to wyświetlacz chyba się inicjalizuje. Jedyne co chce wiedziec, to czy możliwe jest to, że świeci tylko jego połowa przez niepoprawne podłączenie (zwarcie), czy gdyby taka sytuacja miała miejsce, to nie świecił by cały wyświetlacz. Jutro wymienię baterie w multimetrze, to będę mogł sprawdzić połączenia.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=12798">michal1990</a> — 24 kwi 2016, o 20:21</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Daro69]]></name></author>
<updated>2016-04-24T20:09:40+01:00</updated>
<published>2016-04-24T20:09:40+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15206&amp;p=159186#p159186</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15206&amp;p=159186#p159186"/>
<title type="html"><![CDATA[Re: Problem z wyświetlaczem OLED]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15206&amp;p=159186#p159186"><![CDATA[
Witam<br />Jeżeli chodzi o zwarcie pinów, to wystarczy sprawdzić multimetrem przestawionym na piszczenie przy zwarciu, albo sprawdzić rezystancję pomiędzy pinami. Natomiast takie zwarcie raczej nie spowoduje uszkodzenie wyświetlacza, jeśli już to scalaka - bo przeciążony.<br /><br />takie moje podejście na szybko do tematu. od tego bym zaczął.<br /><br />Pozdrawiam,<br />Darek P.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11549">Daro69</a> — 24 kwi 2016, o 20:09</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[michal1990]]></name></author>
<updated>2016-04-24T20:00:02+01:00</updated>
<published>2016-04-24T20:00:02+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15206&amp;p=159184#p159184</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15206&amp;p=159184#p159184"/>
<title type="html"><![CDATA[Problem z wyświetlaczem OLED]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15206&amp;p=159184#p159184"><![CDATA[
Witam,<br />mam następujący problem. Korzystam z wyświetlacza OLED SPI zakupionego na stronie ATNEL. Na płytce stykowej wyświetlacz jak najbardziej działał. Dzisiaj postanowiłem trawić płytkę i obudować układ. Podczas przykręcania wyświetlacza do obudowy (robiłem to bardzo delikatnie) usłyszałem lekkie &quot;chrupnięcie&quot;. Nie widać jednak żadnych śladów pęknięcia. Po złożeniu układu i uruchomieniu go okazało się, że świeci tylko dolna część wyświetlacza, natomiast górna jest czarna. Moje pytanie brzmi, czy istnieje możliwość, że wyświetlacz jest niepoprawnie podłączony i w związku z tym świeci tylko jego połowa? Czy niestety uszkodziłem wyświetlacz? Czy zwarcie dwóch pinów może wywołać taki efekt? Proszę o odpowiedzi, bo nie wiem, gdzie szukać przyczyny.<br /><br />Pozdrawiam<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=12798">michal1990</a> — 24 kwi 2016, o 20:00</p><hr />
]]></content>
</entry>
</feed>