Реклама на сайте DatasheetsDatasheets

KAZUS.RUN - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Книги и журналы
FAQ по электронике

  Datasheets
Поиск SMD
Онлайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Схемы и проекты
Принципиальные схемы
  Программы
Каталог сайтов
Калькуляторы
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы

Помогите разобраться с SPI AVR

Непрочитано 30.08.2010, 00:47  
Basan
Прохожий
 
Регистрация: 29.12.2009
Сообщений: 6
Сказал спасибо: 3
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Basan на пути к лучшему
По умолчанию Re: Помогите разобраться с SPI AVR

Спасибо всем!!! ТУПЛЮ...
Сейчас буду код редактировать.
Есть еще один вопрос: вызывается ли прерывание по изменению сигнала линии SS.
Реклама:
Basan вне форума  
Непрочитано 30.08.2010, 01:35  
Basan
Прохожий
 
Регистрация: 29.12.2009
Сообщений: 6
Сказал спасибо: 3
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Basan на пути к лучшему
По умолчанию Re: Помогите разобраться с SPI AVR

Код:
void spi_tx (unsigned char dat)
{
SPDR = dat;
while(!(SPSR & (SPIF)));
delay_us(100);
}

void spi_tx_p (unsigned char regim, unsigned char but)
{
if(but==0)
    {
    spi_tx(255);
    }
if(but==1)
    {
    spi_tx(regim);
    }
if(but›1)
    { 
    if(but‹11)
            {
            spi_tx(data[but-2]);
            }
    else
            {
            spi_tx(data_s[but-12]);
            }    
    }        
}

void main(void)
{
// Port B initialization
// Func7=Out Func6=In Func5=Out Func4=Out Func3=Out Func2=In Func1=In Func0=In 
// State7=0 State6=T State5=0 State4=0 State3=0 State2=T State1=T State0=T 
PORTB=0x00;
DDRB=0xB8;

// SPI initialization
// SPI Type: Master
// SPI Clock Rate: 125,000 kHz
// SPI Clock Phase: Cycle Half
// SPI Clock Polarity: Low
// SPI Data Order: MSB First
SPCR=0xD3;
SPSR=0x00;

................................

      data[0]=0;
      data[1]=1;
      data[2]=2;

while (1)
      { 
      unsigned char i;
      for(i=0;i‹22;i++)
            {
            spi_tx_p(2,i);
            }   
      delay_ms(1000); 
          
      };
}
Может компилятору хана -- задержка не работает
Теперь получаю следующую лажу:
передаю байт слейву (255), в ответ получаю (255), и так до бесконечности...
Basan вне форума  
Непрочитано 30.08.2010, 02:53  
kison
Почётный гражданин KAZUS.RUN
 
Регистрация: 13.12.2004
Сообщений: 3,168
Сказал спасибо: 11
Сказали Спасибо 691 раз(а) в 503 сообщении(ях)
kison на пути к лучшему
По умолчанию Re: Помогите разобраться с SPI AVR

Сообщение от Basan Посмотреть сообщение
Теперь получаю следующую лажу:
А где выбор слейва?
И что значит "в ответ получаю" - у Вас односторонняя передача.
Зачем задержка на 100 микросекунд?
Но уже намного ближе к работоспособному варианту, чем вначале
kison вне форума  
Непрочитано 30.08.2010, 03:00  
Basan
Прохожий
 
Регистрация: 29.12.2009
Сообщений: 6
Сказал спасибо: 3
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Basan на пути к лучшему
По умолчанию Re: Помогите разобраться с SPI AVR

Сообщение от kison Посмотреть сообщение
А где выбор слейва?
Код:
#define SS      PORTB.2

.............................................

void spi_tx (unsigned char dat)
{
SS=0;
SPDR = dat;
while(!(SPSR & (SPIF)));
SS=1;
}
Так лучше???
По поводу ответа - в протеусе повесил на шину SPI анализатор.
И всетаки будет ли вызываться прерывание в слейве по переходу линии SS в 0???

Последний раз редактировалось Basan; 30.08.2010 в 03:45.
Basan вне форума  
Непрочитано 30.08.2010, 11:59  
kison
Почётный гражданин KAZUS.RUN
 
Регистрация: 13.12.2004
Сообщений: 3,168
Сказал спасибо: 11
Сказали Спасибо 691 раз(а) в 503 сообщении(ях)
kison на пути к лучшему
По умолчанию Re: Помогите разобраться с SPI AVR

Сообщение от Basan Посмотреть сообщение
И всетаки будет ли вызываться прерывание в слейве по переходу линии SS в 0???
Нет конечно.
kison вне форума  
Непрочитано 31.08.2010, 09:05  
alchem
Частый гость
 
Регистрация: 23.07.2008
Сообщений: 16
Сказал спасибо: 5
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
alchem на пути к лучшему
По умолчанию Re: Помогите разобраться с SPI AVR

Прерывание можно устоить замкнув SS и INT0 и настроить по спаду. Можно делать просто по таймауту SPI сброс счетчика.
Задержка тут-не пришей кобыле хвост, флаг прерывания SPI надо сбрасывать (datasheet читайте, он сбрасывается сам только по прерыванию). Еще бы неплохо сделать контроль присутствия слейва, пусть он в ответ хотя бы номер принятого байта шлет.
alchem вне форума  
Непрочитано 31.08.2010, 09:11  
alchem
Частый гость
 
Регистрация: 23.07.2008
Сообщений: 16
Сказал спасибо: 5
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
alchem на пути к лучшему
По умолчанию Re: Помогите разобраться с SPI AVR

Сообщение от Basan Посмотреть сообщение
SS=0;
SPDR = dat;
while(!(SPSR & (SPIF)));
SS=1;
Вот так делать очень не рекомендую, надо перед всей посылкой сбрасывать SS и поднимать обратно только передав все.
Кстати, зачем такая сложная конструкция при передаче? Для контроля данных проще использовать CRC или хотя бы контрольную сумму. И лучше не устраивать хитрологику заполнения посылки при передаче. Вам 2 байта буфера жалко?
alchem вне форума  
Непрочитано 31.08.2010, 12:08  
kison
Почётный гражданин KAZUS.RUN
 
Регистрация: 13.12.2004
Сообщений: 3,168
Сказал спасибо: 11
Сказали Спасибо 691 раз(а) в 503 сообщении(ях)
kison на пути к лучшему
По умолчанию Re: Помогите разобраться с SPI AVR

Сообщение от alchem Посмотреть сообщение
Задержка тут-не пришей кобыле хвост, флаг прерывания SPI надо сбрасывать (datasheet читайте, он сбрасывается сам только по прерыванию).
Похоже Вам и нужно читать О "несбрасывающемся флаге". Кстати о прерывании по перепаду SS. Его таки можно получить, настоив слейва как мастер, но оставив SS входом. MISO настроить выходом. Тогда при перепаде на SS 1-›0 SPI сам переключится в слейв и произойдет прерывание. Вот только как различить готовность данных в SPDR и перепад на SS непонятно.
kison вне форума  
Непрочитано 31.08.2010, 12:44  
alchem
Частый гость
 
Регистрация: 23.07.2008
Сообщений: 16
Сказал спасибо: 5
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
alchem на пути к лучшему
По умолчанию Re: Помогите разобраться с SPI AVR

Сообщение от kison Посмотреть сообщение
Похоже Вам и нужно читать О "несбрасывающемся флаге"
Alternatively, the
SPIF bit is cleared by first reading the SPI Status Register with SPIF set, then accessing
the SPI Data Register (SPDR).
Ну да, по идее "accessing the SPI Data Register (SPDR)" должно означать в том числе и запись в него. Щас дебаггером проверю

Последний раз редактировалось alchem; 31.08.2010 в 12:46.
alchem вне форума  
Непрочитано 31.08.2010, 12:54  
alchem
Частый гость
 
Регистрация: 23.07.2008
Сообщений: 16
Сказал спасибо: 5
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
alchem на пути к лучшему
По умолчанию Re: Помогите разобраться с SPI AVR

Да, при записи в SPDR бит сбрасывается. Нашел, где я читал что надо его сбрасывать:
Сообщение от AT89C51ED2
Software clears SPIF by reading
the Serial Peripheral Status register (SPSTA) with the SPIF bit set, and then reading the
SPDAT
Вот что значит писать под несколько платформ сразу

Последний раз редактировалось alchem; 31.08.2010 в 13:03. Причина: нашел
alchem вне форума  
 
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите, пожалуйста, создать АОН на AVR ArtUrl1986 Микроконтроллеры, АЦП, память и т.д 23 30.04.2016 18:48
[Решено] Помогите разобраться с генератором igor1000 Электроника средств транспорта 10 05.07.2010 12:53
Этот непонятный SPI! ПОМОГИТЕ! week Микроконтроллеры, АЦП, память и т.д 6 14.04.2010 15:09
Помогите с прошивкой в AVR studio _grey_ Микроконтроллеры, АЦП, память и т.д 5 26.03.2010 21:59
Помогите разобраться с кодом Micro C for AVR deeman30rus Электроника - это просто 7 09.02.2010 11:46


Часовой пояс GMT +4, время: 22:21.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.