ARDUINO Запись данных в AIP1640

d-view

✩✩✩✩✩✩✩
26 Май 2025
3
0
Попытка оживить китайский будильник.
При подаче питания идёт КЗ. Виновник - контроллер.
Маркировка контроллера затёрта.
В цепи управления индикацией стоит AIP1640
aip1640_datasheet.pdf - Yandex Documents
Взял Arduino NANO и DS3231. Здесь вопросов нет. Всё читается.
Untitled.jpg
Но как работать с AIP1640 так и не разберусь. Нигде ни примеров, ни скетчей по работе с этой микросхемой не нашёл. clock.jpg
Слева внизу на позиции U4 - AIP1640. Справа внизу на позиции U2 был контроллер.
photo_2025-05-26_17-40-00.jpg
 
Изменено:

Bruzzer

★★★✩✩✩✩
23 Май 2020
592
177
Нигде ни примеров, ни скетчей по работе с этой микросхемой не нашёл.
По программной части индикации больших проблем вроде нет.
Надо читать даташит, смотреть примеры и пробовать. Примеры в инете есть. По ним и по даташиту понять должно быть не сильно сложно.
Например.

П.С. Я с этим не работал. Посмотрел из интереса.
 

d-view

✩✩✩✩✩✩✩
26 Май 2025
3
0
Я этот пример видел. Но он для работы с светодиодной матрицей. По даташиту, если я правильно понял, идёт отправка именно посимвольно в семисегментные индикаторы. Но как прописать это для Arduino.
 

asaitov

✩✩✩✩✩✩✩
16 Янв 2024
25
8
Набор семисегментных индикаторов - это тоже в своем роде светодиодная матрица (7 сегментов x количество индикаторов). Судя по даташиту, драйвер управляет 16 индикаторами по 8 сегментов. Интерфейс похож на I2C, но без адреса устройства, бита контроля и т.п. Формат передачи данных следующий: сигнал начала передачи, передача команды/данных, сигнал окончания передачи. Эти три шага реализованы в приведенном выше скетче, функции можно просто скопировать в свой скетч. Можно заодно скопировать инициализацию из функции setup. В даташите написано, что поддерживаются три типа команд:

1. Установка режима передачи данных: 0x40 (задание значений для нескольких подряд идущих индикаторов), 0x44 (задание значения для одного индикатора), есть еще тестовый режим, но из даташита не понятно, что он делает.
Код:
  IIC_start();
  IIC_send(0x44); // для простоты будем включать по одному индикатору за раз
  IIC_end();
2. Передача данных. Сначала указывается адрес индикатора (от 0xс0 до 0xcf). Затем в зависимости от режима из первого пункта указываются значения либо подряд идущих индикаторов, начиная с указанного адреса, либо одного. Значения 8-битные (от 0x00 до 0xff, или от b00000000 до b11111111 в двоичной), 8 бит - 8 сегментов. Соответствие между битами и сегментами можно посмотреть в даташите на 17 и 19 стр.
Код:
  IIC_start();
  IIC_send(0xc0); // указываем адрес самого первого индикатора
  IIC_send(0xff); // включаем на нем все светодиоды
  IIC_end();

  IIC_start();
  IIC_send(0xc1); // указываем адрес второго индикатора
  IIC_send(b10010000); // включаем на нем пару сегментов
  IIC_end();
Тут стоит последовательно повключать по одному все индикаторы и записать куда-нибудь какой адрес соответствет какой зоне на табло.

3. Включение/выключение/яркость дисплея. Яркость указывается значением от 0x88 до 0x8f, выключение - 0x80 (могу ошибаться, мне кажется, что в даташите написано с ошибкой).
Код:
  IIC_start();
  IIC_send(0x88); // ставим минимальную яркость
  IIC_end();

  IIC_start();
  IIC_send(0x8f); // ставим максимальную яркость
  IIC_end();

  IIC_start();
  IIC_send(0x80); // выключаем дисплей
  IIC_end();
Выглядит довольно просто, дальше нужно просто экспериментировать.
 
Изменено:

d-view

✩✩✩✩✩✩✩
26 Май 2025
3
0
Вот здесь меня и терзают сомнения. Сейчас у меня на I2C висит чтение DS3231. Сюда же (судя из примера), по схожему, но не I2C протоколу, нужно прикрутить запись AIP1640.

//data display from right to left, from bottom to top, HIGH level display.
#define IIC_SCL A5
#define IIC_SDA A4

Или можно SCL и SDA назначить на другие пины? Это же всё равно не I2C?