Hallo,
Ich stehe vor einigen Problen mit diesem Modul.
Auf MCLK liegt die benötigte Frequenz an und XCLR ist lt Datenblatt
richtig gesetz.
Ich kann alles aus dem EEPROM auslesen.
Aber mit dem ADC funkts nicht.
Hab schon einiges versucht und alles mit einem Logic Analyser mit
beobachtet.
Es gibt auch zwei verschiedene Datenblätter/Beschreibungen, da sind die
Timing-Sequenzen für die Messung jeweils anders beschrieben.
Einmal soll beim senden an den Slave das ACK vom Master kommen??????
Beim zweiten soll korrekterweise das ACK von Slave kommen, tut es aber
nicht.
Hat schon jemand mit diesem Modul gearbeitet, der mir einen
funktionierendes Prog. zur fehlersuchen geben kann.
Vorzugsweise in Assembler, C ist auch OK.
mfg
Matthias
Matthias schrieb:> Es gibt auch zwei verschiedene Datenblätter/Beschreibungen, da sind die> Timing-Sequenzen für die Messung jeweils anders beschrieben.> Einmal soll beim senden an den Slave das ACK vom Master kommen??????> Beim zweiten soll korrekterweise das ACK von Slave kommen, tut es aber> nicht.
Also zweiteres ist wohl richtig. Auf Adresse und einen Write antwortet
immer der Slave. Wenn es ein richtiges I2C Interface ist (was ich
bezweifle) kann der Slave auch den SCL auf LOW halten (verzögern) bevor
er ACK/NACK gibt. Sowas würd ich mal noch mit abfragen. Also wenn man
den SCL wieder hochohmig macht (weil pullup gegen Vcc) mal den SCL
abfragen und warten bis er auch wirklich High ist bevor man das ACK/NACK
des Slaves abfragt.
Weil ich denke das es ein Timingproblem ist. CLK max. 500kHz ! Wow..
Steffen
Hallo,
Hier die Screenshots!
Teil-1 = Messung auslösen
Teil-2 = Messwert laden (nach 50us Delay)
Versuch 1 (lt. Datenblatt):
Teil-1: Ich bekomme ich kein ACK
Teil-2: Dieses Stop/Start komm vom Modul und damit verliert der uC den
Bus.
Versuch 2:
Teil-1: Wenn ich irgend etwas davor sende, bekomme ich auch die ACK's
Teil-2: Gleich wie bei Versuch 1, bun einen Schritt weiter.
mfg
Matthias
Hallo Matthias
Leider kann ich die SCL Frequenz nicht so korrekt bestimmen. Aber ich
glaub die ist noch zu hoch. Bin auf irgendwas über 500kHz gekommen.
(666kHz?)
Die könntest du nochmal nachmessen.
>Teil-2: Dieses Stop/Start komm vom Modul und damit verliert der uC den>Bus.
Meinst du diese Spitze auf SDA am Ende?
Hast du mal das noch eingebaut was ich weiter oben geschrieben hab? Den
SCL mal vor dem ACK/NACK abfragen, ob er vom Slave noch auf low gehalten
wird?
Zeig doch bitte noch deine I2C Software Routine her.
Gruß Steffen
Matthias S. schrieb:> Hat keiner Erfahrungen mit diesem Modul?
Noch nicht, aber ich hab es mir soeben bestellt. Ich will mir auch ein
Modul mit bauen für den Luftdruck.
Deswegen kann ich hier nur theoretisch was drüber sagen.
Steffen H. schrieb:
> Leider kann ich die SCL Frequenz nicht so korrekt bestimmen. Aber ich> glaub die ist noch zu hoch. Bin auf irgendwas über 500kHz gekommen.> (666kHz?)>> Die könntest du nochmal nachmessen.
Diese ist auf ca. 100kHz, habe es schon mit einigen schneller und
langsamer versucht.
>>Teil-2: Dieses Stop/Start komm vom Modul und damit verliert der uC den>>Bus.>> Meinst du diese Spitze auf SDA am Ende?
Ja
> Hast du mal das noch eingebaut was ich weiter oben geschrieben hab? Den> SCL mal vor dem ACK/NACK abfragen, ob er vom Slave noch auf low gehalten> wird?
Nein, gib mir bitte einen Denkanstoß, ... Der SCL wird ja wieder high,
also kann er ja nicht auf low gehalten werden.
> Zeig doch bitte noch deine I2C Software Routine her.>
ja werde ich gleich machen.
mfg
Matthias
Quellcode im Anhang!
Da es meine ersten TWI versuche sind, dementsprechend ...
Er ist auch noch ohne ERROR-Routine.
Daten die das Modul ausgibt, habe ich vorerst nur mit den Logic-Analyser
kontrolliert.
mfg,
Matthias
Solange wie ich deinen Quellcode studiere geb ich dir mal meine I2C
Routine für einen Software I2C. Die Waits sind natürlich für einen
400kHz Bus.
Muss man halt anpassen. Also statt "wait1us" = 1µs muss man da halt 1ms
draus machen.
Aha, du arbeitest mit dem Hardware TWI. Ich weiß nicht, ob das so
optimal ist mit diesem HP03S Modul. Da man ja auch nicht weis, ob das
überhaupt I2C konform ist was das Modul da als Schnittstelle anbietet.
Wie ist es denn überhaupt mit dem MCLK? Muss der ständig anliegen?
Hallo Matthias
Du setzt doch vor dem ersten Zugriff auf den Bus und HP03S den XCLR auf
High.
So steht es ja auch in Datenblatt (von pollin, Vertrauen==0).
Hast du mal versucht XCLR gänzlich immer auf high zu lassen? Oder
wenigstens wenn du XCLR auf high setzt danach mal noch eine Pause
(vielleicht 50ms) einzufügen, bevor du mit dem ersten I2C Start
beginnst?
Ein Versuch wäre es doch Wert.
Steffen
Hallo Steffen,
dass wahr eine gute Idee!!
Jetzt liefert das Modul ein ACK!
Aber immer noch keinen Messwert.
Es funktionieren auch nur ein par Taktfrequenzen: 250kHz, 100khz, ...
Bei zwischenstufungen z.b ca. 95kHz oder oder ca. 105kHz macht das Modul
komische dinge.
Ich habe auch den MCLK unterschiedlich (während/zwischen TWI zugriff)
aktiviert und deaktiviert.
Da kommen auch unterschiedliche Ergebnisse, abei kein Messwert.
Ich kann erst ab Donnerstag Abend wieder größere Versuche machen, ...
mfg,
Matthias
Hallo,
oben wurde auf meine Nasteleien verwiesen, die Sachen liegen unter
http://www.avr.roehres-home.de/sensoren/i_druck_sensor.html
Es gibt davon nur eine Assembler-Version.
Ich habe da seit Ewigkeiten nichts dran gemacht, es läuft aber
immernoch.
Vielleicht hilft es ja weiter.
Gruß aus Berlin
Michael
Oh danke Michael.
Wenn mein HP03S Sensor nächste Woche da ist, kann ich ja auch endlich
ein paar Experimente machen.
Matthias S schrieb:
>Jetzt liefert das Modul ein ACK!
Das ist doch schon mal was.
>Aber immer noch keinen Messwert.
Das ist nicht schön :(
>Ich kann erst ab Donnerstag Abend wieder größere Versuche machen, ...
Das hoffe ich dann auch für mich ;-)
Michael hat ja seine Modul-Sourcen zur Verfühgung gestellt. Und die
funktionieren ja schon. Desweiteren sind sie in ASM. Jetzt sollte doch
der Fehler schnell auswendig gemacht werden können.
Danke Michael.
..und hattest du denn keine Probleme bei der Ansteuerung dieses HP03S
gehabt?
Steffen
Hallo,
Danke Michael für deine Modul-Sourcen!
Du hast die Register r22, und r23 zwei mal definiert!
Deine Formel für I2C_CLOCK (Wert für TWBR) ist meiner Meinung nicht ganz
richtigt - habe ich angepasst.
Ich habe den Code auf das nötige gekürzt, und diesen für den Atmega8
angepasst (statt sts/lds - out/in).
Leider bekomme ich das gleiche Ergebnis wie oben.
Habe jetzt noch den Clock (MCLK) angepasst - erst vor der Messung
(erster TWI zugriff) starten, etc. ...
Das muss ich aber erst bei Gelegenheit testen.
Achja - hab es schon mit drei Modulen versucht, also daran kann es daran
nicht liegen.
Wenn das nicht funktioniert, kaufe ich mir die gleichen Komponenten wie
Michael und baue alles 1:1 nach - dass kanns ja nicht sein!!!!
mfg
Matthias
Also ich habe das Modul ganz gut im Griff (würde ich mal behaupten).
Kann aber aus dem langen Thread nicht mehr genau das Problem erkennen.
Also wenn du nochmal zusammenfassen würdest ...
Außerdem habe ich in der Codesammlung (HP03 Drucksensor - C Code) mein
Testprogramm veröffentlicht. Vielleicht willst du das mal anschauen.
Gruß
Carsten
GELÖST!!!!
Zum Glück tut Blödheit nich weh!
Ich habe eine Doppelseitige SMD Platine angefertigt, mit folgender
Bestückung.
Atmeaga8L, ST485(für Busankopplung), HP03S und HH10D (Luftfeuchte)
...und das Ganze in einem Wandgehaüse.
Ich habe halt bei der Planung ein paar Masse durchkontaktierungen
vergessen, diese ich nach erster Durchsicht auch gefunden habe.
Leider hatte mein HP03S immer noch keine MASSE.
VIELEN DANK für eure Bemühungen!!!
Für Fragen stehe ich gerne zur Verfügung!!!
mfg
Matthias
Hallo Mathias,
Zum Glück tut Blödheit bei mir auch nicht weh :-)
Hab den selben Fehler wie du gemacht. GND vergessen zu verbinden auf
meinem Sensor-Aufnahme-PCB..
So, jedenfalls funktioniert bei mir nun auch endlich die I2C
Kommunikation. Jetzt geht es ran an den Berechnungen der Werte.
Die Koefizenten muss man wenn XCLR = LOW ist auslesen? Hab ich das so
richtig dem Datasheet entnommen?
Wie sieht es mit dem MCLK aus? Muss der ständig anliegen? Oder kann man
den auch abschalten wenn man nichts auslesen will?
Es geht mir darum, Strom zu sparen. Und dazu geht der ansteuernde µC in
den Sleep-Modus. Dann hab ist der Timer ja auch aus und demzufolge auch
der MCLK.
Steffen
Hallo Steffen,
> Zum Glück tut Blödheit bei mir auch nicht weh :-)> Hab den selben Fehler wie du gemacht. GND vergessen zu verbinden auf> meinem Sensor-Aufnahme-PCB..
Du hst sicherlich nicht so lange gedauert wie bei mir, um den Fehler zu
finden.
> Die Koefizenten muss man wenn XCLR = LOW ist auslesen? Hab ich das so> richtig dem Datasheet entnommen?
Ja! Lass den XCLR immer auf LOW, um Strom zu sparen. Setzte ihn nur vor
der Messung auf HIGH, aber AUCHTUNG, du musst dann ein delay vor dem
ersten TWI zugriff geben. Ich weiß nicht wie lange es dauern sollte, bei
mir spielt Zeit fast keine Rolle also hab ich mal 4ms gegeben. Versuch
es einmal mit einer Zeit von 1 bis 8 Takten der 32kHZ.
> Wie sieht es mit dem MCLK aus? Muss der ständig anliegen? Oder kann man> den auch abschalten wenn man nichts auslesen will?
Nein! Nur während der Messung. Ich schalte ihnn aber vor dem XCLR=HIGH
ein.
Für was möchtest du dein Modul einzetzten?
Zu den Berechnungen.
Ich hab alles in ASM geschrieben. Daher sind die Berechnungen eine
enorme Aufgabe. Es ergeben sich dadurch, halt auch einige
Ungenauigkeiten.
Luftdruck: +/- ca.1,5 hpa (je nach D1, D2 und Konstaten)
Temperatur: +/- ca. 0,7 °C (je nach D1, D2 und Konstaten)
Bin auf deine Ergebnisse gespannt.
Vergiss nicht die Höhenkorrektur beim Luftdruck.
mfg,
Matthias
Hallo Mathias
>Zu den Berechnungen.>Ich hab alles in ASM geschrieben. Daher sind die Berechnungen eine>enorme Aufgabe. Es ergeben sich dadurch, halt auch einige>Ungenauigkeiten.>Luftdruck: +/- ca.1,5 hpa (je nach D1, D2 und Konstaten)>Temperatur: +/- ca. 0,7 °C (je nach D1, D2 und Konstaten)
Ich hab jetzt einen ganzen Tag mit den Berechnungen verbracht.. Ist
wirklich heftig. Und mein ATtiny2313 ist so ziemlich voll (98.2%). Der
hat halt auch noch keinen Hardware-Multiplizierer.
Zu der Genauigkeit kann ich leider keine Aussage treffen. Ich weiß auch
nicht, wie du die berechnet hast.
Ich habe jedenfalls versucht bei den Berechnungen keine Floats zu
bekommen. Die zweite Schwierigkeit lag dann an den signet Berechnungen.
Da bekomm ich auch einen kleinen Fehler mit rein. Das muss ich mir
nochmal genauer ansehen. Aber soweit funktioniert das jetzt ganz gut.
>Für was möchtest du dein Modul einzetzten?
Es wird ein Funk-Modul via RFM02 das mir halt die Temperatur und den
Luftdruck liefert. Wenn ich soweit bin, werd ich es noch veröfentlichen.
Ein Modul gibt es ja schon. Allerdings erstmal nur Temperatur.
Siehe: [Beitrag "[ASM] RFM02 sendet an RFM01 Sensor Daten"]
>>zu Michael U.
Danke für die Bereitstellung deiner Sourcen! Die haben mir sehr
geholfen. Und ein DICKES LOB an deinen sehr schönen dokumentierten
Programmierstil. Sowas sieht man selten. Ließt sich sehr gut.
So, werd mal Leiterplatten ätzen..
Gruß Steffen
Hallo Mathias
Ich hab jetzt mal ein paar Bilder von meinen Modulen und der Anzeige
gemacht. Jedes Modul hat noch einen Schaltwandler (TPS61016) mit drauf.
Dieser holt mir das letzte Volt aus einer Batterie (Vbatt = 0,85V..
3,6V) und generiert mir daraus 3.3V
Wenn der Strombedarf weniger als 1mA sinkt (Sleep Modus) geht auch der
Schaltregler in so eine Art Schlaf-Modus und pulst nur noch den Ausgang
damit die Stromversorgung aufrechterhalten wird.
Mal sehen wie lange dann eine 1,5V Batterie (AAA) hält. Kann wohl ein
weilchen dauern bis ich zu einem Ergebnis gekommen bin :-)
Demnächst will ich die Empfängerseite auf RFM12 umbauen, um auch senden
zu können. Das brauch ich noch um einen RFID-Leser per Funk mit
anzubinden.
Das Layout der Module könnte ich bei Interesse auch noch hochladen.
@Mathias
>Zu der Genauigkeit kann ich leider keine Aussage treffen. Ich weiß auch>nicht, wie du die berechnet hast.
Kannst du dazu noch näheres schreiben?
Gruß Steffen
Hallo Steffen,
Ich habe leider noch keine Zeit gehabt, weiter zu proggen.
Ich habe die Messwerte und Konstanten in den uC eingelesen und berechnen
lassen.
Zugleich habe ich diese Messwerte mit dem Logicanalyser geloggt, und mit
mit dem PC berechnet, natürlicht mit Kommastellen.
Dann habe ich je nach D1, D2 unterschiedliche Abweichungen zu den
genaueren Werten am PC festegstellt. Siehe vorherigen Beitrag.
mfg Matthias
Ach so, du bekommst also durch die Fließkommaarethmetik einen Fehler in
die Berechnung auf dem µC.
Das hab ich weitestgehend vermieden. Ich hab die Werte immer soweit
aufgebohrt dass ich keine Fließkommazahl zur Berechnung oder nach einer
Berechnung auf dem µC habe. Allerdings muss man dann auch mal schnell
mit 32Bit Zahlen rechnen :-).
Dann sollte ja mein Fehler ziemlich klein sein.
Wie hast du denn noch die Höhenanpassung gemacht? Ich weiß ja, dass der
Druck mit zunehmender Höhenlage gegenüber NN sinkt. Aber um wieviel pro
Meter?
Laut der Formel aus dem Wiki haut das irgendwie nicht hin. Verglichen
habe ich mit den Werten der Wetterstation hier in meiner Nähe. (im
selben Ort, ca. 600m entfernt von mir).
Gruß Steffen
JaSteffen H. schrieb:> Ach so, du bekommst also durch die Fließkommaarethmetik einen Fehler in> die Berechnung auf dem µC.
Ja
> Das hab ich weitestgehend vermieden. Ich hab die Werte immer soweit> aufgebohrt dass ich keine Fließkommazahl zur Berechnung oder nach einer> Berechnung auf dem µC habe. Allerdings muss man dann auch mal schnell> mit 32Bit Zahlen rechnen :-).>> Dann sollte ja mein Fehler ziemlich klein sein.
Hab ich teils/teils - vl. hättest du etwas Code für mich?
> Wie hast du denn noch die Höhenanpassung gemacht? Ich weiß ja, dass der> Druck mit zunehmender Höhenlage gegenüber NN sinkt. Aber um wieviel pro> Meter?
Laut meinen Recherchen sinkt der Druch um 1 hpa pro 8m.
Ich bin auf 652m, also habe ich 81,5 hpa zum gemessenen Wert addiert.
mfg
Matthias