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

 
 
 
Reply to this topicStart new topic
> Обмен по SPI, ad5302
Hellper
сообщение Mar 27 2009, 10:57
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 217
Регистрация: 13-08-07
Из: Санкт-Петербург
Пользователь №: 29 745



Периодически получается и напряжение изменяется, но чаще обмен не происходит.

Инициализация SPI:
Код
void init_spi(void)
{
    SPCR = (0 << SPIE)|(1 << SPE)|(0 << DORD)|(1 << MSTR)|(0 << CPOL)|(1 << CPHA)|(1 << SPR1)|(1 << SPR0);
    SPSR=0x00;
}

Ф. пересылки:
Код
#define CLEARBIT(ADDRESS,BIT) (ADDRESS &= ~(1<<BIT))
#define SETBIT(ADDRESS,BIT) (ADDRESS |= (1<<BIT))

void spi_master_transmit(uint8_t data)
{
    transfer = false;
    SPDR = data;
    while(!(SPSR & (1<<SPIF)))
;
}

void change_one(uint8_t value)
{
    uint8_t tmp1 = 0;
    uint8_t tmp2 = 0;
    CLEARBIT(PORT_SYNC, PIN_SYNC);
    tmp1 += (value >> 4);
    tmp2 = (value << 4);
    spi_master_transmit(tmp1);
    spi_master_transmit(tmp2);
    SETBIT(PORT_SYNC, PIN_SYNC);
}


помогите, а ?
Прикрепленные файлы
Прикрепленный файл  ad5302.pdf ( 207.89 килобайт ) Кол-во скачиваний: 27
 


--------------------
Go to the top of the page
 
+Quote Post
Палыч
сообщение Mar 27 2009, 11:12
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Коль работаете с устройством по готовности, то извольте самостоятельно сбрасывать бит окончания обмена (SPIF).
Go to the top of the page
 
+Quote Post
DpInRock
сообщение Mar 27 2009, 11:17
Сообщение #3


Гуру
******

Группа: Участник
Сообщений: 2 254
Регистрация: 4-05-07
Из: Moscow
Пользователь №: 27 515



А где ldac?


--------------------
On the road again (Canned Heat)
Go to the top of the page
 
+Quote Post
Hellper
сообщение Mar 27 2009, 11:47
Сообщение #4


Местный
***

Группа: Участник
Сообщений: 217
Регистрация: 13-08-07
Из: Санкт-Петербург
Пользователь №: 29 745



LDAC, вроде, нужен для установки одновременно значений на выходе.
он у меня в высокоимпедансном состоянии.
сброс осуществляется установкой значения в регистре ?
SETBIT(SPSR, SPIF); ???


--------------------
Go to the top of the page
 
+Quote Post
Палыч
сообщение Mar 27 2009, 11:51
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(Hellper @ Mar 27 2009, 14:47) *
сброс осуществляется установкой значения в регистре ?
SETBIT(SPSR, SPIF); ???
Да, сброс - записью единицы в бит

PS. Поторопился с ответом... Для бита SPIF читаем в DS
Цитата
SPIF is cleared by hardware when executing the corresponding interrupt handling vector. Alternatively, the SPIF bit is cleared by first reading the SPI Status Register with SPIF set, then accessing the SPI Data Register (SPDR).
Go to the top of the page
 
+Quote Post
Hellper
сообщение Mar 27 2009, 11:54
Сообщение #6


Местный
***

Группа: Участник
Сообщений: 217
Регистрация: 13-08-07
Из: Санкт-Петербург
Пользователь №: 29 745



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


--------------------
Go to the top of the page
 
+Quote Post
SysRq
сообщение Mar 27 2009, 16:21
Сообщение #7


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

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



А где установка ног SS, MOSI, SCK на выход?
Программатор не на SPI интерфейсе висит случайно? Мешать будет.
Go to the top of the page
 
+Quote Post
Hellper
сообщение Mar 29 2009, 08:46
Сообщение #8


Местный
***

Группа: Участник
Сообщений: 217
Регистрация: 13-08-07
Из: Санкт-Петербург
Пользователь №: 29 745



установка ног есть:

Код
SETBIT(DDR_SCLK, PIN_SCLK);
SETBIT(PORT_SCLK, PIN_SCLK);

SETBIT(DDR_MOSI, PIN_MOSI);
SETBIT(PORT_MOSI, PIN_MOSI);

SETBIT(DDR_SYNC, PIN_SYNC);
SETBIT(PORT_SYNC, PIN_SYNC);


программирование через SPI, но программатор отключаю физически.


--------------------
Go to the top of the page
 
+Quote Post
Diusha
сообщение Mar 30 2009, 02:49
Сообщение #9


Вечный студент
****

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



Цитата(Hellper @ Mar 27 2009, 14:47) *
LDAC, вроде, нужен для установки одновременно значений на выходе.
он у меня в высокоимпедансном состоянии.

Цитата(ANALOG DEVICES)
When LDAC is high, the DAC register is latched and the input
register may change state without affecting the contents of the
DAC register. However, when LDAC is brought low, the DAC
register becomes transparent and the contents of the input regis-
ter are transferred to it.

LDAC - на землю!
Go to the top of the page
 
+Quote Post
Hellper
сообщение Apr 14 2009, 11:29
Сообщение #10


Местный
***

Группа: Участник
Сообщений: 217
Регистрация: 13-08-07
Из: Санкт-Петербург
Пользователь №: 29 745



Цитата(Diusha @ Mar 30 2009, 06:49) *
LDAC - на землю!


rolleyes.gif

спасибо


--------------------
Go to the top of the page
 
+Quote Post

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

 


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


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