Forum: Mikrocontroller und Digitale Elektronik Luftdruck-Modul HP03S


von Stephan H. (stiph5)


Angehängte Dateien:

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

von Stephan H. (stiph5)


Lesenswert?

So jetzt habe ich mal wieder was gelernt!
ITOA ist ja nur für signed Variablen geeignet! Ich benötige doch UTOA!
Doch was mit den Koeffizienten „C“ los ist weiß ich immer noch nicht :(.
Hat nicht jemand eine Idee was da sein könnte?

von youth (Gast)


Lesenswert?

Hallo Stephan,

hast du an den Sensor einen Quarz für den Masterclock geschaltet oder 
den über den µC erzeugt?

von Stephan H. (stiph5)


Lesenswert?

Danke für deine Antwort!
Ich habe den Takt über den Mikrocontroller erzeugt. Mit Timer in CTC 
Mode. Ist das Falsch? Wird ein Quarz benötigt?
MFG

von youth (Gast)


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.

von Stephan H. (stiph5)


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

von youth (Gast)


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 ?

von Stephan H. (stiph5)


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)

von Tim (Gast)


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).

von verwundert (Gast)


Lesenswert?

Stephan Hochmüller schrieb:
> Demnach sollte der Takt über den µC erzeugt werden und darf zwischen
> 30-35 MHz liegen.

Tim schrieb:
> Da brauchst du keinen Quarz. Der Sensor will 32kHz.

Macht das einen Unterschied zwischen  32 MHz und 32 kHz?

von Stephan H. (stiph5)


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.

von Stephan H. (stiph5)


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.

von youth (Gast)


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.

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
Noch kein Account? Hier anmelden.