Перейти к содержанию
    

Hardware i2c in Atmega8

Пытаюсь организовать i2c аппаратно на Atmega8. (кварц 11,0592)

Не возникает признака завершения операции (TWINT) после того как выставляю START...

На линиях SCL, SDA появляется генерация ...

 

Вот код:

Процедура инициализации.

 

// set pull-up resistors on I2C bus pins

sbi(PORTC, 5); // i2c SCL on ATmega8

sbi(PORTC, 4); // i2c SDA on ATmega8

// set i2c bitrate 100k

сbi(TWSR, TWPS0);

сbi(TWSR, TWPS1);

outb(TWBR, 12);

sei();

 

void i2cSendStart(void)

TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN)

ожидаю когда прийдет признак выполнения команды ...

while (!(TWCR & (1<<TWINT)))

..... он так и не приходит ....

Как быть???

;

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

перед sei() вставить:

 

TWCR = (1 << TWEN);

 

при каждой записи в TWCR не забывать устанавливать TWEN.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Подскажите, есть вопрос по i2с в atmege. Какое максимальное расстояние между контроллерами допустимо при частоте порядка 100кГц? Есть ли какие то ограничения на топологию звезда/шина ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Какое максимальное расстояние между контроллерами допустимо при частоте порядка 100кГц?

 

Зависит от экрана...

(по спецификации линии должны чередоваться с землёй в плоском шлейфе)

 

Есть ли какие то ограничения на топологию звезда/шина ?

 

Естественно шина... (звезда глючить при выс частотах и больших расстояниях будет)

 

А по первоначальной теме тут

http://electronix.ru/forum/index.php?showt

Изменено пользователем QuickWitted

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Подскажите, есть вопрос по i2с в atmege. Какое максимальное расстояние между контроллерами допустимо при частоте порядка 100кГц?

В даташите есть ограничение на ёмкость линии связи (ну, не совсем ограничение, просто один из параметров специфицируется на ёмкостях до 400пФ), там же формула по максимальному значению сопротивления подтяжки в зависимости от ёмкости шины, если то максимальное значение приравнять минимальному, то получим ограничение ёмкости шины для 100кГц около 1000пФ.

Даже если ограничится 400пФ и выбросить 100пФ на ёмкости выводов десятка повешенных на шину микросхем, при использовании кабеля UTP 5kat (где-то 50-55пФ/метр по спецификации, точно не помню) - выходит можно метров 5-6 суммарной длины кабелей сделать.

У меня работало где-то на 1-1.5 метрах суммарной длины просто скрученного в четвёрку МГТФ-а с тремя ведомыми устройствами, больше не пробовал.

 

Существует стандарт-не-стандарт-может-рекомендация ACCESS.bus - это применение I2C "на столе", "в комнате", мультимастерный вариант, там специфицирован даже разъём (GND,SCL,VCC,SDA) и формат кадра. Ограничений именно на длину там не помню, по ёмкоcти кажется те же 1000пФ, по сопротивлению - чтобы на дальнем конце VCC село не ниже 4,5В.

У каждого устройства на шине рекомендуют в обе линии врезать последовательные резисторы 56 Ом, поджтяжка одна на основном блоке (он и питание раздаёт).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...