Сильно прошу не бить, связь двух МК осилил самостоятельно пересылку двух байт тоже осилил .... Осталось подружить три контроллера один мастер два slave, и тут затык при передаче мастера все посылки проходят, а вот ответы от slave- oв теряются предположительно из-за одновременно включенных на slave- ах выходов MISO. Помогите , а то моя голова уже кругом и лапки кверху... проэкт в протеусе 7,7 sp2
А сигналы SS у каждого помощника свои, или на одну линию повесили? Должны быть у каждого персональный сигнал выбора, тогда никаких коллизий не будет
_________________ Загружая на вход компьютера "мусор", на выходе получим "мусор^32". PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже
Решено кому-то может пригодиться. Прерывание по SPI генериться только после получения полного байта в SPDR Соответственно ноги у двух slave находятся в состоянии выходов и когда один из них бросает пакет то второй высаживает линию. Решил проблему так: задействовал внешнее прерывание (у меня в проэкте оно всё-равно используется и проверяю если на ноге SS=0 то перевожу ногу на выход) соответственно конфликтов нет... Мож у кого есть решение поэлегантнее, приму к рассмотрению, мой проект пока еще не окончательный, планируется передача от одного мастера - произвольному slave пакет произвольной длины. Работаю над продолжением промежуточный вариант предосталяю на рассотрение
новый прикол... после отладки передачи 2-х байт... загнал этот кусок передачи в бОльший проект.И вуаля, при первой посылке по сигналам SCK, MOSI идет заполнение как при ШИМ с частотой Fcpu, плюс ко всему после первой посылки теряются 5-7 посылок. И следующие уже идут без заполнения и без потерь...Помогите.....
_________________ идейный борец за ден. знаки всего мира
Вот за что я люблю Протеус ( и потому им не пользуюсь ) -- ему по фиг разводка платы, экранировка, наводки и т.д. Ну что тут можно посоветовать, кроме банального : возьми осцилл и ...
Вот как раз осцыл и показывает смотри пост выше..... Какая задержка должна быть/может быть от загрузки данных в регистр 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; достаточно?
_________________ идейный борец за ден. знаки всего мира
По осцылу заметил что заполнение частотой происходит только новоустановленный байт, то есть если в посылке устанавливается новый байт то он заполнен частотой Fcpu а осталые идут без заполнения и SCK тоже идут без заполнения уже со второй посылки..... Куда копать?????
_________________ идейный борец за ден. знаки всего мира
Чет я не понял, вы вроде пользуетесь CVAVR, и спрашиваете правильно ли регистры настроили. В нем есть даже выбор master/slave Сдается мне, что есть аппаратное разрешение коллизий.Ведь интерфейс аппаратный.
Ага только несколько раз я уже курил даташит, визард не правильно выставляет биты инициализации SPI. Плюс (скорее минус) передача DWORD не реализована в визарде. WCOl молчит шоб ему.
_________________ идейный борец за ден. знаки всего мира
Похоже только вы разбираетесь как правильно выставить биты, а целая команда разработчиков вообще не вкуривают. А передачу дворд можно слепить из передачи байта легко.
после 7805 стоит 470uF. Главное proteus сцуко мне показывает все ок даже на удвоенной скорости передачи, а вот в железке никак не идет..
А керамика около МК, как можно ближе к ножкам питания имеется?
Схему обычной картинкой можете "прицепить"? За одно и фото монтажа не плохо было бы.
_________________ Когда уже ничего не помогает - прочтите, наконец, инструкцию. Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII) Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Вопрос с заполнением снимается... Это сцуко говенные осциллографы AKTAKOM не успевал отрисовывать... проверил на TEKTRONIX все ок - нету там заполнения.. Извиняюсь за дезинформацию ... Антиреклама не пользуйтесь люди осцылами фирмы AKTAKOM мало того что, подобные глюки ловить приходиться, так они еще драйвера по win7 зажимают продают как отдельное ПО, хотя эта же серия выпускаемая сейчас комплектуется по умолчанию драйвеами под win7. Вот и приходиться держать еще и win XP.... Нехорошие люди!
_________________ идейный борец за ден. знаки всего мира
Вот мой кусочек кода передачи приема в PROTEUS посылки летят на ура в железе хрень какая-то пропадают биты .... такое впечатление что в SPDR попадает какая-то фигня вместо нужного значения ХЕЛП МИ ПЛИЗ!!!
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
Кошмар, черт могу сломит. Удивляюсь как вообще у вас этот код работает. Может добавите алгоритм действий в виде блок схемы, чтобы было понятно чего вы добиваетесь? И почему у вас простые массивы выглядят как адреса каждой ячейки?Разве нельзя адресу задать осмысленное имя и с ним работать? Типа такого:
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 35
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения