' I2C-Scanner ' In: beliebige I2C-Slaves an C.4=SDA und C.5=SCL ' Out: LCD 16 * 2 an D2 bis D.7 ' Funktion dieses Demo-Programmes: ' Scannen der Slave-Adressen ' 28.05.2021 $regfile = "m168def.dat" ' Mikrocontroller ATMEGA168 $crystal = 7372800 ' 7,3728 MHz Taktfrequenz $lib "i2c_twi.lbx" ' I2C-Hardware TWI $hwstack = 40 ' Hardware Stack $swstack = 40 ' SW Stack $framesize = 60 ' Frame Const On = 1 ' On = 1 für LED ein Const Off = 0 ' Off = 0 für LED aus Config PortC.0 = Output 'Grüne LED Config PortC.2 = Output 'Gelbe LED Config PortC.3 = Output 'Rote LED LED_Rot Alias PortC.3 ' LED Rot an PD5 LED_Gelb Alias PortC.2 ' LED Gelb an PD4 LED_Gruen Alias PortC.0 ' LED Grün an PD3 Config Twi = 100000 ' I2C Takt = 100 KHz Config SCL = Portc.4 Config SDA = Portc.5 I2cinit Config Lcdpin = Pin , Db4 = PortD.4 , Db5 = PortD.5 , Db6 = PortD.6 , Db7 = PortD.7 , E = PortD.3 , Rs = PortD.2 Config Lcd = 16x2 Cls Cursor Off Waitms 100 Dim Slaveadresse As Byte Do Cls Locate 1 , 1 LCD "I2C Slave suchen" Wait 2 Locate 2 , 1 For Slaveadresse = 0 To 254 Step 2 ' für alle geraden Adressen LED_Gruen = On I2cstart 'Startbedingung senden I2cwbyte Slaveadresse ' Addresse senden If Err = 0 Then Cls 'I2C-Slave gefunden? Lcd "Slave Adresse = " Locate 2 , 1 Lcd "Hex:" ; Hex(slaveadresse) ;" Dec:"; Slaveadresse Wait 2 End If I2cstop LED_Gruen = Off 'Bus freigeben Next Cls LED_Rot = On Lcd "Ende Scan" Wait 2 LED_Rot = Off Loop End