реклама на сайте
подробности

 
 
3 страниц V   1 2 3 >  
Reply to this topicStart new topic
> Кто нибудь писал имплементацию twi/i2c на usi для слейва?
AlexTech
сообщение Jan 31 2011, 08:29
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 83
Регистрация: 2-12-05
Пользователь №: 11 688



Поделитесь опытом плиз, слейв упорно ack отсылать не хочет :/
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Jan 31 2011, 08:50
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



Цитата(AlexTech @ Jan 31 2011, 11:29) *
Поделитесь опытом плиз, слейв упорно ack отсылать не хочет :/

Браво, это же надо же какое слово ИМПЛЕМЕНТАЦИЯ
ИМПЛЕМЕНТАЦИЯ (от лат. impleo - наполняю, исполняю), осуществление, исполнение ГОСУДАРСТВОМ международных правовых норм. Каждое государство само определяет методы и средства имплементации. В международном договоре также может быть предусмотрена необходимость издания закона или иного акта для его осуществления К чему это слово Вы употребили?

Как не однократно писалось на форуме , к огромному сожалению телепатов здесь нет- схему , код


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
alexeyv
сообщение Jan 31 2011, 09:07
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 298
Регистрация: 26-01-09
Из: Пермь
Пользователь №: 43 940



Application note AVR312 Using USI as I2C Slave
Application note AVR310 Using USI as TWI
Application note AVR319 Using USI as SPI


to ILYAUL
Из англо-русского словаря:
Цитата
implementation - выполнение, исполнение, осуществление, РЕАЛИЗАЦИЯ
Synonym: realization , accomplishment


Вы где находитесь, на форуме юристов или на форуме програмистов ?!?!
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Jan 31 2011, 09:09
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



Цитата(alexeyv @ Jan 31 2011, 12:07) *
Application note AVR312 Using USI as I2C Slave
Application note AVR310 Using USI as TWI
Application note AVR319 Using USI as SPI


to ILYAUL
Из англо-русского словаря:

implementation - выполнение, исполнение, осуществление, РЕАЛИЗАЦИЯ


Вы где находитесь, на форуме юристов или на форуме програмистов ?!?!

Всё верно , только это слово применяется в юридических документах.


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
alexeyv
сообщение Jan 31 2011, 09:17
Сообщение #5


Местный
***

Группа: Участник
Сообщений: 298
Регистрация: 26-01-09
Из: Пермь
Пользователь №: 43 940



Цитата
Всё верно , только это слово применяется в юридических документах.



ДА НУ !!!!!!!

Откройте например правила оформления модуля в Object Pascal :

Код
unit NAME;
interface
.......
implementation // !!!!!!!!!!!!!!!!!!!!!
......
end.


Не говоря уж о хардварных языках, например, VHDL.

Да и сам Atmel выдает:
AVR302: Software I2C™ Slave Implementation

Сообщение отредактировал alexeyv - Jan 31 2011, 09:27
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Jan 31 2011, 09:25
Сообщение #6


Профессионал
*****

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



Цитата(alexeyv @ Jan 31 2011, 12:17) *
ДА НУ !!!!!!!

Откройте например правила оформления модуля в Object Pascal :

Код
unit NAME;
interface
.......
implementation // !!!!!!!!!!!!!!!!!!!!!
......
end.


Не говоря уж о хардварных языках, например, VHDL.

Убедили , не знал . Хотя наши юристы , его применяют исключительно , в гос. документах


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
AlexTech
сообщение Jan 31 2011, 09:27
Сообщение #7


Частый гость
**

Группа: Участник
Сообщений: 83
Регистрация: 2-12-05
Пользователь №: 11 688



Простите, русский с английским в голове перемешиваются )))
Собственно вот отсюда взято - "AVR310:..... This application note describes a TWI master implementation"
С английского implementation — «осуществление», «выполнение» и только по русски это имеет отношение именно к международному праву ))))

Схема... ну какая схема, два провода между мастером на меге128 и слейвом на тинке26 плюс часики ds1307.
Работает что нибудь одно, или читаю часики или пишу в слейв.
сначала протеус говорил что поддельные данные на линии SCL, код инициализации слейва был такой:
CODE

// прям в этой строчке протеус ругался и останавливал обмен, в железе же слейв был доступен, часики нет
DDR_USI |= ( 1 << PORT_USI_SCL ) | ( 1 << PORT_USI_SDA );

PORT_USI |= ( 1 << PORT_USI_SCL );
PORT_USI |= ( 1 << PORT_USI_SDA );
DDR_USI &= ~( 1 << PORT_USI_SDA );
USICR =
( 1 << USISIE ) |
( 0 << USIOIE ) |
( 1 << USIWM1 ) | ( 0 << USIWM0 ) |
( 1 << USICS1 ) | ( 0 << USICS0 ) | ( 0 << USICLK ) |
( 0 << USITC );
USISR = ( 1 << USI_START_COND_INT ) | ( 1 << USIOIF ) | ( 1 << USIPF ) | ( 1 << USIDC );

поменял немного, стало так:
PORT_USI |= (1<<PORT_USI_SCL);
PORT_USI |= (1<<PORT_USI_SDA);
DDR_USI |= (1<<PORT_USI_SCL);
DDR_USI &= ~(1<<PORT_USI_SDA);
USICR = (1<<USISIE)|(0<<USIOIE)|(1<<USIWM1)|(0<<USIWM0)|(1<<USICS1)|(0<<USICS0)|(0<<USICLK)|(0<<USITC);
USISR = 0xF0;

протеус ругаться вроде перестал, часики читаются, но слейв теперь не отдает ack(ну я так думаю)
ISR( USI_OVERFLOW_VECTOR )
{
switch ( overflowState )
{
case USI_SLAVE_CHECK_ADDRESS:
if ( ( USIDR == 0 ) || ( ( USIDR >> 1 ) == slaveAddress) ) // проверяем адрес
{
if ( USIDR & 0x01 )// read/write
{
overflowState = USI_SLAVE_SEND_DATA;
}else{
overflowState = USI_SLAVE_REQUEST_DATA; // ставим флаг получить данные, сюда попадаем
}
SET_USI_TO_SEND_ACK( ); //шлем ack
// сюда попадаем
}else{
SET_USI_TO_TWI_START_CONDITION_MODE( );
}
break;
case USI_SLAVE_REQUEST_DATA: // а блин вот сюда никогда больше не попадаем
overflowState = USI_SLAVE_GET_DATA_AND_SEND_ACK;
SET_USI_TO_READ_DATA( );
break;
}
}

SET_USI_TO_SEND_ACK( )
{
USIDR = 0;
DDR_USI |= ( 1 << PORT_USI_SDA );
USISR = ( 0 << USI_START_COND_INT ) | ( 1 << USIOIF ) | ( 1 << USIPF ) | ( 1 << USIDC )| ( 0x0E << USICNT0 );
}

Ух, как то так ))

Сообщение отредактировал IgorKossak - Jan 31 2011, 10:22
Причина редактирования: Оформление кода в [codebox]
Go to the top of the page
 
+Quote Post
alexeyv
сообщение Jan 31 2011, 10:06
Сообщение #8


Местный
***

Группа: Участник
Сообщений: 298
Регистрация: 26-01-09
Из: Пермь
Пользователь №: 43 940



1. Я понял, что Tiny26 использует USI как TWI в режиме слейва?? тогда надо смотреть пример из AVR312, а не AVR310.
2. А при отсоединении ds1307, поведение не меняется?
Go to the top of the page
 
+Quote Post
AlexTech
сообщение Jan 31 2011, 10:11
Сообщение #9


Частый гость
**

Группа: Участник
Сообщений: 83
Регистрация: 2-12-05
Пользователь №: 11 688



по 312 и сделано, и мной, и несколько чужих исходников пробовал, поведение одинаковое
протеус не ест вообще то, что по 312 сделано, ну да бог с ним, в железе кое как работает

в первом варианте при отсоединении часов ничего не меняется, меняется именно при отсоединении тинки, часы читаться сразу нормально начинают
а во втором варианте, как я написал, тинка не мешает часам, но не попадает собственно в процедуру приема

Сообщение отредактировал AlexTech - Jan 31 2011, 10:13
Go to the top of the page
 
+Quote Post
alexeyv
сообщение Jan 31 2011, 10:26
Сообщение #10


Местный
***

Группа: Участник
Сообщений: 298
Регистрация: 26-01-09
Из: Пермь
Пользователь №: 43 940



1. А адресс Tiny26 случайно не совпадает с адресом DS1307 ??
2. Где прерывание USI_Start_Condition ?
3. Осциллографом не пробовали смотреть обмен на линии ??

Сообщение отредактировал alexeyv - Jan 31 2011, 10:32
Go to the top of the page
 
+Quote Post
AlexTech
сообщение Jan 31 2011, 10:30
Сообщение #11


Частый гость
**

Группа: Участник
Сообщений: 83
Регистрация: 2-12-05
Пользователь №: 11 688



Нет )))
я так понимаю что тинка гадит на scl и мешает часам, а если это гаженье убрать (вот тут мне не отловить косяк) то ли мастер не понимает ack который
тинка шлет после проверки адреса и соответственно не передает данные, то ли тинка его реально не отправлят

Сообщение отредактировал AlexTech - Jan 31 2011, 10:30
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Jan 31 2011, 10:34
Сообщение #12


Профессионал
*****

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



Цитата(AlexTech @ Jan 31 2011, 13:30) *
Нет )))
я так понимаю что тинка гадит на scl и мешает часам, а если это гаженье убрать (вот тут мне не отловить косяк) то ли мастер не понимает ack который
тинка шлет после проверки адреса и соответственно не передает данные, то ли тинка его реально не отправлят

Отсоедините часы , зациклите START и Адрес , посмотрите , что на шине, как я понял в железе есть.


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
AlexTech
сообщение Jan 31 2011, 11:11
Сообщение #13


Частый гость
**

Группа: Участник
Сообщений: 83
Регистрация: 2-12-05
Пользователь №: 11 688



В железе есть, да, а чем смотреть то?
осциллографа нет, поэтому в протеусе и тестил, а он оказывается таких извратов не понимает ))
разве что леды на шину воткнуть :/

Вот старт:
Код
ISR( USI_START_VECTOR )
{

overflowState = USI_SLAVE_CHECK_ADDRESS;

DDR_USI &= ~( 1 << PORT_USI_SDA );

while (
       // SCL his high
       ( PIN_USI & ( 1 << PIN_USI_SCL ) ) &&
       // and SDA is low
       !( ( PIN_USI & ( 1 << PIN_USI_SDA ) ) )
  );

  if ( !( PIN_USI & ( 1 << PIN_USI_SDA ) ) )
  {
    //  not stop
    USICR =
         ( 1 << USISIE ) |
         ( 1 << USIOIE ) |
         ( 1 << USIWM1 ) | ( 1 << USIWM0 ) |
         ( 1 << USICS1 ) | ( 0 << USICS0 ) | ( 0 << USICLK ) |
         ( 0 << USITC );
  }else{
    // stop
    USICR =
         ( 1 << USISIE ) |
         ( 0 << USIOIE ) |
         ( 1 << USIWM1 ) | ( 0 << USIWM0 ) |
         ( 1 << USICS1 ) | ( 0 << USICS0 ) | ( 0 << USICLK ) |
         ( 0 << USITC );
  }

  USISR =
       // clear interrupt flags and release SCL
       ( 1 << USI_START_COND_INT ) | ( 1 << USIOIF ) |
       ( 1 << USIPF ) |( 1 << USIDC ) |
       ( 0x0 << USICNT0);
}


Сообщение отредактировал AlexTech - Jan 31 2011, 11:22
Go to the top of the page
 
+Quote Post
andron86
сообщение Jan 31 2011, 11:36
Сообщение #14


Местный
***

Группа: Участник
Сообщений: 406
Регистрация: 1-03-06
Пользователь №: 14 821



Цитата(AlexTech @ Jan 31 2011, 10:27) *
Схема... ну какая схема, два провода между мастером на меге128 и слейвом на тинке26 плюс часики ds1307.
....
Ух, как то так ))

ух ты, схема крутая, точно работать не будет biggrin.gif
Go to the top of the page
 
+Quote Post
AlexTech
сообщение Jan 31 2011, 11:41
Сообщение #15


Частый гость
**

Группа: Участник
Сообщений: 83
Регистрация: 2-12-05
Пользователь №: 11 688



Лан, не надо ляля ))) все будет, ну не расписывать же мне всю обвязку
все заводится, и по отдельности работает )))
Go to the top of the page
 
+Quote Post

3 страниц V   1 2 3 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 17th June 2025 - 22:11
Рейтинг@Mail.ru


Страница сгенерированна за 0.01491 секунд с 7
ELECTRONIX ©2004-2016