Перейти к содержанию
    

ИМХО: отдыхающими слейвы быть не могут, потому, как не знают когда мастер им что-то захочет передать.

Одним этим сигналом выбрать два устройства невозможно, поэтому и потребуется дополнительный сигнал выбора слейва.

Вот этот сигнал и разбудит отдыхающий слейв.

И потом, а если слейвов 4 или 8?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Из достаточно большого опыта создания контроллеров на мегах с периферией на SPI могу сказать, что все устройства (АЦП; ЦАП; контроллеры CAN, UART; коммутаторы.....), управляемые по SPI имеют CS. Поэтому, если мастер один и не меняется, оптимальным является, по моему, выделить две ноги проца под чипселекты и всё........ РАЗВЯЗЫВАТЬ выходы слэйвов друг от друга ТОЧНО не надо.......... В промышленных устройствах полезно сам проц развязать гальванически от периферии, но это уже немного из другой оперы...........

По поводу приёма-передачи......... вы в теле программы пИшете (после того естественно, как SPI уже настроен и требуемое устройство выбрано через его CS) SPDR=0x12; //например..... после этого, если SPI разрешён, ваш проц(мастер) выставляет синхронизацию на ноге SCK и через ногу MOSI передаёт байт 0х12........если в этот момент устройстве передаёт в проц инфу, то она тоже будет в регистре SPDR........после окончания посылки байта вылазит прерывание SPI и в нём строкой char a=SPDR; можно считать то, что прислал вам SLAVE............вот так вот........

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вот простой пример : МЕГА16 - МАСТЕР, Две МЕГА8 и ЕЕ 25256 - СЛЭЙВы. Линии выборки PD0 - PD2. По моему просто и наглядно

post-3659-1158927173_thumb.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Соединяю megu и max6957.

Получается: высталяю CS ,отправляю 16 бит( два раза по 8), убираю CS, читаю SPDR, это ответ от SLAVE? 8 бит.

Ход мысли правильный?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Соединяю megu и max6957.

Получается: высталяю CS ,отправляю 16 бит( два раза по 8), убираю CS, читаю SPDR, это ответ от SLAVE? 8 бит.

Ход мысли правильный?

Не совсем так, хотя я не знаю, что за зверь max6957. Многие АЦП с SPI интерфейсом работают примерно так:

 

1.выставили CS

 

2.посылаем байт-принимаем байт (старший байт результата)

 

3.посылаем байт-принимаем байт (младший байт результата)

 

2.снимаем CS

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

посмотрите апноут avr335 - там хороший пример spi

Изменено пользователем Foris

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Товарищи, помогите, не работает spi slave, что может быть не так?

пытаюсь в протеусе соединить 2 atmega8, ведущий работает нормально, с модулем проверки spi обменивается, а ведомый с ним не общается (((

 

void SPI_Recieve()

{ c = SPDR;

putchar(ch)

while (!(SPSR & temp));

k = 0; }

 

#include <stdio.h>

 

interrupt [TIM0_OVF] void timer0_ovf_isr(void)

{ TCNT0=0xB7;

if( k == 1)

SPI_Recieve(); }

 

#include <spi.h>

 

void main(void)

{

PORTB=0x00;

DDRB=0x10;

 

PORTC=0x02;

DDRC=0x02;

 

PORTD=0x00;

DDRD=0x00;

 

TCCR0=0x05;

TCNT0=0xB7;

 

TCCR1A=0x00;

TCCR1B=0x00;

TCNT1H=0x00;

TCNT1L=0x00;

ICR1H=0x00;

ICR1L=0x00;

OCR1AH=0x00;

OCR1AL=0x00;

OCR1BH=0x00;

OCR1BL=0x00;

 

ASSR=0x00;

TCCR2=0x00;

TCNT2=0x00;

OCR2=0x00;

 

MCUCR=0x00;

 

TIMSK=0x01;

 

UCSRA=0x00;

UCSRB=0xD8;

UCSRC=0x86;

UBRRH=0x00;

UBRRL=0x07;

 

ACSR=0x80;

SFIOR=0x00;

 

SPCR=0x43;

SPSR=0x00;

 

#asm("sei")

 

while (1)

{ while( !(SPSR & temp) )

k = 1; };

}

 

На ведушем на время посылки дёргаю ногой, которая на ведомом к /ss подключена

Подскажите в чём моё незнание?

Изменено пользователем stellar

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо всем большое за консультацию,действительно ответ от ведомого приходит как написал prottoss.

Собрал всё на "проволочках" основные моменты работают.

Маленький шаг вперёд :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...