Перейти к содержанию

STM32, подключение потенциометра AD5263 по SPI


Sechih7

Рекомендуемые сообщения

          Здравствуйте, хочу впаять АУКС в магнитолу CD. Кассетные переделываются легко(замыкаются нужные концевики чтобы магнитофон думал что работает кассета, а на предусилитель кидаем линии aux, и специальную ножку мк подтягиваем к лог 1 или 0). А вот с мафоном CD все сложно, линии аукс включаются по цифровому протоколу, и с CD сигнал передается по SPI, что тоже вызывает сложность в переделке. Было решено обойти сам предусилитель магнитолы, а именно с помощью реле переключить линии основного усилителя на заказанный модуль USB-Bluetooth-MP3 из Китая. Также была разведена и изготовлена печатная плата с универсальными входами и выходами и реле. Управление платой осуществляю с помощью родной кнопки достать диск и при ее нажатии переключается управления родного энкодера. Оставалась сложность с регулировкой звука, решил попробовать цифровой потенциометр, и просто им подтягивать сигнал к земле(не знаю на сколько это правильно). Все алгоритмы реализовал, треки переключает, в память сохраняет. Но вот уже 2 день сижу и пытаюсь крутить цифровой потенциометр AD5263. Посмотрите пожалуйста, что я не так делаю? Питание логики у него разрешено 3V3, далее везде 5V. Подтянул res, shdn к +5V. Отправка по SPI 10bit, старших 2 адрес. Только не понятно нужно ли дергать ножку CS после каждых 10bit, или же можно отправить 4 по 10bit и потом дернуть CS чтобы данные потенциометре внеслись в регистр (стр.28)?

Схема подключения: https://cloud.mail.ru/public/BQ7p/biynVUh2V

Даташит AD5263: https://cloud.mail.ru/public/ihyh/sJzPohn2f
Инициализировал SPI

uint16_t spi_data;
void Init_SPI(void){
      //SPI1
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
   GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;
   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
   GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_NOPULL;
   GPIO_Init(GPIOA, &GPIO_InitStructure);
   //подключение портов
   //GPIO_PinAFConfig(GPIOA, GPIO_PinSource4, GPIO_AF_0);//NSS
   GPIO_PinAFConfig(GPIOA, GPIO_PinSource5, GPIO_AF_0);//SCK   
   GPIO_PinAFConfig(GPIOA, GPIO_PinSource6, GPIO_AF_0);//MISO
   GPIO_PinAFConfig(GPIOA, GPIO_PinSource7, GPIO_AF_0);//MOSI
   
   CLEAR_BIT(SPI1->CR1, SPI_CR1_BIDIMODE); //0: 2-line unidirectional data mode selected
   SET_BIT(SPI1->CR1, SPI_CR1_BIDIOE);//1: Output enabled (transmit-only mode)
   CLEAR_BIT(SPI1->CR1, SPI_CR1_CRCEN | SPI_CR1_CRCNEXT | SPI_CR1_CRCNEXT | SPI_CR1_CRCL);//0: CRC calculation disabled | 0: Next transmit value is from Tx buffer | 0: 8-bit CRC length
   CLEAR_BIT(SPI1->CR1, SPI_CR1_RXONLY);//0: Full-duplex (Transmit and receive)
   SET_BIT(SPI1->CR1, SPI_CR1_SSM);//1: Software slave management enabled
    SET_BIT(SPI1->CR1, SPI_CR1_SSI);////SS в высоком состоянии
    CLEAR_BIT(SPI1->CR1, SPI_CR1_LSBFIRST);//0: data is transmitted/received with the MSB first // Первым отправляется старший бит
   MODIFY_REG(SPI1->CR1, SPI_CR1_BR , SPI_CR1_BR_2 | SPI_CR1_BR_0);//011: fPCLK/16
    SET_BIT(SPI1->CR1, SPI_CR1_MSTR);//1: Master configuration
   CLEAR_BIT(SPI1->CR1, SPI_CR1_CPOL);//0: CK to 0 when idle **** 1: CK to 1 when idle
   CLEAR_BIT(SPI1->CR1, SPI_CR1_CPHA);//0: The first clock transition is the first data capture edge ***** 1: The second clock transition is the first data capture ed
 
    SET_BIT(SPI1->CR2, SPI_CR2_TXDMAEN);//1: Tx buffer DMA enabled
    CLEAR_BIT(SPI1->CR2, SPI_CR2_RXDMAEN);//0: Rx buffer DMA disabled
    CLEAR_BIT(SPI1->CR2, SPI_CR2_SSOE);//0: SS output is disabled in master mode and the SPI interface can work in multimaster configuration
    CLEAR_BIT(SPI1->CR2, SPI_CR2_NSSP);//0: No NSS pulse
    CLEAR_BIT(SPI1->CR2, SPI_CR2_FRF);//0: SPI Motorola mode **** 1 SPI TI mode
    CLEAR_BIT(SPI1->CR2, SPI_CR2_ERRIE | SPI_CR2_RXNEIE | SPI_CR2_TXEIE); //0: Error interrupt is masked | 0: RXNE interrupt masked | 0: TXE interrupt masked
    MODIFY_REG(SPI1->CR2, SPI_CR2_DS, SPI_CR2_DS_3 | SPI_CR2_DS_0);//1001: 10-bit
    CLEAR_BIT(SPI1->CR2, SPI_CR2_FRXTH | SPI_CR2_LDMARX | SPI_CR2_LDMATX);//Last DMA transfer for reception/transmission
   SET_BIT(SPI1->CR1, SPI_CR1_SPE);//SPI enable// 1: Peripheral enabled      
}

void start_SPI(uint8_t num){ //количество слов
   DMA_Cmd(DMA1_Channel3, DISABLE);//выкл для установки CNDTR
    DMA1_Channel3->CNDTR = num;
    SPI1_CS_ON();
   DMA_Cmd(DMA1_Channel3, ENABLE);
}

void set_SPI_Tx(uint8_t adr, uint16_t Data)
{
   SPI1_TX_buff[adr] = Data;
}

DMA

uint16_t SPI1_TX_buff[4];

void SPI_DMA_Init(void){
   //TX
    DMA1_Channel3->CPAR = (uint32_t)(&SPI1->DR);
    DMA1_Channel3->CMAR = (uint32_t)(SPI1_TX_buff);
    DMA1_Channel3->CNDTR = 0;
    CLEAR_BIT(DMA1_Channel3->CCR, DMA_CCR_MEM2MEM);
    CLEAR_BIT(DMA1_Channel3->CCR, DMA_CCR_PL);   //Channel priority level 00:low
    MODIFY_REG(DMA1_Channel3->CCR, DMA_CCR_MSIZE, DMA_CCR_MSIZE_0);//01: 16-bits
    MODIFY_REG(DMA1_Channel3->CCR, DMA_CCR_PSIZE, DMA_CCR_PSIZE_0);//01: 16-bits
    SET_BIT(DMA1_Channel3->CCR, DMA_CCR_MINC);//1: Memory increment mode enabled
    CLEAR_BIT(DMA1_Channel3->CCR, DMA_CCR_PINC);//0: Peripheral increment mode disabled
    CLEAR_BIT(DMA1_Channel3->CCR, DMA_CCR_CIRC);//0: Circular mode disabled
    SET_BIT(DMA1_Channel3->CCR, DMA_CCR_DIR);//1: Read from memory
    CLEAR_BIT(DMA1_Channel3->CCR, DMA_CCR_TCIE | DMA_CCR_HTIE | DMA_CCR_TCIE);//Transfer error interrupt disable | Half transfer interrupt disable | Transfer complete interrupt disable
    SET_BIT(DMA1_Channel3->CCR, DMA_CCR_EN);   
}

В таймере собираю и отправляю в потенциометр, также выключаю CS

   if(vol_level.send_flag_for_spi){//флаг отправки по SPI если выставлен, отправляем в потенциометр
   vol_level.send_flag_for_spi = OFF;
   set_SPI_Tx(0, vol_level.pot_1);
   set_SPI_Tx(1, (0x100 + vol_level.pot_2));
   set_SPI_Tx(2, (0x200 + vol_level.pot_3));
  set_SPI_Tx(3, (0x300 + vol_level.pot_4));
   start_SPI(4);
}else   
SPI1_CS_OFF();

 

Снимок.JPG

Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

27 минут назад, Sechih7 сказал:

Только не понятно нужно ли дергать ножку CS после каждых 10bit, или же можно отправить 4 по 10bit и потом дернуть CS чтобы данные потенциометре внеслись в регистр

Если один чип то после 10b, если у вас последовательная связка то после 40b. Это защелка .

При отправке CS в нижнем уровне

Ссылка на комментарий
Поделиться на другие сайты

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Да, CS в нижнем уровне, только я переключал его после отправки 4 полуслов, счас исправлю, спасибо.

#define SPI1_CS_ON() GPIO_RESET_BIT(GPIOA, GPIO_Pin_4); 
#define SPI1_CS_OFF() GPIO_SET_BIT(GPIOA, GPIO_Pin_4); 
Ссылка на комментарий
Поделиться на другие сайты

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...