Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Нужна помощь по SPI 
:(
    Опции темы
msreds
Дата 13.5.2014, 07:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 13.5.2014

Репутация: нет
Всего: нет



Здравствуйте! Нужна помощь по SPI, не могу реализовать передачу хотя бы одного бита хоть ты тресни:( Работаю в AtmelStudio 6.1, МК Atmega328p 2шт....
PM MAIL   Вверх
Romikgy
Дата 13.5.2014, 08:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 8
Всего: 146



без исходных кодов никто не поможет ... и немного не в той теме пост


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Toyamatokanava
Дата 13.5.2014, 09:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 63
Регистрация: 29.10.2012
Где: Ростов-на-Дону

Репутация: нет
Всего: нет



Если расскажите по подробней, томожно будет помочь.
PM MAIL   Вверх
msreds
Дата 13.5.2014, 09:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 13.5.2014

Репутация: нет
Всего: нет



Toyamatokanava,

#include <pololu/3pi.h>
#define SPI_PORTX PORTB
#define SPI_DDRX DDRB

#define SPI_MISO 4
#define SPI_MOSI 3
#define SPI_SCK 5
#define SPI_SS 2

void SPI_MasterInit(void)
{
/* Установка MOSI и SCK на вывод, все остальные на ввод */
DDRB = (1«DDB3)|(1«DDB5);
/* Разрешение SPI в режиме мастера, установка скорости связи fck/16
*/SPCR = (1«SPE)|(1«MSTR)|(1«SPR0);
}
void atata()
{

}
void SPI_MasterTransmit(char cData)
{
/* Запуск передачи данных */
SPDR = cData;
/* Ожидание завершения передачи данных */
while(!(SPSR & (1«SPIF)));
}


/*инициализация SPI модуля в режиме master*/

int main()
{
atata();
//SPI_MasterInit();
}

из этого надо сделать рабочую передачу байта/бита/чего угодно

Это сообщение отредактировал(а) msreds - 13.5.2014, 09:58
PM MAIL   Вверх
bsa
Дата 13.5.2014, 10:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



Я использую следующий код:
Код
void spiInit(void)
{
    SPCR = _BV(MSTR) | _BV(SPE); //enable SPI and select master mode
    PORTB = 0xF7;
    DDRB  = 0xB8;
}

void spiOpen(void)
{
    PORTB &= ~_BV(4);
}

uint8_t spiSend(uint8_t data)
{
    SPDR = data;
    while (!(SPSR & _BV(SPIF)));
    return SPDR;
}

uint8_t spiRecv(void)
{
    return spiSend(0);
}

void spiClose(void)
{
    PORTB |= _BV(4);
}

Сессия выглядит следующим образом: spiOpen(); spiSend(); spiRecv(); ... ; spiClose();

PM   Вверх
borisbn
Дата 13.5.2014, 13:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 22
Всего: 135



Господа, а разве для SPI я не должен сам "махать" clock'ом, защёлкой и данными ?
Как-то доводилось работать с SPI через плату на PCI, которая тупо транслировала мои данные в SPI.
Там мне нужно было делать как-то так:
Код
    DIN_on = (BYTE)(1<<DIN_BIT);
    CLK_on = (BYTE)(1<<CLK_BIT);
    PROG_on = (BYTE)(1<<PROG_BIT);
//----- формирование бита данных -----
    data = bits[ i ] | DIN_on | PROG_on;
    SPI_PORT = data;
    SPI_PORT = data | CLK_on;
    SPI_PORT = data;

Если этот ваш SPDR такой умный, что сам всё это делает, то тогда простите, что влез ))


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
LeonidPr
Дата 13.5.2014, 13:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 220
Регистрация: 17.2.2012
Где: г. Чебоксары

Репутация: нет
Всего: 1



не, сейчас не нужно махать. кидаете данные в регистр передачи, а дальше модуль SPI сам все разрулит. если прерывания настроены еще и обрабочик дернет, давай мол че там дальше? smile
--------------------
pkunzip.zip
PM MAIL   Вверх
bsa
Дата 13.5.2014, 14:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



Цитата(borisbn @  13.5.2014,  14:28 Найти цитируемый пост)
Если этот ваш SPDR такой умный,
Он не умный. Это всего лишь SPi Data Register.  smile 

PM   Вверх
msreds
Дата 14.5.2014, 09:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 13.5.2014

Репутация: нет
Всего: нет



bsa, что такое "&= ~" в 10 строке? 
моя программа совсем не катит?
мне в итоге надо нажать кнопку на одном устройстве, а работу должно начать другое))

PM MAIL   Вверх
Toyamatokanava
Дата 14.5.2014, 09:54 (ссылка) |   (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 63
Регистрация: 29.10.2012
Где: Ростов-на-Дону

Репутация: нет
Всего: нет



Код
 
PORTB &= ~_BV(4);// Это значит, что portb 4 устанавливаем в 0

PM MAIL   Вверх
msreds
Дата 14.5.2014, 10:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 13.5.2014

Репутация: нет
Всего: нет



передача ведь идёт через B3, почему его нет вообще?)
PM MAIL   Вверх
msreds
Дата 15.5.2014, 05:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 13.5.2014

Репутация: нет
Всего: нет



Цитата(bsa @  13.5.2014,  10:58 Найти цитируемый пост)
Я использую следующий код

Не мог бы ты поделиться ещё приёмом?))

PM MAIL   Вверх
bsa
Дата 15.5.2014, 10:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



Цитата(msreds @  15.5.2014,  06:44 Найти цитируемый пост)
Не мог бы ты поделиться ещё приёмом?))
каким?

PM   Вверх
bsa
Дата 19.5.2014, 09:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



msreds, ты уверен, что у тебя проблема именно в spi, а не в устройствах к нему подключенных. Осциллографом проверь.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0811 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.