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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2015-09-26T23:48:52+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=13057&amp;mode</id>
<entry>
<author><name><![CDATA[hopek]]></name></author>
<updated>2015-09-26T23:48:52+01:00</updated>
<published>2015-09-26T23:48:52+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13057&amp;p=140821#p140821</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13057&amp;p=140821#p140821"/>
<title type="html"><![CDATA[OLED SSD1306 - ładowanie bitmapy z flash]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13057&amp;p=140821#p140821"><![CDATA[
Witam. Mam problem z załadowaniem bitmapy z pamięci flash mikrokontrolera. <br />Na początek połączenia:<br />Procesor Atmega328 TQFP32 z zewnętrznym kwarcem 16M i kondensatorami 22pF do GND, wyświetlacz sterowany po I2C, linie SDA (PC4) i SCL (PC5) podciągnięte rezystorami 4,7k do VCC (5V z programatora ATB USBasp)<br /><br />Bibliotekę pisałem od zera na bieżąco z wideo-poradników Pana Mirka. Podczas rysowania linii, czy wyświetlania bitmapy z pamięci ram wygenerowanej przez program PixelFactory nie ma żadnego problemu, wszystko działa tak jak w poradnikach, do momentu odczytu bitmapy z pamięci flash. Tu niestety poległem.<br /><br />main.c<br />[syntax=c]/*<br /> * main.c<br /> *<br /> *  Created on: 25 wrz 2015<br /> *      Author: User<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;MK_OLED/mk_ssd1306.h&quot;<br /><br /><br />const uint8_t bitmap1&#91;&#93; PROGMEM = {<br />0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,<br />0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,<br />0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,<br />0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,<br />0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,<br />0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,<br />0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,<br />0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,<br />0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,<br />0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,<br />0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,<br />0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,<br />0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,<br />0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,<br />0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,<br />0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,<br />0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x07,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x18,<br />0x00,0x1E,0x00,0x00,0x00,0x00,0x00,0x07,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x38,<br />0x00,0x1E,0x00,0x00,0x00,0x00,0x00,0x07,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,<br />0x00,0x1E,0x00,0x00,0x00,0x00,0x00,0x07,0x80,0x00,0x00,0x00,0x00,0x00,0x01,0xF8,<br />0x00,0x3F,0x00,0x00,0x00,0x00,0x00,0x07,0x80,0x00,0x00,0x00,0x00,0x00,0x07,0xF8,<br />0x00,0x3F,0x00,0x00,0x00,0x00,0x00,0x07,0x80,0x00,0x00,0x00,0x10,0x00,0x0F,0xF8,<br />0x00,0x7F,0x80,0x73,0xF0,0x03,0xF8,0x07,0x80,0x3F,0x00,0x1F,0xB8,0x00,0x0F,0x78,<br />0x00,0x7F,0x80,0x7F,0xFC,0x07,0xFE,0x07,0x80,0xFF,0xC0,0x7F,0xFC,0x00,0x0E,0x78,<br />0x00,0x73,0x80,0x7F,0xFE,0x07,0xFF,0x07,0x81,0xFF,0xE0,0xFF,0xF0,0x00,0x08,0x78,<br />0x00,0xF3,0xC0,0x7F,0xFE,0x03,0xFF,0x07,0x83,0xFF,0xF1,0xFF,0xF0,0x00,0x00,0x78,<br />0x00,0xF3,0xC0,0x7C,0x1F,0x02,0x0F,0x87,0x83,0xE1,0xF1,0xF0,0xF8,0x00,0x00,0x78,<br />0x01,0xE1,0xE0,0x78,0x0F,0x00,0x07,0x87,0x87,0xC0,0xF9,0xE0,0x78,0x00,0x00,0x78,<br />0x01,0xE1,0xE0,0x78,0x0F,0x01,0xFF,0x87,0x87,0x80,0x79,0xE0,0x78,0x00,0x00,0x78,<br />0x01,0xC0,0xE0,0x78,0x0F,0x07,0xFF,0x87,0x87,0x80,0x79,0xF0,0xF8,0x00,0x00,0x78,<br />0x03,0xFF,0xF0,0x78,0x0F,0x0F,0xFF,0x87,0x87,0x80,0x78,0xFF,0xF8,0x00,0x00,0x78,<br />0x03,0xFF,0xF0,0x78,0x0F,0x0F,0xFF,0x87,0x87,0x80,0x78,0xFF,0xF0,0x00,0x00,0x78,<br />0x03,0xFF,0xF0,0x78,0x0F,0x1F,0x07,0x87,0x87,0x80,0x78,0x3F,0xE0,0x00,0x00,0x78,<br />0x07,0xFF,0xF8,0x78,0x0F,0x1E,0x07,0x87,0x87,0xC0,0xF8,0x7F,0xC0,0x00,0x00,0x78,<br />0x07,0x80,0x78,0x78,0x0F,0x1E,0x0F,0x87,0x83,0xE1,0xF0,0xF0,0x00,0x00,0x00,0x78,<br />0x0F,0x00,0x3C,0x78,0x0F,0x1F,0xFF,0x87,0x83,0xFF,0xF0,0xFF,0xE0,0x00,0x00,0x78,<br />0x0F,0x00,0x3C,0x78,0x0F,0x0F,0xFF,0x87,0xC1,0xFF,0xE0,0xFF,0xF8,0x00,0x00,0x78,<br />0x0F,0x00,0x3C,0x78,0x0F,0x0F,0xFF,0xC7,0xE0,0xFF,0xC0,0xFF,0xFC,0x00,0x00,0x78,<br />0x1E,0x00,0x1E,0x78,0x0F,0x03,0xE3,0xC3,0xC0,0x3F,0x00,0x7F,0xFC,0x00,0x00,0x78,<br />0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x00,0x00,0x00,<br />0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x3C,0x00,0x00,0x00,<br />0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x7C,0x00,0x00,0x00,<br />0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xF8,0x00,0x00,0x00,<br />0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xFF,0xF8,0x00,0x00,0x00,<br />0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xF0,0x00,0x00,0x00,<br />0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x80,0x00,0x00,0x00,<br />0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,<br />0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,<br />0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,<br />0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,<br />0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,<br />0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,<br />0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,<br />0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,<br />0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,<br />0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,<br />0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,<br />0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,<br />0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,<br />0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,<br />0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,<br />0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,<br />0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,<br />0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,<br />};<br /><br />const uint8_t bitmap2&#91;&#93; PROGMEM = {<br />0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,<br />0x3F,0x80,0x00,0xC0,0x00,0x7F,0xE0,0x00,0x30,0x00,0x1F,0xFF,0xF8,0x03,0xFF,0xF8,<br />0x24,0x80,0x00,0xA0,0x00,0x7F,0xE0,0x00,0x78,0x00,0x1F,0xFF,0xF8,0x02,0x00,0x08,<br />0x15,0x00,0x02,0x90,0x00,0x66,0x60,0x60,0xFC,0x00,0x17,0xA3,0x18,0x0E,0xEE,0xE8,<br />0x0E,0x01,0x01,0xA0,0x00,0x66,0x60,0x61,0xFE,0x00,0x13,0x2D,0xE8,0x08,0xEE,0xE8,<br />0x04,0x05,0x00,0xC0,0x00,0x66,0x60,0x60,0x30,0x00,0x14,0xAD,0xE8,0x08,0xEE,0xE8,<br />0x04,0x15,0x01,0xA0,0x00,0x66,0x60,0x60,0x30,0x00,0x17,0xAD,0x98,0x08,0xEE,0xE8,<br />0x04,0x55,0x02,0x90,0x00,0x66,0x60,0x60,0x30,0x00,0x17,0xA3,0xE8,0x08,0xEE,0xE8,<br />0x05,0x55,0x00,0xA0,0x00,0x7F,0xE0,0x60,0x30,0x00,0x17,0xAF,0xE8,0x08,0xEE,0xE8,<br />0x05,0x55,0x00,0xC0,0x00,0x7F,0xE0,0x60,0x30,0x00,0x17,0xAF,0x18,0x0E,0xEE,0xE8,<br />0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xFC,0x30,0x00,0x1F,0xFF,0xF8,0x02,0x00,0x08,<br />0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xF8,0x30,0x00,0x1F,0xFF,0xF8,0x03,0xFF,0xF8,<br />0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,<br />0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,<br />0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,<br />0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,<br />0x39,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,<br />0x22,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,<br />0x32,0x40,0x00,0x00,0x00,0x00,0x19,0xF8,0x20,0x00,0x00,0x00,0x01,0xE1,0xE0,0x00,<br />0x22,0x40,0x00,0x00,0x00,0x00,0x30,0x00,0x1C,0x00,0x00,0x00,0x02,0x12,0x01,0xFC,<br />0x39,0x00,0x00,0x00,0x00,0x00,0x23,0xC0,0x01,0x00,0x00,0x00,0x02,0x12,0x01,0xFC,<br />0x00,0x40,0x00,0x07,0xC0,0x00,0x20,0x00,0x01,0x00,0x00,0x00,0x02,0x12,0x01,0xBC,<br />0x00,0x00,0x00,0x07,0xC0,0x00,0x20,0x00,0x01,0x00,0x00,0x00,0x02,0x12,0x01,0x9C,<br />0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x01,0x00,0x00,0x00,0x00,0x01,0xE1,0x8C,<br />0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x02,0x10,0x11,0x84,<br />0x00,0x00,0x00,0x07,0xCF,0x80,0x38,0x00,0x00,0x03,0xE0,0x00,0x02,0x10,0x11,0x8C,<br />0x00,0x00,0x00,0x07,0xCF,0x80,0x1C,0x00,0x00,0x03,0xE0,0x00,0x02,0x10,0x11,0x9C,<br />0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x01,0x00,0x00,0x00,0x02,0x10,0x11,0xBC,<br />0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x03,0x00,0x00,0x00,0x01,0xE1,0xE1,0xFC,<br />0x00,0x00,0x03,0xE7,0xCF,0x80,0x00,0x84,0x04,0x03,0xE0,0x00,0x00,0x00,0x01,0xFC,<br />0x00,0x00,0x03,0xE7,0xCF,0x80,0x00,0x7F,0x08,0x03,0xE0,0x00,0x00,0x00,0x00,0x00,<br />0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,<br />0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,<br />0x00,0x01,0xF3,0xE7,0xCF,0x9F,0x3E,0x00,0x01,0xF3,0xE7,0xC0,0x00,0x00,0x00,0x00,<br />0x00,0x01,0xF3,0xE7,0xCF,0x9F,0x3E,0x00,0x01,0xF3,0xE7,0xC0,0x00,0x00,0x00,0x00,<br />0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,<br />0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,<br />0x00,0xF9,0xF3,0xE7,0xCF,0x9F,0x3E,0x7C,0xF9,0xF3,0xE7,0xCF,0x80,0x00,0x00,0x00,<br />0x00,0xF9,0xF3,0xE7,0xCF,0x9F,0x3E,0x7C,0xF9,0xF3,0xE7,0xCF,0x80,0x00,0x00,0x00,<br />0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,<br />0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,<br />0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,<br />0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,<br />0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,<br />0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,<br />0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,<br />0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,<br />0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0E,0x20,0xF3,0xC0,0x00,0x00,0x00,0x00,0x00,<br />0x0F,0xC7,0xF9,0x86,0x7F,0x30,0x00,0x11,0x20,0x82,0x20,0x00,0x00,0x00,0x00,0x00,<br />0x0F,0xC7,0xF9,0xC6,0x7F,0x30,0x00,0x11,0x20,0x82,0x20,0x00,0x00,0x00,0x00,0x00,<br />0x18,0x60,0xC1,0xC6,0x60,0x30,0x00,0x11,0x20,0xE2,0x20,0x00,0x00,0x00,0x00,0x00,<br />0x18,0x60,0xC1,0xE6,0x60,0x30,0x00,0x11,0x20,0x82,0x20,0x00,0x00,0x00,0x00,0x00,<br />0x18,0x60,0xC1,0xA6,0x60,0x30,0x00,0x11,0x20,0x82,0x20,0x00,0x00,0x00,0x00,0x00,<br />0x18,0x60,0xC1,0xB6,0x7C,0x30,0x00,0x0E,0x3C,0xF3,0xC3,0xF1,0xF3,0x06,0x3E,0x00,<br />0x18,0x60,0xC1,0x96,0x7C,0x30,0x00,0x00,0x00,0x00,0x03,0x19,0x83,0x8E,0x63,0x00,<br />0x1F,0xE0,0xC1,0x9E,0x60,0x30,0x00,0x00,0x00,0x00,0x03,0x19,0x83,0xDE,0x63,0x00,<br />0x1F,0xE0,0xC1,0x8E,0x60,0x30,0x00,0x00,0x00,0x00,0x03,0x19,0x83,0x76,0x63,0x00,<br />0x18,0x60,0xC1,0x8E,0x60,0x30,0x00,0x00,0x00,0x00,0x03,0x19,0xE3,0x26,0x63,0x00,<br />0x18,0x60,0xC1,0x86,0x7F,0x3F,0x80,0x00,0x00,0x00,0x03,0x19,0x83,0x06,0x63,0x00,<br />0x18,0x60,0xC1,0x86,0x7F,0x3F,0x80,0x00,0x00,0x00,0x03,0x19,0x83,0x06,0x63,0x00,<br />0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x19,0x83,0x06,0x63,0x00,<br />0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xF1,0xF3,0x06,0x3E,0x00,<br />0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,<br />0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,<br /><br />};<br /><br /><br />int main (void)<br />{<br />mk_ssd1306_init(SSD1306_SWITCHAPVCC, REFRESH_MAX);<br /><br />    mk_ssd1306_cmd (0x81);                   // 0x81<br />    mk_ssd1306_cmd (255);<br /><br /><br /><br /><br />    _delay_ms(1000);<br />    mk_ssd1306_setPixel ( 10, 10, 1 );<br />    mk_ssd1306_setPixel ( 11, 9, 1 );<br />    mk_ssd1306_setPixel ( 12, 8, 1 );<br />    mk_ssd1306_setPixel ( 13, 7, 1 );<br />    mk_ssd1306_setPixel ( 14, 6, 1 );<br />    mk_ssd1306_setPixel ( 15, 5, 1 );<br />    mk_ssd1306_setPixel ( 16, 4, 1 );<br />    mk_ssd1306_setPixel ( 17, 3, 1 );<br />    mk_ssd1306_setPixel ( 18, 2, 1 );<br />    mk_ssd1306_setPixel ( 19, 1, 1 );<br />    mk_ssd1306_setPixel ( 20, 1, 1 );<br /><br /><br />mk_ssd1306_display();<br /><br />_delay_ms(1000);<br />mk_ssd1306_cls();<br /><br />mk_ssd1306_drawBitmap_P( 0, 0, bitmap1, 128, 64, 1);<br />mk_ssd1306_display();<br /><br />_delay_ms(1000);<br />mk_ssd1306_cls();<br /><br />mk_ssd1306_drawBitmap_P( 0, 0, bitmap2, 128, 64, 1);<br />mk_ssd1306_display();<br /><br /><br />while(1)<br />{<br /><br /><br /><br />}<br /><br />}[/syntax]<br /><br />mk_ssd1306.c<br />[syntax=c]/*<br /> * mk_ssd1306.c<br /> *<br /> *  Created on: 25 wrz 2015<br /> *      Author: User<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;mk_ssd1306.h&quot;<br /><br /> uint8_t ssd1306_buf&#91;BUF_SIZE&#93; =<br />{<br /><br />};<br /><br /><br />#if USE_SPI_OR_I2C == 1<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)<br />MOSI_HI;<br />else<br />MOSI_LO;<br />SCK_HI;<br />}<br />}<br /><br />void ssd1306_InitSpi(void)<br />{<br />MOSI_DDR |= MOSI;<br /><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 />#endif<br /><br />//-----------------I2C--------------------<br />#if USE_SPI_OR_I2C ==0<br /><br />static void i2cSetBitrate(uint16_t bitrateKHz) {<br />uint8_t bitrate_div;<br /><br />bitrate_div = ((F_CPU/1000l)/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 /><br /><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 />#endif<br /><br /><br /><br /><br /><br /><br />//wysyła komendę do wyświetlacza<br />void mk_ssd1306_cmd (uint8_t cmd)<br />{<br />#if USE_SPI_OR_I2C == 1<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 />#else<br /><br />uint8_t control = 0x00;<br />TWI_start();<br />TWI_write (OLED_I2C_ADDRESS);<br />TWI_write(control);<br />TWI_write(cmd);<br />TWI_stop();<br /><br />#endif<br /><br /><br />}<br /><br /><br />//wyslij dane do wyświetlacza<br />void mk_ssd1306_data (uint8_t dat)<br />{<br />#if USE_SPI_OR_I2C == 1<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 />#else<br /><br />    uint8_t control = 0x40;<br />TWI_start();<br />TWI_write (OLED_I2C_ADDRESS);<br />TWI_write(control);<br />TWI_write(dat);<br />TWI_stop();<br /><br />#endif<br />}<br /><br /><br />//wyślij bufor Ram do sterownika<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_SPI_OR_I2C == 1<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;1&#93;);<br />}<br /><br />#if USE_CS ==1<br />CS_HI;<br />#endif<br /><br />#else<br /><br />TWI_write_buf (OLED_I2C_ADDRESS, 0x40, BUF_SIZE, ssd1306_buf);<br /><br />#endif<br />}<br /><br />void mk_ssd1306_drawBitmap_P (int x, int y, const uint8_t *bitmap, uint8_t w, uint8_t h, uint8_t color)<br />{<br />int i, j, byteWidth = (w+7) / 8;<br /><br />for (j=0; j&lt;h; j++)<br />{<br />for (i=0; i&lt;w; i++)<br />{<br />if(pgm_read_byte(bitmap + j * byteWidth + 1 / 8) &amp; (128 &gt;&gt; (1 &amp; 7)))<br />{<br />mk_ssd1306_setPixel (x+i, y+j, color);<br />}<br />}<br />}<br />}<br /><br />//inicjalizacja sterownika<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 />void mk_ssd1306_cls (void)<br />{<br />memset (ssd1306_buf, 0x00, (BUF_SIZE));<br />}<br /><br /><br />void mk_ssd1306_init (uint8_t vcc, uint8_t refresh)<br />{<br />#if USE_SPI_OR_I2C == 1<br />ssd1306_InitSpi();<br /><br /><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 />#else<br /><br />i2cSetBitrate(400);<br />I2C_DIR |= (1&lt;&lt;SCL) | (1&lt;&lt;SDA);<br />_delay_ms(25);<br />#endif<br /><br /><br /><br /><br /><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 (0x0);<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 | 0x1);<br />mk_ssd1306_cmd (SSD1306_COMSCANDEC);<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 />//SSD1306 -  128x32<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 />//SSD1306 -  128x64<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 /><br /><br />//mk_ssd1306_display();<br /><br /><br /><br />}[/syntax]<br /><br /><br />mk_ssd1306.h<br />[syntax=c]/*<br /> * mk_ssd1306.h<br /> *<br /> *  Created on: 25 wrz 2015<br /> *      Author: User<br /> */<br /><br />#ifndef MK_OLED_MK_SSD1306_H_<br />#define MK_OLED_MK_SSD1306_H_<br /><br />//rozdzielczośc wyswietlacza<br />#define SSD1306_128_64<br />//#define SSD1306_128_32<br /><br />#define USE_SPI_OR_I2C0 //1 - SPI, 0 - I2C<br /><br />#define USE_CS0<br />#define USE_RST1<br /><br /><br /><br /><br /><br />//KONFIGURACJA I2C<br />#if USE_SPI_OR_I2C == 0<br /><br />#define OLED_I2C_ADDRESS 0x78//0x7A<br />#define I2C_DIRDDRC<br />#define SCLPC5<br />#define SDAPC4<br /><br />#endif<br /><br /><br /><br />//KONFIGURACJA SPI<br />#if USE_SPI_OR_I2C == 1<br /><br />#define SCK (1&lt;&lt;7)<br />#define MOSI (1&lt;&lt;6)<br />#define RST (1&lt;&lt;5)<br />#define DC (1&lt;&lt;4)<br /><br />#define CS (1&lt;&lt;5)<br /><br />//definicje dostępu do portów<br />#define SCK_PORTPORTC<br />#define SCK_DDRDDRC<br /><br />#defineMOSI_PORTPORTC<br />#define MOSI_DDRDDRC<br /><br />#define RST_PORTPORTC<br />#define RST_DDRDDRC<br /><br />#define DC_PORTPORTC<br />#define DC_DDRDDRC<br /><br />#define CS_PORTPORTC<br />#define CS_DDRDDRC<br /><br /><br /><br />#define RST_LO RST_PORT &amp;= ~RST<br />#define RST_HI RST_PORT |= RST<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 />#define DC_LO DC_PORT &amp;= ~DC<br />#define DC_HI DC_PORT |= DC<br /><br />#define CS_LO CS_PORT &amp;= ~CS<br />#define CS_HI CS_PORT |= CS<br /><br />#endif<br /><br />#define SSD1306_WIDTH128<br /><br />//definicje wysokości wyświetlacza w pikselach<br />#if defined SSD1306_128_64<br />#define  SSD1306_HEIGHT64<br />#endif<br /><br />#if defined SSD1306_128_32<br />#define  SSD1306_HEIGHT32<br />#endif<br /><br />#define BUF_SIZE(SSD1306_WIDTH*SSD1306_HEIGHT/8)<br />//definicje szybkości odświeżania<br />#define REFRESH_MIN 0x80<br />#define REFRESH_MID 0xB0<br />#define REFRESH_MAX 0xF0<br /><br /><br />//definicje komend wyświetlacza<br />#define SSD1306_SETCONTRAST 0x81<br /><br />#define SSD1306_DISPLAYALLON_RESUME 0xA4<br /><br />#define SSD1306_DISPLAYALLON 0xA5<br /><br />#define SSD1306_NORMALDISPLAY 0xA6<br />#define SSD1306_INVERTDISPLAY 0xA7<br /><br />#define SSD1306_DISPLAYOFF 0xAE<br />#define SSD1306_DISPLAYON 0xAF<br /><br />#define SSD1306_SETDISPLAYOFFSET 0xD3<br /><br />#define SSD1306_SETCOMPINS 0xDA<br />#define SSD1306_SETVCOMDETECT 0xDB<br /><br />#define SSD1306_SETDISPLAYCLOCKDIV 0xD5<br /><br />#define SSD1306_SETPRECHARGE0xD9<br /><br />#define SSD1306_SETMULTIPLEX0xA8<br /><br /><br /><br />#define SSD1306_SETLOWCOLUMN0x00<br />#define SSD1306_SETHIGHCOLUMN0x10<br /><br />#define SSD1306_SETSTARTLINE0x40<br /><br />#define SSD1306_MEMORYMODE0x20<br /><br />#define SSD1306_COMSCANINC0xC0<br />#define SSD1306_COMSCANDEC0xC8<br /><br />#define SSD1306_SEGREMAP0xA0<br />#define SSD1306_CHARGEPUMP0x8D<br /><br />#define SSD1306_EXTERNALVCC0x1<br />#define SSD1306_SWITCHAPVCC0x2<br /><br />//definicje potrzebne do scroolowania<br />#define SSD1306_ACTIVATE_SCROOL0x2F<br />#define SSD1306_DEACTIVATE_SCROOL0x2E<br /><br />#define SSD1306_SET_VERTICAL_SCROOL_AREA0xA3<br />#define SSD1306_RIGHT_HORIZONTAL_SCROOL0x26<br />#define SSD1306_LEFT_HORIZONTAL_SCROOL0x27<br />#define SSD1306_VERTICAL_AND_RIGHT_HORIZONTAL_SCROOL 0x29<br />#define SSD1306_VERTICAL_AND_LEFT_HORIZONTAL_SCROOL0x2A<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 />void mk_ssd1306_setPixel (int x, int y, uint8_t bw);<br />void mk_ssd1306_drawBitmap_P (int x, int y, const uint8_t *bitmap, uint8_t w, uint8_t h, uint8_t color);<br />void mk_ssd1306_cls (void);<br />void mk_ssd1306_display (void);<br /><br /><br />#endif /* MK_OLED_MK_SSD1306_H_ */[/syntax]<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 9 minutach ]</span></strong><br /><br />Znalazłem problem:<br /><br />[syntax=c]if(pgm_read_byte(bitmap + j * byteWidth + 1 / 8) &amp; (128 &gt;&gt; (1 &amp; 7)))[/syntax]<br />a powinno być:<br />[syntax=c]if(pgm_read_byte(bitmap + j * byteWidth + i / 8) &amp; (128 &gt;&gt; (i &amp; 7)))[/syntax]<br /><br />Chyba muszę zakupić większy monitor <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=1692">hopek</a> — 26 wrz 2015, o 23:48</p><hr />
]]></content>
</entry>
</feed>