Guten "Abend",
Bekomme meinen Touchscreen an einem ADS7843 nicht so recht zum laufen.
MPU: STM32F103
SPI2
ansprechen funktioniert soweit. Lediglich an der Kalibrierung scheint es
zu scheitern.
Anbei ein Bild des Touchscreens. Evtl. könnt ihr Anhand des Bildes
erkennen ob ich die TS Kontakte korrekt an den ADS7843 angeschlossen
habe.
http://www.pic-upload.de/view-18330990/2013-02-28-23.36.51.jpg.html
von Links nach Rechts : X-, Y-, X+, Y+
Somit könnte ich wenigstens einen Anschlussfehler ausschließen.
Vielen Dank !
Grüße
Dennis
Okay. Zunächst mal vielen Dank !
Also liegt es doch an der Umsetzung.
Ich bin leider noch nicht dazu gekommen den Logic dran zu hängen und zu
überprüfen was wirklich über die Leitung geht.
Ich habe mir folgende Lib angeschaut :
http://mikrocontroller.bplaced.net/wordpress/?page_id=564
Dort wurde SPI allerdings via Software über die GPIOS nachgebildet. Da
der ADS auf meinem Board an SPI2 ( Hardware ) angeschlossen ist, habe
ich "versucht" die Software implementierung auf Hardware zu übersetzen.
Werde sie mal posten, vielleicht findet jemand auf den ersten Blick
schon einen Fehler:
Original :
Hallo,
dein Problem ist, das du in "touch_Write_Byte" CS nach jedem Byte wieder
auf High schaltest. CS muss aber für die Übertragung aller 24 Bits auf
Low bleiben. Steuere das CS-Signal also besser in "P_Touch_Frame"!
Sascha
Okay.. Vielen Dank.
Diesen Fehler habe ich vor 20 Minuten auch gefunden. Zusätzlich war auch
noch der CS Pin Falsch -.-
Die neue get_status sieht nun so aus:
mit dem Logic komme ich auc folgende "Bilder":
"Anhang"
Interessant wären vielleicht auch noch die korrekten Einstellung für die
Hardware SPI:
Unsicher bin ich bei den folgenden Optionen:
SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;
SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_64;
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
SPI_InitStructure.SPI_CRCPolynomial = 7;
Okay.. CS in Touchframe behandeln habe ich "nun" auch.
1
uint16_tP_Touch_Frame(uint8_tframe){
2
3
//P_Touch_Delay(UB_TOUCH_MESS_DELAY);
4
GPIO_ResetBits(GPIOA,GPIO_Pin_11);
5
uint16_ttemp=0;
6
uint16_tdata_in=touch_Get_Status(frame);
7
temp=(data_in>>4);
8
//temp = temp & 0x0FFF;
9
10
GPIO_SetBits(GPIOA,GPIO_Pin_11);
11
12
returntemp;
13
}
In get_data entsprechend entfernt.
Der ADS gibt mir scheinbar nur ein "ECHO" zurück.. ich sende ihm ein D0
und an DOUT gibt er ein D0 zurück. selbiges bei 00 und 90. Bin ich
eventuell zu "schnell" ?
Okay.. nun läuft es -.-
Das Problem war "scheinbar" dass der CS pin von dem Schrittmotortreiber
am gleichen SPI nicht HIGH war zum Zeitpunkt der Touch Abfrage. Sehr
blöder Fehler.. ich hätte wetten können das überprüft zu haben.
Dennoch waren die Funktionen zu Beginn natürlich falsch !
Vielen Dank !