Помогите пожалуйста мне с радиомодулем, который в отрез не хочет работать как написано в даташите.
Например, если в доке написанно, что если дать команду 0x04, то звук должен убавиться, а он наоборот на всю катушку, и так со всеми регистрами управления.
Может быть, я что-то делаю не так?
Код: Выделить всё
void init_radio_mod(void)
{
DDRB_RF |= (1 << STB_PIN) | (1 << DATA_PIN) | (1 << CLK_PIN); // Инициализация портов
}
void send_com_rf(unsigned char data_hi, unsigned char data_mid, unsigned char data_low)
{
unsigned char bit;
CLR(PORT_RF, STB_PIN); // STB_PIN - Low
CLR(PORT_RF, CLK_PIN); // CLK_PIN - Low
CLR(PORT_RF, DATA_PIN); // CLK_PIN - Low
for (bit = 0; bit < 8; bit++)
{
if(data_hi & 0x80)
SET(PORT_RF, DATA_PIN); // DATA_PIN - High
else
CLR(PORT_RF, DATA_PIN); // DATA_PIN - Low
data_hi <<= 1; // Сдвинуть data_hi на 1 позицию в лево
_delay_us(2);
SET(PORT_RF, CLK_PIN); // CLK_PIN - High
_delay_us(2);
CLR(PORT_RF, CLK_PIN); // CLK_PIN - Low
_delay_us(3);
}
for (bit = 0; bit < 8; bit++)
{
if(data_mid & 0x80)
SET(PORT_RF, DATA_PIN); // DATA_PIN - High
else
CLR(PORT_RF, DATA_PIN); // DATA_PIN - Low
data_mid <<= 1; // Сдвинуть data_mid на 1 позицию в лево
_delay_us(2);
SET(PORT_RF, CLK_PIN); // CLK_PIN - High
_delay_us(2);
CLR(PORT_RF, CLK_PIN); // CLK_PIN - Low
_delay_us(3);
}
for (bit = 0; bit < 2; bit++)
{
if(data_low & 0x02)
SET(PORT_RF, DATA_PIN); // DATA_PIN - High
else
CLR(PORT_RF, DATA_PIN); // DATA_PIN - Low
data_low <<= 1; // Сдвинуть data_low на 1 позицию в лево
_delay_us(2);
SET(PORT_RF, CLK_PIN); // CLK_PIN - High
_delay_us(2);
if(bit < 1)
{
CLR(PORT_RF, CLK_PIN); // CLK_PIN - Low
_delay_us(3);
}
}
CLR(PORT_RF, DATA_PIN); // DATA_PIN - Low
_delay_us(2);
SET(PORT_RF, STB_PIN); // STB_PIN - High
_delay_us(2);
CLR(PORT_RF, STB_PIN); // STB_PIN - Low
_delay_us(2);
CLR(PORT_RF, CLK_PIN); // CLK_PIN - Low
}
void send_com_ref(unsigned char data_hi, unsigned char data_low)
{
unsigned char bit;
CLR(PORT_RF, STB_PIN); // STB_PIN - Low
CLR(PORT_RF, CLK_PIN); // CLK_PIN - Low
CLR(PORT_RF, DATA_PIN); // CLK_PIN - Low
for (bit = 0; bit < 8; bit++)
{
if(data_hi & 0x80)
SET(PORT_RF, DATA_PIN); // DATA_PIN - High
else
CLR(PORT_RF, DATA_PIN); // DATA_PIN - Low
_delay_us(2);
SET(PORT_RF, CLK_PIN); // CLK_PIN - High
data_hi <<= 1; // Сдвинуть data_hi на 1 позицию в лево
_delay_us(2);
CLR(PORT_RF, CLK_PIN); // CLK_PIN - Low
_delay_us(3);
}
for (bit = 0; bit < 4; bit++)
{
if(data_low & 0x08)
SET(PORT_RF, DATA_PIN); // DATA_PIN - High
else
CLR(PORT_RF, DATA_PIN); // DATA_PIN - Low
_delay_us(2);
SET(PORT_RF, CLK_PIN); // CLK_PIN - High
data_low <<= 1; // Сдвинуть data_low на 1 позицию в лево
_delay_us(2);
if(bit < 3)
{
CLR(PORT_RF, CLK_PIN); // CLK_PIN - Low
_delay_us(3);
}
}
CLR(PORT_RF, DATA_PIN); // DATA_PIN - Low
_delay_us(2);
SET(PORT_RF, STB_PIN); // STB_PIN - High
_delay_us(2);
CLR(PORT_RF, STB_PIN); // STB_PIN - Low
_delay_us(2);
CLR(PORT_RF, CLK_PIN); // CLK_PIN - Low
}
void send_com_vol(unsigned char data)
{
unsigned char bit;
CLR(PORT_RF, STB_PIN); // STB_PIN - Low
CLR(PORT_RF, DATA_PIN); // CLK_PIN - Low
CLR(PORT_RF, CLK_PIN); // STB_PIN - Low
for(bit = 0; bit < 8; bit++)
{
if(data & 0x80)
SET(PORT_RF, DATA_PIN); // DATA_PIN - High
else
CLR(PORT_RF, DATA_PIN); // DATA_PIN - Low
data <<= 1; // Сдвинуть data на 1 позицию в лево
_delay_us(2);
SET(PORT_RF, CLK_PIN); // CLK_PIN - High
_delay_us(2);
if(bit < 7)
{
CLR(PORT_RF, CLK_PIN); // CLK_PIN - Low
_delay_us(3);
}
}
_delay_us(2);
SET(PORT_RF, STB_PIN); // STB_PIN - High
_delay_us(2);
CLR(PORT_RF, STB_PIN); // STB_PIN - Low
_delay_us(2);
CLR(PORT_RF, CLK_PIN); // CLK_PIN - Low
}