Программный I2C Master

10-11-2013, 14:44 От: admin Посмотрели: 605
Правильно ли я реализовал I2C master на atmega328? Просто код ниже не работает нормально, а программная реализация I2C. Хочу понять я недокурил даташит или у моей atmega нерабочий программный модуль I2C (я уже много экспериментов ставил, вдруг чего спалил).


void i2c_init(unsigned char pullups) {
DDRC &= ~(_BV(5) | _BV(4));
if (pullups) {
PORTC |= _BV(5) | _BV(4);
} else {
PORTC &= ~(_BV(5) | _BV(4));
}
TWBR = (F_CPU / I2C_FREQ - 16) / 2;
TWSR &= ~(_BV(TWPS1) | _BV(TWPS0));
}
void i2c_start() {
TWCR = _BV(TWEN) | _BV(TWINT) | _BV(TWSTA);
while (!(TWCR & _BV(TWINT)));
TWCR &= ~_BV(TWSTA);
}
void i2c_stop() {
TWCR = _BV(TWEN) | _BV(TWINT) | _BV(TWSTO);
while (TWCR & _BV(TWSTO));
}
void i2c_write(unsigned char value) {
TWDR = value;
TWCR = _BV(TWEN) | _BV(TWINT);
while (!(TWCR & _BV(TWINT)));
}
unsigned char i2c_read() {
TWCR = _BV(TWEN) | _BV(TWINT);
while (!(TWCR & _BV(TWINT)));
return TWDR;
}

Раздел: AVR

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

Обсудить на форуме


На момент добавления Программный I2C Master все ссылки были рабочие.
Все публикации статей, книг и журналов, представлены на этом сайте, исключительно для ознакомления,
авторские права на эти публикации принадлежат авторам статей, книг и издательствам журналов!
Подробно тут | Жалоба
Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.


Опрос

Ваши предпочтения в TRX


Одинарное преобразование
Двойное преобразование
Прямое преобразование
SDR
Другое
Мне всё равно

Популярные новости
Календарь новостей
«    Май 2024    »
ПнВтСрЧтПтСбВс
 12345
6789101112
13141516171819
20212223242526
2728293031