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

Обсуждаем контроллеры компании Atmel.
Ответить
Первый раз сказал Мяу!
Сообщения: 31
Зарегистрирован: Ср сен 13, 2017 05:53:24

Сообщение 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.

З.Ы. Литературы массы перечитал в т.ч. и на данном сайте по данному вопросу, но ещё по уровню не дотягиваю
Реклама
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18678
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

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

Мой уютный бложик... заходите!
Контактная информация:
Реклама
Первый раз сказал Мяу!
Сообщения: 31
Зарегистрирован: Ср сен 13, 2017 05:53:24

Сообщение 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 в нем нету.
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18678
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

я вам хрени не посоветую
a compact assembler software implementation of the I2C protocol
which runs on any AVR (i2cmaster.S)
компактная программная реализация протокола I2C, которая запускается на любом AVR

забудьте USI, как страшный сон, и работайте обычным ногодрыгом. зато на любых портах, а не на паре предопределенных
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Первый раз сказал Мяу!
Сообщения: 31
Зарегистрирован: Ср сен 13, 2017 05:53:24

Сообщение fulky »

Всё зашевелилось, спасибо.
Реклама
Первый раз сказал Мяу!
Сообщения: 31
Зарегистрирован: Ср сен 13, 2017 05:53:24

Сообщение fulky »

В общем недолго я радовался. в протеусе с микросхемой памяти 24c02 все четко работает, посмотрел как ячейки перезаписваются. А вот с PCF8574 никак не могу заставить работать.A0, A1, A2 подтянуты к земле, адрес микрухи 0х20 получается, но такое ощущение что МК не видит её. На осцилографе все как надо выдается. В чем может быть подвох, никак не могу понять?
Вложения
TEST01.rar
(65.32 КБ) 237 скачиваний
Реклама
Это не хвост, это антенна
Сообщения: 1480
Зарегистрирован: Ср июн 25, 2008 15:19:44

Сообщение Demiurg »

По даташиту адрес микросхемы 0x40.
Контактная информация:
Первый раз сказал Мяу!
Сообщения: 31
Зарегистрирован: Ср сен 13, 2017 05:53:24

Сообщение 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 (бит на запись)
Это не хвост, это антенна
Сообщения: 1480
Зарегистрирован: Ср июн 25, 2008 15:19:44

Сообщение Demiurg »

Изображение
Слева направо. Старший бит. 7 битов адреса, младший бит - направление данных. Получаем 0b01000000 - 0x40.
Контактная информация:
Первый раз сказал Мяу!
Сообщения: 31
Зарегистрирован: Ср сен 13, 2017 05:53:24

Сообщение fulky »

у меня отправляет 9 бит :((( последний бит это на запись
Вложения
Снимок.PNG
(111.96 КБ) 656 скачиваний
Это не хвост, это антенна
Сообщения: 1480
Зарегистрирован: Ср июн 25, 2008 15:19:44

Сообщение Demiurg »

Почитайте в инете внимательно, что такое TWI (она же I2C) шина. После этого отпадут многие вопросы. Какой адрес у микросхемы, как шина вообще работает.
Контактная информация:
Первый раз сказал Мяу!
Сообщения: 31
Зарегистрирован: Ср сен 13, 2017 05:53:24

Сообщение fulky »

[uquote="Demiurg",url="/forum/viewtopic.php?p=3183509#p3183509"]Почитайте в инете внимательно, что такое TWI (она же I2C) шина. После этого отпадут многие вопросы. Какой адрес у микросхемы, как шина вообще работает.[/uquote]

Да я её уже на сто рядов всю перечитал. Товарищ ARV рабочую бибилиотеку посоветовал, она на ассемблере написана, в котором я не особо силен. Так вот там пример есть с микросхемой памяти 24с02, с ней все работает, но на этот же адрес вешаю PCF8574 и тишина.
Это не хвост, это антенна
Сообщения: 1480
Зарегистрирован: Ср июн 25, 2008 15:19:44

Сообщение Demiurg »

Неважно, ассемблер или какой другой язык, когда обращаешься к устройству на TWI шине, в функции обращения к устройству как параметр задание адреса устройства. И он задается как есть, то есть, если по даташиту адрес 0b01000000, 0x40, он не может быть другим.
Контактная информация:
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18678
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

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

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

#define PCF8574  0x20      //  адрес PCF8574 00100000
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Первый раз сказал Мяу!
Сообщения: 31
Зарегистрирован: Ср сен 13, 2017 05:53:24

Сообщение 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(;;);	
	
не видит микросхему
Первый раз сказал Мяу!
Сообщения: 31
Зарегистрирован: Ср сен 13, 2017 05:53:24

Сообщение fulky »

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

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