Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы
Непрочитано 19.11.2007, 20:40  
dimonbest
Гражданин KAZUS.RU
 
Аватар для dimonbest
 
Регистрация: 30.04.2006
Сообщений: 984
Сказал спасибо: 5
Сказали Спасибо 18 раз(а) в 14 сообщении(ях)
dimonbest на пути к лучшему
По умолчанию

Код:
void AD8402(char PotNum,char Data)    
{
int Cnt;

Cnt=2; // Выводим два бита адреса (номер потенциометра)      

SS1=0; // Передача начата

while(Cnt)
{     
MOSI=PotNum & 0b10;   

SCK=1; // Тактируем
delay_us(50);
SCK=0;             

PotNum ‹‹=1; // Сдвигаем влево на 1 бит

Cnt--;
}
Это как раз таки программная реализация протокола, а не аппаратная!
А хелп пересмотрел, и не нашел описания дебагера...
Реклама:
dimonbest вне форума  
Непрочитано 20.11.2007, 00:04  
avr123-nm-ru
Почётный гражданин KAZUS.RU
 
Регистрация: 13.05.2006
Адрес: Москва
Сообщений: 3,559
Сказал спасибо: 76
Сказали Спасибо 326 раз(а) в 230 сообщении(ях)
avr123-nm-ru на пути к лучшему
По умолчанию

Сообщение от dimonbest
Это как раз таки программная реализация протокола, а не аппаратная!
А в начале поста НЕ ВИДНО вот это ???

Цитата:
Посмотри примеры исходников аппаратного SPI рабочие
http://www.avr123.nm.ru/z7.htm
__________________
Обучалка AVR PIC ARM начинающим программирование курс самоучитель шаг за шагом с нуля, CVAVR, PROTEUS, MPLAB, WinAVR, IAR, KEIL электроника - http://proavr.narod.ru
avr123-nm-ru вне форума  
Непрочитано 20.11.2007, 00:26  
dimonbest
Гражданин KAZUS.RU
 
Аватар для dimonbest
 
Регистрация: 30.04.2006
Сообщений: 984
Сказал спасибо: 5
Сказали Спасибо 18 раз(а) в 14 сообщении(ях)
dimonbest на пути к лучшему
По умолчанию

Сообщение от avr123-nm-ru
Посмотри примеры исходников аппаратного SPI рабочие
http://www.avr123.nm.ru/z7.htm
В PROTEUS spi нормально пашет.
Задача 7, в которой реализован аппаратный SPI, использует память от ATMEL, которой нет в протеусе. По этому мне еще неизвестно, нормально работает аппаратный SPI в протеусе или нет!!!

Прикрепленный файл: 5118261.rar
dimonbest вне форума  
Непрочитано 21.11.2007, 17:22  
dimonbest
Гражданин KAZUS.RU
 
Аватар для dimonbest
 
Регистрация: 30.04.2006
Сообщений: 984
Сказал спасибо: 5
Сказали Спасибо 18 раз(а) в 14 сообщении(ях)
dimonbest на пути к лучшему
По умолчанию

С этим еще никак не разобрался:
Вот код из даташита
Код:
void SPI_MasterInit(void)
{
/* Set MOSI and SCK output, all others input */
DDR_SPI = (1‹‹DD_MOSI)|(1‹‹DD_SCK);
/* Enable SPI, Master, set clock rate fck/16 */
SPCR = (1‹‹SPE)|(1‹‹MSTR)|(1‹‹SPR0);
}
void SPI_MasterTransmit(char cData)
{
/* Start transmission */
SPDR = cData;
/* Wait for transmission complete */
while(!(SPSR & (1‹‹SPIF)))
;
}
void SPI_SlaveInit(void)
{
/* Set MISO output, all others input */
DDR_SPI = (1‹‹DD_MISO);
/* Enable SPI */
SPCR = (1‹‹SPE);
}
char SPI_SlaveReceive(void)
{
/* Wait for reception complete */
while(!(SPSR & (1‹‹SPIF)))
;
/* Return data register */
return SPDR;
}
Но при передаче байта от мастера к слейву, мастер должен получать байт, а в примере не написано как его получать. Аналогично слейв: при приеме байта должен байт передавать мастеру, а в примере тоже не написано как. Буду благодарен за совет...
dimonbest вне форума  
Непрочитано 21.11.2007, 18:09  
nml
Супер-модератор
 
Аватар для nml
 
Регистрация: 13.03.2004
Адрес: Minsk
Сообщений: 2,378
Сказал спасибо: 1,956
Сказали Спасибо 1,328 раз(а) в 578 сообщении(ях)
nml на пути к лучшему
По умолчанию

Сообщение от dimonbest
Но при передаче байта от мастера к слейву, мастер должен получать байт, а в примере не написано как его получать. Аналогично слейв: при приеме байта должен байт передавать мастеру, а в примере тоже не написано как. Буду благодарен за совет...
Два регистра данных - мастера и слейва - соединены в кольцо (хотя и не обязательно! от слейва можно и не подключать).

И при 8 стробах регистры данных обмениваются между собой. То есть мастер получит тот байт, который слейв записал в свой регистр данных. Как правило, это делается в прерывании - получил от мастера - записал свой. Но учтите - что в результате этот байт мастер получит только при СЛЕДУЮЩЕМ обмене.
nml вне форума  
Непрочитано 21.11.2007, 19:59  
dimonbest
Гражданин KAZUS.RU
 
Аватар для dimonbest
 
Регистрация: 30.04.2006
Сообщений: 984
Сказал спасибо: 5
Сказали Спасибо 18 раз(а) в 14 сообщении(ях)
dimonbest на пути к лучшему
По умолчанию

Сообщение от nml
И при 8 стробах регистры данных обмениваются между собой.........Но учтите - что в результате этот байт мастер получит только при СЛЕДУЮЩЕМ обмене.
Не совсем понятно... Сразу будет обмен байтами, или мастер получит только при следующей посылке? Почему?
И еще:
Код:
void SPI_MasterTransmit(char cData)
{
/* Start transmission */
SPDR = cData;
/* Wait for transmission complete */
while(!(SPSR & (1‹‹SPIF)))
;
}
Судя по примеру, мастер будет передавать байт cData. А как принять байт от слейва?
Так?
Код:
char SPI_MasterTransmit(char cData)
{
/* Start transmission */
SPDR = cData;
/* Wait for transmission complete */
while(!(SPSR & (1‹‹SPIF)))
;
return SPDR;
}
dimonbest вне форума  
Непрочитано 21.11.2007, 22:52  
nml
Супер-модератор
 
Аватар для nml
 
Регистрация: 13.03.2004
Адрес: Minsk
Сообщений: 2,378
Сказал спасибо: 1,956
Сказали Спасибо 1,328 раз(а) в 578 сообщении(ях)
nml на пути к лучшему
По умолчанию

Сообщение от dimonbest
Не совсем понятно... Сразу будет обмен байтами, или мастер получит только при следующей посылке? Почему?
Так... Еще раз (и смотрите на рисунок вначале темы). Мастер пишет в регистр данных - начинается сдвиг. Регистры данных мастера и слейва меняются местами. По окончании сдвига - прерывание в обоих, ну или факт окончания обмена по флагам, не суть.

Допустим слейв получил что-то, обдумал, и пишет ответ - то есть байт в регистр данных. Но это еще не значит что мастер его получил. Лежит оно в своем регистре, пока не начнется следующий цикл обмена. А его инициирует только мастер!
nml вне форума  
Непрочитано 22.11.2007, 01:01  
dimonbest
Гражданин KAZUS.RU
 
Аватар для dimonbest
 
Регистрация: 30.04.2006
Сообщений: 984
Сказал спасибо: 5
Сказали Спасибо 18 раз(а) в 14 сообщении(ях)
dimonbest на пути к лучшему
По умолчанию

Получается так: если слейв знает, что ему отсылать во время приема байта от мастера, то он это значение должен поместить в дата регистр. При этом за 8 тактов от мастера, значение дата регистра получит слейв, одновременно свое значение дата регистра отдаст мастеру. Я правильно все понял?
dimonbest вне форума  
Непрочитано 22.11.2007, 01:03  
Zhyk_k_k
Прохожий
 
Регистрация: 25.10.2007
Сообщений: 5
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Zhyk_k_k на пути к лучшему
По умолчанию

dimonbest, уважаемый mnl имеет в виду что ответную инфармацию ты получиш только на следующем цикле. Потому что сразу м/к ее не успеет обработать. НО... Если ты заранее подготовил данные для пересылки ты их просто пишеш в SPDR и ждеш когда master начнет передачу. Короче в принцепе ты все правельно понял. . Т.е. порсто отсылаеш 0 от ведущева к ведомому. Теперь о тех кодах из ds. Сказано же читай внимательно.... Так вот там же прописано что чтобы принять master_ом то по окончанию цикла (наличее флага) читай снова SPDR. А ds писали как пример для реализации оных функций. Еще раз напомню что регистр SPDR- это буфер между сдвиговым регистром (кольцевым) совместно с троиной буферизацией (одним на передачу оставшиеся на прием). Да и еше... прирывание это хороше когда есть запас по скорости, если его нет...!!!??? ТОгда не надо. Короче считать по времени надо. Вот с протеусом извени я както больше с паяльником. Сколько раз убеждался. Пишеш одно, а на выходе другое.
Zhyk_k_k вне форума  
Непрочитано 22.11.2007, 01:25  
dimonbest
Гражданин KAZUS.RU
 
Аватар для dimonbest
 
Регистрация: 30.04.2006
Сообщений: 984
Сказал спасибо: 5
Сказали Спасибо 18 раз(а) в 14 сообщении(ях)
dimonbest на пути к лучшему
По умолчанию

Zhyk_k_k ,nmlспасибо за помощь, с этим разобрался!
dimonbest вне форума  
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Протокол CANopen??? phoenix84 Proteus, KiCAD и другие ECAD 4 20.03.2012 18:13
протокол C-Bus magneat Микроконтроллеры, АЦП, память и т.д 0 23.09.2008 20:44
Протокол Атлас-3 spin722 Автоматика и аппаратура связи 7 20.09.2008 16:40
Протокол Wiegand Beduin Микроконтроллеры, АЦП, память и т.д 0 05.06.2007 16:39
протокол sergey2000 Микроконтроллеры, АЦП, память и т.д 1 28.05.2006 10:55


Часовой пояс GMT +4, время: 17:56.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot