HH10D Frequenz zu niedrig

Gast #2355412
Lesenswert?

Hallo,

anhand der angehängten hum_sens.c versuche ich einen HH10D 
Luftfeuchtesensor von Pollin abzufragen.
Die Werte, die per I²C abgefragt werden schauen richtig aus (also 
entsprechen der Größenordnung wie im Beispiel auf der 
"Packungsbeilage").

Die Frequenz, die der HH10D ausspuckt ist jedoch viel zu niedrig.
Laut Datenblatt sollen 5kHz bis 10kHz ausgegeben werden, ich messe 
allerdings deutlich niedrigere Frequenzen (<1kHz).
Eine Änderung der Betriebsspannung (3.3V/5V) ändert die Frequenz zwar, 
jedoch nicht deutlich genug um im angegebenen Bereich zu landen, die 
Registerwerte verändern sich dabei nicht/kaum.

Ich habe hier im Forum (und, ja auch über google) schon nach ähnlichen 
Problemen gesucht, bin aber bisher noch nicht fündig geworden.
Ich hoffe also jetzt darauf hier den richtigen Tipp zu finden.
(F_CPU = 4000000UL, µC ist auch so gefused und empfängt Takt von einem 
4Mhz-Quarz)

Gruß

Frank
Angehängte Dateien:
Gast #2355496
Lesenswert?

Den Code hab ich (bis auf meine Debugausgaben) so gefunden.
Nach meinen Recherchen basiert er auf einem Frequenzausleser, der auch 
hier im Forum gepostet wurde (sry, bin noch auf der Suche nach dem 
link).

wenn int == 8bit, dann könnte das auch schon der Fehler sein.
Die Wertrückgabe als float gefällt mir auch nicht, aber zuerst brauche 
ich eine sinnvolle Frequenz :(
Gast #2355534
Lesenswert?

frank schrieb:
> Und Fehler damit vermutlich auch -> hier wird die Frequenz als double
> (somit mehr als 8 bit?) berechnet.

Ein int in AVR GCC hat üblicherweise 16Bit, aber auch damit läuft die 
Variable NrOverflows * 65536 nach einem gezählten Overflow über.
Und ja, double ist was anderes als 8Bit.
Gast #2355701
Lesenswert?

mit NrOverflows * (max_int+1) bekommt man ja wieder NrOverflows -> 
sinnlos, mit NrOverflows +EndTime - Starttime müsste ja das gleiche 
Ergebnis 'rauskommen. (Wenn ja, dann ist der Fehler ja wieder woanders)
Bei der Berechnung mit double könnte das ganze natürlich wieder 
funktionieren.
Gast #2453546
Lesenswert?

Mein letzter Stand (nach längerer frustbedingter Pause ^^):
es funktioniert :D

Anschluss µC sowie HH10D mit 5V, kein Pegelwandler.

Problem war vermutlich ein Fehler bei der Berechung der Frequenz.
1
freq = F_CPU/freq;
obwohl wie gewohnt in den header-Dateien definiert war die Berechnung 
erst korrekt sobald F_CPU in der source-Datei neu definiert war.

Den beiliegenden Code habe ich so irgendwo im Internet gefunden. Er 
beruht auf einer frühen Version des FrequenzCounters, welcher in der 
Codesammlung zu finden ist. Meine Änderungen sollten die letzten 
Anpassungen des Frequenzcounters übernehmen. Verhalten sowie 
Rückgabewert (uint32_t) gefallen mir zwar noch nicht sonderlich, aber 
...
Angehängte Dateien:

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