Jump to content

    

В чем разница между TWI и i2c?

В чем разница между TWI и i2c?

Коллеги ни разу не сталкивалась ни с тем ни с этим.

Хотела глянуть пример кода и залез в Project Wizard от CodeVision.

 

Вкладка I2C дала такие строки в примере кода:

#include <mega32.h>

// I2C Bus functions
#asm
   .equ __i2c_port=0x1B;PORTA
   .equ __sda_bit=0
   .equ __scl_bit=1
#endasm
#include <i2c.h>

// Declare your global variables here

void main(void)
{
  // I2C Bus initialization
   i2c_init();

while (1)
      {
      // Place your code here

      };
}

 

 

 

вкладка 2-wire(i2c) дала такой код:

 #include <mega32.h>

void main(void)
  {

    // 2 Wire Bus initialization
    // Generate Acknowledge Pulse: Off
    // 2 Wire Bus Slave Address: 0h
    // General Call Recognition: Off
    // Bit Rate: 400,000 kHz
    TWSR=0x00;
    TWBR=0x0C;
    TWAR=0x00;
    TWCR=0x04;

    while (1)
      {
      // Place your code here

      };
}

 

 

Обращает на себя внимание то, что в первом примере можно назначать пины для SDA и SCL. Это что - что-то типа программного i2C?

Во втором примере пины не назначаются, то есть работать будут аппаратные SCL и SDA..

 

Я почему спрашиваю - лоханулась при покупке АЦП - купил два с одинаковыми адресами. В связи с чем хочу поинтересоваться, могу ли я все же их исполользовать, повесив их на разные линии, с одной общаяясь по i2с, с другой по 2-wire(i2c)? Или же купить АЦП с другим адресом?

Share this post


Link to post
Share on other sites
Обращает на себя внимание то, что в первом примере можно назначать пины для SDA и SCL. Это что - что-то типа программного i2C?

Очень на то похоже.

 

Во втором примере пины не назначаются, то есть работать будут аппаратные SCL и SDA..

Именно.

Share this post


Link to post
Share on other sites
В чем разница между TWI и i2c?
Принципиально - никакой.

Какие хоть АЦП купили , может у них есть встроенное изменение адреса , или задействовать одну ножку проца , для поочередного включения АЦП

Share this post


Link to post
Share on other sites

ADS1100.

Точнее ADS1100A0

Судя по даташиту адрес зашивается на фабрике.

 

А все-таки что это за зверь такой - TWI, который вроде бы аппаратен, но позволят изменить назначение ножек?

Можно ли эту способность исплользовать? Я уже однажды комбинировала аппаратный и программный SPI прокатывало, нельзя ли здесь такой трюк провернуть?

Share this post


Link to post
Share on other sites
ADS1100.

Точнее ADS1100A0

Судя по даташиту адрес зашивается на фабрике.

 

А все-таки что это за зверь такой - TWI, который вроде бы аппаратен, но позволят изменить назначение ножек?

Можно ли эту способность исплользовать? Я уже однажды комбинировала аппаратный и программный SPI прокатывало, нельзя ли здесь такой трюк провернуть?

Да это одно и тоже , как братья близнецы. Просто одна фирма , другой фирме платить за использование разработанной ей протокола не хочет , вот и обозвали TWI. Можете работать как аппаратно так и программно , как Вам захочется. Во многих современных MK полностью реализован аппаратный вариант этого протокола. Программно можно дёргать ножками , если его в чипе нет или надо несколько I2C ==(TWI)

Да , управлять ими можно только по питанию или поменять одну из них на ADS1100A1 -ADS1100A7 у продавца или через мультиплексор самой шиной

Share this post


Link to post
Share on other sites
А все-таки что это за зверь такой - TWI

I2C и TWI - это те же яйца, только вид с боку.

Если мне склероз не изменяет, то I2C - это зарегистрированная торговая марка Филипса, и любой производитель, заявляющий, что у него на борту имеется I2C, обязан отстегивать филипсу некие отчисления за использование торговой марки.

Поэтому прочие производители и обзываю двухпроводной интерфейс другими словами из трех букв :)

Share this post


Link to post
Share on other sites

ок, господа, допустим, я цепляю один ацп на SDA и SCL, другой на PORTA.0 и PORTA.1.

 

Далее делаю так:

#include <mega32.h>

// I2C Bus functions
#asm
   .equ __i2c_port=0x1B;PORTA
   .equ __sda_bit=0
   .equ __scl_bit=1
#endasm
#include <i2c.h>

// Declare your global variables here

void main(void)
{


// 2 Wire Bus initialization
// Generate Acknowledge Pulse: Off
// 2 Wire Bus Slave Address: 0h
// General Call Recognition: Off
// Bit Rate: 400,000 kHz
TWSR=0x00;
TWBR=0x0C;
TWAR=0x00;
TWCR=0x04;

// I2C Bus initialization
i2c_init();

while (1)
      {
      // Place your code here

i2c_start();
i2c_write(0b10000000);
i2c_read(1);
i2c_write(0b00000000);
i2c_read(1);
i2c_write(0b00111111);
i2c_read(1);
i2c_stop();



      };
}

 

Ну и в теле главного цикла операции чтения TWI, пока еще не разобралась с ними. Будет работать?

 

Напоминаю остальным, чтобы не отвлекаться от темы - есть два устройства с одинаковым адресом. Как их рулить одним микроконтроллером без конфликтов?

Share this post


Link to post
Share on other sites

Разные адреса нужны, чтобы различать устройства, сидящие на одной физической шине. Вы делаете две физически разные шины - нет никакого конфликта.

Share this post


Link to post
Share on other sites

Я Вам выше написал , задействуйте только одну ножку порта , для переключения микросхем , чем ещё две + тупо сидеть в delays

Share this post


Link to post
Share on other sites

что конкретно вы подразумеваете под переключением микросхем? Как вы предлагаете это осуществить?

Share this post


Link to post
Share on other sites
что конкретно вы подразумеваете под переключением микросхем? Как вы предлагаете это осуществить?

Это просто два полевика P и N проводимости (типа MOSFET ) / Истоки на питания - стоки на питание АЦП - затворы на порт MK. 0 - включает один выключает другой, 1 - наоборот . I2C подключены напрямую на оба АЦП. Ну о том , что этот же 0/1 использовать как флажок с какого ADC принимаете данные - и говорить нечего.

2-ой способ Подключения такие же только отключаете шину I2C , но транзисторов 4 или сборки ( например) типа FDS9933BZ и её антипод FDS9926A ( в открытом состоянии DS сотые ома).

Для первого варианта тоже есть сборки , но только с разнополярными полевиками внутри. Только спросите и тут их Вам набросают ........( слово выражающее количество ещё не придумано в русском языке. Личная цензура запрещает употреблять известные слова при общении с противоположным полом :biggrin: )

Share this post


Link to post
Share on other sites

у....может лучше посоветуете коммутатор аналогового сигнала? Я собираюсь этим АЦП оцифровывать аналоговое напряжение с выхода микросхемы AD595 - усилитель термопары. МОжет мне проще использовать 1 ацп, коммутируя его вход на 2 разных выхода AD595 ?

Share this post


Link to post
Share on other sites
у....может лучше посоветуете коммутатор аналогового сигнала? Я собираюсь этим АЦП оцифровывать аналоговое напряжение с выхода микросхемы AD595 - усилитель термопары. МОжет мне проще использовать 1 ацп, коммутируя его вход на 2 разных выхода AD595 ?

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

Share this post


Link to post
Share on other sites

AD595<------К-термопара

|

АНАЛОГОВЫЙ КОММУТАТОР---->ADS1100-->>ATMEGA8

|

AD595<------К-термопара

Share this post


Link to post
Share on other sites

Ох , почитал я про этот усилитель , не та уж всё просто с ним и как поведёт он себя с коммутатором я не скажу.

http://electronix.ru/forum/index.php?showtopic=44254

Думаю , что тему заметят и те кто с ним работал - подскажут

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this