hallo, versuche mich gerade am Umstieg WIN-avr auf stm-cube. Probleme habe ich mit dem ili-touchpad. Egal wo man drückt - es gibt immer eine Punktwolke in der rechten unteren Ecke. Die Schreib- und Lesefunktion scheint o.k. zu sein. Die auf dem tft angezeigten Werte raw_x/raw_y schwanken zwischen hoch und niedrig ohne dass ein Bezug zum gedrückten Bereich festzustellen ist. Harware- oder Software-Problem? Danke für Unterstützung
war da nicht was, daß man resistive Touchpanels kalibrieren muss? Denn das ist das Ding, resistiv.
Harald K. schrieb: > kalibrieren Im code ist eine Kalibrierung drin. Die raw-Werte - vor der Kalibrierung - müssten sich aber entsprechend der gedrückten Position verändern - tun sie aber nicht.
Karl K. schrieb: > Die raw-Werte - vor der Kalibrierung > - müssten sich aber entsprechend der gedrückten Position verändern - tun > sie aber nicht. Wenn das oben die Raw-Werte sind, schreien die nach einem Fehler beim Einlesen oder Verarbeiten der Daten, das sind 0x5fff und 0xff.
Karl K. schrieb: > Harware- oder Software-Problem? Hast du berücksichtigt dass die SPI-Clockrate passend niedrig eingestellt sein muss? Die wichtigsten Werte für Clock Zyklus sind für Low und High jeweils 200 nsec, ergibt schon mal einen Maximalwert von ca. 2.5 MHz für die Taktrate.
Wastl schrieb: > 200 nsec,
1 | TP_CLK_PORT->BSRR=TP_CLK_PIN; |
2 | _delay_us(50); |
3 | TP_CLK_PORT->BSRR=TP_CLK_PIN<<16; |
4 | _delay_us(50); |
Danke, das probier ich aus.
Karl K. schrieb: > _delay_us(50); Ist das dein Ernst? Das ist unnötig lang ..... Meine Bemerkung zum Taktzyklus sind die Werte für die minimale Periodendauer, natürlich dürfen die länger sein. Ausserdem blockierst du deinen Controller unnötig lang mit deinen Delays. Nutze doch einen SPI Controller zum Kommunizieren mit dem XPT2046.
Karl K. schrieb: > versuche mich gerade am Umstieg WIN-avr auf stm-cube Von CubeMx kann ich in deinen Sourcen aber nichts erkennen.
Wastl schrieb: > Nutze doch einen SPI Controller zum > Kommunizieren mit dem XPT2046. Ich hab die pins für spi5 angeschlossen. Nachdem das nicht ging hab ich auf den software-spi umgestellt. Der software-spi ist ausweislich des Osci wohl ok. Es wird gesendet und empfangen. Nur was empfangen wird ist leider Mist. Es geht jetzt erst mal um Fehlersuche - auf hw-spi kann ich umstellen wenn es mit dem sw-spi geklappt hat. Wastl schrieb: > Von CubeMx kann ich in deinen Sourcen aber nichts erkennen. Ich versuche registernah zu programmieren.
Karl K. schrieb: > Ich versuche registernah zu programmieren. Das funktioniert auch prächtig mit den Low-Level-Libraries. Wenn du deren Makros benutzt bist du weitgehend unabhängig von der Art des STM32-Controllers. Karl K. schrieb: > Nachdem das nicht ging hab ich > auf den software-spi umgestellt. Das umgeht man indem man einfach die Hardware in CubeMx initialisieren lässt. Dort beim Code-Generieren immer die LL Libraries, nicht die HAL Libraries verwenden, dann kann man sehr registernah Programmieren ohne ein einziges Register mit Namen zu kennen.
Karl K. schrieb: > versuche mich gerade am Umstieg WIN-avr auf stm-cube Du verwendest - dem Foto nach zu urteilen - ein Blackpill Modul. Ist es ein F401 oder ein F411? Man könnte sich mit CubeMX sehr schnell ein funktionsfähiges Gerüst aufbauen.
Wastl schrieb: > nicht die HAL Libraries verwenden, dann kann > man sehr registernah Programmieren ohne ein einziges > Register mit Namen zu kennen. Sowas Triviales kann man deutlich komfortabler mit HAL erschlagen. LL hat natürlich seine Berechtigung, aber ganz sicher nicht in diesem Fall. Auch mit HAL kommt man direkt an die Register - was aber in den meisten Fällen gar nicht erforderlich ist, wenn man das von Anfang an in CubeMX korrekt definiert.
Harry L. schrieb: > Sowas Triviales kann man deutlich komfortabler mit HAL erschlagen. > LL hat natürlich seine Berechtigung, aber ganz sicher nicht in diesem > Fall. Vielleicht möchte der TO das aber nicht? Karl K. schrieb: > Ich versuche registernah zu programmieren.
Wastl schrieb: > Harry L. schrieb: >> Sowas Triviales kann man deutlich komfortabler mit HAL erschlagen. >> LL hat natürlich seine Berechtigung, aber ganz sicher nicht in diesem >> Fall. > > Vielleicht möchte der TO das aber nicht? > > Karl K. schrieb: >> Ich versuche registernah zu programmieren. Ja...typisch Anfänger. Die haben irgendwo aufgeschnappt, daß man als Profi jedes Bit mit Vornamen kennen muß, und deshalb ist es ja total cool, das Rad jeden Tag neu zu erfinden.
Wastl schrieb: > Man könnte sich mit > CubeMX sehr schnell ein funktionsfähiges Gerüst aufbauen. Naja - sehr schnell ist relativ. Bis das ili9341 lief, das war für mich schon grenzwertige Quälerei. Ich denke aber auch, wenn die Grundfunktionen erst mal funktionieren ist das ein tolles System. Blackpill F411 ist auch eine andere Hausnummer wie der M328Nano - und das ganze für rund 6€. Habe mir jetzt das Datenblatt für den xpt2046 heruntergeladen. Man kann da noch bisschen was beim Schreibbefehl einstellen. Das werde ich morgen mal ausprobieren.
Karl K. schrieb: > Habe mir jetzt das Datenblatt für den xpt2046 heruntergeladen. Wie hat du denn vorher überhaupt Code dafür geschrieben? kopfschüttel Normalerweise besorgt man sich das Datenblatt bevor man die erste Zeile Code schreibt.
Harry L. schrieb: > Wie hat du denn vorher überhaupt Code dafür geschrieben? kopfschüttel Arbeit macht man sich nur wenn man muss. Wenn es fertigen Code im I-net gibt, probiert man den aus. Wenn es klappt ist gut, braucht man kein Datenblatt. Wenn es nicht klappt, muss man den Fehler suchen, dann ist ein Datasheet hilfreich. Ich habe noch mehr vor und hätte den Aufwand mit dem tp gern gering gehalten.
Karl K. schrieb: > Harry L. schrieb: >> Wie hat du denn vorher überhaupt Code dafür geschrieben? kopfschüttel > > Arbeit macht man sich nur wenn man muss. Wenn es fertigen Code im I-net > gibt, probiert man den aus. Wenn es klappt ist gut, braucht man kein > Datenblatt. Wenn es nicht klappt, muss man den Fehler suchen, dann ist > ein Datasheet hilfreich. Ich habe noch mehr vor und hätte den Aufwand > mit dem tp gern gering gehalten. Karl K. schrieb: > Ich versuche registernah zu programmieren. Aha! Und das ohne Datenblatt!? - Respekt! Merkste selbst oder? Bei so einer Herangehensweise empfehle ich dir dringend, dir ein anderes Hobby zu suchen!
clk und Miso - man sieht, dass bei jedem zweiten Durchgang keine Daten gesendet werden. Habe jetzt die Zeiten in den Nano-Bereich geändert und verschiedene Modi ausprobiert - TP_Writex(READ_Y|(1<<6)|(1<<2)); - bringt alles nichts. Ich lass das mit dem TP wohl erst mal sein.
Karl K. schrieb: > versuche mich gerade am Umstieg WIN-avr auf stm-cube. Irgendwie klingt dein Problem so gar nicht als wäre es auf einen Wechsel der Entwicklungsumgebung zurückzuführen. Ist es nicht eher so dass du damit auch einen komplett anderen Controller verwendest?
:
Bearbeitet durch User
Hier mal ein Design-Vorschlag wie ich das machen würde. Alle Low-Level (Register-) Zugriffe über die LL Libraries. Kein HAL und kein einziger Register-Name wird verwendet, ausser bei den (optimierten) SPI-Zugriffen. Trotzdem schnell und effizient, "man" versteht es sogar, was man bei HAL Aufrufen nicht immer behaupten kann. SPI1 für TFT, SPI2 für Touch Controller. Das ist ein Atollic Studio Projekt, kann leicht in die CubeIDE importiert werden.
Karl K. schrieb: > man sieht, dass bei jedem zweiten Durchgang keine Daten gesendet werden. Man sieht dass man nichts sieht, da du nicht zeigst bzw. erklärst was genau du machst. Es liegt in der Natur der Sache dass man von einem SPI Slave erst etwas bekommt wenn man ihm sagt was er tun soll. Soviel zu der unklaren Aussage "jeder zweite Durchgang". Karl K. schrieb: > Habe jetzt die Zeiten in den Nano-Bereich geändert Wastl schrieb: > Meine Bemerkung zum Taktzyklus sind die Werte für die minimale > Periodendauer, natürlich dürfen die länger sein.
Wastl schrieb: > Man sieht dass man nichts sieht, Man sieht einzelne 24-bit cyclen, die durch ein längeres delay abgegrenzt sind. cyclus 1,2,4 und 6 sind ok: 8cyclen Mosi werden nicht dargestellt das das oszi nur 2Kanäle hat, dann kommen 16cyclen Miso. Bei cyclen 3,5,7 kommt auf Miso gar nichts. Wastl schrieb: > Hier mal ein Design-Vorschlag Ich versuche ja, einheitlich mit dem avr zu programmieren. Bei mir sieht das zur Zeit so aus:
1 | #define GLUE(a, b) a##b
|
2 | #define GPIO(x) GLUE(GPIO,x)
|
3 | #define reg_dir_out(port,pin) \
|
4 | {GPIO(port)->MODER&=~(0b11<<(pin*2)); \
|
5 | GPIO(port)->MODER|= (0b01<<(pin*2)); \
|
6 | GPIO(port)->PUPDR&=~(0b11<<(pin*2)); \
|
7 | GPIO(port)->OTYPER&=~(1<<pin); \
|
8 | GPIO(port)->OSPEEDR&=~(0b11<<pin);}
|
9 | #define reg_dir_in(port,pin,pullup) \
|
10 | {/* 0b00no 0b01pu 0b10pd */ \ |
11 | GPIO(port)->MODER&=~(0b11<<(pin*2)); \
|
12 | GPIO(port)->PUPDR&=~(0b11<<(pin*2)); \
|
13 | GPIO(port)->PUPDR|= (pullup<<(pin*2));}
|
14 | |
15 | |
16 | #define pinset(x,y) GPIO(x)->BSRR|=(1<<y)
|
17 | #define pinclr(x,y) GPIO(x)->BSRR|=(1<<(y+16))
|
18 | #define pinget(x,y) (GPIO(x)->IDR & (1<<(y)))
|
19 | |
20 | #define led1_port C
|
21 | #define led1_pin 13
|
22 | |
23 | #define led1_tog GPIO(led1_port)->ODR ^=(1<<led1_pin)
|
24 | #define led1_on GPIO(led1_port)->BSRR|=(1<<led1_pin)
|
25 | #define led1_off GPIO(led1_port)->BSRR|=(1<<(led1_pin+16))
|
aus HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_RESET); wird dann pinclr(C,13); Aber das ist zur Zeit noch nicht die Baustelle. Im Prinzip möchte ich aber von dem Code-Mischmasch /* USER CODE BEGIN USART2_Init 2 */ /* USER CODE END USART2_Init 2 */ zwischen eigenem Code und Cube-generiertem Code weg. Nur die Grundeinstellungen von Cube und den Rest in eigenen Code-files.
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.