Страница 1 из 1
Помогите с библиотекой TWI для Attiny85
Добавлено: Ср сен 13, 2017 05:56:55
fulky
Первая моя тема

В общем я ещё новичек, поигрался с ардуиной и для себя решил начать изучать МК с самого младшего семейства аттини, установил AVR studio 6, ну и как любой новичек сразу уперся в камень)) не могу найти готовую библиотеку для attiny85 для работы с шиной I2C (он же TWI) в режиме мастера. МК мне нужно связать с PCF8574 к которой в свою очередь подключен 7-сегментный индикатор. Знаю что в данном МК нет аппаратной реализации этого интерфейса, поэтому ищу программную, т.e. готовую библиотеку. Нашел либу для ардуины
https://github.com/adafruit/TinyWireM , но столкнулся с проблемой компиляции
Error 3 unknown type name 'USI_TWI'
Error 1 unknown type name 'class'
Error 2 expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
я так понимаю эта проблема связана с языками C и С++. т.к. в архиве исходники идут с разрешением .cpp. а в самой avr studio компилируется на С.
есть ли у кого готовая библиотека? или пример реализации подключения по i2c.
З.Ы. Литературы массы перечитал в т.ч. и на данном сайте по данному вопросу, но ещё по уровню не дотягиваю
Re: Помогите с библиотекой TWI для Attiny85
Добавлено: Ср сен 13, 2017 07:23:46
ARV
Пользуюсь сам и могу рекомендовать вам библиотеки Peter Fleury:
http://homepage.hispeed.ch/peterfleury/ ... tware.html
Имейте ввиду, что его библиотеки не содержат таймаутов ожидания, поэтому в случае проблем с аппаратурой (неисправность чипов, обрыв проводников и т.п.) могут зависать. В 99.9% случаев это не критично, но иметь ввиду стоит. Да и доделать таймауты не сложно - не так много там циклов "тупого" оджидания битика...
Re: Помогите с библиотекой TWI для Attiny85
Добавлено: Ср сен 13, 2017 08:02:27
fulky
ARV писал(а):Пользуюсь сам и могу рекомендовать вам библиотеки Peter Fleury:
http://homepage.hispeed.ch/peterfleury/ ... tware.html
Имейте ввиду, что его библиотеки не содержат таймаутов ожидания, поэтому в случае проблем с аппаратурой (неисправность чипов, обрыв проводников и т.п.) могут зависать. В 99.9% случаев это не критично, но иметь ввиду стоит. Да и доделать таймауты не сложно - не так много там циклов "тупого" оджидания битика...
Там в описании написано
This I2c library is implemented as a compact assembler software implementation of the I2C protocol
which runs on any AVR (i2cmaster.S) and as a TWI hardware interface for all AVR with built-in TWI hardware (twimaster.c).
В аттини85 ток USI есть с помощью которого можно реализовать TWI, аппаратного TWI в нем нету.
Re: Помогите с библиотекой TWI для Attiny85
Добавлено: Ср сен 13, 2017 08:14:17
ARV
я вам хрени не посоветую
a compact assembler software implementation of the I2C protocol
which runs on any AVR (i2cmaster.S)
компактная
программная реализация протокола I2C, которая запускается на
любом AVR
забудьте USI, как страшный сон, и работайте обычным ногодрыгом. зато на любых портах, а не на паре предопределенных
Re: Помогите с библиотекой TWI для Attiny85
Добавлено: Ср сен 13, 2017 16:00:52
fulky
Всё зашевелилось, спасибо.
Re: Помогите с библиотекой TWI для Attiny85
Добавлено: Чт сен 14, 2017 10:53:59
fulky
В общем недолго я радовался. в протеусе с микросхемой памяти 24c02 все четко работает, посмотрел как ячейки перезаписваются. А вот с PCF8574 никак не могу заставить работать.A0, A1, A2 подтянуты к земле, адрес микрухи 0х20 получается, но такое ощущение что МК не видит её. На осцилографе все как надо выдается. В чем может быть подвох, никак не могу понять?
Re: Помогите с библиотекой TWI для Attiny85
Добавлено: Пт сен 15, 2017 06:09:42
Demiurg
По даташиту адрес микросхемы 0x40.
Re: Помогите с библиотекой TWI для Attiny85
Добавлено: Пт сен 15, 2017 06:17:43
fulky
[uquote="Demiurg",url="/forum/viewtopic.php?p=3183405#p3183405"]По даташиту адрес микросхемы 0x40.[/uquote]
Это адрес + бит W/R. Там следующий столбец
7-bit
hexadecimal
address
without R/W
в нем 0х20
т.е. в моем случае 0x20 + 0x01 (бит на запись)
Re: Помогите с библиотекой TWI для Attiny85
Добавлено: Пт сен 15, 2017 06:27:37
Demiurg

Слева направо. Старший бит. 7 битов адреса, младший бит - направление данных. Получаем 0b01000000 - 0x40.
Re: Помогите с библиотекой TWI для Attiny85
Добавлено: Пт сен 15, 2017 06:52:21
fulky
у меня отправляет 9 бит

(( последний бит это на запись
Re: Помогите с библиотекой TWI для Attiny85
Добавлено: Пт сен 15, 2017 09:25:36
Demiurg
Почитайте в инете внимательно, что такое TWI (она же I2C) шина. После этого отпадут многие вопросы. Какой адрес у микросхемы, как шина вообще работает.
Re: Помогите с библиотекой TWI для Attiny85
Добавлено: Пт сен 15, 2017 09:39:01
fulky
[uquote="Demiurg",url="/forum/viewtopic.php?p=3183509#p3183509"]Почитайте в инете внимательно, что такое TWI (она же I2C) шина. После этого отпадут многие вопросы. Какой адрес у микросхемы, как шина вообще работает.[/uquote]
Да я её уже на сто рядов всю перечитал. Товарищ ARV рабочую бибилиотеку посоветовал, она на ассемблере написана, в котором я не особо силен. Так вот там пример есть с микросхемой памяти 24с02, с ней все работает, но на этот же адрес вешаю PCF8574 и тишина.
Re: Помогите с библиотекой TWI для Attiny85
Добавлено: Пт сен 15, 2017 09:46:36
Demiurg
Неважно, ассемблер или какой другой язык, когда обращаешься к устройству на TWI шине, в функции обращения к устройству как параметр задание адреса устройства. И он задается как есть, то есть, если по даташиту адрес 0b01000000, 0x40, он не может быть другим.
Re: Помогите с библиотекой TWI для Attiny85
Добавлено: Пт сен 15, 2017 09:49:44
ARV
Вам же русским языком сказали: адрес микросхемы 0x40, а не 0x20
в вашем коде неверно
Код: Выделить всё
#define PCF8574 0x20 // адрес PCF8574 00100000
Re: Помогите с библиотекой TWI для Attiny85
Добавлено: Пт сен 15, 2017 10:00:09
fulky
[uquote="ARV",url="/forum/viewtopic.php?p=3183520#p3183520"]Вам же русским языком сказали: адрес микросхемы 0x40, а не 0x20
в вашем коде неверно
Код: Выделить всё
#define PCF8574 0x20 // адрес PCF8574 00100000
[/uquote]
с этим разобрался, но в протеусе диаграмма не верная получается
Код: Выделить всё
#include <avr/io.h>
#include "i2cmaster.h"
#define PCF8574 0x40 // адрес PCF8574 01000000
int main(void)
{
unsigned char ret;
DDRB = 0xff; // PORTB на выход
i2c_init(); //Инициализируем I2C
ret = i2c_start(PCF8574+I2C_WRITE); // отправляем побитно в SDA 0b01000000+1 режим записи
if ( ret ) {
i2c_stop();
/* не удалось запустить условие запуска, возможно, не найдено ни одного устройства */
}else {
i2c_write(0x46);
i2c_stop();
}
for(;;);
не видит микросхему
Re: Помогите с библиотекой TWI для Attiny85
Добавлено: Вт сен 19, 2017 05:30:21
fulky
Всё заработало, спасибо ARV и Demiurg. В протеусе у меня косяк был.