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

 
 
> Настройка SI4432
antonioPROX
сообщение Nov 3 2013, 10:41
Сообщение #1





Группа: Новичок
Сообщений: 2
Регистрация: 23-08-13
Пользователь №: 78 033



Уважаемые знатоки, начинаю работать с SI4432 собрал схему в соответствии с AN415 (FIFO) подключил к Atmega8535 по SPI.
Проблема в том что не чего не могу читать не какой регистр сплошные 00000… и FFF ….
Одного не могу понять у Atmega8535 3 режима SPI какой надо вставить для того что бы он работал с SI4432.
При подаче питание на SI4432 на GPIO генерируется 32 кГц.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 2)
DASM
сообщение Nov 5 2013, 16:03
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 3 644
Регистрация: 28-05-05
Пользователь №: 5 493



Я всегда начинаю с софтового spi и вам советую, там 5 строк кода. Иногда и на хардовый не перехожу, если скорость позволяет — лень читать все эти регистры настроек в даташите.
Go to the top of the page
 
+Quote Post
alexf
сообщение Nov 5 2013, 22:21
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 420
Регистрация: 22-12-04
Пользователь №: 1 608



Я пользуюсь atmega16u2 для разговора с SI4432. Как видите mode 0 и все прекрасно работает.

Код такой:


void SPI_MasterInit(void)
{

UBRR1 = 0;
/* Set MOSI and SCK output, all others input */
DDRB = (1<<MOSI)|(1<<SCK)|(1<<SS);
PORTB |= (1<<SS);

/* Enable SPI, Master, set clock rate fck/16 */
SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR0);

/* Set MSPI mode of operation and SPI data mode 0. */
//UCSR1C = (1<<UMSEL11)|(1<<UMSEL10)|(0<<UCPOL1);
/* Enable receiver and transmitter. */
//UCSR1B = (1<<RXEN1)|(1<<TXEN1);
//UBRR1 = 3; // rate

}

uint8_t SPI_MasterTransmit(uint8_t cData)
{
/* Wait for empty transmit buffer */
//while( !( UCSR1A & (1<<UDRE1)) );
/* Start transmission */
SPDR = cData;
while( !(SPSR & (1<<SPIF)) );
/* Get and return received data from buffer */
return SPDR;
}

uint8_t WriteReg(uint8_t reg_addr, uint8_t reg_val){
uint8_t r;

PORTB &=0xFE; // SPI CS low
r = SPI_MasterTransmit(reg_addr);
r = SPI_MasterTransmit(reg_val);
PORTB |= 1; // SPI CS high
return r;
}

uint8_t ReadReg(uint8_t reg_addr){

uint8_t r;

PORTB &=0xFE; // SPI CS low
SPI_MasterTransmit(reg_addr);
r = SPI_MasterTransmit(0xff);
PORTB |= 1; // SPI CS high
return r;

}

void BurstWrite(uint8_t *DataArray){
uint8_t i;
uint8_t n;

n = ser_packet_len - 2; // minus type and addr

PORTB &=0xFE; // SPI CS low
SPI_MasterTransmit(DataArray[1]);//start address
for(i=0; i<n; i++)
SPI_MasterTransmit(DataArray[2+i]);
PORTB |= 1; // SPI CS high

}

void BurstRead(uint8_t start_addr, uint8_t n){
uint8_t i;
if(n > 64)
return;
PORTB &=0xFE; // SPI CS low
SPI_MasterTransmit(start_addr); //start address
for(i=0; i<n; i++)
OutputData[i] = SPI_MasterTransmit(0xff);
PORTB |= 1; // SPI CS high

}

Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 06:15
Рейтинг@Mail.ru


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