На mega32 делал.
Тут основы протокола.
4 pin круглого разъёма от радио можно посадить на землю сразу - это режим Mute (0 - звук есть, 1 - заука нет)
Транзистор включения радио управляется контроллером. По ссылке ввыше есть схема. Вмсесто DTR подключаешь к ножке контоллера: 1 - включено, 0 - выключено.
Для черного радио (Directed) - нужна дополнительная посылка для включения заука (помимо 4-го pin'а).
После сигнала включения нужно подождать 3 секунды. После этого можно отправлять данные. В простеёшем случае можно даже не считывать приходящие ответы.
Отправка конкретной частоты в радио. Если какой-то байт, кроме первого, в отправке равен 0xA4, то он заменяется на 0x1B48
PHP код:
const unsigned char muteOff_blackRadio[ ] = {0xA4,0x08,0x03,0x04,0x00,0x00,0x4B,0x00,0x00,0x00,0xFE};
const unsigned char freq1[ ] = {0xA4, 0x10, 0x02, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00}; // before current freq
const unsigned char freq2[ ] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; // after current freq
const unsigned char getSignal[ ] = {0xA4, 0x05, 0x01, 0x01, 0x01, 0x00, 0xAC};
const uint8_t radio_CS = 0xB8;
void HDRadio_sendFreq(uint16_t curFreq) {
uint8_t current_CS; //current CheckSum
current_CS = radio_CS + GetLowByte(curFreq) + GetHighByte(curFreq);
for (uint8_t i = 0; i <= 9; i++) {
Serial_SendByte( freq1[i] );
}
if (GetLowByte(curFreq) == 0xA4) {
Serial_SendByte(0x1B);
Serial_SendByte(0x48);
} else {
Serial_SendByte(GetLowByte(curFreq));
}
if (GetHighByte(curFreq) == 0xA4) {
Serial_SendByte(0x1B);
Serial_SendByte(0x48);
} else {
Serial_SendByte(GetHighByte(curFreq));
}
for (uint8_t i = 0; i <= 5; i++) {
Serial_SendByte( freq2[i] );
}
if (GetLowByte(current_CS) == 0xA4) {
Serial_SendByte(0x1B);
Serial_SendByte(0x48);
} else {
Serial_SendByte(GetLowByte(current_CS));
}
}
|