аппаратная поддержка i2c для котят :)
Помогите ссылками, для самых непонятливых как реализован и как использовать(примеры) аппаратный I2c в мк - atmega, attiny?
- Реклама
Как реализован и как использовать написано в ДШ, если есть проблемы с аглицким, то Евстифеев А.В. тебе в помощь (можно нйти у Светы в библиотеке)
как пример могу предложить использование I2C в моем спидометре
http://radiokot.ru/forum/viewtopic.php?p=295638#295638
в исходниках есть файл s16_twi.asm, как раз использование аппаратного TWI, но на асме.
зы: а разве в тиньках есть аппаратный I2C?
как пример могу предложить использование I2C в моем спидометре
http://radiokot.ru/forum/viewtopic.php?p=295638#295638
в исходниках есть файл s16_twi.asm, как раз использование аппаратного TWI, но на асме.
зы: а разве в тиньках есть аппаратный I2C?
сорри
оказывается в tiny48/88 есть аппаратный I2C
оказывается в tiny48/88 есть аппаратный I2C
спасибо за наводку на книгу, но там я не нашел примера испльзования 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...
Оптимизм х (Опыт + Знания) = const
- Реклама
Да не за что. Просто Вы бы действтельно разобрались - что Вам требуется, потом будет проще, примеры все есть, подскажем)
Оптимизм х (Опыт + Знания) = const
два коротких примера общения МК с DS1307 (CVAVR)
програмный :
аппаратный:
и как в той рекламе какая разница?
только в програмном 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;
}только в програмном I2C ножки у МК можно выбирать самостоятельно.
Первое, что привлекает в программировании, объяснить просто: ты говоришь компьютеру что то сделать, и он это делает. Безошибочно. Всегда. Без возражений.
---------------------
Линус Торвальдс. "Just for fun. Рассказ нечаянного революционера"
---------------------
Линус Торвальдс. "Just for fun. Рассказ нечаянного революционера"
- Сообщения: 13
- Зарегистрирован: Сб апр 25, 2009 07:55:58
Всем привет. Работаю с IIC. Когда сделал работу по прерыванию, то все получилось, но теперь надо сделать без них. Вот код на С:
Глюк заключается в самом конце. Дело в том, что не формируется Стоп. Если раскоментарить последний while (!TWINT){}, то стоп формируется, но тогда программа зависает в этом цикле навсегда. Подскажите как это исправить?
Черт! Уже сам разобрался. Баг появляется, когда я последовательно пишу, например:
PORTB=TWI_Rx(0xE1);
PORTB=TWI_Rx(0xE5);
Т.о. нужно поставить задержку между этими строчками..
Код: Выделить всё
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;
}
Черт! Уже сам разобрался. Баг появляется, когда я последовательно пишу, например:
PORTB=TWI_Rx(0xE1);
PORTB=TWI_Rx(0xE5);
Т.о. нужно поставить задержку между этими строчками..



