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

 
 
> Mega8 и ЦАП по SPI, нужна помощь
Cpraum
сообщение Nov 5 2009, 10:18
Сообщение #1





Группа: Участник
Сообщений: 5
Регистрация: 5-11-09
Пользователь №: 53 425



Уверен, что для знающих людей - решить данную задачу можно за несколько минут.

Короче нужно соеденить Мегу с ЦАП по интерфейсу SPI.
Я в этом деле начинающий, уже много в чем разобрался, но вот это - никак не получаеться.

Если не сложно, набрасайте плиз код (желательно на C) и в идеале проект Proteus, ну или хотя бы описание какие ножки Меги с какими (в ЦАП) соеденить...

Заранее огромное спасибо!!!!
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
mempfis_
сообщение Nov 5 2009, 10:50
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 001
Регистрация: 27-06-06
Пользователь №: 18 409



Открываете в документации страницы посвящённые SPI - там готовый работающий код инициализации, отсылки и приёма байта по SPI.
Всё остальное зависит от вашего ЦАП название которого вы даже не потрудились привести.
Также вы не уточнили что конкретно не получается.

Сообщение отредактировал mempfis_ - Nov 5 2009, 10:51
Go to the top of the page
 
+Quote Post
Cpraum
сообщение Nov 6 2009, 15:29
Сообщение #3





Группа: Участник
Сообщений: 5
Регистрация: 5-11-09
Пользователь №: 53 425



Цитата(mempfis_ @ Nov 5 2009, 12:50) *
Открываете в документации страницы посвящённые SPI - там готовый работающий код инициализации, отсылки и приёма байта по SPI.
Всё остальное зависит от вашего ЦАП название которого вы даже не потрудились привести.
Также вы не уточнили что конкретно не получается.

Сори за безграмотность...

Хочу соеденить ATMega8 и MCP4821, хотя можно и любой другой DAC.
Для начало хочу задать вопрос: Как их соеденять (См. картинку)...
Вопрос второй: можно ли проверять SPI не подключая DAC, т.е. подключить только осцилограф...

А вот и код по инициализации и передачи по SPI, правельный ли он(Например я хочу передать на DAC байт 0x10101010)?
Код
#include <avr\io.h>
#define DD_MOSI     PINB3
#define DD_SCK     PINB5
#define DDR_SPI    PORTB
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)));
}
int main(void) {
SPI_MasterInit();
SPI_MasterTransmit(0x10101010);
   while(1) {
  
   }
}


Заранее огромное спасибо!
Причина редактирования: Оформление цитаты исходника.

Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
simer
сообщение Nov 11 2009, 21:53
Сообщение #4


Участник
*

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



Цитата(Cpraum @ Nov 6 2009, 17:29) *
#define DDR_SPI PORTB
...

// Set MOSI and SCK output, all others input
DDR_SPI = (1<<DD_MOSI)|(1<<DD_SCK);

...


PORTB - регистр для установки уровней на порту, а не режима вход-выход

правильнее так
Код
#define DDR_SPI    DDRB
Go to the top of the page
 
+Quote Post



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

 


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


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