www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Problem mit PIC & SPI Verbindung


Autor: Michael P. (Firma: FH WHV) (michimon)
Datum:
Angehängte Dateien:

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

Autor: Zacc (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
SPI hat verschieden modi, fallende Flanke, steigende flanke, cs hoch, cs 
tief. Da muss man genau das Datenblatt der beiden bausteine befolgen.

Autor: Michael P. (Firma: FH WHV) (michimon)
Datum:

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

Autor: Zacc (Gast)
Datum:

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

Autor: Michael P. (Firma: FH WHV) (michimon)
Datum:

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

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.