аппаратная поддержка i2c для котят :)
Добавлено: Сб янв 30, 2010 22:47:00
Помогите ссылками, для самых непонятливых как реализован и как использовать(примеры) аппаратный I2c в мк - atmega, attiny?
Здесь можно немножко помяукать :)
https://radiokot.ru/forum/
спасибо за наводку на книгу, но там я не нашел примера испльзования I2c шины, все очень черствым языком написано, хотелось бы статью с более пнятным разьеснением работы i2c, именно аппаратным i2c, т.е где используется уже готовая библиотека i2c, и я к сожалению понимаю только язык С\С++GP1 писал(а):Как реализован и как использовать написано в ДШ, если есть проблемы с аглицким, то Евстифеев А.В. тебе в помощь (можно нйти у Светы в библиотеке)
как пример могу предложить использование I2C в моем спидометре
http://radiokot.ru/forum/viewtopic.php?p=295638#295638
в исходниках есть файл s16_twi.asm, как раз использование аппаратного TWI, но на асме.
зы: а разве в тиньках есть аппаратный I2C?
Ну, вообще-то техническая литература несколько отлична от художественной.. Или Вам импонирует стиль изложения "для американских домохозяек"?CALLIKA писал(а):...все очень черствым языком написано...
Вы точно понимаете, что Вам нужно? Использование "аппаратного i2c" и "готовая библиотека i2с" - никак не связаны. Может быть аппаратный интерфейс, обслуживаемый без библиотеки, может быть софтовый с библиотекой, любые другие варианты тоже возможны. С т.з. программиста аппратный i2c - набор регистров, как туда грузить и читать данные - через библиотеку или нет - дело совершенно двадцать пятое. Примеров и того и другого - масса в статьях на сайте и по Форуму тоже есть. Вы хоть пробовали искать-то?CALLIKA писал(а):...аппаратным i2c, т.е где используется уже готовая библиотека i2c...
Код: Выделить всё
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;
}Код: Выделить всё
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;
}