ADS7843 Verständnisproblem

OP (Firma: µGFX) #2687532
Lesenswert?
• ▲
▼
Hallo Leute,

Ich brauche mal euere hilfe, ich dreh hier gleich druch :D

Ich versuche hier den ADS7843 controller auszulesen (Touchpad 
controller).

Leider geht zur Zeit noch garnichts, und ich bin mir nicht sicher, ob 
ich nicht villeicht etwas komplett falsch verstehe.

Nach dem studieren des Datenblatts gehe ich davon aus, dass ich wirklich 
nur diese 8 controllbits (das Controllbyte) zum Controller senden muss, 
und dann frisch fröhlich nur das was zurück kommt lesen muss, richtig?

Was ich mache:

tpReadX() {
   1. CS line auf low
   2. 0x98 senden
   3. SPI lesen
   4. CS line auf high
}

tpReadY() {
   1. CS line auf low
   2. 0xd8 senden
   3. SPI lesen
   4. CS line auf high
}

Sollte das so nicht schon genügen um ganz einfach X- und Y-Koordinaten 
mit 8-Bit Auflösung aus dem Ding zu bekommen?

Falls das etwas hilft:  Ich nutze einen STM32F103VET mit ChibiOS.



~ Tectu
#2687724
Lesenswert?
• ▲
▼
Mr. Anderson schrieb:
> Naja, mit dem Punkt 3. hab ich schon so ziemlich das gemeint.
> Im Sinne halt von "lesen was der Controller zurückgibt".
>
> Was genau meinst du mit "Takt nach den ersten 8-Bit"?

Der ADS überträgt ohne Takt nichts (Figure 5 im Datenblatt) D.h. nach 
dem 0x98 bzw. 0xd8 überträgt der ADS nichts mehr bzw. man müsste (je 
nach Implementation, kenne ChibiOS nicht) noch ein/zwei Dummy-Writes 
(und Reads) machen, um die Daten vom ADS zu bekommen.
#2687811
Lesenswert?
• ▲
▼
Hallo,

so schaut eine funktionierendes Auslesen z.B aus.

buf_data[2] = readADC(0x94);  //Write Command Measure Y-Position
buf_data[2] = readADC(0x00);  //Read ADC data Y-Position
buf_data[3] = readADC(0x00);  //Read ADC data Y-Position
buf_data[0] = readADC(0xD4);  //Write Command Measure X-Position
buf_data[0] = readADC(0x00);  //Read ADC data X-Position
buf_data[1] = readADC(0x00);  //Read ADC data X-Position


Gruß G.G.
#3222421
Lesenswert?
• ▲
▼
Hallo,
vielleicht etwas spät aber vielleicht hilft es anderen....

bei mir funktioniert der ADS7843 mit folgender Config mit chibios/gfx:

in board.h

TP_Busy und TP_INT auf PIN_INPUT_PUD configurieren.
CS_TP (SPIx_NSS) auf PIN_OUTPUT_PP_50
SPI2_SCK         auf PIN_ALTERNATE_PP_50
SPI2 MISO        auf PIN_ALTERNATE_PP_50
SPI2_MOSI        auf PIN_ALTERNATE_PP_50

und diesen LLD Driver glue code in z.B. ginput_lld_mouse_XXXXXX.h

#ifndef _GINPUT_LLD_MOUSE_BOARD_H
#define _GINPUT_LLD_MOUSE_BOARD_H

static const SPIConfig spicfg = {
    NULL,
  GPIOB,// CS_TP
    12,
    SPI_CR1_BR_2 | SPI_CR1_BR_0,//baud prescaler 64x
};


/**
 * @brief   Initialise the board for the touch.
 *
 * @notapi
 */
static inline void init_board(void) {
  //SPID2.spi->CRCPR=7;//CRC
  spiStart(&SPID2, &spicfg);
}

/**
 * @brief   Check whether the surface is currently touched
 * @return  TRUE if the surface is currently touched
 *
 * @notapi
 */
static inline bool_t getpin_pressed(void) {
  return (!palReadPad(GPIOG, 7));//TP_INT
}
/**
 * @brief   Aquire the bus ready for readings
 *
 * @notapi
 */
static inline void aquire_bus(void) {
  spiAcquireBus(&SPID2);
  spiSelect(&SPID2);
  chThdSleep(10);
}

/**
 * @brief   Release the bus after readings
 *
 * @notapi
 */
static inline void release_bus(void) {
  spiUnselect(&SPID2);
  spiReleaseBus(&SPID2);
}

/**
 * @brief   Read a value from touch controller
 * @return  The value read from the controller
 *
 * params[in] port  The controller port to read.
 *
 * @notapi
 */
static inline uint16_t read_value(uint16_t port) {
    static uint8_t txbuf[3] = {0};
    static uint8_t rxbuf[3] = {0};
    uint16_t ret;

    txbuf[0] = port;

    spiExchange(&SPID2, 3, txbuf, rxbuf);

    ret = (rxbuf[1] << 5) | (rxbuf[2] >> 3);

  return ret;
}

#endif /* _GINPUT_LLD_MOUSE_BOARD_H */


Damit sollte es dann gehen.

Gruss
Michael

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.