Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к AVR...

 
Опции темы
Непрочитано 14.04.2012, 22:42  
jump
Почётный гражданин KAZUS.RU
 
Регистрация: 20.06.2006
Адрес: Украина, Запорожье
Сообщений: 7,984
Сказал спасибо: 0
Сказали Спасибо 4,943 раз(а) в 2,371 сообщении(ях)
jump на пути к лучшему
По умолчанию Re: I2C + atmega32

kruftin,
а что это за энкодеры с i2c?
Реклама:
jump вне форума  
Непрочитано 14.04.2012, 23:42  
OlegNZH
Почётный гражданин KAZUS.RU
 
Регистрация: 28.02.2010
Сообщений: 2,297
Сказал спасибо: 53
Сказали Спасибо 461 раз(а) в 392 сообщении(ях)
OlegNZH на пути к лучшему
По умолчанию Re: I2C + atmega32

Если в энкодере есть переменная часть адреса- то без проблем пару...
OlegNZH вне форума  
Непрочитано 15.04.2012, 14:20  
kruftin
Прописка
 
Аватар для kruftin
 
Регистрация: 17.02.2012
Сообщений: 109
Сказал спасибо: 10
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
kruftin на пути к лучшему
По умолчанию Re: I2C + atmega32

Ну я хотел подыскать с интерфейсом i2c какой-нить оптический энкодер. Хотя вот тот, что советовали мне в теме про шаговик выдает соответствующее углу напряжение на выходе(правда как напряжение связано с углом я пока не почерпнул из даташита).
Вложения:
Тип файла: pdf datasheet.pdf (237.7 Кб, 90 просмотров)
kruftin вне форума  
Непрочитано 15.04.2012, 14:47  
texnar
Частый гость
 
Регистрация: 08.04.2012
Сообщений: 19
Сказал спасибо: 1
Сказали Спасибо 7 раз(а) в 1 сообщении
texnar на пути к лучшему
По умолчанию Re: I2C + atmega32

Стандартный "человеческий" знкодер. с I2C никак не связан. подключать к портам внешних прерываний у Atmega32. там их как раз 3 штуки.
texnar вне форума  
Непрочитано 15.04.2012, 18:35  
kruftin
Прописка
 
Аватар для kruftin
 
Регистрация: 17.02.2012
Сообщений: 109
Сказал спасибо: 10
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
kruftin на пути к лучшему
По умолчанию Re: I2C + atmega32

Вот кстати страничка где про мой компас поподробнее расписано http://www.seeedstudio.com/wiki/inde..._Compass_v1.0b
Не подскажете мне нужно к этой платке подводить дополнительно питание на SCL и SDA линию?
texnar, Т.е. один "человеческий" энкодер у меня все три порта внешних прерываний сожрет?
Как я определю угол по этим портам?
И еще вопрос: общаться с устройством по i2c можно как через порты ввода-вывода, так и через twi модуль контроллера(только через twi проще)?

Последний раз редактировалось kruftin; 15.04.2012 в 19:33.
kruftin вне форума  
Непрочитано 15.04.2012, 22:10  
OlegNZH
Почётный гражданин KAZUS.RU
 
Регистрация: 28.02.2010
Сообщений: 2,297
Сказал спасибо: 53
Сказали Спасибо 461 раз(а) в 392 сообщении(ях)
OlegNZH на пути к лучшему
По умолчанию Re: I2C + atmega32

Там пример то-же для Arduino ,только более к сей штуковине привязан, в отличии от примеров, которые я Вам давал- там практически чистый код(одна ничего не значащая функция мне непонятна(макрос?) ... )
Насчёт эмуляции I2C ...Можно конечно и просто ножками дрыгать , жалко что-ли...
OlegNZH вне форума  
Сказали "Спасибо" OlegNZH
kruftin (16.04.2012)
Непрочитано 16.04.2012, 00:09  
_Артём_
Гражданин KAZUS.RU
 
Регистрация: 16.03.2011
Сообщений: 486
Сказал спасибо: 8
Сказали Спасибо 131 раз(а) в 116 сообщении(ях)
_Артём_ на пути к лучшему
По умолчанию Re: I2C + atmega32

Сообщение от kruftin Посмотреть сообщение
И еще вопрос: общаться с устройством по i2c можно как через порты ввода-вывода, так и через twi модуль контроллера(только через twi проще)?
Программная реализация называется.
TWI удобней и быстрей.
_Артём_ вне форума  
Непрочитано 16.04.2012, 20:46  
kruftin
Прописка
 
Аватар для kruftin
 
Регистрация: 17.02.2012
Сообщений: 109
Сказал спасибо: 10
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
kruftin на пути к лучшему
По умолчанию Re: I2C + atmega32

Вот кстати нашел пример дрыгания ногами, все просто http://avrlab.com/node/127
kruftin вне форума  
Непрочитано 16.04.2012, 21:01  
OlegNZH
Почётный гражданин KAZUS.RU
 
Регистрация: 28.02.2010
Сообщений: 2,297
Сказал спасибо: 53
Сказали Спасибо 461 раз(а) в 392 сообщении(ях)
OlegNZH на пути к лучшему
По умолчанию Re: I2C + atmega32

Т.е. Вам удобнее заниматься "этой фигнёй" - вместо того , что-бы аппаратно всё отрабатывалось,и в это время Вы-бы занимались Основной задачей?...Не , ну если некритично по быстродействию,простаивает в основном машина,можно и так.(Скепсис снялся-бы с моей стороны, если-бы действительно нельзя было-бы развести два однотипных I2C-устройства по разным адресам- одно на общей шине - другое эмулируется )
OlegNZH вне форума  
Непрочитано 16.04.2012, 22:46  
kruftin
Прописка
 
Аватар для kruftin
 
Регистрация: 17.02.2012
Сообщений: 109
Сказал спасибо: 10
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
kruftin на пути к лучшему
По умолчанию Re: I2C + atmega32

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

Код:
//Программа для работы с компасом HMC5883

#include ‹mega32.h›
#include ‹delay.h› //Включаем библиотеку для организации задержек

#define START					0x08
#define MT_SLA_ACK				0x18
#define MT_DATA_ACK				0x28
#define TWCR_CMD_MASK		        0x0F

#define F_CPU 8000000
#define WRITE_sda() DDRC = DDRC | 0b00000010 //SDA must be output when writing
#define READ_sda()  DDRC = DDRC & 0b11111101 //SDA must be input when reading - don't forget the resistor on SDA!!
unsigned int error=0;

//functions
//Initialize I2C (TWI) interface
void i2cInit(void);
//Set the I2C transaction bitrate (in KHz)
void i2cSetBitrate(unsigned short bitrateKHz);
//Send an I2C start condition in Master mode
void i2cSendStart(void);
//Send an I2C stop condition in Master mode
void i2cSendStop(void);
//Wait for current I2C operation to complete
void i2cWaitForComplete(void);
//Check value of TWI Status register (START)
void i2cCheckForStart(void);
//Send an (address|R/W) combination or a data byte over I2C
void i2cSendByte(unsigned char data);
//Check value of TWI Status register (MT_SLA_ACK)
void i2cCheckForMT_SLA(void);
//Check value of TWI Status register (MT_DATA_ACK)
void i2cCheckForMT_DATA(void);


// I2C FUNCTIONS
void i2cInit(void)
{
	// set i2c bit rate to 40KHz
	i2cSetBitrate(100);
	// enable TWI (two-wire interface)
	TWCR = 1‹‹TWEN;	// Enable TWI
}

void i2cSetBitrate(unsigned short bitrateKHz)
{
	unsigned char bitrate_div;
	// set i2c bitrate
	// SCL freq = F_CPU/(16+2*TWBR*4^TWPS))
	TWSR &= ~(1‹‹TWPS0); //set zero for TWPS = 1
	TWSR &= ~(1‹‹TWPS1);
	
	//calculate bitrate division	
	bitrate_div = ((F_CPU/4000l)/bitrateKHz);
	if(bitrate_div ›= 16)
		bitrate_div = (bitrate_div-16)/2;
	TWBR = bitrate_div;
}

void i2cSendStart(void)
{
	WRITE_sda();
	// send start condition
	TWCR = (1‹‹TWINT)|(1‹‹TWSTA)|(1‹‹TWEN);
}

void i2cSendStop(void)
{
	// transmit stop condition
        TWCR = (1‹‹TWINT)|(1‹‹TWEN)|(1‹‹TWSTO);
}

void i2cWaitForComplete(void)
{
	int i = 0;		//time out variable
	
	// wait for i2c interface to complete operation
        while ((!(TWCR & (1‹‹TWINT))) && (i ‹ 90))
			i++;
}

void i2cCheckForStart(void)
{
	// check status for START
	if((TWSR & 0xF8) != START);
    error = 1;
}

void i2cSendByte(unsigned char data)
{

	WRITE_sda();
	// save data to the TWDR
	TWDR = data;
	// begin send
	TWCR = (1‹‹TWINT)|(1‹‹TWEN);
}

void i2cCheckForMT_SLA(void)
{
	// check status for MT_SLA_ACK
	if((TWSR & 0xF8) != MT_SLA_ACK);
    error = 1;
}

void i2cCheckForMT_DATA(void)
{
	// check status for MT_DATA_ACK
	if((TWSR & 0xF8) != MT_DATA_ACK);
    error = 1;
}

void i2cReceiveByte(unsigned char ackFlag)
{
	// begin receive over i2c
	if( ackFlag )
	{
		// ackFlag = TRUE: ACK the recevied data
		TWCR = (((TWCR)&TWCR_CMD_MASK)|1‹‹TWINT|1‹‹TWEA);
	}
	else
	{
		// ackFlag = FALSE: NACK the recevied data
		TWCR = (((TWCR)&TWCR_CMD_MASK)|1‹‹TWINT);
	}
}

unsigned char i2cGetReceivedByte(void)
{
	// retieve received data byte from i2c TWDR
	return (TWDR);
}

unsigned char i2cGetStatus(void)
{
	// retieve current i2c status from i2c TWSR
	return (TWSR);
}
1) Если есть такая конструкция:
#ifndef inb
#define inb(addr) (addr)
#endif

То чем отличается addr от (addr) ?
2) Что-то я не понял расчет делителя:
bitrate_div = ((F_CPU/4000l)/bitrateKHz);
if(bitrate_div ›= 16)
bitrate_div = (bitrate_div-16)/2;
TWBR = bitrate_div;
kruftin вне форума  
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
UART + atmega32 kruftin Микроконтроллеры, АЦП, память и т.д 35 06.06.2012 11:26
Прошивка atmega32 kruftin Микроконтроллеры, АЦП, память и т.д 10 17.02.2012 17:22
Atmega32 и энкодер Pevek80 Микроконтроллеры, АЦП, память и т.д 21 06.03.2011 20:46
Atmega32 и LCD DEJL1985 Делимся опытом 8 20.06.2010 14:35
ATmega32 NCy Микроконтроллеры, АЦП, память и т.д 20 28.04.2007 00:44


Часовой пояс GMT +4, время: 21:53.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot