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

 
 
> Управление мегой от ПК (через SPI)
zi4rox
сообщение Apr 6 2009, 16:38
Сообщение #1


Участник
*

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



Как управлять ATMega с компьютера, средствами SPI ?

Необходимо твердо в этом вопросе разобраться и для себя уяснить что и как. Поэтому поставил себе следующие условия простой задачи:

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

Схема к данной задачи:


После моих проб, ошибок и советов добрых людей получилось 2 реализации:
* Программирую в CodeVisionAVR

1. С использованием примера из даташита atmega16 (стр. 132)

Код
#include <mega16.h>

#define DDR_SPI DDRB
#define DD_MISO PORTB.6


// Управляющие коды, которые могут быть переданы
#define CMD1 0x01
#define CMD2 0x02
#define CMD3 0x03
#define CMD4 0x04

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;
}

void main (void){
SPI_SlaveInit();
DDRA = 0xFF; // сделали порт A выходом


while (1){

// анализируем полученный ответ
switch(SPI_SlaveReceive())
{
case CMD1:
PORTA = 0x01;
break;
case CMD2:
PORTA = 0x01;
break;
case CMD3:
PORTA = 0x03;
break;
case CMD4:
PORTA = 0x04;
break;
default:
PORTA = 0xFF;
break;
}

};
}


2. С использованием стандартных функций в spi.h (а также codewizard'а в cvavr):

Код
#include <mega16.h>
#include <spi.h>


// Управляющие коды, которые могут быть переданы
#define CMD1 0x01
#define CMD2 0x02
#define CMD3 0x03
#define CMD4 0x04

unsigned char read;

void main (void){

// инициализируем порты
PORTB=0x00;
DDRB=0x40; //тут SPI порт
PORTF=0x00;
DDRF=0xFF;

// инициализируем SPI
SPCR=0x40;
SPSR=0x00;

while (1){

read = spi(0x00);
/* [b]вот здесь мне непонятно что писать в качестве аргумента spi()? [без аргумента выдает ошибку]. [/b]*/

switch(read)
{
    case CMD1:
        PORTA = 0x01;
        break;
    case CMD2:
        PORTA = 0x02;
        break;
    case CMD3:
        PORTA = 0x03;
        break;
    case CMD4:
        PORTA = 0x04;
        break;
    default:
        PORTA = 0xFF;
        break;
}
         };
}


Проблема в том, что оба этих варианта не работают, и цели поставленной задачи достичь не удалось :cry:

Прошу помочь, натолкнуть в сторону где можно найти ошибку.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- zi4rox   Управление мегой от ПК (через SPI)   Apr 6 2009, 16:38
- - SysRq   (стёр, ибо поиском наешл сообщения автора и посмот...   Apr 6 2009, 17:54
- - zi4rox   С компа, самописной программкой. В ней не сомневаю...   Apr 6 2009, 18:00
|- - SysRq   Цитата(zi4rox @ Apr 6 2009, 22:00) В ней ...   Apr 6 2009, 18:37
|- - Genadi Zawidowski   Цитата(SysRq @ Apr 6 2009, 22:37) Если AV...   Apr 7 2009, 18:09
|- - SysRq   Цитата(Genadi Zawidowski @ Apr 7 2009, 22...   Apr 7 2009, 18:38
- - andrikk   последовательно сигналам - резисторы Ом по 100, дл...   Apr 6 2009, 19:34
- - =GM=   Цитата(zi4rox @ Apr 6 2009, 15:38) Пробле...   Apr 7 2009, 16:12
|- - zi4rox   Цитата(=GM= @ Apr 7 2009, 20:12) попробуй...   Apr 19 2009, 08:08
- - SasaVitebsk   Только что сделал бут ч/з SPI на базе ByteBlaster....   Apr 19 2009, 14:25
- - zi4rox   Отписал Вам в личное сообщение, но не уверен, что ...   Apr 19 2009, 15:20
- - SasaVitebsk   Дело в том, что mega работает в режиме slaveSPI. В...   Apr 19 2009, 16:54
- - sigmaN   Я, конечно, мегу никогда не кодил, но как-то стран...   Apr 19 2009, 16:59
- - zi4rox   2SasaVitebsk Спасибо, за столь развернутый пост. ...   Apr 19 2009, 17:08
- - andrikk   инициализация Кодvoid spi_init(void) { v...   Apr 20 2009, 11:54
- - zi4rox   Всё вроде делаю правильно, а нужного результата не...   Apr 20 2009, 14:39
- - SasaVitebsk   Тем не менее у вас всё абсолютно правильно. Инициа...   Apr 20 2009, 16:30
- - zi4rox   Да, я SS посадил на землю - без этого даже кривая ...   Apr 20 2009, 17:12
- - SasaVitebsk   Блин просмотрел. У вас ошибка в голове. Надо так ...   Apr 20 2009, 17:55
|- - zi4rox   Цитата(SasaVitebsk @ Apr 20 2009, 21:55) ...   Apr 20 2009, 18:32
- - SysRq   Питается от чего оно у вас? Фильтры по питанию сто...   Apr 20 2009, 17:57
- - andrikk   попробуйте использовать 4094 (8–STAGE SHIFT-AND-ST...   Apr 20 2009, 19:03
- - SasaVitebsk   Да не может быть никаких затыков. Это не медицина....   Apr 20 2009, 19:31


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

 


RSS Текстовая версия Сейчас: 20th July 2025 - 12:12
Рейтинг@Mail.ru


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