Телесистемы
 Разработка, производство и продажа радиоэлектронной аппаратуры
На главную   | Карта сайта | Пишите нам | В избранное
Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс.
e-mail:jobsmp@pochta.ru

Телесистемы | Электроника | Конференция «Микроконтроллеры и их применение»

Знатоки AVR, помогите с аппаратным TWI. Что я делаю неправильно+++

Отправлено dshabrov (84.21.231.242) 25 марта 2010, г. 14:07


Интересно то, что часы DS1307 эта хрень инициирует. Т.е. пара записей и одно чтение выполняется вполне корректно. Потом все виснет на стадии проверки готовности while (!(TWCR & (1<<TWINT)));
Ситуация схожая с описаной по ссылке.

http://www.genshiken.ru/club/index.php?topic=1763.0

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


#include <mega8.h>

extern unsigned char Errors; //Счетчик ошибок
//--------------------------------------------------------------------------------
void I2CInit(void) {
TWBR = 200; //Set bit rate register (Baudrate). Defined in header file.
TWDR = 0xFF; //Default content = SDA released.
TWCR = (1<<TWEN)| //Enable TWI-interface and release TWI pins.
(0<<TWIE)|(1<<TWINT)| //Disable Interupt and polling flag
(0<<TWEA)|(0<<TWSTA)| //TWEA:TWI Enable Acknowledge Bit and TWSTA:TWI START Condition Bit
(0<<TWSTO)|(0<<TWWC); } //TWSTO:TWI STOP Condition Bit and TWWC:TWI Write Collision Flag
//--------------------------------------------------------------------------------
unsigned char Sendi2c(unsigned char DATA){//Передача байта на шину I2C
TWDR = DATA; //
TWCR = (1<<TWEN)| //Enable TWI-interface and release TWI pins.
(0<<TWIE)|(1<<TWINT)| //Disable Interupt and polling flag
(0<<TWEA)|(0<<TWSTA)| //TWEA:TWI Enable Acknowledge Bit and TWSTA:TWI START Condition Bit
(0<<TWSTO)|(0<<TWWC); //TWSTO:TWI STOP Condition Bit and TWWC:TWI Write Collision Flag
while (!(TWCR & (1<<TWINT)));
return 0; } //Ожидание готовности трансивера
//--------------------------------------------------------------------------------
unsigned char ResI2c(void) { //Прием байта с шины I2C
unsigned char DATA = 0; //Переменная для хранения принятого байта.
//while (!(TWCR & (1<<TWINT))); //Ожидание готовности приема
DATA = TWDR; //
return DATA; } //Возвращаем принятый байт.
//--------------------------------------------------------------------------------
void Strti2c(void) { //Передача условия старта на шину I2C
TWCR = (1<<TWEN)| //Enable TWI-interface and release TWI pins.
(0<<TWIE)|(1<<TWINT)| //Disable Interupt and polling flag
(0<<TWEA)|(1<<TWSTA)| //TWEA:TWI Enable Acknowledge Bit and TWSTA:TWI START Condition Bit
(0<<TWSTO)|(0<<TWWC); //TWSTO:TWI STOP Condition Bit and TWWC:TWI Write Collision Flag
while (!(TWCR & (1<<TWINT))); } //Ожидание готовности трансивера

//--------------------------------------------------------------------------------
void Stopi2c(void) { //Передача условия стопа на шину I2C
TWCR = (1<<TWEN)| //Enable TWI-interface and release TWI pins.
(0<<TWIE)|(1<<TWINT)| //Disable Interupt and polling flag
(0<<TWEA)|(0<<TWSTA)| //TWEA:TWI Enable Acknowledge Bit and TWSTA:TWI START Condition Bit
(1<<TWSTO)|(0<<TWWC); //TWSTO:TWI STOP Condition Bit and TWWC:TWI Write Collision Flag
//if ((TWSR & 0xF8) != START) //Check value of TWI Status Register. Mask prescaler bits.
// {(Errors++);} //If status different from START - ERROR
}
//--------------------------------------------------------------------------------





Составить ответ | Вернуться на конференцию

Ответы


Отправка ответа
Имя*: 
Пароль: 
E-mail: 
Тема*:

Сообщение:

Ссылка на URL: 
URL изображения: 

если вы незарегистрированный на форуме пользователь, то
для успешного добавления сообщения заполните поле, как указано ниже:
введите число 89:

Перейти к списку ответов | Конференция | Раздел "Электроника" | Главная страница | Карта сайта

Rambler's Top100 Рейтинг@Mail.ru
 
Web telesys.ru