Обсуждаем контроллеры компании Atmel.
Ответить

Помогите с библиотекой TWI для Attiny85

Ср сен 13, 2017 05:56:55

Первая моя тема :) В общем я ещё новичек, поигрался с ардуиной и для себя решил начать изучать МК с самого младшего семейства аттини, установил 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

Пользуюсь сам и могу рекомендовать вам библиотеки Peter Fleury: http://homepage.hispeed.ch/peterfleury/ ... tware.html
Имейте ввиду, что его библиотеки не содержат таймаутов ожидания, поэтому в случае проблем с аппаратурой (неисправность чипов, обрыв проводников и т.п.) могут зависать. В 99.9% случаев это не критично, но иметь ввиду стоит. Да и доделать таймауты не сложно - не так много там циклов "тупого" оджидания битика...

Re: Помогите с библиотекой TWI для Attiny85

Ср сен 13, 2017 08:02:27

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

я вам хрени не посоветую
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

Всё зашевелилось, спасибо.

Re: Помогите с библиотекой TWI для Attiny85

Чт сен 14, 2017 10:53:59

В общем недолго я радовался. в протеусе с микросхемой памяти 24c02 все четко работает, посмотрел как ячейки перезаписваются. А вот с PCF8574 никак не могу заставить работать.A0, A1, A2 подтянуты к земле, адрес микрухи 0х20 получается, но такое ощущение что МК не видит её. На осцилографе все как надо выдается. В чем может быть подвох, никак не могу понять?
Вложения
TEST01.rar
(65.32 KiB) Скачиваний: 220

Re: Помогите с библиотекой TWI для Attiny85

Пт сен 15, 2017 06:09:42

По даташиту адрес микросхемы 0x40.

Re: Помогите с библиотекой TWI для Attiny85

Пт сен 15, 2017 06:17:43

По даташиту адрес микросхемы 0x40.

Это адрес + бит W/R. Там следующий столбец

7-bit
hexadecimal
address
without R/W

в нем 0х20

т.е. в моем случае 0x20 + 0x01 (бит на запись)

Re: Помогите с библиотекой TWI для Attiny85

Пт сен 15, 2017 06:27:37

Изображение
Слева направо. Старший бит. 7 битов адреса, младший бит - направление данных. Получаем 0b01000000 - 0x40.

Re: Помогите с библиотекой TWI для Attiny85

Пт сен 15, 2017 06:52:21

у меня отправляет 9 бит :((( последний бит это на запись
Вложения
Снимок.PNG
(111.96 KiB) Скачиваний: 639

Re: Помогите с библиотекой TWI для Attiny85

Пт сен 15, 2017 09:25:36

Почитайте в инете внимательно, что такое TWI (она же I2C) шина. После этого отпадут многие вопросы. Какой адрес у микросхемы, как шина вообще работает.

Re: Помогите с библиотекой TWI для Attiny85

Пт сен 15, 2017 09:39:01

Почитайте в инете внимательно, что такое TWI (она же I2C) шина. После этого отпадут многие вопросы. Какой адрес у микросхемы, как шина вообще работает.


Да я её уже на сто рядов всю перечитал. Товарищ ARV рабочую бибилиотеку посоветовал, она на ассемблере написана, в котором я не особо силен. Так вот там пример есть с микросхемой памяти 24с02, с ней все работает, но на этот же адрес вешаю PCF8574 и тишина.

Re: Помогите с библиотекой TWI для Attiny85

Пт сен 15, 2017 09:46:36

Неважно, ассемблер или какой другой язык, когда обращаешься к устройству на TWI шине, в функции обращения к устройству как параметр задание адреса устройства. И он задается как есть, то есть, если по даташиту адрес 0b01000000, 0x40, он не может быть другим.

Re: Помогите с библиотекой TWI для Attiny85

Пт сен 15, 2017 09:49:44

Вам же русским языком сказали: адрес микросхемы 0x40, а не 0x20
в вашем коде неверно
Код:
#define PCF8574  0x20      //  адрес PCF8574 00100000

Re: Помогите с библиотекой TWI для Attiny85

Пт сен 15, 2017 10:00:09

Вам же русским языком сказали: адрес микросхемы 0x40, а не 0x20
в вашем коде неверно
Код:
#define PCF8574  0x20      //  адрес PCF8574 00100000


с этим разобрался, но в протеусе диаграмма не верная получается

Код:
#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

Всё заработало, спасибо ARV и Demiurg. В протеусе у меня косяк был.
Ответить