реклама на сайте
подробности

 
 
> Проблемы с TWI ATmega8-16PI
haker_fox
сообщение Oct 1 2005, 02:23
Сообщение #1


Познающий...
******

Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125



Условие "СТАРТ" передается нормально. Далее передается байт адреса и ожидается установка бита TWINT в регистре TWCR и здесь программа затыкается. В чем может быть дело? Если связь с термодатчиком AD7415 не в порядке, то этот бит все равно должен устанавливаться же?!

Вот подпрограммы:
Модуль для работы с шиной I2C


#include "i2c.h"

//Генерирует условие СТАРТ
void i2c_start(void)
{
TWCR=((1<<TWINT)+(1<<TWSTA)+(1<<TWEN));
i2c_wait();
}

//Генерирует условие СТОП
void i2c_stop(void)
{
TWCR=((1<<TWEN)+(1<<TWINT)+(1<<TWSTO)); //стоп условие
}

//Ожидание готовности шины
void i2c_wait(void)
{
while(!(TWCR&(1<<TWINT)));
}

//Передача байта
void i2c_tx(unsigned char data)
{
i2c_wait();
TWDR=data;
TWCR=((1<<TWINT)+(1<<TWEN));
i2c_wait();
}

//Примем байта
unsigned char i2c_rx(void)
{
i2c_wait();
TWCR|=(1<<TWINT);
i2c_wait();
return TWDR;
}



Вот фрагмент программы опроса датчика:
i2c_start(); //здесь все ОК
i2c_tx(THERMAL_H|WR); //здесь виснет

#define THERMAL 0x4A //address
#define WR 0

Вот инициализация TWI
TWBR=128;
TWCR=0;
TWSR=0;

Всем спасибо за ответы smile.gif


--------------------
Выбор.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
NickB
сообщение Oct 10 2005, 07:47
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 114
Регистрация: 22-06-04
Пользователь №: 102



Делал программный slave ATmega16 практически по аппноуту от Atmel
А также мастер на LPC2214.
Усе работает по уставу. Единственно что не реализовано в аппнотах - это
возможность зависаний мастера если нет ответа. Лечится программным таймером
Go to the top of the page
 
+Quote Post
khvostoff
сообщение Oct 24 2005, 18:32
Сообщение #3





Группа: Новичок
Сообщений: 1
Регистрация: 24-10-05
Пользователь №: 10 055



Мужики!
Я ещё очень начинающий.
Мне надо присобачить AD5933 к Меге32! Пытаюсь писать на Си в ICC.
Делаю вроде всё по инструкциям а ничено не работает. На клоке ещё какая-то фигня лезет, а на дате даже старт не формируется. Да и то, что лезет на клоке не управляется по частоте! Писать софтовый TWI при живом аппаратном это уже верх отчаяния, но безуспешные попытки найти у кого-нибуть работающий модуль, приводят к мысли о том, что он настолько глюкавый, что им никто и не пользуется!

//ICC-AVR application builder : 22.10.2005 9:33:36
// Target : M32
// Crystal: 8.0000Mhz

#include <iom32v.h>
#include <macros.h>

void port_init(void)
{
PORTA = 0x00;
DDRA = 0x00;
PORTB = 0x00;
DDRB = 0x00;
PORTC = 0x03;
DDRC = 0x03;
PORTD = 0x00;
DDRD = 0x00;
}

//TWI initialize
// bit rate:2
void twi_init(void)
{
TWCR= 0x00; //disable twi
TWBR= 0x02; //set bit rate
TWAR= 0x00; //set slave address
TWCR= 0x44; //enable twi

}

//call this routine to initialize all peripherals
void init_devices(void)
{
//stop errant interrupts until set up
CLI(); //disable all interrupts
port_init();
twi_init();

MCUCR = 0x00;
GICR = 0x00;
TIMSK = 0x00; //timer interrupt sources
SEI(); //re-enable interrupts
//all peripherals are now initialized
}


// *************************************************
// Основная программа
// *************************************************

main()
{
a:


TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN); // посылка старт
while (!(TWCR & (1<<TWINT))); // ожидание
TWDR = 0x0D; // Это адрес приёмника (SLAVE) + признак записи
TWCR = (1<<TWINT)|(1<<TWEN)|(1<<TWEA); // посылка адреса
while (!(TWCR & (1<<TWINT))); // ожидание
TWDR = 0x80; // это адрес регистра в приёмнике (SLAVE)
TWCR = (1<<TWINT)|(1<<TWEN)|(1<<TWEA); // посылка адреса
while (!(TWCR & (1<<TWINT))); // ожидание
TWDR = 0x80; // это данные в регистр в приёмника (SLAVE)
TWCR = (1<<TWINT)|(1<<TWEN)|(1<<TWEA); // посылка данных
while (!(TWCR & (1<<TWINT))); // ожидание
TWCR = (1<<TWINT)|(1<<TWEN)|(1<<TWSTO); // Посылка STOP





goto a;
// End of main program
}


Гляньте прогу! Мож кто чего углядит. Я так понимаю, что эта проблема не только меня волнует!
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 03:01
Рейтинг@Mail.ru


Страница сгенерированна за 0.11808 секунд с 7
ELECTRONIX ©2004-2016