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

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> MEGA И SPI
muravei
сообщение Sep 22 2006, 11:42
Сообщение #16


Гуру
******

Группа: Свой
Сообщений: 2 538
Регистрация: 13-08-05
Пользователь №: 7 591



Цитата(Семён @ Sep 22 2006, 11:55) *
ИМХО: отдыхающими слейвы быть не могут, потому, как не знают когда мастер им что-то захочет передать.

Цитата(Семён @ Sep 22 2006, 11:55) *
Одним этим сигналом выбрать два устройства невозможно, поэтому и потребуется дополнительный сигнал выбора слейва.

Вот этот сигнал и разбудит отдыхающий слейв.
И потом, а если слейвов 4 или 8?
Go to the top of the page
 
+Quote Post
Shum1
сообщение Sep 22 2006, 11:49
Сообщение #17





Группа: Участник
Сообщений: 13
Регистрация: 9-06-06
Пользователь №: 17 933



Из достаточно большого опыта создания контроллеров на мегах с периферией на SPI могу сказать, что все устройства (АЦП; ЦАП; контроллеры CAN, UART; коммутаторы.....), управляемые по SPI имеют CS. Поэтому, если мастер один и не меняется, оптимальным является, по моему, выделить две ноги проца под чипселекты и всё........ РАЗВЯЗЫВАТЬ выходы слэйвов друг от друга ТОЧНО не надо.......... В промышленных устройствах полезно сам проц развязать гальванически от периферии, но это уже немного из другой оперы...........
По поводу приёма-передачи......... вы в теле программы пИшете (после того естественно, как SPI уже настроен и требуемое устройство выбрано через его CS) SPDR=0x12; //например..... после этого, если SPI разрешён, ваш проц(мастер) выставляет синхронизацию на ноге SCK и через ногу MOSI передаёт байт 0х12........если в этот момент устройстве передаёт в проц инфу, то она тоже будет в регистре SPDR........после окончания посылки байта вылазит прерывание SPI и в нём строкой char a=SPDR; можно считать то, что прислал вам SLAVE............вот так вот........
Go to the top of the page
 
+Quote Post
prottoss
сообщение Sep 22 2006, 12:14
Сообщение #18


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



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


--------------------
Go to the top of the page
 
+Quote Post
glebka
сообщение Sep 22 2006, 14:12
Сообщение #19


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

Группа: Свой
Сообщений: 199
Регистрация: 22-06-05
Пользователь №: 6 217



Соединяю megu и max6957.
Получается: высталяю CS ,отправляю 16 бит( два раза по 8), убираю CS, читаю SPDR, это ответ от SLAVE? 8 бит.
Ход мысли правильный?
Go to the top of the page
 
+Quote Post
prottoss
сообщение Sep 22 2006, 14:34
Сообщение #20


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Цитата(glebka @ Sep 22 2006, 22:12) *
Соединяю megu и max6957.
Получается: высталяю CS ,отправляю 16 бит( два раза по 8), убираю CS, читаю SPDR, это ответ от SLAVE? 8 бит.
Ход мысли правильный?
Не совсем так, хотя я не знаю, что за зверь max6957. Многие АЦП с SPI интерфейсом работают примерно так:

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

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

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

2.снимаем CS


--------------------
Go to the top of the page
 
+Quote Post
Foris
сообщение Sep 22 2006, 16:44
Сообщение #21


Участник
*

Группа: Свой
Сообщений: 66
Регистрация: 21-09-06
Из: Москва
Пользователь №: 20 566



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

Сообщение отредактировал Foris - Sep 22 2006, 16:46


--------------------
Радиодетали недорого Arduino модули сенсоры в Москве круглосуточно 24/7 самовывоз безплатно от любой станции метро, есть и платная доставка - www.mkPochtoi.ru
Go to the top of the page
 
+Quote Post
stellar
сообщение Sep 24 2006, 18:16
Сообщение #22


Участник
*

Группа: Новичок
Сообщений: 19
Регистрация: 27-05-06
Пользователь №: 17 498



Товарищи, помогите, не работает 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 - Sep 24 2006, 18:19
Go to the top of the page
 
+Quote Post
glebka
сообщение Oct 2 2006, 15:18
Сообщение #23


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

Группа: Свой
Сообщений: 199
Регистрация: 22-06-05
Пользователь №: 6 217



Спасибо всем большое за консультацию,действительно ответ от ведомого приходит как написал prottoss.
Собрал всё на "проволочках" основные моменты работают.
Маленький шаг вперёд smile.gif
Go to the top of the page
 
+Quote Post

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

 


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


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