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

 
 
> Кто нибудь писал имплементацию 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
 
Start new topic
Ответов
AlexTech
сообщение Jan 31 2011, 21:17
Сообщение #2


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

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



Вот код мастера для тинки
Код
    i2c_start();
    i2c_tx_addr( (0x26<<TWI_ADR_BITS) | (FALSE<<TWI_READ_BIT) );
    i2c_tx(0x41);
    i2c_stop();


Вот для часиков
Код
  i2c_start();
  i2c_tx_addr( (0x68<<TWI_ADR_BITS) | (FALSE<<TWI_READ_BIT) );
  i2c_tx(0);

  i2c_start();
  i2c_tx_addr( (0x68<<TWI_ADR_BITS) | (TRUE<<TWI_READ_BIT) );
  rtc_var->seconds = i2c_rx(ACK);
  rtc_var->minutes = i2c_rx(ACK);
  rtc_var->hours =   i2c_rx(ACK);
  i2c_rx(ACK);
  rtc_var->day =   i2c_rx(ACK);
  rtc_var->month = i2c_rx(ACK);
  rtc_var->year =  i2c_rx(NOT_ACK);
  i2c_stop();


Вот tx и rx
Код
void i2c_tx(unsigned char byte)
{
  if(i2c_error)
    return;
  i2c_delay();
  TWDR = byte;
  TWCR = ((1<<TWINT)+(1<<TWEN));
  i2c_delay();
  if(TWSR != MTX_DATA_ACK)
    i2c_error=1;
}

unsigned char i2c_rx(unsigned char last_byte)
{
  if(i2c_error)
    return 0;
  i2c_delay();
  if(last_byte)        
    TWCR = ((1<<TWINT)+(1<<TWEN)+(1<<TWEA));  
  else
    TWCR=((1<<TWINT)|(1<<TWEN));  
  i2c_delay();
  if(((TWSR != MRX_DATA_NACK)&&(last_byte == NOT_ACK))&&(TWSR != MRX_DATA_ACK))
    i2c_error=1;
  return TWDR;
}



В общем все, убрал по вашей наводке i2c_stop(); из обмена с тинкой.
В протеусе ерунда полная, в железе все работает вроде, почти все...
Без этого стопа, если тинку отключить, то часики перестают читаться тоже
Ну да все равно, Спасибо большое )))

Сообщение отредактировал AlexTech - Jan 31 2011, 21:48
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- AlexTech   Кто нибудь писал имплементацию twi/i2c на usi для слейва?   Jan 31 2011, 08:29
- - ILYAUL   Цитата(AlexTech @ Jan 31 2011, 11:29) Под...   Jan 31 2011, 08:50
- - alexeyv   Application note AVR312 Using USI as I2C Slave App...   Jan 31 2011, 09:07
|- - ILYAUL   Цитата(alexeyv @ Jan 31 2011, 12:07) Appl...   Jan 31 2011, 09:09
- - alexeyv   ЦитатаВсё верно , только это слово применяется в ю...   Jan 31 2011, 09:17
|- - ILYAUL   Цитата(alexeyv @ Jan 31 2011, 12:17) ДА Н...   Jan 31 2011, 09:25
- - AlexTech   Простите, русский с английским в голове перемешива...   Jan 31 2011, 09:27
|- - andron86   Цитата(AlexTech @ Jan 31 2011, 10:27) Схе...   Jan 31 2011, 11:36
- - alexeyv   1. Я понял, что Tiny26 использует USI как TWI в ре...   Jan 31 2011, 10:06
- - AlexTech   по 312 и сделано, и мной, и несколько чужих исходн...   Jan 31 2011, 10:11
- - alexeyv   1. А адресс Tiny26 случайно не совпадает с адресом...   Jan 31 2011, 10:26
- - AlexTech   Нет ))) я так понимаю что тинка гадит на scl и меш...   Jan 31 2011, 10:30
|- - ILYAUL   Цитата(AlexTech @ Jan 31 2011, 13:30) Нет...   Jan 31 2011, 10:34
- - AlexTech   В железе есть, да, а чем смотреть то? осциллографа...   Jan 31 2011, 11:11
- - AlexTech   Лан, не надо ляля ))) все будет, ну не расписывать...   Jan 31 2011, 11:41
- - alexeyv   1. Процедура приема начала кадра мне не нравится. ...   Jan 31 2011, 11:54
- - AlexTech   Нууу... как придумал так и написал а какие есть в...   Jan 31 2011, 12:00
- - alexeyv   А debug-интерейс на Tiny, вы же ее отлаживаете? н...   Jan 31 2011, 12:02
- - AlexTech   Я честно не ожидал таких сложностей с usi, поэтому...   Jan 31 2011, 12:10
- - alexeyv   Никуда ничего не переносим. В стартовом прерывании...   Jan 31 2011, 12:14
- - AlexTech   Я ничего не путаю? это же не twi, а usi, нам по ст...   Jan 31 2011, 12:22
- - alexeyv   стоп-кондишен обрабатывается в Код while ( ...   Jan 31 2011, 12:29
- - AlexTech   100кгц Спасибо за подсказки, попробую, отпишусь по...   Jan 31 2011, 12:41
- - ILYAUL   А мы вообще на старт ответили? С часами всё ясно, ...   Jan 31 2011, 14:00
- - AlexTech   Я думал что вот это: USISR = (0<<USISIF)...   Jan 31 2011, 14:59
|- - ILYAUL   Цитата(AlexTech @ Jan 31 2011, 17:59) ЯВо...   Jan 31 2011, 17:43
- - AlexTech   Да изложили то понятно, я в общем это понимаю кром...   Jan 31 2011, 20:07
|- - ILYAUL   Цитата(AlexTech @ Jan 31 2011, 23:07) Да ...   Jan 31 2011, 20:24
- - ILYAUL   Значит так : Даже незнаю с чего и начать. Шина I2C...   Jan 31 2011, 21:48
- - AlexTech   То есть i2c_stop(); все же нужен? Все, оставил и с...   Jan 31 2011, 21:50


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

 


RSS Текстовая версия Сейчас: 6th August 2025 - 00:50
Рейтинг@Mail.ru


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