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

 
 
> USI типа I2C на Tiny45, просто не работает
alux
сообщение Feb 22 2010, 13:22
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 589
Регистрация: 24-04-05
Пользователь №: 4 447



Необходимо организовать связь между Tiny45 (Slave) и Mega324P(Master). Мега должна считывать данные с Тини и передать на ЖКИ (i2c TIC154). Попробовал использовать аппнот avr312 (USI -> I2C Slave) для Тини45, но не удается получить ответ от Тини. ЖКИ при этом тоже не работает. Анализ исходника avr312 показал, что у Тини вывод SCL настроен на выход и удерживается в низком состоянии. Настройка вывода SCL (Tiny45) на вход не решила проблему.
Есть ли у кого положительный опыт работы с данным примером?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
alux
сообщение Feb 25 2010, 13:53
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 589
Регистрация: 24-04-05
Пользователь №: 4 447



Попробовал использовать USI (Tiny45) в режиме SPI (Slave). Все нормально запустилось. Отправляю от Тини число, на Меге это число принимаю и вывожу на ЖКИ. Но теперь необходимо поменять устройства ролями: Тини должен быть мастером, а Мега - подчиненным. Соответственно на Тини USCK настроил на выход, а у Меги, соответственно SCK, на вход. Кроме этого на Меге вывод SS настроен на вход и притянут перемычкой на землю.

Функция передачи байта от Тини:
Код
unsigned char send_byte(unsigned char val)
{
   USIDR = val;
   USISR = (1<<USIOIF);
   do
   {
      USICR = (1<<USIWM0) | (1<<USICS1) | (1<<USICLK) | (1<<USITC);
   }
   while ((USISR & (1<<USIOIF)) == 0);
  
   return USIDR;
}

void main()
{
    SETBIT(DDRB, USCK);
    SETBIT(PORTB, USCK);
    
    SETBIT(DDRB, DO);
    CLRBIT(PORTB, DO);
    
    CLRBIT(DDRB, DI);
    SETBIT(PORTB, DI);
        
    for(;;)
    {    
        SendByte(0x11);
        
        delay_ms(100);
    }
}


На Меге функция инициализации аппаратного SPI:
Код
    // select clock phase negative-going in middle of data
    SPCR |= (1 << CPOL0);
        
        // data is sampled on the trailing (last) edge of SCK. SPI Mode - 3
        SPCR |= (1 << CPHA0);
        
    // Data order MSB first
    SPCR &= ~(1 << DORD0);
        
    // enable SPI
    SPCR |= (1 << SPE0);
    
    // clear status
    SPSR = SPSR;
    SpiTransferComplete = true;

    // enable SPI interrupt
    #ifdef SPI_USEINT
    SPCR |= (1 << SPIE0);
    #endif
}

В результате получаю число 255!!!
Пробовал для Тини использовать программный SPI:
Код
void SendByte(unsigned char Data)
{
    unsigned char BitCount = 8;

    do
    {
        // Send bit to Slave, MSB first
        if(Data & 0x80)
        {
            SETBIT(PORTB, DO);
        }
        else
        {
            CLRBIT(PORTB, DO);
        }
        
        // Toggle SCK pin to send current bit
        CLRBIT(PORTB, USCK);
        SETBIT(PORTB, USCK);        
                
        // Get next bit to send
        Data <<= 1;      
    }
    while(--BitCount);

}

Результат - тот же. В чем может быть проблема? Уже все перепробовал cranky.gif
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- alux   USI типа I2C на Tiny45   Feb 22 2010, 13:22
- - AHTOXA   Помнится, мы нашли какой-то глюк в AVR312. Но глюк...   Feb 22 2010, 16:13
|- - alux   Вывод SCL у Тини должен быть выходом? Тогда осталь...   Feb 22 2010, 16:31
|- - AHTOXA   Да, выходом. Но не нулём: Кодvoid i2c_init(u08...   Feb 22 2010, 16:49
|- - SysRq   Цитата(alux @ Feb 22 2010, 19:31) Вывод S...   Feb 22 2010, 16:57
|- - alux   Притянуты внешними 10кОм к +5В. Должен по специфик...   Feb 22 2010, 19:06
|- - AHTOXA   ЦитатаНе получается прочитать байт от Тини, хоть ...   Feb 22 2010, 19:39
|- - alux   Ни привета, ни ответа. В слейве даже по условию Ко...   Feb 22 2010, 19:52
|- - AHTOXA   Ну тогда странно... Я сейчас и проверить-то не мо...   Feb 22 2010, 20:37
|- - alux   Нашел одну ошибку: адрес слейв устройства в тини н...   Feb 23 2010, 08:41
|- - SysRq   Цитата(alux @ Feb 23 2010, 11:41) Нашел о...   Feb 23 2010, 15:22
|- - alux   Цитата(SysRq @ Feb 23 2010, 19:22) Разбер...   Feb 24 2010, 09:28
- - SysRq   Цитата(alux @ Feb 24 2010, 12:28) И где я...   Feb 26 2010, 22:57
- - alux   SPIF = SPIF; в данном случае ни при чем. Проблема...   Feb 27 2010, 14:39
- - Александр Куличок   ЦитатаА вообще, логично было бы назвать вывод MISO...   Feb 28 2010, 10:00
|- - alux   Вот именно, с точностью до наоборот. Мне, например...   Feb 28 2010, 14:47
- - alux   С USI(SPI) работает, но нужно организовывать прото...   Mar 1 2010, 06:34
- - alux   Чтобы отправить от Slave(Tiny45) длинный байт Код ...   Mar 2 2010, 09:23
- - Nuts_   Если надо то есть реальный проверенный код на ASM ...   Mar 30 2010, 11:07
|- - stells   Цитата(Nuts_ @ Mar 30 2010, 15:07) Если н...   Mar 30 2010, 13:48
- - Nuts_   код для принимающего утройтва принимает 6 байт ну ...   Apr 1 2010, 11:15
|- - stells   Цитата(Nuts_ @ Apr 1 2010, 15:15) код для...   Apr 1 2010, 11:20
- - Cursedsmite   Скажите, а примера реализации похожей задачи на ас...   Jan 24 2013, 11:31


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

 


RSS Текстовая версия Сейчас: 20th July 2025 - 18:34
Рейтинг@Mail.ru


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