Forum: Mikrocontroller und Digitale Elektronik Luftdrucksensor mit I2C


von Wolfgang M. (womat)


Lesenswert?

Hallo zusammen,
ich habe einen Luftdrucksensor HP03SA, dessen Spannungsbereich mit 2.2 
..3.6V angegeben ist. Mein ATMega arbeitet jedoch mit 5V (für andere 
Komponenten wichtig). Kann das trotzdem funktionieren, oder muss ich 
einen bidirektionalen Pegelwandler benutzen?

Vielen Dank im Voraus

Wolfgang

von Luftguck (Gast)


Lesenswert?

Ich weiss ja nicht ob Du zu den empfindsamen Seelen zählst. Daher frage 
ich mal höflich, ob Du erlaubst, dass man Dir den Rat gibt in das 
Datenblatt zu schauen?

von Max G. (l0wside) Benutzerseite


Lesenswert?

An den I2C-Leitungen je einen diskreten Pullup nach 3,3V verwenden, dann 
überlebt der HP03SA. Ob die so erreichten High-Pegel (eben 3,3V) deinem 
ATMega genügen, weiß das Datenblatt.

Falls der ATMega interne Pullups hat, diese an den betreffenden Pins 
ausschalten.

Max

von Cyblord -. (cyblord)


Lesenswert?

Die bessere Lösung wäre, den Mega auch mit 3,3 Volt zu betreiben. 5V ist 
out und wirst damit immer wieder genau diese Probleme bekommen. Gerade 
mit modernen Sensoren und neuen ICs. Die laufen alle mit 3,3 V aber 
viele davon nicht mit 5V und du bist dann dauernd am Pegelwandeln. 
Lieber umgekehrt. Die Anzahl der Komponenten mit 5V wird abnehmen.

Gerade I2C ist aufgrund der bidirektionalität nicht soo super zum 
diskreten Pegelwandeln mit Transistoren. Interessant vielleicht die 
ADUMs für I2C. Sind zwar auch fürs isolieren gedacht, aber das muss man 
ja nicht so nutzen. Damit lässt sich I2C sehr einfach pegelwandeln.

gruß cyblord

: Bearbeitet durch User
von allu (Gast)


Lesenswert?

Hallo Wolfgang,

ich verwende den Luftdrucksensor BMP085 mit einer Betriebsspannung von 
3,3V direkt an einem ATMega 328P  mit 5V Betriebsspannung unter Bascom 
V2.0.7.6 ohne Probleme.

Mit zwei 10kOhm Widerständen sind SDA und SCL an der 3,3V-Versorgung des 
Luftdrucksensors angeschlossen, es entsteht also ein 3,3V-I2C-Bus.

Der I2C-Treiber darf aber den Mega nicht dazu veranlassen 5V in den 
I2C-Bus senden, sondern muss sich wie ein offener Kollektor verhalten.

Grus Allu

von Ralf-Peter G. (ralfpeter)


Lesenswert?

Hallo Allu,

kannst Du den Code preisgeben ???
Danke

Grelli

von NobbyH (Gast)


Lesenswert?

Schau mal hier
vielleicht hilft es ja.
Beitrag:
I2C TWI HP03S HH10D HYT939 Drucksensor Luftfeuchtesensor Beispiele 
ATmega8 Assembler

unter "Projekte & Code"

von Ralf-Peter G. (ralfpeter)


Lesenswert?

Hallo NobbyH,

meine Frage zielte auf den Bascom-Code für den BMP085 hin.
Trotzdem danke, der Beitrag von Bernhard ist auch interessant.

Grelli

von Cyblord -. (cyblord)


Lesenswert?

Ich will an dieser Stelle mal auf den MPL3115 hinweisen. Der Vorteil 
gegenüber dem BMP085 / BMP180 ist, dass man keine Berechnungen selbst 
anstellen muss, vor allem im Bezug auf die Calibration Parameter, der 
Luftdruck wird direkt ausgegeben. Er hat sogar eine Altimeter-Funktion, 
welche sofort die Höhe in Meter ausgibt.

Eure ganzen Probleme bei der I2C-Ansteuerung von solchen Sensoren kann 
ich aber nicht nachvollziehen. Die Dinger laufen normalerweise nach 1 
Stunde Datenblattlektüre und programmieren zufriedenstellend.

: Bearbeitet durch User
von Alex D. (allu)


Angehängte Dateien:

Lesenswert?

Ralf-Peter Grellmann schrieb:
> kannst Du den Code preisgeben ???

Hallo Grelli,

anbei ist der Programmausschnitt zum Drucksensor. Im ganzen Programm ist 
noch ein Feuchtesensor und anderes eingebunden.

Im BMP085-Programm habe ich das Beispiel aus dem Datenblatt in Bascom 
umgesetzt.

Eingebunden ist das BMP085-Bedienprogramm in etwa wie folgt:

regfile = "M328pdef.dat"               ' _Chip =  60
$crystal = 16000000

Initialisieren mit:
Gosub Bmp_init                      'Kalibrierwerte aus dem BMP085 laden

Messen mit:
Gosub Bmp_temperatur_messen
Gosub Bmp_druck_messen
Gosub Bmp_berechne_temperatur
Gosub Bmp_berechne_druck

Testanzeige:  '(!!!! Temperatur in 10-tel Grad)
Locate 2 , 1
Lcd "T:" ; Str(bmp_temperatur) ; " D:" ; Str(bmp_luftdruck)


Ich hoffe, Du kannst was davon verwenden.

Gruß Alex

von Ralf-Peter G. (ralfpeter)


Lesenswert?

Hallo Alex,

danke für die superschnelle Antwort.
Werde mein Glück mal versuchen.

Grelli

von Alex D. (allu)


Lesenswert?

Hallo Grelli,

gerade habe ich gesehen, dass von den Zeitmessungen noch "Set Test" und 
"Reset Test" drin steht. Da der Test-Pin in einem anderen Programmteil 
definiert ist, werden die beiden Zeilen dem Compiler nicht gefallen. 
Bitte einfach löschen.

Gruß Alex

von Ralf-Peter G. (ralfpeter)


Lesenswert?

hab schon ;=)

Grelli

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.