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
SPI hat verschieden modi, fallende Flanke, steigende flanke, cs hoch, cs tief. Da muss man genau das Datenblatt der beiden bausteine befolgen.
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."
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.
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 ?
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.