АППАРАТНЫЙ I2C (TWI). Как использовать???

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Аватара пользователя
DIHALT
Потрогал лапой паяльник
Сообщения: 387
Зарегистрирован: Пт сен 12, 2008 03:26:14
Контактная информация:

Re: АППАРАТНЫЙ I2C (TWI). Как использовать???

Сообщение DIHALT »

Вот для этого я и написал, что у вас есть хороший шанс отличиться и сделать свою "безупречную" библиотеку:)
Ну я как бы уже... оно правда не столько библиотека, сколько код оптимизированный под переделку (не люблю я универсальные либы, предпочитаю код подтачивать под конкретный пример)

http://easyelectronics.ru/avr-uchebnyj- ... c-i2c.html

Обрабатывается полный автомат TWI все происходит на прерываниях не мешая фоновой задаче. Без какого либо ожидания вообще.

Полностью реализован мастер Готовые шаблоны работы в режиме простой записи/чтения, так и чтения с предварительным загрузом адреса страницы (для еепром). Найдете что то лучше дайте знать :) Сделана частичная обработка ошибок (в частности отсутствие ведомого или его занятость не является проблемой).

Почти полностью реализован арбитраж шины и работа в режиме мультимастера (забил на выделенный бродкаст, он обрабатывается в едином кейсе с собственным адресом. Но если надо спец фичу туда - добавить будет легко). Спокойно работает в режиме мастера и слейва одновременно (т.е. корректно отрабатывается перехват арбитража и получение собственного адреса во время работы мастером, происходит переключение на ведомого, а потом прерваная передача продолжается).

Почти полностью реализован ведомый. Не стал делать режим аля еепром, с предварительным заносом адреса страницы через повстарт. ИМХО не самый удобный способ общаться между двумя МК, Проще гонять таблицы данных сразу. Но допилить недолго по необходимости.

Найдете что то лучше - сообщите :)
Изображение
Реклама
Аватара пользователя
DIHALT
Потрогал лапой паяльник
Сообщения: 387
Зарегистрирован: Пт сен 12, 2008 03:26:14
Контактная информация:

Re: АППАРАТНЫЙ I2C (TWI). Как использовать???

Сообщение DIHALT »

Не думаю,что велосипед придуманный на заводе ведет себя именно так
Если это какой нибуд китайский ашанбайк, то оно так. Реально качественных либ очень мало.
не к велосипеду прикрутить,а сделать что то более важное, чем этот гре**ный велосипед.
Это называется строительство здания без фундамента. При определенной сложности проекта эти кирпичики оказываются несовместимые между собой. В первую очередь за счет того, что они пишутся, как правило, для ситуации, когда кроме него ничего нет. А значит не западло заткнуть контроллер пока либа соизволит обратиться к еепромке, например, и вернет оттуда число. А то что вся остальная программа в это время тупо стоит колом ее не волнует. Рано или поздно, с таким подходом, вам банально не хватит процессорного времени, чтобы реализовать все. И Тут два варианта - ставить куда более толстый проц и вешать на него вытесняющую RTOS которая бы этот быдлокод прожевала за счет своих переключающих механизмов. Либо переписывать все чуть более чем полностью и подтачивать под автоматы/кооперативки.
Поэтому существует АСМ.
Асм тут вообще не причем. Это всего лишь язык. Кстати весьма удобный если уметь им пользоваться :)
Тем более кодеры на месте не сидят и постоянно совершенствуют свои либы. Моё ИМХО и не более.
Ооо и сильно изменились библиотеки того же CVAVR или Procyon lib за последние годы? Или микроэлектрониковские? Или еще какие то? Да там может подтачивают какие то баги, чуток вылизывают эффективность. Но если оно в принципе написано тупо в лоб, то никакой оптимизацией тут эффекта не достичь.
Изображение
Реклама
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

Re: АППАРАТНЫЙ I2C (TWI). Как использовать???

Сообщение vitalik_1984 »

DIHALT писал(а):
Не думаю,что велосипед придуманный на заводе ведет себя именно так
Если это какой нибуд китайский ашанбайк, то оно так. Реально качественных либ очень мало.
не к велосипеду прикрутить,а сделать что то более важное, чем этот гре**ный велосипед.
Это называется строительство здания без фундамента. При определенной сложности проекта эти кирпичики оказываются несовместимые между собой. В первую очередь за счет того, что они пишутся, как правило, для ситуации, когда кроме него ничего нет. А значит не западло заткнуть контроллер пока либа соизволит обратиться к еепромке, например, и вернет оттуда число. А то что вся остальная программа в это время тупо стоит колом ее не волнует. Рано или поздно, с таким подходом, вам банально не хватит процессорного времени, чтобы реализовать все. И Тут два варианта - ставить куда более толстый проц и вешать на него вытесняющую RTOS которая бы этот быдлокод прожевала за счет своих переключающих механизмов. Либо переписывать все чуть более чем полностью и подтачивать под автоматы/кооперативки.
Я блин вообще про одно сказал, а тут уже в полемику вступаем вообще про другое?
Я изначально имел ввиду, что допустим, чтоб какой нибудь школьник сделал простенький проект, используя стандартную библу даже пусть это будет не аппаратный ТВИ, вместо того чтоб писать и париться как же реализовать этот самый аппаратный как самоцель проще и быстрее поставить штампик и с его точки зрения еще не имеет значения с какой скоростью там это все работает.
В поисках истины человек развивается.
Аватара пользователя
DIHALT
Потрогал лапой паяльник
Сообщения: 387
Зарегистрирован: Пт сен 12, 2008 03:26:14
Контактная информация:

Re: АППАРАТНЫЙ I2C (TWI). Как использовать???

Сообщение DIHALT »

Для школьника тем более. Учиться надо сразу делать правильно. А то потом эти дурные привычки очень тяжело изживать.
Изображение
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
Волосатый
Сверлит текстолит когтями
Сообщения: 1288
Зарегистрирован: Пн апр 14, 2008 12:54:35
Откуда: Город ГЕРОЙ Ленинград
Контактная информация:

Re: АППАРАТНЫЙ I2C (TWI). Как использовать???

Сообщение Волосатый »

Для тех, кому лень разбиратся с зависаниями twi на строчке while (например мне :))) ), можно в этот цикл добавить следующее:

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

while (!(TWCR & (1<<TWINT))) {
k++;
if (k==1000)
    return;    
}
Тем самым, если пресловутый WINT не ставится, произойдет принудительный выход из функции. Значение 1000 подбирается в зависимости от скорости шины и проца.
Но. По алгоритму получения или отправки данных либо ничего не отправится, либо примутся нули, надо это учесть. Это так, временный вариант, лучше написать все по уму.
Опыт приходит сразу после того, как он был нужен...
Реклама
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

Re: АППАРАТНЫЙ I2C (TWI). Как использовать???

Сообщение vitalik_1984 »

так будет тысяча лишних тактов, лучше через прерывания сделать.
Кстати я почитал статью, на которую ДИ ХАЛЬТ ссылается так вот в ней уже все предусмотрено.
лишние функции просто не прописываешь, а заменяешь Сбросом
В поисках истины человек развивается.
Реклама
Аватара пользователя
Волосатый
Сверлит текстолит когтями
Сообщения: 1288
Зарегистрирован: Пн апр 14, 2008 12:54:35
Откуда: Город ГЕРОЙ Ленинград
Контактная информация:

Re: АППАРАТНЫЙ I2C (TWI). Как использовать???

Сообщение Волосатый »

Я еще слишком зелен (с)
В программировании 2 месяца, пока для меня это слишком круто...

А по поводу лишних циклов, я поставил на 0.5мс, и если происходит сбой, не особо выделяется из кучи.
Опыт приходит сразу после того, как он был нужен...
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

Re: АППАРАТНЫЙ I2C (TWI). Как использовать???

Сообщение vitalik_1984 »

Волосатый, прочитай статью там все не так сложно как кажется и даже этот быдлокод превращается в изящные строки.
В поисках истины человек развивается.
Закрыто

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