Hi. Ich versuche eine Wägeanwendung zu schreiben und benutze hierfür einen AT91SAM7s256 und einen AD7797 die über SPI kommunizieren. Dies funktioniert auch eingentlich wunderbar, wenn da nicht ein klitzekleiner Fehler im erkennen des letzten Bits auf der MISO Leitung wäre. Z.B. Der AD7797 ist im IdleMode oder PowerDownMode und ich sende ihm den Befehl als nächstes das Offset Register auszulesen, von dem ich weiss das dort 0x800000 drinne steht. Die empfangenen Daten sind aber 0x800001. Es ist aber auch egal welches Register ich auslesen möchte, es ist immer das letzte Bit welches falsch erkannt wird. Zur Veranschaulichung hab ich mal ein paar Osszi Bilder mit angehangen. Das eine zeigt die Daten des Moderegisters des AD7797. Bei diesem Bild sieht man, das das letzte Bit anscheinend vom AD7797 vorzeitig schon wieder auf high gezogen wird. Das andere Bild zeigt das letzte MISO Bit zur SCLK. Hier ist dann wiederum zu sehen, das das letzte Bit erst ca. 12ns nach der SCLK wieder zurückgesetzt wird. Und dies ist laut dem Datenblatt des AD7797 die Zeit t7, die mind. 10ns betragen soll. Dies alles ist in dem Fall das der AD im Idle oder PowerDown Mode ist und er nicht kontinuierlich wandelt und somit MISO/DOUT in der regel auf high bleibt. Wenn ich den AD jetzt kontinuierlich wandeln lasse, ist die meiste zeit MISO auf low und ist nur für kurze zeit auf high. Nämlich dann, wenn der AD eine wandlung fertig signalisiert. Das Resultat hierbei ist, wenn ich nun ein Register auslese wird das letzte Bit immer als 0 erkannt. Hat jemand noch eine Idee was ich ändern könnte oder wo der Fehler liegen soll. mfg Mike
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.