Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Обмен по SPI
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > MCS51, AVR, PIC, STM8, 8bit
Hellper
Периодически получается и напряжение изменяется, но чаще обмен не происходит.

Инициализация 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);
}


помогите, а ?
Палыч
Коль работаете с устройством по готовности, то извольте самостоятельно сбрасывать бит окончания обмена (SPIF).
DpInRock
А где ldac?
Hellper
LDAC, вроде, нужен для установки одновременно значений на выходе.
он у меня в высокоимпедансном состоянии.
сброс осуществляется установкой значения в регистре ?
SETBIT(SPSR, SPIF); ???
Палыч
Цитата(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).
Hellper
все равно не пашет.
вернее получается такая ситуация:
после програмирования, иногда происходит установка значения напряжения, и даже иногда в правильное значение, но после нескольких отключений и включения общего питания какие-либо изменения прекращают происходить.
SysRq
А где установка ног SS, MOSI, SCK на выход?
Программатор не на SPI интерфейсе висит случайно? Мешать будет.
Hellper
установка ног есть:

Код
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, но программатор отключаю физически.
Diusha
Цитата(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 - на землю!
Hellper
Цитата(Diusha @ Mar 30 2009, 06:49) *
LDAC - на землю!


rolleyes.gif

спасибо
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.