У меня по невнимательности осталось две подпрограммы в основной функции. Одна с поллингом, вторая по инту... приемник 2 байта ловил и его та что с поллингом опрашивала и заново заряжала на прием...
Сейчас уже не скажу та-ли инициализация или нет.. щас минут через 10 кину последнюю рабочую иициализацию для обоих модулей.
и инты работают(вы точно на той что нужно ноге смотрите??)))
При работе с интом я (как и всегда) поставил срабатывание по срезу,но иногда (не понял почему) возникала ситуация когда в обработчике возникал еще один запрос, который ес-но я неловил уже и линия инта ложилась в ноль...
я кварцевый генератор не останавливал(кажется) только усилитель мощности.
я так понял кварц нужно тормозить в случае пользования wakeup (кажется так пишется), тогда он и проснется и проз может разбудить
передатчик:
Код
SendWordRF(0x0000);
SendWordRF(0xC0E0);
SendWordRF(0x8B83);//(0x8B61) 433BAND,+-90(ïî ìîåìó 60)kHz, 2MHzOut 0x8B67 dF=210kHz
SendWordRF(0xC2A0);//enable bit sync //
SendWordRF(0xA640);//434MHz
SendWordRF(0xB000);
SendWordRF(0x8B83);//(0x8B61) 433BAND,+-90(ïî ìîåìó 60)kHz, 2MHzOut 0x8B67 dF=210kHz
SendWordRF(0xCC00);//Status Register read command - clear last service interrupt...
SendWordRF(0xD2C0);//max DataRate 19.2
SendWordRF(0xC800|((344828UL/19200)-1));//4.8kbps
//SendWordRF(0xC001);//CLOSE ALL
MCUCR &= 0xF0;
MCUCR |= (1<<ISC01)|(0<<ISC00);
GICR = (1<<INT0);
сами расшифруйте по даташиту(коментарии могут быть неверными)
приемник:
SendWordRF(0x0000);
SendWordRF(0xA000 | (unsigned int)(((434-430)/0.0025)));//434MHz
SendWordRF(0x8978);//898A - 433BAND,167kHz; 898C - 67kHz 0x8978-200kHz
SendWordRF(0xC800|((344828UL/19200)-1));//19200
SendWordRF(0xC6F7);//AFC setting
SendWordRF(0xC42A);//autolock-off, slowmode,,Digital filter,DQD=3
SendWordRF(0xC260);//output 2MHz
SendWordRF(0xC008);
SendWordRF(0xCE88);//use FIFO
SendWordRF(0xCE8B);
SendWordRF(0xC009);//OPEN RX
MCUCR &= 0xF0;
MCUCR |= (1<<ISC01)|(0<<ISC00);
GICR = (1<<INT0);
тестовый инт передатчика
if (BufferTX.FlagTX == 0)return;
if (BufferTX.BitPoint == 0)
{
if (BufferTX.BytePoint != 0)
{
BufferTX.BytePoint--;
BufferTX.BitPoint = 7;
if ((BufferTX.DataBufer[BufferTX.BytePoint]) & (1<<(BufferTX.BitPoint)))
PORT_FSK = 1;
else
PORT_FSK = 0;
}
else
{//Stop transmit
SendWordRF(0xC001);
BufferTX.FlagTX = 0;
}
}
else
{
BufferTX.BitPoint--;
if ((BufferTX.DataBufer[BufferTX.BytePoint]) & (1<<(BufferTX.BitPoint)))
PORT_FSK = 1;
else
PORT_FSK = 0;
}
тестовый инт приемника:
static unsigned char OldNumber=0;
unsigned char Byte = ReadFIFO();
if ( BufferTX.BytePoint == 0)
{
if (Byte==0x55)
{
BufferTX.DataBufer[BufferTX.BytePoint] = Byte;
BufferTX.BytePoint = 1;
}
else
{
SendWordRF(0xCE88);//use FIFO
SendWordRF(0xCE8B);
}
}
else
{
BufferTX.DataBufer[BufferTX.BytePoint] = Byte;
BufferTX.BytePoint= (BufferTX.BytePoint+1)&0x0F;
if ((BufferTX.BytePoint) >=7)
{
Byte = BufferTX.DataBufer[1];
Byte = Byte ^ BufferTX.DataBufer[2];
Byte = Byte ^ BufferTX.DataBufer[3];
Byte = Byte ^ BufferTX.DataBufer[4];
Byte = Byte ^ BufferTX.DataBufer[5];
if(Byte == BufferTX.DataBufer[6])
{
if (OldNumber != BufferTX.DataBufer[2])
{
ExecutePacket.Volume= BufferTX.DataBufer[4];
ExecutePacket.Song= BufferTX.DataBufer[3];
ExecutePacket.Mode= BufferTX.DataBufer[5];
ExecutePacket.Flag = 1;
}
OldNumber = BufferTX.DataBufer[2];
}
BufferTX.BytePoint = 0;
RFTimer = 0xF001;
SendWordRF(0xCE88);//use FIFO
SendWordRF(0xCE8B);
}
}
MCUCR |=((1<<ISC01)|(0<<ISC00));
PORTC &= ~0x80;
Сообщение отредактировал Григорий2000 - Mar 5 2009, 22:16