реклама на сайте
подробности

 
 
> Управление atmega16 с ПК, Через SPI - подскажите пример кода для контроллера
zi4rox
сообщение Nov 9 2008, 12:48
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 50
Регистрация: 4-04-08
Пользователь №: 36 480



Всем привет,

Как с ПК передать байты (некую команду допустим) в МК по SPI я знаю. Загвоздка вот в чем:
подскажите плиз как запрограммировать сам МК, чтобы тот прочитал переданный байт и уже мог с ним работать? (Там получается что МК в режиме SLAVE)

* Любой пример рабочего кода, любой совет - за все огромное спасибо!
** Также сейчас осваиваю proteus - если есть какие нибудь шаблоны/модели интересные где с SPI можно поиграться - поделиться так же плиз

Сообщение отредактировал zi4rox - Nov 9 2008, 13:04
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 5)
amaora
сообщение Nov 9 2008, 14:32
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 421
Регистрация: 2-01-08
Пользователь №: 33 778



Пример из datasheet,
Код
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;
}
Go to the top of the page
 
+Quote Post
SysRq
сообщение Nov 9 2008, 14:32
Сообщение #3


Чайник, 1 литр
****

Группа: Свой
Сообщений: 655
Регистрация: 17-05-06
Из: Moscow
Пользователь №: 17 168



В datasheet'е на МК есть пример кода и на С, и на ассемблере.

amaora опередил wink.gif

Сообщение отредактировал SysRq - Nov 9 2008, 14:33
Go to the top of the page
 
+Quote Post
zi4rox
сообщение Nov 9 2008, 16:59
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 50
Регистрация: 4-04-08
Пользователь №: 36 480



Цитата(SysRq @ Nov 9 2008, 17:32) *
В datasheet'е на МК есть пример кода и на С, и на ассемблере.


Видел этот пример, но использовать не получилось. Там ещё написано: что нужно подключить специальный хеадер чтобы эти функции заюзались.

В CVAVR подключил mega16.h - но скомпилить все равно не получается.
Go to the top of the page
 
+Quote Post
SysRq
сообщение Nov 9 2008, 17:24
Сообщение #5


Чайник, 1 литр
****

Группа: Свой
Сообщений: 655
Регистрация: 17-05-06
Из: Moscow
Пользователь №: 17 168



WinAVR, ATMega16:
CODE
#include <avr\io.h>

#define DDR_SPI DDRB
#define DD_MISO PB6

void SPI_SlaveInit(void)
{
/* Set MISO output, all others input */
DDR_SPI = (1 << DD_MISO);
/* Enable SPI */
SPCR = (1 << SPE);
}

unsigned char SPI_SlaveReceive(void)
{
/* Wait for reception complete */
while(!(SPSR & (1 << SPIF)))
;
/* Return data register */
return SPDR;
}

#define CMD1 0xC0
#define CMD2 0xC1
#define CMD3 0xC2
#define CMD4 0xC3

int main(void)
{
SPI_SlaveInit();

for(;;)
{
switch(SPI_SlaveReceive())
{
case CMD1:
break;
case CMD2:
break;
case CMD3:
break;
case CMD4:
break;
default:
// cmd unknown
break;
}
}

return 0;
}

Go to the top of the page
 
+Quote Post
dimadima
сообщение Dec 2 2008, 07:51
Сообщение #6





Группа: Новичок
Сообщений: 1
Регистрация: 26-04-08
Пользователь №: 37 108



я делал цветной светодиодный экран. И я управлял МК через lpt порт и скорость до 800 Кб/с



через lpt порт передаешь как тебе угодно сам пишешь правила передачи. я делал ведомый МК и ПК делал полная свобода!!!
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 15:25
Рейтинг@Mail.ru


Страница сгенерированна за 0.0139 секунд с 7
ELECTRONIX ©2004-2016