www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik touchscreen controller ADS7843 problem


Autor: Andreas Herrmann (andy78)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

habe ein Ledsee 320x240 display mit integrierten Touch Controller.


ich habe diesen code erstellt

Mega 2561 16Mhz

typedef struct
{
  uint16_t x;
  uint16_t y;

} tvalues;

void spi_init(void)
{

ss_high();

TOUCH_cs_high();

SPCR=(1<<SPE)|(1<<MSTR);
SPSR=(1<<SPI2X);
}

void get_touch(tvalues *touchvalues)
{

  //read Y
  TOUCH_cs_low();
    spi_putc(0x9c);
  touchvalues->y = spi_putc(0x00);



  TOUCH_cs_high();

  //read x
  TOUCH_cs_low();
    spi_putc(0xdc);
    touchvalues->x = spi_putc(0x00);



  TOUCH_cs_high();
}

ich bekomme als wert x von 40 bis 60

bei y bekomme ich im ruhe modus 127. in richtung pixel x 0 ist der y 
wert 40 in richtung pixel x 320 ist es 50 dort sollte auch 40 sein.

hat jemand vileicht ein Beispiel???


Vielen Dank

Autor: ... (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hast du denn den ADS vorher initialisiert?

Autor: Andreas Herrmann (andy78)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

wie initialisiert da steht nichts im datenblatt???

Gruß

andy

Autor: ... (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
naja,initialisieren ist zuviel gesagt, aber du musst vor jeder Wandlung 
erst ein  Control-Byte senden. Aber ok, machst du ja. Sorry, hatte nicht 
richtig hingeschaut.
Kann noch sein, dass der Touch verschiedene Innenwiderstände in 
x-bzw.y-Richtung hat, dann bekommst du auch unterschiedliche Werte.

Autor: Andreas Herrmann (andy78)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

geht jetzt

void get_touch(tvalues *touchvalues);


void spi_init_Touch(void)
{

ss_high();

TOUCH_cs_high();//CS auf high

SPCR=(1<<SPE)|(1<<MSTR)|(1<<SPR0)|(1<<SPR1);
SPSR=(1<<SPI2X);
}


void get_touch(tvalues *touchvalues)
{
  spi_init_Touch();
  //read Y
  TOUCH_cs_low();
    spi_putc(0x98);
  touchvalues->y = spi_putc(0x00);



  TOUCH_cs_high();

  //read x
  TOUCH_cs_low();
    spi_putc(0xd8);
    touchvalues->x = spi_putc(0x00);



  TOUCH_cs_high();




}


muß jetzt nur noch eine Calibrierung schreiben damit ich pixelgenau 
arbeiten kann.

Ich versuche dann auch mal die 12 bit auflösung.


aber so funktioniert es ziemlich gut.

Will das Display mit den fingern bedienen.

Gruß

Andy

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.