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

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

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=14080&amp;mode</id>
<entry>
<author><name><![CDATA[Arek1111111111]]></name></author>
<updated>2016-01-04T00:58:58+01:00</updated>
<published>2016-01-04T00:58:58+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14080&amp;p=149614#p149614</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14080&amp;p=149614#p149614"/>
<title type="html"><![CDATA[Obsługa panelu dotykowego XPT2046]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14080&amp;p=149614#p149614"><![CDATA[
Zakupiłem wyświetlacz ze sterownikiem SSD1063 i uruchomiłem go na kodzie z BB. Wyświetlacz bardzo ładnie działa jednak nie mogę sobie poradzić z obsługą panelu dotykowego. Kontroler jaki znajduje się na płytce wyświetlacza to XPT2046. Przerwanie od niego działa jednak ciągle odczytuje wartość 0.<br />Testuje na atmedze32 11059000 MHz.<br />Może ktoś już bawił się takim sterownikiem?<br /><br />Na razie staram się przerobić gotowy kod pobrany z internetu bo nie dam rady samemu napisać takiej biblioteki. <br /><br />[syntax=c]int main(void) {<br />int a=123;<br />// inicjalizacja TFT LCD<br />tft_init();<br />TouchInit();<br />tft_cls(black);<br /><br />setCurrentFont(&amp;DefaultFontInfo);<br />tft_puts(0,0, &quot;Touch Panel Test - Arkadiusz Kaliszewski&quot;, fuchsia, black);<br />_delay_ms(1000);<br /><br />sei();// włączenie globalne przerwań<br />tft_cls(black);<br />tft_putint(0,0, a, yellow, black);<br /><br />// --------------- pętla główna programu<br />while(1)<br />{<br /><br />DisplayPosition(10,10,a);<br />a=GetTouchADvalue(X_POS);<br />_delay_ms(100);<br />}<br />}[/syntax]<br /><br /><br /><br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &quot;../SPI/spi.h&quot;<br />#include &quot;touch.h&quot;<br />#include &quot;../MK_SSD1963/MK_SSD1963.h&quot;<br /><br />unsigned int XY_POS&#91;2&#93;={0,0};<br /><br />void TouchInit(void)<br />{<br />InitSpi();<br />Touch_res();<br />DDRB |= (1&lt;&lt;TOUCH_CS);<br />DDRB &amp;= ~(1&lt;&lt;TOUCH_INT);//PE4 connect to Touch screen interrupt<br /><br />}<br /><br />void Touch_set(void)<br />{<br />/*----SPI----*/<br />//SCLK = Fosc/64<br />//---SPCR |= (1&lt;&lt;SPR1) | (1&lt;&lt;SPR0) | (1&lt;&lt;CPHA);<br />SPCR |= (1&lt;&lt;SPR1) | (1&lt;&lt;SPR0);<br />SPSR |= (1&lt;&lt;SPI2X);<br />//asm(&quot;nop&quot;);<br /><br />/*-----touch set-------*/<br />}<br />/**************************************************************************************<br />* Ăű    łĆ: GetTouchADvalue<br />* ą¦    ÄÜ: µĂµ˝´ĄĂţĆÁµÄADÖµ<br />* ˛Î    Ęý: ŇŞ˛ÉĽŻµÄADÍ¨µŔĽ°ĂüÁî<br />* ·µ »Ř Öµ:<br />* ±¸    ×˘: 24 Clocks-per-Conversion<br />**************************************************************************************/<br />unsigned int GetTouchADvalue(unsigned char CMD)<br />{<br />unsigned char spi_data;<br />unsigned int ad_value = 0;<br />Touch_cs();//Ć¬Ńˇ<br />//spi_data = spiTransferByte(CMD);<br />spi_data=Spi_kan_1(CMD);<br />asm(&quot;nop&quot;);<br />asm(&quot;nop&quot;);<br />asm(&quot;nop&quot;);<br />asm(&quot;nop&quot;);<br />asm(&quot;nop&quot;);<br /><br />//ad_value = spi_send(0x00);<br />ad_value = Spi_kan_1(0x00);<br />//ad_value |= spi_data;<br />//ad_value &lt;&lt;= 8;<br />//spi_data = spi_send(0x00);<br />spi_data = Spi_kan_1(0x00);<br />ad_value &lt;&lt;= 8;<br />ad_value |= spi_data;<br />Touch_res();//ĘÍ·Ĺ<br />ad_value &gt;&gt;= 3;<br />return ad_value;<br />}<br />/**************************************************************************************<br />* Ăű    łĆ: Touch_XY<br />* ą¦    ÄÜ: ĽĆËăXYÔÚĆÁÄ»ÉĎµÄÎ»ÖĂ<br />* ˛Î    Ęý: Ö¸ŐëÖ¸Ďň´ć·ĹXYµÄADÖµµÄĘý×é<br />* ·µ »Ř Öµ: ÎŢ<br />*<br />**************************************************************************************/<br />void Touch_XY(unsigned int *pxy)<br />{<br />asm(&quot;nop&quot;);<br />asm(&quot;nop&quot;);<br />asm(&quot;nop&quot;);<br /><br />}<br />/**************************************************************************************<br />* Ăű    łĆ: DisplayPosition<br />* ą¦    ÄÜ: ÔÚŇşľ§ÉĎµÄÖ¸¶¨Î»ÖĂĎÔĘľĘý×Ö<br />* ˛Î    Ęý:<br />* ·µ »Ř Öµ: ÎŢ<br />* ±¸    ×˘: żÉŇÔĎÔĘľµÄĘý×Ö·¶Î§0000~9999<br />**************************************************************************************/<br />void DisplayPosition(unsigned int x, unsigned int y, unsigned int Pos)<br />{<br />unsigned int temp;<br />unsigned char i;<br />temp = Pos;<br />i = temp/1000;<br />//DrawAscii(x,y,(i+0x30),BLUE,WHITE, NORMAL);<br />tft_putint(x,y, i, yellow, black);<br />temp = temp % 1000;<br />i = temp/100;<br />//DrawAscii(x+8,y,(i+0x30),BLUE,WHITE, NORMAL);<br />tft_putint(x+8,y, i, yellow, black);<br />temp = temp % 100;<br />i = temp/10;<br />//DrawAscii(x+16,y,(i+0x30),BLUE,WHITE, NORMAL);<br />tft_putint(x+16,y, i, yellow, black);<br />temp = temp % 10;<br />i = temp;<br />//DrawAscii(x+24,y,(i+0x30),BLUE,WHITE, NORMAL);<br />tft_putint(x+24,y, i, yellow, black);<br />}[/syntax]<br /><br /><br />[syntax=c]#ifndef TOUCH_TOUCH_H_<br />#define TOUCH_TOUCH_H_<br /><br />#define Start_bit0x80<br />#define Mode_12bit0x00<br />#define Mode_8bit0x08<br />#define SER_Mode0x04<br />#define DFR_Mode0x00<br /><br />#define PD_Mode00x00//PENIRQ Enabled,Power-Down Between Conversions.<br />#define PD_Mode10x01//PENIRQ Disabled,Reference is off and ADC is on.<br />#define PD_Mode20x02//PENIRQ Enabled,Reference is on and ADC is off.<br />#define PD_Mode30x03//PENIRQ Disabled,Device is always powered.<br />//Reference is on and ADC is on.<br />#define TEMP00x00<br />#define TEMP10x70<br />#define BAT_monitor0x20<br />#define AUX_in0x60<br />#define Y_POS0x10<br />#define X_POS0x50<br />#define Z1_POS0x30<br />#define Z2_POS0x40<br /><br />#define TOUCH_CSPB0<br />#define TOUCH_INTPB1<br />#define Touch_cs()PORTB &amp;= ~(1&lt;&lt;TOUCH_CS)<br />#define Touch_res()PORTB |= (1&lt;&lt;TOUCH_CS)<br /><br />void TouchInit(void);<br />void Touch_set(void);<br />unsigned int GetTouchADvalue(unsigned char CMD);<br />void Touch_XY(unsigned int *pxy);<br />void DisplayPosition(unsigned int x, unsigned int y, unsigned int Pos);<br /><br /><br /><br />#endif /* TOUCH_TOUCH_H_ */[/syntax]<br /><br /><br /><br />Problem rozwiązany. Znalazłem inną działającą bibliotekę w czeluściach internetu.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3349">Arek1111111111</a> — 4 sty 2016, o 00:58</p><hr />
]]></content>
</entry>
</feed>