<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pl-pl">
<link rel="self" type="application/atom+xml" href="https://forum.atnel.pl/feed.php?f=4&amp;t=22388&amp;mode" />

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2019-07-08T10:50:55+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=22388&amp;mode</id>
<entry>
<author><name><![CDATA[Tom277]]></name></author>
<updated>2019-07-08T10:50:55+01:00</updated>
<published>2019-07-08T10:50:55+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22388&amp;p=220301#p220301</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22388&amp;p=220301#p220301"/>
<title type="html"><![CDATA[Re: OLED I2C problem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22388&amp;p=220301#p220301"><![CDATA[
Niestety nadal nic. <br />Adres który wpisuję 0x3C odczytałem jakimś skanerem I2C na Arduino bezpośrednio z podłączonego wyświetlacza.<br /><br />Wpisałem 0x78 niestety wyświetlacz nie wyświetla nawet śniegu.<br /><br />Chyba chodziło o ten wątek<br /><a href="https://forum.atnel.pl/post206321.html?hilit=adres%20I2c%20z%20arduino#p206321"  class="postlink">https://forum.atnel.pl/post206321.html?hilit=adres%20I2c%20z%20arduino#p206321</a><br /><br /><br />edit<br /><br />JEST DZIAŁA !!!  <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=548">Tom277</a> — 8 lip 2019, o 10:50</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Lavir]]></name></author>
<updated>2019-07-05T16:50:38+01:00</updated>
<published>2019-07-05T16:50:38+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22388&amp;p=220256#p220256</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22388&amp;p=220256#p220256"/>
<title type="html"><![CDATA[Re: OLED I2C problem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22388&amp;p=220256#p220256"><![CDATA[
Jeśli na arduino działa Ci z 7 bitowym adresem 0x3C to w Mirkowej bibliotece użyj 0x78 i też będzie działać.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=6703">Lavir</a> — 5 lip 2019, o 16:50</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Marhef]]></name></author>
<updated>2019-07-05T13:54:32+01:00</updated>
<published>2019-07-05T13:54:32+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22388&amp;p=220248#p220248</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22388&amp;p=220248#p220248"/>
<title type="html"><![CDATA[Re: OLED I2C problem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22388&amp;p=220248#p220248"><![CDATA[
Biblioteki z arduino mają inaczej zorganizowane adresowanie modułu. Poszukaj na forum, była o tym mowa. Chyba (ale tego nie jestem pewien) arduino wymaga adresu na 8 bitach, a w bibliotekach Mirka podaje się adres na 7. Ale tak jak piszę, poszukaj, to, co napisałem może nie mieć sensu.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=12752">Marhef</a> — 5 lip 2019, o 13:54</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Tom277]]></name></author>
<updated>2019-07-05T12:54:12+01:00</updated>
<published>2019-07-05T12:54:12+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22388&amp;p=220246#p220246</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22388&amp;p=220246#p220246"/>
<title type="html"><![CDATA[OLED I2C problem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22388&amp;p=220246#p220246"><![CDATA[
Witam<br />Mam problem z uruchomieniem wyświetlacza OLED 0.96&quot;.<br /><br />Przepisałem kod z poradnika Mirka,  to jest ten pierwszy oradnik o wyświetlaczach oled, który się ukazał kilka lat temu. Chciałbym dokończyć zmagania z tym właśnie poradnikiem, ale nie mogę nic uzyskać.<br /><br />Wyświetlacz podłączony jest do płytki Arduino Uno, jako platformy sprzętowej, sprawdziłem podłączenie oraz działanie, programując procesor programem Arduino, wyświetlacz działa oprawnie. Niestety po wgraniu kodu przepisanego z Mirka poradnika na wyświetlaczu nic się nie pokazuje. Wgrywam więc ponownie kod Arduino i jest ok. Tak więc zarówno połączenia są ok jak i sam wyświetlacz.<br />Wyświetlacz jest I2C, procesor Atmega 328p 16MHz. Poniżej wklejam cały kod, który jest dostępny na YouTube wiec chyba mogę.<br /><br />Kod ograniczyłem tylko do inicjalizacji, ale nawet żadnych śmieci nie ma.<br />Podobny eksperyment zrobiłem z kodem Arduino, czyli jedynie inicjalizacja i w tym przypadku uzyskuję &quot;śnieg&quot; na ekranie, a w C i &quot;moim&quot; kodzie nie.<br /><br />Piny I2C w programie C zmienione na SCL PC5, SDA PC4 (Atmega328p)<br /><br />Zmieniłem też adres, mój wyświetlacz ma 0x3C.<br />Nie mam żadnych błędów kompilacji. <br /> <br />Proszę o podpowiedź, co jest nie tak?<br /><br /><br />Main<br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &quot;K_OLED/k_ssd1306.h&quot;<br /><br />int main(void)<br />{<br />ssd1306_ini(SSD1306_SWITCHCAPVCC, REFRESH_MIN);<br /><br />while(1)<br />{<br />}<br />}[/syntax]<br /><br />k_ssd1306.c<br />[syntax=c]/*<br /><br />#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &quot;k_ssd1306.h&quot;<br /><br />uint8_t ssd1306_buf&#91;1024&#93; = {<br />};<br /><br />static void i2cSetBitrate(uint16_t bitrateKHZ){<br />uint8_t bitrate_div;<br /><br />bitrate_div = ((F_CPU/10001)/bitrateKHZ);<br />if(bitrate_div &gt;=16)<br />bitrate_div = (bitrate_div-16)/2;<br /><br />TWBR = bitrate_div;<br />}<br /><br />static void TWI_start(void) {<br />TWCR = (1&lt;&lt;TWINT)|(1&lt;&lt;TWEN)|(1&lt;&lt;TWSTA);<br />while (!(TWCR&amp;(1&lt;&lt;TWINT)));<br />}<br /><br />static void TWI_stop(void) {<br />TWCR = (1&lt;&lt;TWINT)|(1&lt;&lt;TWEN)|(1&lt;&lt;TWSTO);<br />while (TWCR&amp;(1&lt;&lt;TWSTO));<br />}<br /><br />static void TWI_write(uint8_t bajt) {<br />TWDR = bajt;<br />TWCR = (1&lt;&lt;TWINT)|(1&lt;&lt;TWEN);<br />while ( !(TWCR&amp;(1&lt;&lt;TWINT)));<br />}<br /><br />static void TWI_write_buf( uint8_t SLA, uint8_t adr, uint16_t len, uint8_t *buf)<br />{<br />TWI_start();<br />TWI_write(SLA);<br />TWI_write(adr);<br />while (len--) TWI_write(*buf++);<br />TWI_stop();<br />}<br /><br />// ***** wyślij komendę *****<br />void ssd1306_cmd(uint8_t cmd)<br />{<br />uint8_t control = 0x00;<br /><br />TWI_start();<br />TWI_write(OLED_I2C_ADDRESS);<br />TWI_write(control);<br />TWI_write(cmd);<br />TWI_stop();<br />}<br /><br />// ****** wyślij dane *****<br />void ssd1306_data(uint8_t dat)<br />{<br />uint8_t control = 0x40;<br /><br />TWI_start();<br />TWI_write(OLED_I2C_ADDRESS);<br />TWI_write(control);<br />TWI_write(dat);<br />TWI_stop();<br />}<br /><br />// ***** wyślij bufor RAM do sterownika *****<br />void ssd1306_display(void)<br />{<br />ssd1306_cmd(SSD1306_SETLOWCOLUMN | 0x0);<br />ssd1306_cmd(SSD1306_SETHIGHCOLUMN | 0x0);<br />ssd1306_cmd(SSD1306_SETSTARTLINE | 0x0);<br /><br />TWI_write_buf( OLED_I2C_ADDRESS, 0x40, 1024, ssd1306_buf);<br />}<br /><br />// podstawowa funckja do wyświetlania piksela<br />void 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)) 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 />void ssd1306_ini(uint8_t vcc, uint8_t refresh)<br />{<br />i2cSetBitrate(400);<br /><br />I2C_DIR |= (1&lt;&lt;SCL)|(1&lt;&lt;SDA);<br /><br />_delay_ms(50);<br /><br />ssd1306_cmd( SSD1306_DISPLAYOFF);<br />ssd1306_cmd( SSD1306_SETDISPLAYCLOCKDIV);<br />ssd1306_cmd( refresh);<br /><br />ssd1306_cmd( SSD1306_SETDISPLAYOFFSET);<br />ssd1306_cmd( 0x0);<br />ssd1306_cmd( SSD1306_SETSTARTLINE | 0x0);<br />ssd1306_cmd( SSD1306_CHARGEPUMP);<br /><br />if(vcc == SSD1306_EXTERNALVCC) ssd1306_cmd( 0x10);<br />else ssd1306_cmd( 0x14);<br /><br />ssd1306_cmd( SSD1306_MEMORYMODE);<br />ssd1306_cmd( 0x00);<br />ssd1306_cmd( SSD1306_SEGREMAP | 0x1);<br />ssd1306_cmd( SSD1306_COMSCANDEC);<br />ssd1306_cmd( SSD1306_SETCONTRAST);<br /><br />if(vcc == SSD1306_EXTERNALVCC) ssd1306_cmd( 0x9F);<br />else ssd1306_cmd( 0xCF);<br /><br />ssd1306_cmd( SSD1306_SETPRECHARGE);<br /><br />// ssd1306 - 128 x 64<br /><br />ssd1306_cmd( SSD1306_SETMULTIPLEX);<br />ssd1306_cmd( 0x3F);<br />ssd1306_cmd( SSD1306_SETCOMPINS);<br />ssd1306_cmd( 0x12 );<br /><br />ssd1306_cmd( SSD1306_DISPLAYALLON_RESUME );<br />ssd1306_cmd( SSD1306_NORMALDISPLAY );<br /><br />ssd1306_cmd( SSD1306_DISPLAYON);<br /><br />ssd1306_display();<br />}[/syntax]<br /><br />k_ssd1306.h<br />[syntax=c]#ifndef K_OLED_K_SSD1306_H_<br />#define K_OLED_K_SSD1306_H_<br /><br /><br />// parametry wyświetlacza<br />#define SSD1306_128_64// wysokośc 64<br />//#define SSD1306_128_32// wysokośc 32<br />#define SSD1306_WIDTH128// szerokośc<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 />// konfiguracja sprzętowego TWI/ I2C /<br />#define OLED_I2C_ADDRESS0x3C<br /><br />#define I2C_DIRDDRC<br />#define SCLPC5<br />#define SDAPC4<br /><br />#define REFRESH_MIN 0x80<br />#define REFRESH_MID0xB0<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 />#define SSD1306_SETDISPLAYOFFSET    0xD3<br />#define SSD1306_SETCOMPINS          0xDA<br />#define SSD1306_SETVCOMDETECT       0xDB<br />#define SSD1306_SETDISPLAYCLOCKDIV  0xD5<br />#define SSD1306_SETPRECHARGE        0xD9<br />#define SSD1306_SETMULTIPLEX        0xA8<br />#define SSD1306_SETLOWCOLUMN        0x00<br />#define SSD1306_SETHIGHCOLUMN       0x10<br />#define SSD1306_SETSTARTLINE        0x40<br />#define SSD1306_MEMORYMODE          0x20<br />#define SSD1306_COMSCANINC          0xC0<br />#define SSD1306_COMSCANDEC          0xC8<br />#define SSD1306_SEGREMAP            0xA0<br />#define SSD1306_CHARGEPUMP          0x8D<br />#define SSD1306_EXTERNALVCC         0x01<br />#define SSD1306_SWITCHCAPVCC        0x02<br /><br />// Scroolling #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 ///&lt; Init diag scroll<br />#define SSD1306_VERTICAL_AND_LEFT_HORIZONTAL_SCROLL  0x2A<br /><br />void ssd1306_ini(uint8_t vcc, uint8_t refresh);<br />void ssd1306_cmd(uint8_t cmd);<br />void ssd1306_data(uint8_t dat);<br />void ssd1306_display(void);<br />void ssd1306_setPixel(int x, int y, uint8_t bw);<br /><br />#endif /* K_OLED_K_SSD1306_H_ */[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=548">Tom277</a> — 5 lip 2019, o 12:54</p><hr />
]]></content>
</entry>
</feed>