I2C-Anschluß des BH1750 Lichtsensor an ATmeg8 per Bascom

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    Aufgrund technischer Veränderungen ist der Mailverkehr innerhalb des Forums (Private Nachrichten) nur noch eingeschränkt möglich. Die Einschränkung ist notwendig, um zusätzliche Betriebskosten für das Forum zu vermeiden. Näheres zu den Hintergründen im Thread "Aktuelles zum Forum".Wir bitten um Verständnis.

    Hinweis kann nach Kenntnisnahme deaktiviert werden!

    • Hi, ein link zum Datenblatt ist immer ganz hilfreich. Ich hab' was bei einem Arduino-Bastler was gefunden, war aber nicht gültig.
      So wie ich das überrissen hab', liefert der chip absolute Werte für die lux.
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • Der Lichtsensor BH1750 hat folgende Anschlüsse: VCC, GND (die sind klar), SCL, SDA das scheinen die Daten ausgänge zu sein; hierzu fehlt mir ein entsprechendes Programm in Bascom sowie ein Anschlußschema, um die Lux-Werte am LCD-Display anzeigen zu lassen. Leider ist unter forum.g-heinrichs.de/viewtopic.php?t=93 kein Programm dazu zu finden. Ich hoffe jemand kann hier weiterhelfen.
      Ich denke das Forum wird dies schon können. Wäre schön. Allen ein Danke, die sich hier melden.
    • Habe nochmals nachgeforscht und im Internet einige Sachen zum Lichtsensor BH1750 gefunden. Anscheinend läuft er über den I²C-Bus, keine Ahnung wie das geht. Im Forum findet sich unter "I²C Datenübertragung" etwas. Dort werden Adressen ausgelesen. Doch ein Programm für das Auslesen der Lux-Werte Fehlanzeige. Ich stelle deshalb die von mir gefundenen Unterlagen als Dateianhänge hier bei, damit jemand, der mir helfen möchte, nicht unnötig suchen muß.
      Wäre für die Hilfe sehr dankbar.
      :)
      Dateien
      • BH1750 a.jpg

        (311,34 kB, 9 mal heruntergeladen, zuletzt: )
      • BH1750 b.jpg

        (308,71 kB, 6 mal heruntergeladen, zuletzt: )
      • BH1750 c.jpg

        (254,95 kB, 4 mal heruntergeladen, zuletzt: )
      • BH1750 d.jpg

        (248,32 kB, 3 mal heruntergeladen, zuletzt: )
      • BH1750 e.jpg

        (223,76 kB, 3 mal heruntergeladen, zuletzt: )
      • BH1750 f.jpg

        (209,7 kB, 9 mal heruntergeladen, zuletzt: )
      • BH1750 g.jpg

        (235,05 kB, 13 mal heruntergeladen, zuletzt: )
      • BH1750 h.jpg

        (243,53 kB, 7 mal heruntergeladen, zuletzt: )
      • BH1750 i.jpg

        (342,45 kB, 8 mal heruntergeladen, zuletzt: )
    • Habe im Internet noch etwas zum Lichtsensor BH1750 gefunden. Siehe Anhang. Allerdings in Englisch. Das scheint ein Ausleseprogramm für die Lux-Werte zu sein, es ist aber meiner Ansicht nach nicht in Bascom geschrieben. Kann es jemand in Bascom umsetzen??

      Vielen Dank :)
      Dateien
      • BH1750 a1.jpg

        (260,67 kB, 7 mal heruntergeladen, zuletzt: )
      • BH1750 a2.jpg

        (198,22 kB, 7 mal heruntergeladen, zuletzt: )
      • BH1750 a3.jpg

        (194,04 kB, 10 mal heruntergeladen, zuletzt: )
      • BH1750 a4.jpg

        (139,22 kB, 13 mal heruntergeladen, zuletzt: )
      • BH1750 a5.jpg

        (135,58 kB, 6 mal heruntergeladen, zuletzt: )
    • Ich habe das Programm von G.Heinrichs mal herauskopiert. Es Macht eigentlich genau das was du haben möchtest. Natürlich musst du es noch an deinen Prozessor anpassen.
      SDA verbindest du mit SDA am BH1750 und SCL halt mit SCL am BH1750. Die Pin's für SDA und SCL findest du im Datenblatt deiner CPU.
      Welchen Prozessor benutzt du denn?

      BASCOM-Quellcode

      1. ' Datei für Attiny-Platine von E. Eube, G. Heinrichs und U. Ihlefeldt
      2. ' Lichtsensor GY302 (BH1750) an I2C
      3. ' Ausgabe über LCD
      4. '----------------------------------------------------------------------------
      5. $regfile = "attiny2313.dat" 'Attiny2313
      6. $crystal = 4000000 '4 MHz
      7. '**********************************************************
      8. '******************* Deklarationen ************************
      9. Dim Messung1 As Byte
      10. Dim Messung2 As Byte
      11. Dim Lux As Word
      12. '****************** Initialisierung ***********************
      13. Ddrb = &B11111111 'Port B als Ausgangsport
      14. Ddrd = &B01110000 'D4, D5, D6 als Ausgang; Rest als Eingang
      15. Portd = &B10001111 'Eingänge auf high legen
      16. Config Lcd = 16 * 2 'LCD konfigurieren
      17. Config Lcdpin = Pin , Db4 = Portb.0 , Db5 = Portb.1 , Db6 = Portb.2 , Db7 = Portb.3 , E = Portb.4 , Rs = Portb.6
      18. Cursor Off
      19. Config Sda = Portb.5
      20. Config Scl = Portb.7
      21. I2cinit
      22. '**********************************************************
      23. '******************** Hauptprogramm ***********************
      24. Const Bh1750fvi_w = &H46
      25. Const Bh1750fvi_r = &H47
      26. Wait 1
      27. Do
      28. I2cstart
      29. I2cwbyte Bh1750fvi_w
      30. I2cwbyte &B00100000 'Auflösung 1 Lux
      31. I2cstart
      32. I2cwbyte Bh1750fvi_r
      33. I2crbyte Messung1 , Ack
      34. I2crbyte Messung2 , Nack
      35. I2cstop
      36. Lux = Messung1
      37. Lux = Lux * 256
      38. Lux = Lux + Messung2
      39. Cls
      40. Lcd Lux
      41. Wait 2
      42. Loop
      43. End
      Alles anzeigen
      Versuch macht klug !
    • Lothringen schrieb:

      Arbeite mit Bascon und möchte den Lichtsensor BH1750 mit dem ATmega8 per Bascom anschließen und die Lichtwerte auf dem LCD 16*2 anzeigen lassen.
      Ich denke mal Du möchtest mit Bascom arbeiten. Dazu gehört aber das man sich mit dem Inhalt und der Syntax befasst und auch etwas versteht von dem was man machen will.

      In dem angegbenen Link befindet sich ein Programm was genau das tut was Du eigentlich willst. Dass wird Dir aber nichts bringen wenn Du es nicht verstehst was da gemacht wird. Und dazu ist erstmal erforderlich, das man sich mit der Materie beschäftigt.

      Lothringen schrieb:

      Anscheinend läuft er über den I²C-Bus, keine Ahnung wie das geht.
      Dann solltest Du Dich als erstes mal der Theorie befassen, da hilft Dir auch ein Beispielprogramm nichts zumal Du es nicht mal als solches erkennst. Eine gute Quelle um sich Wissen anzueignen sind z.B. das Buch von Stefan Hoffmann "Einfacher Einstieg in die Elektronik mit AVR_Mikrocontroller und Bascom" oder Ceperigas Bascom-Kurs hier im Lexikon.

      Das Zusammenklicken von Programmcode bringt selten Erfolg. Das Programm in Deinem Screenshot ist übrigens in C geschrieben und Englisch ist nun mal die Techniksprache. Und es bringt nichts wenn Dir jemand ein C-Programm in Bascom übersetzt, mach es selbst. Hilfe dazu wirst Du hier schon kriegen aber nicht in der Form "wir machen Dir das!".

      Gruß Harald
      Wem ich nicht ausdrücklich widerspreche, der darf das bis auf Widerruf als "Gefällt mir" verstehen.
    • Hallo Harald,
      entschuldige, wenn meine Anfrage Dich entrüstet hat.
      Ich bin 73 und habe vor 50 Jahren mal mit Basic begonnen. Es war die Zeit des Comodore 64, das ist lange her. C habe ich nie gelernt. Englisch ist für mich kein Problem. Nun begann ich mit Bascom zu programmieren. Vieles aus meiner frühen Zeit ist noch da, aber es fällt mir halt schwer. So suche ich eben um Hilfe so gut es geht. Ich hoffe Du verstehst das.
      Gruß
    • Schon Fortschritte? Dein 1z Lichtsensorprogramm ist ein brauchbares Gerüst um die I2C(=TWI) hineinzubringen. Die benötigten Zeilen sind schon von Cable vorgegeben. Eine gute Erklärung gibt es auch in der Bascom Hilfe (+über Index/Config SCL zu "Using the I2C protocol") Dort ist sogar ein Anschlußbeispiel des Mega8.

      hasta schrieb:

      da hilft Dir auch ein Beispielprogramm nichts
      Doch würde es, (learnig by doing) Die haben den Vorteil das erstmal was passiert (oder wenn nicht es ein "nur" Hardware-Problem ist). Dannach kommt das Umschreiben so wie man es braucht wodurch sich die Eigenarten gut einprägen.

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Pluto25 ()

    • zunächst mal besten Dank an Alle, die mir geschrieben haben.
      Es war tatsächlich ein Beispiel darunter, das funktioniert: toll.
      Für diejenigen, die sich mit meinem Homematic Beispiel befassen möchten, hier noch eine sinnvolle Ergänzung. Ich bleibe noch beim Lichtsensor ALS-PT19. Der liefert je nach Beleuchtung Meßwerte zwischen ca 50-950. Diese Werte kann der 8-Bit-Sender von Homematic nicht verarbeiten (8-Bit = 0-255). In meinem vorigen Programmbeispiel habe ich das Problem so gelöst, daß ich Grenzwerte im Bascomprogramm vorgegeben habe, ab denen z.B. der Rolladen sich bewegen soll. Das hat einen Nachteil: wenn die Grenzwerte nicht passen, dann muß ich meinen Microcontroller neu programmieren.
      Hier nun ein Beispiel wie ich dies umgehen kann:
      Zunächst teile ich den Meßwert in Zeile 38 durch 4; damit ist die Ausgabe auf 0-255 begrenzt und diese Werte können vom Sender übertragen werden. Auf unserem Display sehen wir, daß sich die Meßwerte sehr schnell um nur wenige kleine Schritte verändern. Bei jedem dieser Änderungs-Schritte sendet unser Sender. Der Sender ist also ständig mit Senden beschäftigt. Das führt zu einem Problem, das mit der Sendetätigkeit zusammenhängt. Sendet der Sender nämlich innerhalb eines festgelegten Zeitlimits zu oft, dann erreichen wir das sogenannte "Duty-Cycle-Limit"; die Anlage stellt für längere Zeit das Senden ein.
      Um dies abzustellen, teile ich den Wert in Zeile 39 durch 10, und multipliziere ihn anschließened in Zeile 40 mit 10. Dadurch sendet der Sender nur noch, wenn z.B. von 50 auf 60 der Wert sich geändert hat. Nun kann ich im Homematic-Programm mir die passenden Grenzwerte einstellen; passen sie mir nicht brauche ich nur in Homematic den Grenzwert zu ändern. Ich bleibe also flexibel und lasse mein Bascom-Programm unverändert.
      Ihr könnt das ruhig ausprobieren, indem Ihr die Zeile 39 und 40 auskommentiert.
      Gruß an Alle und einen schönen Sonntag. :) :)
      Dateien