аппаратная поддержка i2c для котят :)

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
Родился
Сообщения: 3
Зарегистрирован: Сб янв 30, 2010 22:43:30
Откуда: ntg

Сообщение CALLIKA »

Помогите ссылками, для самых непонятливых как реализован и как использовать(примеры) аппаратный I2c в мк - atmega, attiny?
Реклама
GP1
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2401
Зарегистрирован: Пт май 23, 2008 19:32:22
Откуда: Россия, Волгоград

Сообщение GP1 »

Как реализован и как использовать написано в ДШ, если есть проблемы с аглицким, то Евстифеев А.В. тебе в помощь (можно нйти у Светы в библиотеке)
как пример могу предложить использование I2C в моем спидометре
http://radiokot.ru/forum/viewtopic.php?p=295638#295638
в исходниках есть файл s16_twi.asm, как раз использование аппаратного TWI, но на асме.

зы: а разве в тиньках есть аппаратный I2C?
Чем дальше, тем больше становлюсь занудой...
Изображение
Контактная информация:
Реклама
GP1
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2401
Зарегистрирован: Пт май 23, 2008 19:32:22
Откуда: Россия, Волгоград

Сообщение GP1 »

сорри :oops:
оказывается в tiny48/88 есть аппаратный I2C
Чем дальше, тем больше становлюсь занудой...
Изображение
Контактная информация:
Родился
Сообщения: 3
Зарегистрирован: Сб янв 30, 2010 22:43:30
Откуда: ntg

Сообщение CALLIKA »

GP1 писал(а):Как реализован и как использовать написано в ДШ, если есть проблемы с аглицким, то Евстифеев А.В. тебе в помощь (можно нйти у Светы в библиотеке)
как пример могу предложить использование I2C в моем спидометре
http://radiokot.ru/forum/viewtopic.php?p=295638#295638
в исходниках есть файл s16_twi.asm, как раз использование аппаратного TWI, но на асме.

зы: а разве в тиньках есть аппаратный I2C?
спасибо за наводку на книгу, но там я не нашел примера испльзования I2c шины, все очень черствым языком написано, хотелось бы статью с более пнятным разьеснением работы i2c, именно аппаратным i2c, т.е где используется уже готовая библиотека i2c, и я к сожалению понимаю только язык С\С++ :(
Реклама
Эиком - электронные компоненты и радиодетали
Модератор
Аватара пользователя
Сообщения: 4517
Зарегистрирован: Пн апр 03, 2006 11:43:25
Откуда: Санкт - Петербург

Сообщение Aheir »

CALLIKA писал(а):...все очень черствым языком написано...
Ну, вообще-то техническая литература несколько отлична от художественной.. Или Вам импонирует стиль изложения "для американских домохозяек"? :))
CALLIKA писал(а):...аппаратным i2c, т.е где используется уже готовая библиотека i2c...
Вы точно понимаете, что Вам нужно? Использование "аппаратного i2c" и "готовая библиотека i2с" - никак не связаны. Может быть аппаратный интерфейс, обслуживаемый без библиотеки, может быть софтовый с библиотекой, любые другие варианты тоже возможны. С т.з. программиста аппратный i2c - набор регистров, как туда грузить и читать данные - через библиотеку или нет - дело совершенно двадцать пятое. Примеров и того и другого - масса в статьях на сайте и по Форуму тоже есть. Вы хоть пробовали искать-то?
Оптимизм х (Опыт + Знания) = const
Контактная информация:
Реклама
Родился
Сообщения: 3
Зарегистрирован: Сб янв 30, 2010 22:43:30
Откуда: ntg

Сообщение CALLIKA »

хм..я значит я ошибочно понял понятие "аппаратным i2c", не подумал :)
Спасибо за разъяснение.
Реклама
Модератор
Аватара пользователя
Сообщения: 4517
Зарегистрирован: Пн апр 03, 2006 11:43:25
Откуда: Санкт - Петербург

Сообщение Aheir »

Да не за что. Просто Вы бы действтельно разобрались - что Вам требуется, потом будет проще, примеры все есть, подскажем)
Оптимизм х (Опыт + Знания) = const
Контактная информация:
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1287
Зарегистрирован: Пн окт 13, 2008 11:45:54
Откуда: РФ, Крым, г.Бахчисарай

Сообщение Danko »

два коротких примера общения МК с DS1307 (CVAVR)
програмный :

Код: Выделить всё

unsigned char rtc_read(unsigned char address) {
unsigned char data;
i2c_start();
i2c_write(0xd0);
i2c_write(address);
i2c_start();
i2c_write(0xd1);
data=i2c_read(0);
i2c_stop();
return data;
}
аппаратный:

Код: Выделить всё

unsigned char rtc_read(unsigned char address){
unsigned char data;
twi_start();
twi_write(0xd0);
twi_write(address);
twi_start();
twi_write(0xd1);
data=twi_read(0);
twi_stop();
return data;
}
и как в той рекламе какая разница?
только в програмном I2C ножки у МК можно выбирать самостоятельно.
Первое, что привлекает в программировании, объяснить просто: ты говоришь компьютеру что то сделать, и он это делает. Безошибочно. Всегда. Без возражений.
---------------------
Линус Торвальдс. "Just for fun. Рассказ нечаянного революционера"
Контактная информация:
Родился
Сообщения: 13
Зарегистрирован: Сб апр 25, 2009 07:55:58

Сообщение systemmind »

Всем привет. Работаю с IIC. Когда сделал работу по прерыванию, то все получилось, но теперь надо сделать без них. Вот код на С:

Код: Выделить всё

char TWI_Rx(unsigned char adress)
{
	unsigned char data;
	TWCR=0xA4;			//формирование старт без прерываний
	while (!TWINT){}		//Было сформировано состояние Старт
//	while (TWSR!=0x08){}//Было сформировано состояние Старт
	TWDR=0xD0;			//Пакет SLA-W (режим записи), адрес ведомого 1101000
	TWCR=0x84;			//Сбрасываем флаг TWINT и разрешаем работу TWI
	TWIE=0;
	while (!TWINT){}	//Был передан пакет SLA+W
//	while (TWSR!=0x18){}	//Был передан пакет SLA+W
	TWDR=adress-0xE0;	//Адрес записывамеых данных
	TWCR=0x84;			//Сбрасываем флаг TWINT, передача данных
	TWIE=0;
	while (!TWINT){}	//Если передался адрес, то
//	while (TWSR!=0x28){}//
	TWCR=0xA4;			//формируем повстарт
	while (!TWINT){}	//Если сформировался повтарт, то
	TWDR=0xD1; 			//записываем адрес устройства и
	TWCR=0x84;			//передаем SLA-R
	while (!TWINT){}	//Если передался пакет Слар
	TWCR=0x84;			//Будет принят байт с неподтверждением
	while (!TWINT){}	//принялся байт с неподтверждением
	data=TWDR;			//считываем данные
	TWCR=0x94;			//формируем Стоп
	
//	while (!TWINT){}	//принялся байт с неподтверждением

	return data;
}
Глюк заключается в самом конце. Дело в том, что не формируется Стоп. Если раскоментарить последний while (!TWINT){}, то стоп формируется, но тогда программа зависает в этом цикле навсегда. Подскажите как это исправить?

Черт! Уже сам разобрался. Баг появляется, когда я последовательно пишу, например:
PORTB=TWI_Rx(0xE1);
PORTB=TWI_Rx(0xE5);

Т.о. нужно поставить задержку между этими строчками..
Контактная информация:
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»