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
Wie soll das hier zusammengehen ? > int freq = 0; > ... > freq = (NrOverflows * 65536) + EndTime - StartTime;
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 :(
http://www.mikrocontroller.net/attachment/20833/FreqCount.c Datei gefunden. Und Fehler damit vermutlich auch -> hier wird die Frequenz als double (somit mehr als 8 bit?) berechnet. Werde, sobald ich meinen Programmer in die Finger krieg' das beheben. sry wegen Doppelpost
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.
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.
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 ...
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.