Hallo Leute, ich bin mit meiner Kommunikation jetzt schon was weiter gekommen, und zwar scheint das Senden zu klappen, allerdings liegt beim MS5534 der DOUT durchgehend auf High, was ja nicht ganz Sinn der Sache ist. An MCLK liegen die geforderten 32,768 KHz an. Über DIN läuft ein Signal (mit Oszilloskop kontrolliert). Auf SCLK gibt es auch Signale. Nur leider bekomme ich wie gesagt keine vernünftige Antwort. Kann mir jemand helfen und hat nen Tipp wodran das liegen könnte? Quelltext hängt an, gesteuert wird es über die letzte Methode read_absdruck(). MSP430 läuft mit 8MHz, WaitOnePulse() sollte ca. 200ns warten ( siehe Datenblatt http://www.intersema.ch/site/technical/files/ms5534.pdf ) Habs nach dem Beispiel hier aufgebaut: http://www.intersema.ch/site/technical/files/an502.pdf Hoffe jemand kann mir helfen, stehe aufm Schlauch ;)
lieber tobi, ich habe eine lösung für dich, die wäre, frag einfach deinen nachbar!! ;-)
Nein ;) erst wenn ich gleich zu genervt davon bin ;) Jetzt such ich erst weiter...
Ich hab mir das Datenblatt und Deinen Code mal überflogen... Ich denke, Du hast da was missverstanden! Die 200ns sind die Anstiegs- und Abfallzeiten der Taktflanken, keine Wartezeiten! Dein MCLK muss im Bereich 30kHz - 35kHz liegen und das Tastverhältnis muss um die 50% betragen. Bei 32,768kHz wären das also jeweils rund 15µs für High-/Low-Pegel Deines Taktsignals. Wenn Du also Deinen Takt generierst, musst Du zwischen den Flankenwechseln von Low nach High (und umgekehrt) jeweils 15µs warten und nicht 200ns!
Ja nee... vergiss es, falsch gelesen! ;-) SCLK natürlich!!! SCLK darf max. 500kHz sein. Wären dann aber bei 50% Tastverhältnis trotzdem 1µs statt 200ns.
Danke für die Hilfe, MCLK liegt auf 32,768KHz, passt also. Da der MSP ja mit 8MHz läuft lasse ich ihn jetzt 8 Takte warten, was der 1us entsprechen sollte oder? Leider ändert das jedoch nichts, die Frage ist auch warum das SCLK Signal so anders aussieht als die Daten auf DIN...
>warum das SCLK Signal so anders aussieht als die Daten auf DIN
Wie sieht's denn aus?
Kannst ein Bild oder 'ne Skizze posten?
Deine Wait-Funktion:
1 | void WaitOnePulse(void) |
2 | {
|
3 | for (int i = 0; i < 2; i++); |
4 | }
|
schreit förmlich danach, dass der Compiler die wegen Nutzlosigkeit komplett weg-optimiert. Ich vermute mal, Du hast null Delay! Wenn Du genau 8 Taktzyklen Delay brauchst, versuch's mal mit 8 NOP's. Nicht schön, aber effektiv!
Also noch mal so als Anregung: 1.) SCLK darf maximal 500kHz betragen (und das auch nur bei 3,6V) !!! Es steht Dir frei für SCLK auch eine wesentlich kleinere Frequenz zu wählen, was ich Dir -zumindest zum Testen- auch dringend empfehlen würde, um Fehler wegen zu hohem SCLK auszuschließen. 2.)
1 | for (int i = 0; i < 9; i++) |
2 | {
|
3 | _NOP(); |
4 | }
|
macht keine 8TZ Delay, sondern mehr, wegen Overhead der Schleife ;-) Aber bei größeren Delay-Zeiten wird das vernachlässigbar(er)
Optimierungen sind deaktiviert, habs jetzt trotzdem mal mit NOPs gemacht:
1 | void WaitOnePulse(void) |
2 | {
|
3 | for (int i = 0; i < 8; i++) |
4 | asm("NOP"); |
5 | }
|
plus Bild ausm Oszi... http://zujasr40.multipic.de/ ..001 zeigt 32KHz ..002 zeigt DIN ..003 zeigt DOUT ..004 zeigt SCLK
Hi! Wie sieht denn Deine main aus? Was sendest Du dem Sensor? Bewegt sich die Ausgangsdatenleitung überhaupt nicht? Wie sieht die Beschaltung des MS5534 aus? Hast Du die Ports richtig definiert?
In der main rufe ich nur read_absdruck(); auf, vorher werden die Ports nat. gesetzt als Ausgang etc. Der Sensor ist so angeschlossen http://zmwr3hoj.multipic.de/unbenannt.bmp.jpg In der Main mache ich vorher folgendes:
1 | P2DIR = 0x0B; // P2.0, P2.1, P2.3 als Ausgang (AbsDruckSens) |
2 | P2SEL = 0x01; // P2.0 als ACLK |
Dann kommt der Funktionsaufruf read_absdruck(); Das ist eigentlich alles, läuft in nem größeren Programm, das funzt auch, nur das Auslesen klappt nicht so ;) Außerdem hier nochma die #defines
1 | // Absolutdrucksensor Datenuebertragung
|
2 | #define SDI BIT1
|
3 | #define SDO BIT2
|
4 | #define SCK BIT3
|
5 | #define PRESSURE 1
|
6 | #define TEMPERATURE 0
|
7 | |
8 | #define HIGH 1
|
9 | #define LOW 0
|
DIN und SCLK-Leitung vertauscht? Deine Daten an DIN (Bild2) sind mit 22,22kHz fast doppelt so schnell, wie SCLK (Bild4) mit 10,8kHz. Das kann so nicht sein! Ausserdem läuft Dein MSP niemals mit 8MHz, denn Dein SCLK (vermutlich DIN ;-)) läuft mit 22,22kHz, was einer Wartezeit in WaitOnePulse() von etwa 22µs entspricht, was wiederum 180TZ @ 8MHz wären!
Stimmt, die Pins waren vertauscht ^^ Danke für den Hinweis. Jetzt kommen Werte an, ich schau mal ob die passen und melde mich gleich nochmal.
Scheint zu funktionieren :) Er gibt plausible Werte aus! Danke für die Hilfe, ich hab 2 Schaltpläne vertauscht und dort waren die Pins ebenfalls einmal vertauscht ;)
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.