mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik MSP430 und MS5534 - Kommunikationsproblem


Autor: Tobias W. (wib)
Datum:

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

Autor: Tobias W. (wib)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Quelltext vergessen ^^

Autor: magTobis (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
lieber tobi, ich habe eine lösung für dich, die wäre, frag einfach 
deinen nachbar!! ;-)

Autor: Tobias W. (wib)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nein ;) erst wenn ich gleich zu genervt davon bin ;)
Jetzt such ich erst weiter...

Autor: Stefan (Gast)
Datum:

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

Autor: Stefan (Gast)
Datum:

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

Autor: Tobias W. (wib)
Datum:

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

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>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:
void WaitOnePulse(void)
{
    for (int i = 0; i < 2; i++);
}
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!

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.)
for (int i = 0; i < 9; i++)
{
  _NOP();
}
macht keine 8TZ Delay, sondern mehr, wegen Overhead der Schleife ;-)
Aber bei größeren Delay-Zeiten wird das vernachlässigbar(er)

Autor: Tobias W. (wib)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Optimierungen sind deaktiviert, habs jetzt trotzdem mal mit NOPs 
gemacht:
void WaitOnePulse(void)
{
    for (int i = 0; i < 8; i++)
      asm("NOP");
}

plus Bild ausm Oszi...

http://zujasr40.multipic.de/

..001 zeigt 32KHz
..002 zeigt DIN
..003 zeigt DOUT
..004 zeigt SCLK

Autor: Msp 430_crew (msp430_crew)
Datum:

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

Autor: Tobias W. (wib)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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:
P2DIR = 0x0B;               // P2.0, P2.1, P2.3 als Ausgang (AbsDruckSens)
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
// Absolutdrucksensor Datenuebertragung
#define SDI BIT1
#define SDO BIT2
#define SCK BIT3
#define PRESSURE 1
#define TEMPERATURE 0

#define HIGH 1
#define LOW 0

Autor: Stefan (Gast)
Datum:

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

Autor: Tobias W. (wib)
Datum:

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

Autor: Tobias W. (wib)
Datum:

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

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.