Der BH1750 erlaubt nur Versorgungsspannungen bis maximal 3,6 V. Trotzdem kann die Platine direkt über unsere Attiny-Platine versorgt werden; auf dem Modul befindet sich nämlich ein entsprechender Spannungswandler, der unsere 5,0 V auf 3,3 V heruntertransformiert.
Die Kommunikation mit dem BH1750 erfolgt über I2C; die Schreibadresse ist &H46. Bei unserer Attiny-Platine müssen die Jumper für die Pull-Up-Widerstände nicht gesetzt werden; auf dem GY302-Modul sind nämlich diese Widerstände schon eingebaut. Verschiedene Betriebsarten und Auflösungen sind möglich. In unserem Beispielprogramm (s. u.) wählen wir den "Continuously H-Resolution Mode" mit einer Auflösung von 1 lx. Der zugehörige Initialisierungscode ist &B00010000. Die Messzeit beträgt in diesem Fall typischerweise 120 ms.
Wir lassen die Beleuchtungsstärke jede 2 Sekunden messen und geben das Ergebnis über ein LCD aus. Weitere Einzelheiten kann man dem folgenden Programm entnehmen.
Code: Alles auswählen
' Datei für Attiny-Platine von E. Eube, G. Heinrichs und U. Ihlefeldt
' Lichtsensor GY302 (BH1750) an I2C
' Ausgabe über LCD
'----------------------------------------------------------------------------
$regfile = "attiny2313.dat" 'Attiny2313
$crystal = 4000000 '4 MHz
'**********************************************************
'******************* Deklarationen ************************
Dim Messung1 As Byte
Dim Messung2 As Byte
Dim Lux As Word
'****************** Initialisierung ***********************
Ddrb = &B11111111 'Port B als Ausgangsport
Ddrd = &B01110000 'D4, D5, D6 als Ausgang; Rest als Eingang
Portd = &B10001111 'Eingänge auf high legen
Config Lcd = 16 * 2 'LCD konfigurieren
Config Lcdpin = Pin , Db4 = Portb.0 , Db5 = Portb.1 , Db6 = Portb.2 , Db7 = Portb.3 , E = Portb.4 , Rs = Portb.6
Cursor Off
Config Sda = Portb.5
Config Scl = Portb.7
I2cinit
'**********************************************************
'******************** Hauptprogramm ***********************
Const Bh1750fvi_w = &H46
Const Bh1750fvi_r = &H47
Wait 1
Do
I2cstart
I2cwbyte Bh1750fvi_w
I2cwbyte &B00100000 'Auflösung 1 Lux
I2cstart
I2cwbyte Bh1750fvi_r
I2crbyte Messung1 , Ack
I2crbyte Messung2 , Nack
I2cstop
Lux = Messung1
Lux = Lux * 256
Lux = Lux + Messung2
Cls
Lcd Lux
Wait 2
Loop
End
Sie zeigen, dass hier die Additivitätsbedingung mit hoher Genauigkeit erfüllt ist.
.