Например TDA7294

Форум РадиоКот :: Просмотр темы - глюки по SPI
Форум РадиоКот
https://radiokot.ru/forum/

глюки по SPI
https://radiokot.ru/forum/viewtopic.php?f=61&t=77855
Страница 1 из 2

Автор:  kama3er [ Вт сен 11, 2012 16:10:58 ]
Заголовок сообщения:  глюки по SPI

Сильно прошу не бить, связь двух МК осилил самостоятельно пересылку двух байт тоже осилил ....
Осталось подружить три контроллера один мастер два slave, и тут затык при передаче мастера все посылки проходят,
а вот ответы от slave- oв теряются предположительно из-за одновременно включенных на slave- ах выходов MISO.
Помогите , а то моя голова уже кругом и лапки кверху...
проэкт в протеусе 7,7 sp2 :cry:

Вложения:
SPI передача N байтов.rar [29.19 KiB]
Скачиваний: 242

Автор:  korsaj [ Вт сен 11, 2012 16:21:14 ]
Заголовок сообщения:  Re: глюки по SPI

Воткните в шину по резистору междду каждым мк и с помошью осцилограмок посмотрите причины коллизий.

Автор:  Meteor [ Вт сен 11, 2012 16:35:08 ]
Заголовок сообщения:  Re: глюки по SPI

А сигналы SS у каждого помощника свои, или на одну линию повесили?
Должны быть у каждого персональный сигнал выбора, тогда никаких коллизий не будет

Автор:  kama3er [ Вт сен 11, 2012 16:37:56 ]
Заголовок сообщения:  Re: глюки по SPI

да ессно у каждого корпуса свой SS

Автор:  kama3er [ Ср сен 12, 2012 11:02:31 ]
Заголовок сообщения:  Re: глюки по SPI

Решено кому-то может пригодиться. Прерывание по SPI генериться только после получения полного байта в SPDR
Соответственно ноги у двух slave находятся в состоянии выходов и когда один из них бросает пакет то второй высаживает линию.
Решил проблему так: задействовал внешнее прерывание (у меня в проэкте оно всё-равно используется и проверяю если на ноге SS=0 то перевожу ногу на выход) соответственно конфликтов нет...
Мож у кого есть решение поэлегантнее, приму к рассмотрению, мой проект пока еще не окончательный,
планируется передача от одного мастера - произвольному slave пакет произвольной длины. Работаю над продолжением промежуточный вариант предосталяю на рассотрение

Вложения:
SPI передача N байтов.rar [32.28 KiB]
Скачиваний: 250

Автор:  kama3er [ Ср окт 31, 2012 09:26:21 ]
Заголовок сообщения:  Re: глюки по SPI

новый прикол... после отладки передачи 2-х байт... загнал этот кусок передачи в бОльший проект.И вуаля, при первой посылке по сигналам SCK, MOSI идет заполнение как при ШИМ с частотой Fcpu, плюс ко всему после первой посылки теряются 5-7 посылок. И следующие уже идут без заполнения и без потерь...Помогите.....

Автор:  TripleKill [ Ср окт 31, 2012 09:35:11 ]
Заголовок сообщения:  Re: глюки по SPI

Фильтры по питанию процов есть?
Напарывался уже пару раз на это. Не с SPI, но всё-таки было. Даже если сам БП помех не выдаёт.

Автор:  kama3er [ Ср окт 31, 2012 09:42:21 ]
Заголовок сообщения:  Re: глюки по SPI

после 7805 стоит 470uF.
Главное proteus сцуко мне показывает все ок даже на удвоенной скорости передачи, а вот в железке никак не идет..

Автор:  Jack_A [ Ср окт 31, 2012 11:12:39 ]
Заголовок сообщения:  Re: глюки по SPI

Вот за что я люблю Протеус ( и потому им не пользуюсь :) ) -- ему по фиг разводка платы, экранировка, наводки и т.д.
Ну что тут можно посоветовать, кроме банального : возьми осцилл и ...

Автор:  kama3er [ Ср окт 31, 2012 11:22:40 ]
Заголовок сообщения:  Re: глюки по SPI

Вот как раз осцыл и показывает смотри пост выше.....
Какая задержка должна быть/может быть от загрузки данных в регистр 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;
достаточно?

Автор:  kama3er [ Ср окт 31, 2012 11:27:42 ]
Заголовок сообщения:  Re: глюки по SPI

По осцылу заметил что заполнение частотой происходит только новоустановленный байт, то есть если в посылке устанавливается новый байт то он заполнен частотой Fcpu а осталые идут без заполнения и SCK тоже идут без заполнения уже со второй посылки..... Куда копать?????

Автор:  vitalik_1984 [ Ср окт 31, 2012 12:09:16 ]
Заголовок сообщения:  Re: глюки по SPI

Чет я не понял, вы вроде пользуетесь CVAVR, и спрашиваете правильно ли регистры настроили.
В нем есть даже выбор master/slave
Сдается мне, что есть аппаратное разрешение коллизий.Ведь интерфейс аппаратный.

Автор:  kama3er [ Ср окт 31, 2012 12:18:04 ]
Заголовок сообщения:  Re: глюки по SPI

Ага только несколько раз я уже курил даташит, визард не правильно выставляет биты инициализации SPI.
Плюс (скорее минус) передача DWORD не реализована в визарде. WCOl молчит шоб ему.

Автор:  vitalik_1984 [ Ср окт 31, 2012 12:39:18 ]
Заголовок сообщения:  Re: глюки по SPI

Похоже только вы разбираетесь как правильно выставить биты, а целая команда разработчиков вообще не вкуривают.
А передачу дворд можно слепить из передачи байта легко.

Автор:  kama3er [ Ср окт 31, 2012 13:56:56 ]
Заголовок сообщения:  Re: глюки по SPI

Я сказал только то, что я сказал не более не додумывайте лишнего...

Автор:  Kavka [ Ср окт 31, 2012 15:38:46 ]
Заголовок сообщения:  Re: глюки по SPI

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

Схему обычной картинкой можете "прицепить"?
За одно и фото монтажа не плохо было бы.

Автор:  kama3er [ Ср окт 31, 2012 17:33:56 ]
Заголовок сообщения:  Re: глюки по SPI

Вопрос с заполнением снимается... Это сцуко говенные осциллографы AKTAKOM не успевал отрисовывать... проверил на TEKTRONIX все ок - нету там заполнения.. Извиняюсь за дезинформацию ...
Антиреклама не пользуйтесь люди осцылами фирмы AKTAKOM мало того что, подобные глюки ловить приходиться, так они еще драйвера по win7 зажимают продают как отдельное ПО, хотя эта же серия выпускаемая сейчас комплектуется по умолчанию драйвеами под win7. Вот и приходиться держать еще и win XP.... Нехорошие люди!

Автор:  kama3er [ Ср окт 31, 2012 17:41:01 ]
Заголовок сообщения:  Re: глюки по SPI

Kavka монтажки, нет все собрано на PINBOARD...
нашел что у меня выдает spi часть посылки в железе...
лезут только младшие байты...
Ищу дальше

Автор:  kama3er [ Чт ноя 01, 2012 15:11:28 ]
Заголовок сообщения:  Re: глюки по SPI

Вот мой кусочек кода передачи приема
в 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
};

Автор:  vitalik_1984 [ Чт ноя 01, 2012 19:31:13 ]
Заголовок сообщения:  Re: глюки по SPI

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

Страница 1 из 2 Часовой пояс: UTC + 3 часа
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/