Problem mit PIC & SPI Verbindung

OP (Firma: FH WHV) #555723
Hi zusammen,
ich arbeite das erste Mal mit µControllern, mit der Sprache C und mit 
dem SPI Bus. Ich bitte um Nachsicht falls es sich um ein typisches 
Anfängerproblem handelt oder ich irgendwelche Regeln dieses Forums 
übersehen habe.

Nun zu meinem Problem:

PIC 18F2550, Datenblatt unter 
http://ww1.microchip.com/downloads/en/DeviceDoc/39632b.pdf
AD7142 Capacity-Digital-Converter, Datenblatt unter 
http://www.analog.com/UploadedFiles/Data_Sheets/AD7142.pdf
Ich arbeite mit dem CCS C-Compiler Version 4.023 und dessen 
Entwicklungsumgebung.

Der 18F2550 und der AD7142 sollen über eine SPI Verbindung miteinander 
verbunden werden. Beide Bauteile verfügen über eine entsprechende 
Hardware-Schnittstelle. Der PIC soll den AD7142 initialisieren und 
anschliessend überwachen.

Das Programm im Anhang beschreibt ein 16-Bit Register des AD7142 und 
liest es anschliessend wieder aus. Der Vorgang wird immer wiederholt 
sodass die Beobachtung der Signale mit einem Logic Analyzer/Scope 
leichter ist.
Mit der eigentlichen Anwendung hat das Programm noch nicht viel zutun 
aber es ist für mich ein Test der SPI-Schnittstelle.

Die SPI Verbindung funktioniert insofern das Daten gesendet und 
empfangen werden. Der AD7142 "versteht" die gesendeten Daten und 
Codewörter(read/write) ansonsten würde er z.B. keine Daten ausgeben.

Bei der Ausgabe der Daten gibt es allerdings einen Fehler:
Der PIC sendet z.B. AAAA und empfängt anschliessend AAAB. Das Bit0 des 
16-Bit Datenwortes ist immer eine 1 und ich weiss nicht warum !? MISO 
wird über einen Pullup auf 4V gezogen und es scheint mir so das auf die 
falschen Flanken reagiert bzw zuwenig Takte ausgegeben werden. Ich habe 
schon die unterschiedlichen SPI Modi ausprobiert und bin ansonsten 
ratlos.

Vielleicht kann mir ja jemand von euch helfen.

Ich habe mein Problem hoffentlich deutlich genug dargestellt. Falls noch 
weitere Informationen nötig sind, liefere ich sie gerne und so schnell 
wie möglich :)

Danke
Angehängte Dateien:
OP (Firma: FH WHV)
CS ist low-active .. daran liegt es nicht. Die verschiedenen SPI Modi 
habe ich ausprobiert und es gab keine Änderung. Aus dem Datenblatt des 
AD7142 geht auch nicht wirklich hervor welchen SPI Mode man nehmen muss. 
Ich vermute sogar das man den Modi beim Senden bzw. Empfangen wechseln 
muss (wenn sowas geht).

Zitat dazu aus dem Datenblatt (S.31) :
"Data is clocked out of the AD7142 on the negative edge of SCLK, and 
data is clocked into the device on the positive edge of SCLK."
Gast
Nein , man muss den Mode nicht wechseln. Das Device schiebt die Daten 
auf die fallende Flanke raus, und der Controller liest sie mit der 
steigenden Flanke rein.
OP (Firma: FH WHV)
Meiner Meinung gilt folgendes :
CMP=1     (Transmit occurs on transition from active to Idle clock 
state)
CKE=1     (Idle State Clock = high)

Ruhezustand des Taktes ist high und er sendet bei der positiven Flanke. 
Das entspricht Mode 1,0 (PIC Datenblatt) bzw. Mode 3 (CCS Compiler).

Oder verstehe ich da was falsch ?

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 19 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.