Attiny85, I2C и расширитель портов PCF8574

Обсуждаем контроллеры компании Atmel.
Ответить
Вымогатель припоя
Сообщения: 546
Зарегистрирован: Вс дек 30, 2012 00:32:06
Откуда: Николаев / Украина

Сообщение forfrends »

Всем привет! Делаю небольшое устройство на Attiny85. К МК нужно подключить 6 расширителей портов PCF8574.
Для работы с PCF8574 я установил библиотеку A85_PCF8574: https://github.com/debsahu/A85_PCF8574
Так же я установил зависимую библиотеку TinyWireM: https://github.com/adafruit/TinyWireM

Ядер для Attiny85 для Arduino IDE есть очень много... вот список: https://github.com/arduino/Arduino/wiki ... pport-urls
Я установил 2 ядра:
ATtiny: https://raw.githubusercontent.com/damel ... index.json
ATFlash: https://mesom.de/atflash/package_atflash_index.json

Накидал простой пример:
Спойлер

Код: Выделить всё

#include <A85_PCF8574.h>
// SDA - P0 - 0 // CLK - P2 - 2
#define PCF8574_ADDRESS (0x20)
A85_PCF8574 myPCF8574;
  
void setup()
{
  myPCF8574.begin(PCF8574_ADDRESS);
}
  
void loop()
{
    myPCF8574.setBit(0, 0);
   _delay_ms(1000);
    myPCF8574.setBit(0, 1);
    _delay_ms(1000);
}
По сути это простой "Блинк" на пине P0 PCF8574. Компилирую в Ардуино ИДЕ, прошиваю через USBASP.
Настройки Ардуино: Attiny85, Clock: internal 8 Mhz
Фьюзы установлены следующие: High:0xDF; Low: 0xE2
у Attiny85 никакой обвязки нет кроме питания и подключенной PCF8574.

Но не работает. Пробовал оба ядра - результата нет. Посмотрел осциллографом - Сигнал на линиях SDA и SCL отсутствует.

Распаковал новый МК, прошил - то же самое. При этом если прошить обычный Блинк и подключить светодиод к МК то работает, светодиод мигает. Немного модифицировал пример:
Спойлер

Код: Выделить всё

#include <A85_PCF8574.h>
// SDA - P0 - 0 // CLK - P2 - 2
#define PCF8574_ADDRESS (0x20)
A85_PCF8574 myPCF8574;
  
void setup()
{
  myPCF8574.begin(PCF8574_ADDRESS);
  pinMode(1, OUTPUT);
}
  
void loop()
{
    myPCF8574.setBit(0, 0);
    digitalWrite(1, HIGH);   // turn the LED on (HIGH is the voltage level)
    _delay_ms(1000);
    myPCF8574.setBit(0, 1);
    digitalWrite(1, LOW);    // turn the LED off by making the voltage LOW
    _delay_ms(1000);
}
На пине PB1 есть "мигание", а на пинах PB0 и PB2 (SDA и SCL) - тишина... Можете подсказать что я не так делаю? Почему не работает? Как это можно исправить?

Добавлю еще: Может есть способ для подключения "стандартных" библиотек? Так как много раз натыкался на подобные статьи: https://create.arduino.cc/projecthub/Sa ... uts-9a80ef
Где нет использования специализированных библиотек, но увы, нет и описания что за ядро используется, какие именно библиотеки используются и т.д. А если использовать код "как есть", то получаю много ошибок .
TinyWireM инициализируется в самой библиотеке A85_PCF8574. Если заглянуть в функцию myPCF8574.begin то там есть инициализация TinyWireM. И да, я пробовал выносить инициализацию в основной код:
Спойлер#include <A85_PCF8574.h>
#include <TinyWireM.h>
// SDA - P0 - 0 // CLK - P2 - 2
#define PCF8574_ADDRESS (0x20)
A85_PCF8574 myPCF8574;

void setup()
{
TinyWireM.begin(); // initialize I2C lib
myPCF8574.begin(PCF8574_ADDRESS);
......
Но результат тот же.
Что подскажете?
Сделать своими руками всегда интересней чем просто купить и пользоваться
Контактная информация:
Реклама
Друг Кота
Аватара пользователя
Сообщения: 15598
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

Первое...
У вас ардуиноIDE - это не совсем таки среда для "малолапых" АВРок, но платформа аттини85 там имеется от "сторонних авторов".
Вопрос как ее установить и как она в реале работает...
По установке если ПК с виндовс 7-8-10 вопросов не особо возникает, если ПК с ХР - на сегодня придется вручную ставить (автоматика там только повреждает IDE после последних модернизаций).
Далее...
Протокол I2C можно и самому написать, ежли нет в МК аппаратного модуля I2С.
Ибо библиотеки не всегда корректны при работе с платформами "сторонних разработчиков".
Ну и третье - зачем тинька85я при куче расширителей?
Можно ведь простую про-мини использовать?
:roll:
Реклама
Вымогатель припоя
Сообщения: 546
Зарегистрирован: Вс дек 30, 2012 00:32:06
Откуда: Николаев / Украина

Сообщение forfrends »

Устройство будет на 6-ти отдельных платах, а каждая плата очень миниатюрна. 328-я мега + обвязка могут не влезть.
Проблему решил. Я просто забыл о подтягивающих резисторах на линии I2C. Поставил два резистора к "+" питания, и все заработало. Перепроверил разные примеры и разные ядра - все работает!
Сделать своими руками всегда интересней чем просто купить и пользоваться
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 15598
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

ДЫК... подтягивающие резисторы подразумеваются схемотехникой "по умолчанию"
8)
Реклама
Эиком - электронные компоненты и радиодетали
Ответить

Вернуться в «AVR»