Forum: Mikrocontroller und Digitale Elektronik AD7843 SPI-Übertragung


von Oliver (Gast)


Lesenswert?

Hi!

versuch gerade ohne Erfolg mit dem AD7843 Touchcontroller zu 
kommunizieren. Zu Beginn ist dieser stets aktiv, so dass das erste 
Touch-Event empfangen wird. Anschließend versuche ich per SPI auszulesen 
(SMT32 Prozessor) wo dieser Touch statt gefunden hat.

Leider bekomm ich keine Antwort vom AD7843 zurück. Im Oszilloskop sieht 
das geschickte so aus, wie ich es erwarten würde.

Ich hab 0xD0 und 0x80 gesendet für den X und den Y Wert;
Insgesamt werden immer 8Bit übertragen; die Daten ändern sich an der 
steigenden Flanke (hab die fallende auch schon probiert); das MSB wird 
zuerst geschickt; die Frequenz der Clock liegt momentan bei 150kHz - 
also sehr niedrig (eine höhere im MHz-Bereich brachte auch keine 
Besserung).

Anschließend (nach dem senden von 0xD0 etc.) werden auch keine 
Touch-Events mehr empfangen über den PIRQ Interrupt. So als ob der 
Touch-Controller die Informationen fehlinterpretiert.


Hier noch meine Einstellungen für das SPI Interface
1
tmpreg |= (unsigned short)((unsigned int)SPI_Direction_2Lines_FullDuplex | SPI_Mode_Master |
2
                  SPI_DataSize_8b | SPI_CPOL_High |    
3
                  SPI_CPHA_2Edge | SPI_NSS_Soft |  
4
                  SPI_BaudRatePrescaler_256 | SPI_FirstBit_MSB);

Hat jmd eine Idee? Irgendwelche Fehler vorhanden?

Gruß
Oliver

von Oliver (Gast)


Lesenswert?

hat noch jmd ne Idee, was ich ausprobieren sollte? Bzw. hat jmd ein 
lauffähiges Example?

Oliver

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Wie sieht dein Schaltplan aus?
Hast du das Busy-Signal angeschlossen?

von Oliver (Gast)


Lesenswert?

sorry kann erst jetzt wieder antworten: das busy signal hab ich nicht 
herausgeführt.

Hab aber grad festgestellt, wenn ich das LSB zuerst schicke, dann 
scheint zumindestens die Kommunikation zu funktionieren (PIRQ ein- oder 
ausschalten: einschalten mit 0x80 z.B. und ausschalten mit 0x83)

Wenn ich aber 0xD0 sende, wird der PIRQ auch ausgeschaltet, was ich 
nicht verstehe. Und laut Datenblatt sollten die Werte mit dem MSB zuerst 
gesendet werden...

von Oliver (Gast)


Lesenswert?

genauso hört die Clock nach dem Senden von 0xD0 (X-Wert vom Touch 
auslesen aus dem AD7843) einfach nach den 8x clks auf....
1
SPI2->DR = 0xD0; 
2
while((SPI2->SR & 0x02) == 0x02);
3
4
(void)SPI2->DR;
5
6
//lesen des MISO wertes  
7
while((SPI2->SR & 0x01) == 0x01);
8
Byte = SPI2->DR;
9
10
(void)SPI2->SR; 
11
(void)SPI2->DR;

Die beiden Bits für das Tx und Rx werden gesetzt; allerdings wurde 
nichts übertragen vom AD7843 an den Prozessor.

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
Noch kein Account? Hier anmelden.