Luftdruck-Modul HP03S

OP #2349650
Lesenswert?

Hey Leute!
Ich möchte gerne einen Luftdrucksensor 
(http://www.pollin.de/shop/dt/MDg4OTgxOTk-/Bausaetze_Module/Module/Luftdruck_Modul_HP03S.html) 
mit einem Atmega 8 ansteuern. Das ganze sollte über die Hardware TWI 
geschehen. Das klappt alles auch ganz gut. Nur beim Auslesen des 
EEPROM’S stimmen zwei meiner Ausgelesenen Werte nicht. Ich lese den mit 
den 24C02  kompatiblen EEPROM im SEQUENTIAL READ MODE aus. Das sieht in 
meinem Fall so aus:

Pin XCLR = 0

TWI Starten -> TWI schreibe 0xA0 -> TWI Schreibe 0x10 -> TWI Start -> 
TWI Schreibe 0xA1 -> TWI Lese C1 MSB + Ack -> TWI Lese C1 LSB + ACK -> … 
->TWI Lese D + Nack -> TWI Stop.

Alle ausgelesenen Werte liegen im angegebenem Wertebereich, außer der 
Wert  C, und C5.

C darf zwischen 1 und 15 liegen, ist aber leider 255.

Und C5 beträgt -31472 obwohl mit „uint16_t“ gearbeitet wird. Wenn man 
MSB und LSB ausliest betragen diese 133 und 16. Wenn man diese per Hand 
zusammenfügt würde der Wert wieder stimmen. Zusammengefügt wurden die 
beiden wie folgt:

data = twi_read_ack();  //lese MSB
C5 = twi_read_ack(); // lese LSB
C5|= (data<<8); // zusammenfügen und speichern.

Ausgelesen über ITOA und uart_puts

Alle andern Werte wurden auf die Selbe Art zusammengefügt und da stimmt 
es. Wie kann das sein? Ist Irgendjemanden zufällig ein Fehler 
aufgefallen?
Im Anhang ist das Programm wenn jemand es für eine genauere Prognose 
benötigen sollte.

MFG
Stephan
Angehängte Dateien:
Gast #2350742
Lesenswert?

Leider kann ich dir da nicht weiterhelfen, ich probiere selber noch mit 
den Sensor. Meine Suche hat bislang immer nur ergeben, dass der Takt 
über den µC erzeugt wurde. Ich hab mir allerdings einfach einen Quarz in 
der Frequenz besorgt und bin aber etwas überfordert den anzuschließen.
OP #2350961
Lesenswert?

Also ich habe mir jetzt nochmal das Originale Datenblatt angesehen. 
Demnach sollte der Takt über den µC erzeugt werden und darf zwischen 
30-35 MHz liegen. Das erklärt also mein Problem auch nicht :(. Ich würde 
auf den Quarz verzichten und den Takt über den Controller geben.
MFG
Gast #2350979
Lesenswert?

Erhälst du denn für Temp oder Druck schon eine Ausgabe? Also bekommst du 
überhaupt schon Werte ausgelesen?

Wenn du einen Quarz hättest, wie würdest du den denn an den MCLK hängen? 
Ich hab leider keine Ahnung wie ich den dort anschließe. Einen Kontakt 
des Quarzes auf GND und den anderen MCLK ?
OP #2351056
Lesenswert?

Ja die Werte des EEPROMS ließ ich schon aus. Und außer den Wert C klappt 
alles! Nur der Wert C beträgt 255, ich hoffe das hier nicht mein Sensor 
einen Schaden hat :(. Ich habe das Ganze auch schon mal mit Bascom 
Programmiert, was auch klappte doch ist das auch schon einige Zeit her. 
Jetzt sollte es eigentlich mehr eine C-Programmierübung werden.
Mit einem Quarz müsstest du z.B. eine Pierce-Schaltung vorschalten. 
(http://de.wikipedia.org/wiki/Pierce-Schaltung)
Gast #2351116
Lesenswert?

@Stephan Hochmüller:
Habe den HP 02 s heute zum laufen bekommen, auch mit TWI :-)
Bis auf Spannung und die Konstanten scheint der sich in der Ansteuerung
ja nicht zu unterscheiden.

Ich bin über die MSB / LSB reihen folge gestolpert.
Das hast du ja korrigiert.
Die TWI Ansteuerung habe ich mal druchgesehn, mit ist aber
leider nix aufgefallen (Ich mache das hier per IRQ).
Lass dir doch mal von twi_read_ack das TWSR und TWDR ausgeben.
Vielleicht fällt dir das was auf.
Sicher das dir der GCC das nicht wegoptimiert?
1
while  (!(TWCR & (1<<TWINT)));{}

@youth
Da brauchst du keinen Quarz. Der Sensor will 32kHz.
Die lassen sich locker mit einem Timer per PWM mit 50% erzeugen
(oder mit CTC und Pin Toggle wie bei Stephan).
OP #2351140
Lesenswert?

Ohh tut mir leid! Tippfehler! kHz natürlich!
Tim schrieb:
> Lass dir doch mal von twi_read_ack das TWSR und TWDR ausgeben.
> Vielleicht fällt dir das was auf.
Vielen Dank das du dir mal mein Programm durchgesehen hast! Ich werde 
die beiden Register (TWSR, TWDR) morgen mal ansehen. Vielleicht fällt 
mir was auf. Bericht kommt morgen.
Tim schrieb:
> Sicher das dir der GCC das nicht wegoptimiert?
>while  (!(TWCR & (1<<TWINT)));{}
Sollte nicht der Fall sein im Datenblatt des ATMEGA8 ist ein Beispiel 
zur Ansteuerung der TWI. In diesen Beispiel sieht es gleich aus.
OP #2351481
Lesenswert?

Naja der Test mit TWSR und TWCR hat leider auch keine Ergebnisse 
gebracht. Alles in Ordnung! TWSR = 0x50; was nichts andres heißt wie 
Übertragung mit Ack ist ok. Und TWCR sagt TWINT+TWEN+TWEA also alles wie 
es sein sollte. Bin jetzt gerade sehr ratlos! Mal sehn Vielleicht 
bekomme ich noch eine Erkenntnis die alles ändert :D.
Gast #2351908
Lesenswert?

Tim schrieb:
> @youth
> Da brauchst du keinen Quarz. Der Sensor will 32kHz.
> Die lassen sich locker mit einem Timer per PWM mit 50% erzeugen
> (oder mit CTC und Pin Toggle wie bei Stephan).

Hey Tim,
ja ok, allerdings brauch ich dann einen Pin mehr am µC und Speicher für 
Quellcode. Mal abgesehen davon, hab ich halt den passenden Quarz 
rumliegen und würde den gern anschließen. Nur ich komm diesbezüglich 
leider noch nicht weiter. Hatte bis jetzt noch nie etwas mit einen Quarz 
zu tun.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren