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

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

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=46&amp;t=18057&amp;mode</id>
<entry>
<author><name><![CDATA[r03c10]]></name></author>
<updated>2017-04-08T14:42:22+01:00</updated>
<published>2017-04-08T14:42:22+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=18057&amp;p=186625#p186625</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=18057&amp;p=186625#p186625"/>
<title type="html"><![CDATA[Re: Podłączenie wyświetlacza 16 bit pod FSMC]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=18057&amp;p=186625#p186625"><![CDATA[
Dzięki za odpowiedź,<br /><br />Czasy ustawiłem na wartości maksymalne, więc nie powinno być tutaj problemu. Przedtem ustawiałem je zgodnie z notą katalogową. Z tym kwadratem też zauważyłem tą prawidłowość. I ogólnie doszedłem do wniosku, że wszystkie funkcji korzystające z fast_fill_16 działają prawidłowo, a te gdzie wybierany jest pojedynczy piksel sprawiają problemy.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3743">r03c10</a> — 8 kwi 2017, o 14:42</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[gizmo5418]]></name></author>
<updated>2017-04-08T13:36:50+01:00</updated>
<published>2017-04-08T13:36:50+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=18057&amp;p=186623#p186623</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=18057&amp;p=186623#p186623"/>
<title type="html"><![CDATA[Re: Podłączenie wyświetlacza 16 bit pod FSMC]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=18057&amp;p=186623#p186623"><![CDATA[
Witam,<br /><br />Ja obstawiam problem w funkcji wyświetlania znaków, a nie problem z magistralą FSMC. Zauważ, że kwadrat jest wypełniony prawidłowo na obu fotkach, które przedstawiłeś.<br />Kontrolery ILI są dosyć kapryśne. Zawsze możesz zmniejszyć taktowanie kontrolera FSMC. Zaglądnij do PDF-a kontrolera LCD, z jakimi prędokościami może pracować.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1967">gizmo5418</a> — 8 kwi 2017, o 13:36</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[r03c10]]></name></author>
<updated>2017-04-08T11:31:07+01:00</updated>
<published>2017-04-08T11:31:07+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=18057&amp;p=186617#p186617</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=18057&amp;p=186617#p186617"/>
<title type="html"><![CDATA[Re: Podłączenie wyświetlacza 16 bit pod FSMC]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=18057&amp;p=186617#p186617"><![CDATA[
Tak, <strong>pix </strong>to liczba pikseli, a <strong>cl </strong>i <strong>ch</strong> to kolor.<br /><br />Moja funkcja wygląda podobnie jak w przykładzie kolegi. I faktycznie chyba nie ma innej możliwości zrealizowania tej operacji, więc tak już musi zostać.<br /><br />Pojawił się jednak inny problem. Otóż kiedy wyświetlam napis, gubione są losowo piskele. Doszedłem do wniosku, że co jakiś czas na linii danych pojawiają się zakłócenia. Poniżej zdjęcia obrazujące ten problem (mam nadzieję, że brakujące piksele będą widoczne):<br /><br /><a href="https://obrazkiforum.atnel.pl/3743/e66d3563d07ffc9c531d2379201bcb41.jpg"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/3743/e66d3563d07ffc9c531d2379201bcb41.jpg" alt="Obrazek" /></a><a href="https://obrazkiforum.atnel.pl/3743/b32918b6a36ec64b8d711a9a5cb2a1a0.jpg"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/3743/b32918b6a36ec64b8d711a9a5cb2a1a0.jpg" alt="Obrazek" /></a><br /><br />Oczywiście eksperymentuję z timingami FSMC (zwiększyłem czasy) i jakiekolwiek wartości ustawię, efekt jest podobny.<br /><br />Dodatkowo co jakiś czas na moment pojawiają się dziwne paski na LCD co też wygląda niekorzystnie.<br /><br />Całość uruchamiam na DISCO-F429ZI i zastanawiam się czy te zakłócenia nie mają związku z tym, że do pinów FSMC podłączone są inne peryferia (podobny problem miałem z USARTEM).<br /><br />Chyba będę zmuszony powrócić do realizacjo programowej sterowania LCD bo tam wszystko było wolniejsze, ale za to nie miałem problemu z poprawnym wyświetlaniem obrazu.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3743">r03c10</a> — 8 kwi 2017, o 11:31</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[gizmo5418]]></name></author>
<updated>2017-04-07T22:55:47+01:00</updated>
<published>2017-04-07T22:55:47+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=18057&amp;p=186587#p186587</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=18057&amp;p=186587#p186587"/>
<title type="html"><![CDATA[Re: Podłączenie wyświetlacza 16 bit pod FSMC]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=18057&amp;p=186587#p186587"><![CDATA[
Witam,<br /><br />Więc pokaż tą pętlę.<br /><br />Do tej funkcji _fast_fill_16 co jest przekazywane ?<br /><strong>pix</strong> - liczba pikseli ?<br /><strong>ch, cl</strong> - kolor starsza oraz młodsza część ? <br /> <br />To raczej na pewno nie będzie wolniejsze:<br /><br />[syntax=c]void _fast_fill_16( uint16_t kolor, uint32_t pix )<br />{<br />    while( pix-- )<br />    { <br />        LCD_RAM = kolor;<br />    }<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1967">gizmo5418</a> — 7 kwi 2017, o 22:55</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[r03c10]]></name></author>
<updated>2017-04-07T17:25:48+01:00</updated>
<published>2017-04-07T17:25:48+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=18057&amp;p=186556#p186556</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=18057&amp;p=186556#p186556"/>
<title type="html"><![CDATA[Re: Podłączenie wyświetlacza 16 bit pod FSMC]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=18057&amp;p=186556#p186556"><![CDATA[
Wszystko zadziałało za pierwszym razem:) Pytałem trochę na wyrost bo bałem się podchodzić do FSMC. Jednak jego obsługa okazała się naprawdę prosta wbrew pozorom. Opiszę jak to u mnie wygląda. Może komuś się przyda w przyszłości.<br /><br />W CubeMX wybrałem oczywiście NOR Flash/PSRAM/SRAM/ROM/LCD 1. CS podłączone do NE1, RS pod A16.<br /><br />Adresy pamięci dla komend i danych:<br /><br />[syntax=c]#define LCD_REG              (*((volatile unsigned short *) 0x60000000)) <br />#define LCD_RAM              (*((volatile unsigned short *) 0x60020000))[/syntax]<br /><br />Funkcje zapisu komendy i danych:<br /><br />[syntax=c]void LCD_Write_COM(char command) {<br />LCD_REG = command;<br />}<br /><br />void LCD_Write_DATA(uint16_t data) {<br />LCD_RAM = data;<br />}[/syntax]<br /><br />Jednak po pierwszych testach mam pytanie. Biblioteka UTFT oferowała bardzo przydatną funkcję <strong>_fast_fill_16</strong>, która pozwalała na przykład szybko wypełnić ekran. Wyglądała ona tak, że raz ustawialiśmy na pinach dane i potem &quot;banglowaliśmy&quot; tylko pinem WR odpowiednią liczbę razy. Poniżej przykład jak to wyglądało:<br /><br />[syntax=c]void _fast_fill_16(int ch, int cl, long pix)<br />{<br /><br />    long blocks;<br /><br />    GPIOE-&gt;ODR=((uint8_t)ch&lt;&lt;8)|(uint8_t)cl;<br /><br />blocks = pix/16;<br />for (long i=0; i&lt;blocks; i++)<br />{<br />HAL_GPIO_WritePin(WR_GPIO_Port,WR_Pin,GPIO_PIN_RESET);<br />HAL_GPIO_WritePin(WR_GPIO_Port,WR_Pin,GPIO_PIN_SET);<br /><br />HAL_GPIO_WritePin(WR_GPIO_Port,WR_Pin,GPIO_PIN_RESET);<br />HAL_GPIO_WritePin(WR_GPIO_Port,WR_Pin,GPIO_PIN_SET);<br /><br />HAL_GPIO_WritePin(WR_GPIO_Port,WR_Pin,GPIO_PIN_RESET);<br />HAL_GPIO_WritePin(WR_GPIO_Port,WR_Pin,GPIO_PIN_SET);<br /><br />HAL_GPIO_WritePin(WR_GPIO_Port,WR_Pin,GPIO_PIN_RESET);<br />HAL_GPIO_WritePin(WR_GPIO_Port,WR_Pin,GPIO_PIN_SET);<br /><br />HAL_GPIO_WritePin(WR_GPIO_Port,WR_Pin,GPIO_PIN_RESET);<br />HAL_GPIO_WritePin(WR_GPIO_Port,WR_Pin,GPIO_PIN_SET);<br /><br />HAL_GPIO_WritePin(WR_GPIO_Port,WR_Pin,GPIO_PIN_RESET);<br />HAL_GPIO_WritePin(WR_GPIO_Port,WR_Pin,GPIO_PIN_SET);<br /><br />HAL_GPIO_WritePin(WR_GPIO_Port,WR_Pin,GPIO_PIN_RESET);<br />HAL_GPIO_WritePin(WR_GPIO_Port,WR_Pin,GPIO_PIN_SET);<br /><br />HAL_GPIO_WritePin(WR_GPIO_Port,WR_Pin,GPIO_PIN_RESET);<br />HAL_GPIO_WritePin(WR_GPIO_Port,WR_Pin,GPIO_PIN_SET);<br /><br />HAL_GPIO_WritePin(WR_GPIO_Port,WR_Pin,GPIO_PIN_RESET);<br />HAL_GPIO_WritePin(WR_GPIO_Port,WR_Pin,GPIO_PIN_SET);<br /><br />HAL_GPIO_WritePin(WR_GPIO_Port,WR_Pin,GPIO_PIN_RESET);<br />HAL_GPIO_WritePin(WR_GPIO_Port,WR_Pin,GPIO_PIN_SET);<br /><br />HAL_GPIO_WritePin(WR_GPIO_Port,WR_Pin,GPIO_PIN_RESET);<br />HAL_GPIO_WritePin(WR_GPIO_Port,WR_Pin,GPIO_PIN_SET);<br /><br />HAL_GPIO_WritePin(WR_GPIO_Port,WR_Pin,GPIO_PIN_RESET);<br />HAL_GPIO_WritePin(WR_GPIO_Port,WR_Pin,GPIO_PIN_SET);<br /><br />HAL_GPIO_WritePin(WR_GPIO_Port,WR_Pin,GPIO_PIN_RESET);<br />HAL_GPIO_WritePin(WR_GPIO_Port,WR_Pin,GPIO_PIN_SET);<br /><br />HAL_GPIO_WritePin(WR_GPIO_Port,WR_Pin,GPIO_PIN_RESET);<br />HAL_GPIO_WritePin(WR_GPIO_Port,WR_Pin,GPIO_PIN_SET);<br /><br />HAL_GPIO_WritePin(WR_GPIO_Port,WR_Pin,GPIO_PIN_RESET);<br />HAL_GPIO_WritePin(WR_GPIO_Port,WR_Pin,GPIO_PIN_SET);<br /><br />HAL_GPIO_WritePin(WR_GPIO_Port,WR_Pin,GPIO_PIN_RESET);<br />HAL_GPIO_WritePin(WR_GPIO_Port,WR_Pin,GPIO_PIN_SET);<br />}<br />if ((pix % 16) != 0)<br />for (long i=0; i&lt;(pix % 16)+1; i++)<br />{<br />HAL_GPIO_WritePin(WR_GPIO_Port,WR_Pin,GPIO_PIN_RESET);<br />HAL_GPIO_WritePin(WR_GPIO_Port,WR_Pin,GPIO_PIN_SET);<br />}<br />}[/syntax]<br /><br />Teraz z braku możliwości dostępu do pinu WR wpisuję w pętli for dane do LCD_RAM. Wydaje mi się, że spowalnia to cały proces. Może ktoś ma inny pomysł jak to zrealizować żeby osiągnąć poprzednią funkcjonalność.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3743">r03c10</a> — 7 kwi 2017, o 17:25</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[gizmo5418]]></name></author>
<updated>2017-04-03T16:57:37+01:00</updated>
<published>2017-04-03T16:57:37+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=18057&amp;p=186264#p186264</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=18057&amp;p=186264#p186264"/>
<title type="html"><![CDATA[Re: Podłączenie wyświetlacza 16 bit pod FSMC]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=18057&amp;p=186264#p186264"><![CDATA[
Witam,<br /><br />Najpierw poczytaj jak wstawia się kod C w tematach......<br /><br />W CubeMX jaki tryb pracy wybrałeś dla FSMC? Coś mi się wydaje, że nieodpowiedni. Zaglądnij do dokumentacji procka do działu FSMC. Od tego powinieneś zacząć......<br /><br />Jak używasz FSMC to nie machasz programowo żadnymi pinami. Wpisujesz pod konkretny adres w pamięci daną. Generowaniem przebiegów zajmuje się FSMC.<br /><br />A jaki to adres w przestrzeni adresowej będzie - zależy jak masz zrobioną konfigurację FSMC.<br />Co do adresu dane/rejestry - Inny będzie adres dla rejestrów a inny dla danych. Odpowiada za to pin RS.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1967">gizmo5418</a> — 3 kwi 2017, o 16:57</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[r03c10]]></name></author>
<updated>2017-04-04T23:01:07+01:00</updated>
<published>2017-04-03T10:38:50+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=18057&amp;p=186241#p186241</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=18057&amp;p=186241#p186241"/>
<title type="html"><![CDATA[Podłączenie wyświetlacza 16 bit pod FSMC]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=18057&amp;p=186241#p186241"><![CDATA[
Witam,<br /><br />Tym razem chciałbym podłączyć mój wyświetlacz oparty na ili9481 pod szynę FSMC STM32. Skonfigurowałem sobie projekt w CubeMX, ale mam pewne wątpliwości co do podłączenia (chodzi o linie sterujące). Wydaje mi się, że powinno być to w ten sposób połączone:<br /><br />STM32    &lt;-&gt; ili9481<br />FMC_Ax   &lt;-&gt; RS<br />FMC_NE1  &lt;-&gt; CS<br />FMC_NWE &lt;-&gt; WR<br />FMC_NOE &lt;-&gt; RD (nie jest wyprowadzony na module)<br />GPIOx &lt;-&gt; RESET<br /><br />Dobrze myślę?<br /><br />I druga moja wątpliwość. Jak zapisywać dane do tak skonfigurowanego interfejsu. To znaczy jak wpisać komendę, a jak czyste dane? Dotychczas korzystałem z biblioteki UTFT i programowej obsługi LCD. I na przykład moja funkcja wysyłająca komendę wygląda tak:<br /><br />[syntax=c]void LCD_Write_COM(char VL) {<br />HAL_GPIO_WritePin(RS_GPIO_Port, RS_Pin, GPIO_PIN_RESET);<br />LCD_Writ_Bus(0x00, VL, display_transfer_mode);<br />}[/syntax]<br /><br />[syntax=c]void LCD_Writ_Bus(uint8_t VH,uint8_t VL, uint8_t mode)<br />{<br />GPIOE-&gt;ODR=(VH&lt;&lt;8)|VL;<br /><br />HAL_GPIO_WritePin(WR_GPIO_Port,WR_Pin,GPIO_PIN_RESET);<br />HAL_GPIO_WritePin(WR_GPIO_Port,WR_Pin,GPIO_PIN_SET);<br />}[/syntax]<br /><br />Domyślam się, że teraz dane mam zapisywać bezpośrednio pod konkretny adres pamięci. Ale czy muszę nadal ręcznie sterować na przykład pinem RS? Będę wdzięczny za jakieś wskazówki.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3743">r03c10</a> — 3 kwi 2017, o 10:38</p><hr />
]]></content>
</entry>
</feed>