глюки по SPI

Дисплеи, датчики и прочие функциональные узлы, управляемые МК.
Ответить
Открыл глаза
Аватара пользователя
Сообщения: 41
Зарегистрирован: Ср фев 15, 2012 17:30:44
Откуда: Украина Шостка

Сообщение kama3er »

Сильно прошу не бить, связь двух МК осилил самостоятельно пересылку двух байт тоже осилил ....
Осталось подружить три контроллера один мастер два slave, и тут затык при передаче мастера все посылки проходят,
а вот ответы от slave- oв теряются предположительно из-за одновременно включенных на slave- ах выходов MISO.
Помогите , а то моя голова уже кругом и лапки кверху...
проэкт в протеусе 7,7 sp2 :cry:
Вложения
SPI передача N байтов.rar
(29.19 КБ) 250 скачиваний
идейный борец за ден. знаки всего мира
Контактная информация:
Реклама
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 330
Зарегистрирован: Чт июн 23, 2011 07:55:51

Сообщение korsaj »

Воткните в шину по резистору междду каждым мк и с помошью осцилограмок посмотрите причины коллизий.
Реклама
Друг Кота
Аватара пользователя
Сообщения: 3961
Зарегистрирован: Пн июл 13, 2009 14:37:39
Откуда: Московская область, наукоград.....

Сообщение Meteor »

А сигналы SS у каждого помощника свои, или на одну линию повесили?
Должны быть у каждого персональный сигнал выбора, тогда никаких коллизий не будет
Загружая на вход компьютера "мусор", на выходе получим "мусор^32".
PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже
Контактная информация:
Открыл глаза
Аватара пользователя
Сообщения: 41
Зарегистрирован: Ср фев 15, 2012 17:30:44
Откуда: Украина Шостка

Сообщение kama3er »

да ессно у каждого корпуса свой SS
идейный борец за ден. знаки всего мира
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Открыл глаза
Аватара пользователя
Сообщения: 41
Зарегистрирован: Ср фев 15, 2012 17:30:44
Откуда: Украина Шостка

Сообщение kama3er »

Решено кому-то может пригодиться. Прерывание по SPI генериться только после получения полного байта в SPDR
Соответственно ноги у двух slave находятся в состоянии выходов и когда один из них бросает пакет то второй высаживает линию.
Решил проблему так: задействовал внешнее прерывание (у меня в проэкте оно всё-равно используется и проверяю если на ноге SS=0 то перевожу ногу на выход) соответственно конфликтов нет...
Мож у кого есть решение поэлегантнее, приму к рассмотрению, мой проект пока еще не окончательный,
планируется передача от одного мастера - произвольному slave пакет произвольной длины. Работаю над продолжением промежуточный вариант предосталяю на рассотрение
Вложения
SPI передача N байтов.rar
(32.28 КБ) 258 скачиваний
идейный борец за ден. знаки всего мира
Контактная информация:
Реклама
Открыл глаза
Аватара пользователя
Сообщения: 41
Зарегистрирован: Ср фев 15, 2012 17:30:44
Откуда: Украина Шостка

Сообщение kama3er »

новый прикол... после отладки передачи 2-х байт... загнал этот кусок передачи в бОльший проект.И вуаля, при первой посылке по сигналам SCK, MOSI идет заполнение как при ШИМ с частотой Fcpu, плюс ко всему после первой посылки теряются 5-7 посылок. И следующие уже идут без заполнения и без потерь...Помогите.....
идейный борец за ден. знаки всего мира
Контактная информация:
Реклама
Вымогатель припоя
Сообщения: 671
Зарегистрирован: Вт июн 29, 2010 12:31:49

Сообщение TripleKill »

Фильтры по питанию процов есть?
Напарывался уже пару раз на это. Не с SPI, но всё-таки было. Даже если сам БП помех не выдаёт.
Открыл глаза
Аватара пользователя
Сообщения: 41
Зарегистрирован: Ср фев 15, 2012 17:30:44
Откуда: Украина Шостка

Сообщение kama3er »

после 7805 стоит 470uF.
Главное proteus сцуко мне показывает все ок даже на удвоенной скорости передачи, а вот в железке никак не идет..
идейный борец за ден. знаки всего мира
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 6337
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Сообщение Jack_A »

Вот за что я люблю Протеус ( и потому им не пользуюсь :) ) -- ему по фиг разводка платы, экранировка, наводки и т.д.
Ну что тут можно посоветовать, кроме банального : возьми осцилл и ...
Открыл глаза
Аватара пользователя
Сообщения: 41
Зарегистрирован: Ср фев 15, 2012 17:30:44
Откуда: Украина Шостка

Сообщение kama3er »

Вот как раз осцыл и показывает смотри пост выше.....
Какая задержка должна быть/может быть от загрузки данных в регистр SPDR до выдачи их по SPI?
Нужна ли инициализация SPI каждый раз перед посылкой пачки байт?
Пишу в CVAVR инициализация SPI
// SPI initialization
// SPI Type: Master
// SPI Clock Rate: 4000,000 kHz
// SPI Clock Phase: Cycle Start
// SPI Clock Polarity: Low
// SPI Data Order: MSB First

//SPCR = 0x50;
SPCR=0xD0;
SPSR=0x00;
достаточно?
идейный борец за ден. знаки всего мира
Контактная информация:
Открыл глаза
Аватара пользователя
Сообщения: 41
Зарегистрирован: Ср фев 15, 2012 17:30:44
Откуда: Украина Шостка

Сообщение kama3er »

По осцылу заметил что заполнение частотой происходит только новоустановленный байт, то есть если в посылке устанавливается новый байт то он заполнен частотой Fcpu а осталые идут без заполнения и SCK тоже идут без заполнения уже со второй посылки..... Куда копать?????
идейный борец за ден. знаки всего мира
Контактная информация:
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень

Сообщение vitalik_1984 »

Чет я не понял, вы вроде пользуетесь CVAVR, и спрашиваете правильно ли регистры настроили.
В нем есть даже выбор master/slave
Сдается мне, что есть аппаратное разрешение коллизий.Ведь интерфейс аппаратный.
Контактная информация:
Открыл глаза
Аватара пользователя
Сообщения: 41
Зарегистрирован: Ср фев 15, 2012 17:30:44
Откуда: Украина Шостка

Сообщение kama3er »

Ага только несколько раз я уже курил даташит, визард не правильно выставляет биты инициализации SPI.
Плюс (скорее минус) передача DWORD не реализована в визарде. WCOl молчит шоб ему.
идейный борец за ден. знаки всего мира
Контактная информация:
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень

Сообщение vitalik_1984 »

Похоже только вы разбираетесь как правильно выставить биты, а целая команда разработчиков вообще не вкуривают.
А передачу дворд можно слепить из передачи байта легко.
Контактная информация:
Открыл глаза
Аватара пользователя
Сообщения: 41
Зарегистрирован: Ср фев 15, 2012 17:30:44
Откуда: Украина Шостка

Сообщение kama3er »

Я сказал только то, что я сказал не более не додумывайте лишнего...
идейный борец за ден. знаки всего мира
Контактная информация:
Мудрый кот
Аватара пользователя
Сообщения: 1810
Зарегистрирован: Чт июн 10, 2010 08:55:35
Откуда: Сибирские Афины

Сообщение Kavka »

kama3er писал(а):после 7805 стоит 470uF.
Главное proteus сцуко мне показывает все ок даже на удвоенной скорости передачи, а вот в железке никак не идет..
А керамика около МК, как можно ближе к ножкам питания имеется?

Схему обычной картинкой можете "прицепить"?
За одно и фото монтажа не плохо было бы.
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Открыл глаза
Аватара пользователя
Сообщения: 41
Зарегистрирован: Ср фев 15, 2012 17:30:44
Откуда: Украина Шостка

Сообщение kama3er »

Вопрос с заполнением снимается... Это сцуко говенные осциллографы AKTAKOM не успевал отрисовывать... проверил на TEKTRONIX все ок - нету там заполнения.. Извиняюсь за дезинформацию ...
Антиреклама не пользуйтесь люди осцылами фирмы AKTAKOM мало того что, подобные глюки ловить приходиться, так они еще драйвера по win7 зажимают продают как отдельное ПО, хотя эта же серия выпускаемая сейчас комплектуется по умолчанию драйвеами под win7. Вот и приходиться держать еще и win XP.... Нехорошие люди!
идейный борец за ден. знаки всего мира
Контактная информация:
Открыл глаза
Аватара пользователя
Сообщения: 41
Зарегистрирован: Ср фев 15, 2012 17:30:44
Откуда: Украина Шостка

Сообщение kama3er »

Kavka монтажки, нет все собрано на PINBOARD...
нашел что у меня выдает spi часть посылки в железе...
лезут только младшие байты...
Ищу дальше
идейный борец за ден. знаки всего мира
Контактная информация:
Открыл глаза
Аватара пользователя
Сообщения: 41
Зарегистрирован: Ср фев 15, 2012 17:30:44
Откуда: Украина Шостка

Сообщение kama3er »

Вот мой кусочек кода передачи приема
в PROTEUS посылки летят на ура
в железе хрень какая-то
пропадают биты ....
такое впечатление что в SPDR попадает какая-то фигня вместо нужного значения
ХЕЛП МИ ПЛИЗ!!! :cry:

volatile unsigned long int add_value@0x01D5;
volatile unsigned int res_volt@0x01D9;
volatile unsigned char resive[4]@0x01DD, transfer[4]@0x01E1;

void SPI_MasterTransmit(long int cData)
{
char a,i;
#asm
clr r26
sts 0x01E1, r26
sts 0x01E2, r26 ;очищаем регистр
sts 0x01E3, r26 ;пустое значение во все байты переменной transfer
sts 0x01E4, r26 ;

sts 0x01DD, r26 ;пустое значение во все байты переменной resive
sts 0x01DE, r26 ;
sts 0x01DF, r26 ;
sts 0x01E0, r26 ;
#endasm

if (cData==add_value)
{
i=4;
#asm
lds r26,0x01D8 ; //add_value
sts 0x1E1, r26 ; //transfer
lds r26,0x01D7 ;//затасовываем перемм int Add_value в массив char transfer[]
sts 0x01E2, r26 ;
lds r26,0x01D6 ;
sts 0x01E3, r26 ;
lds r26,0x01D5 ;
sts 0x01E4, r26 ;
#endasm

PORTB &= ~(1<<1);
}
if (cData==volt_step)
{
i=2;
#asm
lds r26,0x01E6 ; //volt
sts 0x1E1, r26 ; //transfer
lds r26,0x01E5 ;// таж самое только с volt
sts 0x1E2, r26 ;
#endasm

PORTB &= ~(1<<2);
}
for (a = 0; a < i;)
{
delay_us(10);
SPDR = transfer[a]; // даные для записи
while(!(SPSR & (1<<SPIF))) // ждем подтверждения прохода байта - байт принят
;
resive[a]=SPDR;
a++;
};

if (cData==add_value)
{
PORTB |= (1<<1);

};
if (cData==volt_step)
{
PORTB |= (1<<2);
#asm
lds r24,0x01DD ;загружаем байт переменной resive в переменную res_volt
sts 0x01DA, r24
lds r24,0x01DE
sts 0x01D9, r24
#endasm
};
идейный борец за ден. знаки всего мира
Контактная информация:
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень

Сообщение vitalik_1984 »

Кошмар, черт могу сломит.
Удивляюсь как вообще у вас этот код работает.
Может добавите алгоритм действий в виде блок схемы, чтобы было понятно чего вы добиваетесь?
И почему у вас простые массивы выглядят как адреса каждой ячейки?Разве нельзя адресу задать осмысленное имя и с ним работать?
Типа такого:

Код: Выделить всё

 _receive0 equ @0x01DD
 _receive1 equ  _resive0+1 
Контактная информация:
Ответить

Вернуться в «Периферия»