\ detect presence of all possible devices on I2C bus \ only the 7 bit address schema is supported \ not all bitpatterns are valid 7bit i2c addresses : i2c.7bitaddr? ( a -- f) $7 $78 within ; : i2c.detect ( -- ) base @ hex \ header line 4 spaces $10 0 do i 3 .r loop $80 0 do i $0f and 0= if cr i 2 .r [char] : emit space then i i2c.7bitaddr? if i i2c.ping? if \ does device respond? i 3 .r else ." --" then else ." " then loop cr base ! ; \ output looks like \ (ATmega1280)> i2c.detect \ 0 1 2 3 4 5 6 7 8 9 A B C D E F \ 0: -- -- -- -- -- -- -- -- -- \ 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- \ 20: -- -- -- -- -- -- -- 27 -- -- -- -- -- -- -- -- \ 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- \ 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- \ 50: 50 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- \ 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- \ 70: -- -- -- -- -- -- -- -- \ ok \