|
MEGA И SPI |
|
|
|
Sep 22 2006, 11:49
|
Группа: Участник
Сообщений: 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............вот так вот........
|
|
|
|
|
Sep 22 2006, 14:34
|

Гуру
     
Группа: Свой
Сообщений: 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
--------------------
|
|
|
|
|
Sep 22 2006, 16:44
|

Участник

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

|
посмотрите апноут avr335 - там хороший пример spi
Сообщение отредактировал Foris - Sep 22 2006, 16:46
--------------------
Радиодетали недорого Arduino модули сенсоры в Москве круглосуточно 24/7 самовывоз безплатно от любой станции метро, есть и платная доставка - www.mkPochtoi.ru
|
|
|
|
|
Sep 24 2006, 18:16
|
Участник

Группа: Новичок
Сообщений: 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
|
|
|
|
|
Oct 2 2006, 15:18
|
Частый гость
 
Группа: Свой
Сообщений: 199
Регистрация: 22-06-05
Пользователь №: 6 217

|
Спасибо всем большое за консультацию,действительно ответ от ведомого приходит как написал prottoss. Собрал всё на "проволочках" основные моменты работают. Маленький шаг вперёд
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|