У меня есть два контроллера - atmega328 и attiny2313. Они соединены по шине I2C (подтяжки 2.2 кОм). atmega выступает в роли master, attiny в роли slave. Если у atmega есть аппаратный I2C и особых проблем с ней нет, то у attiny только интерфейс-полуфабрикат USI.
И у меня это получается с переменным успехом. Код реализации I2C slave позаимствовал вот тут http://www.instructables.com/id/ATTiny- ... I2C-Slave/.
Опытным путём выяснил, что нормально фиксируется START-условие, потом он доходит до проверки адреса, но она не оканчивается ничем хорошим.
Во вложении исходный код прошивки ATTINY2313. На меге код простой:
В 0-ом регистре i2c на attiny сохранено число 0x55 и я пытаюсь его считать, но светодиод так и не загорается - проверка не проходит. Попытка что-то записать тоже ни к чему не приводит. Управление светодиодами и функции i2c на меге точно работают, это уже проверено. Адрес slave тоже точно правильный.
P.S.: Снижение частоты шины не помогает. Качество соединений хорошее.
И у меня это получается с переменным успехом. Код реализации I2C slave позаимствовал вот тут http://www.instructables.com/id/ATTiny- ... I2C-Slave/.
Опытным путём выяснил, что нормально фиксируется START-условие, потом он доходит до проверки адреса, но она не оканчивается ничем хорошим.
Во вложении исходный код прошивки ATTINY2313. На меге код простой:
Код: Выделить всё
_delay_ms(1000);
i2c_start();
i2c_write(0x40);
i2c_write(0);
i2c_start();
i2c_write(0x41);
buf = i2c_read();
if (buf == 0x55) led_set(LED_RED, 1);
i2c_stop();
P.S.: Снижение частоты шины не помогает. Качество соединений хорошее.
- Вложения
-
- pwm-controller.zip
- (10.79 КБ) 236 скачиваний
