www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik AD7843 SPI-Übertragung


Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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
tmpreg |= (unsigned short)((unsigned int)SPI_Direction_2Lines_FullDuplex | SPI_Mode_Master |
                  SPI_DataSize_8b | SPI_CPOL_High |    
                  SPI_CPHA_2Edge | SPI_NSS_Soft |  
                  SPI_BaudRatePrescaler_256 | SPI_FirstBit_MSB);

Hat jmd eine Idee? Irgendwelche Fehler vorhanden?

Gruß
Oliver

Autor: Oliver (Gast)
Datum:

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

Oliver

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie sieht dein Schaltplan aus?
Hast du das Busy-Signal angeschlossen?

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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....
SPI2->DR = 0xD0; 
while((SPI2->SR & 0x02) == 0x02);

(void)SPI2->DR;

//lesen des MISO wertes  
while((SPI2->SR & 0x01) == 0x01);
Byte = SPI2->DR;

(void)SPI2->SR; 
(void)SPI2->DR;

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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.