muravei 3 22 сентября, 2006 Опубликовано 22 сентября, 2006 · Жалоба ИМХО: отдыхающими слейвы быть не могут, потому, как не знают когда мастер им что-то захочет передать. Одним этим сигналом выбрать два устройства невозможно, поэтому и потребуется дополнительный сигнал выбора слейва. Вот этот сигнал и разбудит отдыхающий слейв. И потом, а если слейвов 4 или 8? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Shum1 0 22 сентября, 2006 Опубликовано 22 сентября, 2006 · Жалоба Из достаточно большого опыта создания контроллеров на мегах с периферией на SPI могу сказать, что все устройства (АЦП; ЦАП; контроллеры CAN, UART; коммутаторы.....), управляемые по SPI имеют CS. Поэтому, если мастер один и не меняется, оптимальным является, по моему, выделить две ноги проца под чипселекты и всё........ РАЗВЯЗЫВАТЬ выходы слэйвов друг от друга ТОЧНО не надо.......... В промышленных устройствах полезно сам проц развязать гальванически от периферии, но это уже немного из другой оперы........... По поводу приёма-передачи......... вы в теле программы пИшете (после того естественно, как SPI уже настроен и требуемое устройство выбрано через его CS) SPDR=0x12; //например..... после этого, если SPI разрешён, ваш проц(мастер) выставляет синхронизацию на ноге SCK и через ногу MOSI передаёт байт 0х12........если в этот момент устройстве передаёт в проц инфу, то она тоже будет в регистре SPDR........после окончания посылки байта вылазит прерывание SPI и в нём строкой char a=SPDR; можно считать то, что прислал вам SLAVE............вот так вот........ Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
prottoss 0 22 сентября, 2006 Опубликовано 22 сентября, 2006 · Жалоба Вот простой пример : МЕГА16 - МАСТЕР, Две МЕГА8 и ЕЕ 25256 - СЛЭЙВы. Линии выборки PD0 - PD2. По моему просто и наглядно Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
glebka 0 22 сентября, 2006 Опубликовано 22 сентября, 2006 · Жалоба Соединяю megu и max6957. Получается: высталяю CS ,отправляю 16 бит( два раза по 8), убираю CS, читаю SPDR, это ответ от SLAVE? 8 бит. Ход мысли правильный? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
prottoss 0 22 сентября, 2006 Опубликовано 22 сентября, 2006 · Жалоба Соединяю megu и max6957. Получается: высталяю CS ,отправляю 16 бит( два раза по 8), убираю CS, читаю SPDR, это ответ от SLAVE? 8 бит. Ход мысли правильный? Не совсем так, хотя я не знаю, что за зверь max6957. Многие АЦП с SPI интерфейсом работают примерно так: 1.выставили CS 2.посылаем байт-принимаем байт (старший байт результата) 3.посылаем байт-принимаем байт (младший байт результата) 2.снимаем CS Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Foris 0 22 сентября, 2006 Опубликовано 22 сентября, 2006 (изменено) · Жалоба посмотрите апноут avr335 - там хороший пример spi Изменено 22 сентября, 2006 пользователем Foris Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
stellar 0 24 сентября, 2006 Опубликовано 24 сентября, 2006 (изменено) · Жалоба Товарищи, помогите, не работает 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 подключена Подскажите в чём моё незнание? Изменено 24 сентября, 2006 пользователем stellar Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
glebka 0 2 октября, 2006 Опубликовано 2 октября, 2006 · Жалоба Спасибо всем большое за консультацию,действительно ответ от ведомого приходит как написал prottoss. Собрал всё на "проволочках" основные моменты работают. Маленький шаг вперёд :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться