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
Theoretisch schon, wenn mit "3. SPI lesen" nicht nur gemeint ist, dass entsprechende Register auszulesen... Takt nach den ersten 8-Bit...
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"?
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.
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.
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
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.