AS1115 display driver i2c address?

I recently purchased several AS1115 three character 7-segment display devices - these:

What is the I2C address on these devices?

I’m using an i2c.scan() function on CircuitPython on a custom board and also verified on an Adafruit Metro M0 Express board. The device is not detected. On my custom board, I have a PCF2129T i2c RTC on-board, and it is detected and shows up in the list. But the above AS1115 product does not. And it doesn’t show up on the Metro, either.

Note - the Metro needed for the pull-ups to be enabled on the AS1115 board. So I did that for that verification. On my custom board, the pull-ups are already on-board, so for that case, the jumpers on the AS1115 are disabled.

Here is the program for reference:

import time
import board
import busio

time.sleep(5)

known = [
    [ 0x51, "PCF2129T Real Time Clock"],
]

print("")
print("i2c scan test")
print("")
print("initializing i2c bus ...")
i2c = busio.I2C(board.SCL, board.SDA, frequency=200000)

print("locking the bus ...")
while not i2c.try_lock():
    pass

print("scanning for devices ...")
print("")
n = 0
for device_address in i2c.scan():
    print("found device at 0x%02x" % (device_address), end='')
    n += 1
    for (a, d) in known:
        if device_address == a:
            print(": %s" % (d))
            break
        else:
            print("")

print("")
print("found %d devices" % (n))
print("")
print("done")
print("")

And the output is:

i2c scan test

initializing i2c bus ...
locking the bus ...
scanning for devices ...

found device at 0x51: PCF2129T Real Time Clock

found 1 devices

done

I have experimented with slower frequencies, but that had no effect.

Any ideas? Is there any preliminary setup I need to do on the AS1115 board above that I need to do in order to set it’s I2C address?

Thanks for any pointers.

Thanks!
-Brian

HI Brian,
The i2c address is 0x00

Thanks

1 Like

Thank you, @Bhaskar.

Looking in the source code for CircuitPython, the problem appears to be that they scan from 0x08 - 0x77 with the following code comment about 0b0000xxx and 0b1111xxx being reserved:

//|   .. method:: scan()
//|
//|      Scan all I2C addresses between 0x08 and 0x77 inclusive and return a
//|      list of those that respond.
//|
//|      :return: List of device ids on the I2C bus
//|      :rtype: list
//|
STATIC mp_obj_t busio_i2c_scan(mp_obj_t self_in) {
    busio_i2c_obj_t *self = MP_OBJ_TO_PTR(self_in);
    check_for_deinit(self);
    check_lock(self);
    mp_obj_t list = mp_obj_new_list(0, NULL);
    // 7-bit addresses 0b0000xxx and 0b1111xxx are reserved
    for (int addr = 0x08; addr < 0x78; ++addr) {
        bool success = common_hal_busio_i2c_probe(self, addr);
        if (success) {
            mp_obj_list_append(list, MP_OBJ_NEW_SMALL_INT(addr));
        }
    }
    return list;
}

After a quick google search, it appears the above code follows I2C spec, at least according to the I2C Wikipedia:

What to do in order to use these NCD.io modules?

the I2C scan might not to be able to scan but if you use the “0x00” as you 7 bit address you will be able to talk to the AS1115.

Thanks

1 Like

Yes, I wrote my own scan routine and scanned the full range and it does respond at 0x00. Thanks.