I2C-Scanner

    This site uses cookies. By continuing to browse this site, you are agreeing to our Cookie Policy.

    • I2C-Scanner

      Ein kleines nützliches BASCOM-Programm zum Herausfinden oder Verifizieren von I2C-Adressen von Sensoren o.ä.
      Um in einem Projekt mit I2C-Slaves Fehlerquellen auszuschließen, sollte man auf jeden Fall die anzuschließenden I2C-Slaves einmal mit diesem Adressen-Scanner testen. Es werden die Adressen von angeschlossenen I2C-Slaves auf einem LC-Display angezeigt. (Natürlich kann man das Programm modifizieren, wenn man statt LCD lieber über die serielle Schnittstelle ausgeben möchte.) Bei jedem gefundenen Slave wird ein kurzer Ton ausgegeben.

      BASCOM Source Code

      1. ' BASCOM-Programm
      2. ' I2C-Scanner
      3. ' stefanhamburg im bascomforum.de
      4. '
      5. ' In: beliebige I2C-Slaves an C.4=SDA und C.5=SCL
      6. ' Out: LCD an D2 bis D.7
      7. ' B.0 Piezo-Buzzer ohne Elektronik
      8. ' Funktion dieses Demo-Programmes:
      9. ' Scannen der Slave-Adressen
      10. '$regfile = "M8def.dat"
      11. '$regfile = "M88def.dat"
      12. $regfile = "m8adef.dat" ' benutzter Mikrocontroller
      13. $crystal = 1000000 ' Taktfrequenz
      14. $hwstack = 40 ' Hardware Stack
      15. $swstack = 40 ' SW Stack
      16. $framesize = 60 ' Frame
      17. Config Portb.0 = Output ' Buzzer
      18. Buzzer Alias Portb.0
      19. Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portd.3 , Rs = Portd.2
      20. Config Lcd = 16 * 2
      21. Cls
      22. Cursor Off
      23. Waitms 250
      24. Config Sda = Portc.4
      25. Config Scl = Portc.5
      26. I2cinit
      27. Dim Slaveadresse As Byte
      28. Do
      29. Cls
      30. Lcd "I2C Slaves"
      31. Lowerline
      32. Lcd "suchen..."
      33. Wait 2
      34. For Slaveadresse = 0 To 254 Step 2 ' für alle geraden Adressen
      35. I2cstart 'Startbedingung senden
      36. I2cwbyte Slaveadresse ' Addresse senden
      37. If Err = 0 Then
      38. Cls 'I2C-Slave gefunden?
      39. Sound Buzzer , 55 , 189
      40. Lcd "Slave dec: " ; Slaveadresse
      41. Lowerline
      42. Lcd "h" ; Hex(slaveadresse) ; " b" ; Bin(slaveadresse)
      43. Wait 2
      44. End If
      45. I2cstop 'Bus freigeben
      46. Next
      47. Cls
      48. Lcd "Ende Scan"
      49. Wait 2
      50. Loop
      51. End
      Display All
    • Hallo, habe mal eine Variante für ATiny erstellt.

      BASCOM Source Code: ATtiny I2C-Scanner

      1. ' BASCOM-Programm
      2. ' I2C-Scanner
      3. ' stefanhamburg im bascomforum.de
      4. '
      5. ' In: beliebige I2C-Slaves an C.4=SDA und C.5=SCL
      6. ' Funktion dieses Demo-Programmes:
      7. ' Scannen der Slave-Adressen
      8. '*******************************************
      9. '* *
      10. '* Programm abgeändert 22.09.2017 *
      11. '* ATTiny85 + Serielle Ausgabe *
      12. '* *
      13. '* Udo Lorenz *
      14. '* *
      15. '* *
      16. '*******************************************
      17. '$sim
      18. $regfile = "ATtiny85.DAT"
      19. $crystal = 8000000
      20. $hwstack = 40
      21. $swstack = 32
      22. $framesize = 32
      23. Config Scl = Portb.2 ' used i2c pins
      24. Config Sda = Portb.0
      25. Config I2cdelay = 1 'i2c speed 10 =100,5 = 200,2=500,1=1000
      26. Open "COMB.4:38400,8,N,1" For Output As #1
      27. Wait 1
      28. Config Scl = Portb.2 ' used i2c pins
      29. Config Sda = Portb.0
      30. I2cinit
      31. Dim Slaveadresse As Byte
      32. Do
      33. Print #1 , "I2C Slaves alle geraden Adressen suchen..."
      34. Waitms 100
      35. For Slaveadresse = 0 To 254 Step 2 ' für alle geraden Adressen
      36. I2cstart ' Startbedingung senden
      37. I2cwbyte Slaveadresse ' Addresse senden
      38. If Err = 0 Then ' I2C-Slave gefunden?
      39. Print #1 , "Slave DEC: " ; Slaveadresse ; " HEX: H" ; Hex(slaveadresse) ; " BIN: B" ; Bin(slaveadresse)
      40. Waitms 100
      41. End If
      42. I2cstop 'Bus freigeben
      43. Next
      44. Print #1 , "Ende Scan"
      45. Print #1 , ""
      46. Wait 5
      47. Loop
      48. End
      Display All