ADS7843 Touchscreen Controller en SPI

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • huub8
  • Registratie: Maart 2009
  • Laatst online: 28-06-2021
Ik probeer in opvolging op het werkend krijgen van de aansturing van het lcd scherm nu ook het touchscreen van mijn 3.2inch 320x240 Touch LCD werkend te krijgen. Het gaat om een XPT2046 (compatible with ADS7843) controller.

Datasheet

De code tot dusver (mikroC, voor 18f4550 op 8mhz):

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
// Software SPI module connections
sbit SoftSpi_CS at RB0_bit;
sbit SoftSpi_SDI at RB2_bit;
sbit SoftSpi_SDO at RB4_bit;
sbit SoftSpi_CLK at RB6_bit;

sbit SoftSpi_CS_Direction  at TRISB0_bit;
sbit SoftSpi_SDI_Direction at TRISB2_bit;
sbit SoftSpi_SDO_Direction at TRISB4_bit;
sbit SoftSpi_CLK_Direction at TRISB6_bit;
// End Software SPI module connections


//----------------------------------------
// read the 12-bit result.
unsigned int ads7843_read()
{
  char lsb, msb;

  SoftSpi_CS = 0;
  Soft_SPI_Write(0x90);
  delay_us(2);       // Tacq delay time
  msb = Soft_SPI_Read(0);
  lsb = Soft_SPI_Read(0);
  SoftSpi_CS = 1;

  return (msb << 8) | lsb;
}


char txt[7];

void main() {
  ADCON1 = 0x0F;                         // Configure all ports with analog function as digital
  CMCON = 7;                            // Disable comparators

  UART1_Init(9600);               // Initialize UART module at 9600 bps
  Delay_ms(100);                  // Wait for UART module to stabilize

  UART1_Write_Text("Start");
  UART1_Write(10);
  UART1_Write(13);

  SoftSpi_CS = 1;
  SoftSpi_CS_Direction = 0;             // Set CS# pin as Output
  Soft_SPI_Init();                       // Initialize Soft_SPI
  Delay_ms(100);
  
   while(1)
    {
     IntToStr(ads7843_read(), txt);
     UART1_Write_Text(txt);
     delay_ms(500);
    }
}


Ik krijg alleen nog geen data door. Ik heb al verschillende delays geprobeerd, en het lezen van de y in plaats van x, maar het wil niet lukken.

Acties:
  • 0 Henk 'm!

  • huub8
  • Registratie: Maart 2009
  • Laatst online: 28-06-2021
Ik heb het ook nog eens met hardwarematige spi geprobeerd, maar dit geeft ook geen oplossing.

Acties:
  • 0 Henk 'm!

  • Rifin
  • Registratie: Augustus 2008
  • Laatst online: 06:41
In zo'n situatie zou ik eerst kijken of het aan jouw kant (is SPI) goed gaat. Heb je een logic analyzer of scope o.i.d.? Hang die aan je mcu, kan je zien wat je stuurt over SPI?

Acties:
  • 0 Henk 'm!

  • huub8
  • Registratie: Maart 2009
  • Laatst online: 28-06-2021
Ik heb alleen een analoge scope, er staat wel signalen op de pinnen, en ze zien er logisch uit, maar meer kan ik niet zien.

Acties:
  • 0 Henk 'm!

  • Ethnocentrix
  • Registratie: Augustus 2002
  • Nu online

Ethnocentrix

Rijkserkend prutser

Hoe lang zijn je kabels tussen je display en de microcontroller? SPI kan behoorlijk moeilijk doen met (te) lange kabels.

You know you're an engineer if you have no life & can prove it mathematically.


Acties:
  • 0 Henk 'm!

  • Sissors
  • Registratie: Mei 2005
  • Niet online
Sowieso welke settings initialiseer je SPI standaard? Je kan altijd snelheid verminderen, maar tbh dan verwacht ik onbetrouwbare resultaten te krijgen, niet geen resultaten. Aan de andere kant, even datasheet bekeken, dat ding gebruikt zijn SPI klok ook als clock input voor zijn ADC. En die is gerate op 125kHz. Ik verwacht niet dat soft-SPI standaard bijzonder snel is, aan andere kant mijn uC die ik momenteel gebruikt initaliseert standaard SPI op 1MHz, dus dan zou hij wel over zijn nek gaan bij standaard instellingen.

Had de datasheet ook al doorgekeken en dat ding werkt in SPI modus 0, dus ik neem aan dat die standaard staat ingesteld in je library, maar je hebt in principe ook nog modi 1-3.


Heb je al gekeken wat de Duty/Dout pinnen doen tijdens het schrijven van data? Die zijn namelijk gedefinieerd in de datasheet. Dout is het makkelijkste, verander je Soft_SPI_Write(0x90) in Soft_SPI_Read(0x90); (Ik ga er iig uit dat dat zo werkt). Dan lees je je Dout pin in, als je dat dan naar de computer verstuurd kan je kijken of het klopt (eerste bits laag, laatste hoog), dus er moet een klein getal uit komen, maar boven de nul.
Pagina: 1