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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2016-10-24T21:23:16+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=10241&amp;mode</id>
<entry>
<author><name><![CDATA[kri27ok]]></name></author>
<updated>2016-10-24T21:23:16+01:00</updated>
<published>2016-10-24T21:23:16+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10241&amp;p=172697#p172697</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10241&amp;p=172697#p172697"/>
<title type="html"><![CDATA[Re: Lcd 2,8'' i panel dotykowy na XPT2046 bledne odczyty]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10241&amp;p=172697#p172697"><![CDATA[
witam kod pod sprzętowe SPI niestety nie działa brak wyświetlania informacji o współrzędnych <br />czekam na sugestie... <br />avr mega 32 zegar wewn 8MHz <br />main fragment <br />[syntax=cpp]if (!(PINA &amp; Touch))<br />        {<br />                  ili9341_setcursor(100,180);<br />printf(&quot;Wcisniety&quot;);<br />InitSSpi();<br />                                spr=TGetXRaw()<br />printf((char*)spr)<br />                }[/syntax]<br />oraz obsługa touch <br />[syntax=cpp]#define Touch (1&lt;&lt;PA7)<br />#define TouchDin (1&lt;&lt;PA6)<br /><br />#define nop()  asm volatile(&quot;nop&quot;)<br /><br />///din<br />#define controlportTC PORTA<br />#define controlddrTC DDRA<br />#define controlpinTC PINA<br />#define dctouch 5<br /><br />///dout<br />#define controlportTC PORTA<br />#define controlddrTC DDRA<br />#define controlpinTC PINA<br />#define dctouch 6<br /><br />///cs<br />#define controlportT PORTD<br />#define controlddrT DDRD<br />#define controlpinT PIND<br />#define cstouch 2<br /><br />#define TOUCH_CLK    4<br />#define TOUCH_CLK_PORT  PORTA<br />#define TOUCH_CLK_DDR   DDRA<br />#define TOUCH_CLK_PIN   PINA<br /><br />void SendSpi ( uint8_t bajt);<br />uint16_t ReadSpi (void);<br />extern uint16_t spi_fast_shift (uint16_t data);<br /><br /><br />int16_t TGetXRAW(void);<br />int16_t TGetYRAW(void);<br />int16_t spr=0;<br /><br />uint16_t spi_fast_shift (uint16_t data)<br />{<br />    SPDR = data;<br />    while((SPSR &amp; (1&lt;&lt;SPIF))==0);<br />    return SPDR;<br />}<br /><br />        void SendSpi ( uint8_t bajt)<br />        {<br />        uint8_t i=0;<br />PORTA &amp;= ~(1&lt;&lt;(TOUCH_CLK));<br />        for(i=0;i&lt;8;i++)<br />        {<br />        ili9341_spi_send(bajt);<br />PORTA |=(1&lt;&lt;(TOUCH_CLK));<br />    nop(); nop();<br />            PORTA &amp;= ~(1&lt;&lt;(TOUCH_CLK));<br />nop(); nop();<br />        bajt &lt;&lt;=1;<br />        }<br />PORTA &amp;= ~(1&lt;&lt;(TOUCH_CLK));<br />        }<br /><br />        uint16_t ReadSpi (void)<br />        {<br />        uint16_t i=0;<br />        uint16_t data=0;<br />        for(i=0;i&lt;12;i++)<br />        {<br />controlportTC |=(1&lt;&lt;dctouch);<br />                         controlportT &amp;=~(1&lt;&lt;cstouch);<br />               PORTA |=(1&lt;&lt;(TOUCH_CLK));<br />   nop(); nop();<br />                          PORTA &amp;= ~(1&lt;&lt;(TOUCH_CLK));<br />   nop(); nop()<br /> //   if (PINA&amp;(1&lt;&lt;TouchDin)) data|=1;<br />  spi_fast_shift(data);<br />data&lt;&lt;=1;<br />}<br />return(data);<br />}<br /><br />        int16_t TGetXRAW(void)<br />        {<br />        int16_t X=0;<br />        SendSpi(0xD0);<br />PORTA |=(1&lt;&lt;(TOUCH_CLK));<br />           nop(); nop();<br />            PORTA &amp;= ~(1&lt;&lt;(TOUCH_CLK));<br />  nop(); nop();<br />        X=ReadSpi();<br />        return(X);<br />        }[/syntax]<br /><br />funkcja send<br /><br />[syntax=cpp]void ili9341_spi_send(unsigned char spi_data)<br />{<br />SPDR=spi_data;<br />while(!(SPSR &amp; (1&lt;&lt;SPIF)));<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=8823">kri27ok</a> — 24 paź 2016, o 21:23</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[cybertom]]></name></author>
<updated>2015-01-30T15:43:58+01:00</updated>
<published>2015-01-30T15:43:58+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10241&amp;p=116580#p116580</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10241&amp;p=116580#p116580"/>
<title type="html"><![CDATA[Re: Lcd 2,8'' i panel dotykowy na XPT2046 bledne odczyty]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10241&amp;p=116580#p116580"><![CDATA[
Witam<br />Niestety zmienne nic nie wniosly nadal wystepuja bledy odczytu. powiedzmy 2 na 10 sa wziete z kosmosu. Rozbieznosc jest spora z wspolrzednej blednie odczytanej x=46 odczytuje 152. Podejrzewam ze cos z panelem jest chyba nie tak. Czesciej te bledy wystepuje jak sie lekko nacisnie panel ale i przy mocniejszych tez sie zdarza. Moze ktos ma jakis pomysl ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2040">cybertom</a> — 30 sty 2015, o 15:43</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[matekogon]]></name></author>
<updated>2015-01-16T11:39:20+01:00</updated>
<published>2015-01-16T11:39:20+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10241&amp;p=114314#p114314</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10241&amp;p=114314#p114314"/>
<title type="html"><![CDATA[Re: Lcd 2,8'' i panel dotykowy na XPT2046 bledne odczyty]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10241&amp;p=114314#p114314"><![CDATA[
Powinieneś zerować wartości x,y po wejściu w funkcję ekran....  Żeby nie zostawały poprzednie współrzędne lub dołożyć zmienną  &quot;Z&quot; jeszcze jedną informującą o samym wciśnięciu panelu<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1380">matekogon</a> — 16 sty 2015, o 11:39</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[cybertom]]></name></author>
<updated>2015-01-16T11:11:50+01:00</updated>
<published>2015-01-16T11:11:50+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10241&amp;p=114311#p114311</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10241&amp;p=114311#p114311"/>
<title type="html"><![CDATA[Lcd 2,8'' i panel dotykowy na XPT2046 bledne odczyty]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10241&amp;p=114311#p114311"><![CDATA[
Witam Panowie. Walcze nad obsluga panelu dotykowego na sterowniku XPT2046.Ogolnie dotyk dziala. Kod do obslugi wykorzystalem z neta. Jednak panel potrafi czasami samoczynnie odczytac dotkniecie wyswietlacza i przelaczyc sie na trzeci ekran.(zawsze jest to ten ekran trzeci); Spojrzcie na kod. <br /><br />biblioteka obslugi panelu dotykowego.<br />[syntax=c]#include &quot;touch.h&quot;<br /><br />#define nop()  asm volatile(&quot;nop&quot;)<br /><br />void touch_init(void) {<br />  PORT|= _BV(TOUCH_CLK) | _BV(TOUCH_IN);<br />  DDR |= _BV(TOUCH_CLK) | _BV(TOUCH_IN);<br />}<br /><br />void touch_write_data(uint_fast8_t data) {<br />  PORT&amp;= ~(_BV(TOUCH_CLK));<br /><br />  for (uint8_t mask = 0x80; mask; mask &gt;&gt;= 1)<br />  {<br />    if (data &amp; mask) {<br />      PORT|= _BV(TOUCH_IN);<br />    } else {<br />      PORT&amp;= ~(_BV(TOUCH_IN));<br />    }<br /><br />    PORT&amp;= ~(_BV(TOUCH_CLK));<br />    nop(); nop(); nop();<br />    PORT|= _BV(TOUCH_CLK);<br />    nop(); nop(); nop();<br />  }<br />}<br /><br />uint16_t touch_read_data(void) {<br />  uint16_t data = 0;<br /><br />  for(uint_fast8_t count = 12; count; --count)<br />  {<br />    PORT|= _BV(TOUCH_CLK);<br />    nop(); nop(); nop();<br />    PORT&amp;= ~(_BV(TOUCH_CLK));<br />    nop(); nop(); nop();<br /><br />    if (PIN &amp; _BV(TOUCH_OUT)) {<br />      data |= 1;<br />    }<br /><br />    data &lt;&lt;= 1;<br />  }<br /><br />  return data;<br />}<br /><br />void touch_read(uint16_t * out_x, uint16_t * out_y) {<br />  int temp_x, temp_y;<br />  int32_t tx = 0, ty = 0;<br /><br />int_fast8_t datacount = 0;<br /><br />for (uint_fast8_t i = 10; i; --i) {<br />touch_write_data(0x90);<br /><br />    PORT|= _BV(TOUCH_CLK);<br />    nop(); nop();<br />    PORT&amp;= ~(_BV(TOUCH_CLK));<br />    nop(); nop();<br />temp_x = touch_read_data();<br /><br />touch_write_data(0xD0);<br />    PORT|= _BV(TOUCH_CLK);<br />    nop(); nop();<br />    PORT&amp;= ~(_BV(TOUCH_CLK));<br />    nop(); nop();<br />temp_y = touch_read_data();<br /><br />    if (temp_x &amp;&amp; temp_y<br />        // &amp;&amp; (temp_x &gt; 0x01A0)<br />        &amp;&amp; (temp_x &lt; 0x1F10)<br />      //   &amp;&amp; (temp_y &gt; 0x02A3)<br />        &amp;&amp; (temp_y &lt; 0x1EE6)<br />     ) <br />     {<br />ty += temp_x;<br />tx += temp_y;<br />++datacount;<br />    }<br />}<br /><br /><br />if (datacount) {<br />    tx /= datacount;<br />    ty /= datacount;<br /><br />    // TODO: move all these to constants. I'm just being super hacky atm<br />    tx -= 0x1A0;<br />    ty -= 0x2A3;<br /><br />    tx *= 240;<br />    tx /= (0x1F10 - 0x01A0);<br /><br />    ty *= 320;<br />    ty /= (0x1EE6 - 0x02A3);<br /><br />    if (tx &lt; 0) {<br />      tx = 0;<br />    } else if (tx &gt; 239) {<br />      tx = 239;<br />    }<br /><br />    if (ty &lt; 0) {<br />      ty = 0;<br />    } else if (ty &gt; 319) {<br />      ty = 319;<br />    }<br /><br />  //  *out_x = tx;<br />  //  *out_y = 320-ty;<br />    *out_y = tx;<br />    *out_x = ty;<br />} else {<br />*out_x = *out_y = 0xFFFF;<br />}<br />}<br /><br />uint_fast8_t touch_available(void) {<br />  return !(PIN &amp; _BV(TOUCH_PENIRQ));<br />}[/syntax]<br /><br />oraz ulamek kodu w petli glownej<br />[syntax=c]while(1)<br /> {  <br /><br />if (touch_available())<br />{<br />touch_read(&amp;x, &amp;y);<br />if (x &gt; 165 &amp;&amp; x &lt; 319 &amp;&amp; y &gt; 161 &amp;&amp; y &lt; 239) { czysc(); ekran_pierwszy();}<br />if (x &gt; 0   &amp;&amp; x &lt; 160 &amp;&amp; y &gt; 161 &amp;&amp; y &lt; 239 ) { czysc(); ekran_drugi(); }<br />if (x &gt; 165 &amp;&amp; x &lt; 239 &amp;&amp; y &gt; 80  &amp;&amp; y &lt; 160 ) { czysc(); ekran_trzeci(); }<br /><br />}<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2040">cybertom</a> — 16 sty 2015, o 11:11</p><hr />
]]></content>
</entry>
</feed>