witam,
mam problem z komunikacją na mikrokontrolerach motoroli (hc908qb8). Stosuję układy RF12b na częstotliwości 868MHz. Siedzę już nad tym kolejny dzień i zupełnie nie mam pomysłu co może być źle. Przeczytałem wszystko na temat tych modułów tu a forum oraz to co znalazłem na sieci. Moduły nadal nie chcą się komunikować. Zasilane są z 5V, na oscyloskopie wygląda że nadajnik wszystkie sygnały otrzymuje i wystawia prawidłowo, na analizatorze widma również wygląda jakby nadawał (poza prążkiem nośnej skaczą sobie inne prążki po bokach). Odbiornik nie odbiera nic - na oscyloskopie sygnały wyglądają ok, ale wygląda na to że bufor jest cały czas pusty. Może macie jakiś pomysł co z tym zrobić? Poniżej kod programów.
z góry dziękuję za każdą pomoc
mam problem z komunikacją na mikrokontrolerach motoroli (hc908qb8). Stosuję układy RF12b na częstotliwości 868MHz. Siedzę już nad tym kolejny dzień i zupełnie nie mam pomysłu co może być źle. Przeczytałem wszystko na temat tych modułów tu a forum oraz to co znalazłem na sieci. Moduły nadal nie chcą się komunikować. Zasilane są z 5V, na oscyloskopie wygląda że nadajnik wszystkie sygnały otrzymuje i wystawia prawidłowo, na analizatorze widma również wygląda jakby nadawał (poza prążkiem nośnej skaczą sobie inne prążki po bokach). Odbiornik nie odbiera nic - na oscyloskopie sygnały wyglądają ok, ale wygląda na to że bufor jest cały czas pusty. Może macie jakiś pomysł co z tym zrobić? Poniżej kod programów.
Cytat:
////////////////////////////////////////////////
// wspólne
///////////////////////////////////////////////
#define SCK 0
#define SDO 2
#define SDI 1
#define CS 0
#define NIRQ 2
#define HIB(x) PTB |= (1<<(x))
#define LOB(x) PTB &= ~(1<<(x))
#define HIA(x) PTA |= (1<<(x))
#define LOA(x) PTA &= ~(1<<(x))
#define WAIT_NIRQ_LOW() while(PTA&(1<<NIRQ))
/***************************************************/
unsigned int writeCmd(unsigned int cmd)
{
unsigned char i;
unsigned int recv;
recv = 0;
LOB(SCK);
LOA(CS);
for(i=0; i<16; i++)
{
if(cmd&0x8000) HIB(SDI);
else LOB(SDI);
HIB(SCK);
recv<<=1;
if( PTB&(1<<SDO) )
{
recv|=0x0001;
}
LOB(SCK);
cmd<<=1;
}
HIA(CS);
return recv;
}
/***************************************************/
void QB8Init(void){
/* general config */
CONFIG2 = 0x01; /*IRQ pull-up, IRQ dis, reset on pin en, osc dis in stop*/
CONFIG1 = 0x39; /*cop dis, lvi dis, long stop rcv, stop as illegal */
OSCSC = 0x42; /*external clock, enabling pin OSC1 as oscilator input*/
/* pins used in communication with rfm12b */
PTB_PTB1 = 1;
PTB_PTB0 = 0;
DDRB_DDRB1 = 1; /* sdi so it's output */
DDRB_DDRB0 = 1; /* sck so it's output */
DDRB_DDRB2 = 0; /* sdo so it's input */
DDRA_DDRA0 = 1; /*PTA0 as output - nSEL*/
PTA_PTA0 = 1;
DDRA_DDRA1 = 0; /*PTA1 as input*/
PTAPUE_PTAPUE1 = 1; //
TSC = 0x30; /*stop and reset counter*/
TSC0 = 0x48; /*channel 0 in IC mode, prescaler :1*/
TSC_TSTOP = 0; /*counter started*/
/* other pins */
PTAPUE_PTAPUE3 = 1; /*pull-up resistor on reset pin*/
/*****************************************************/
////////////////////////////////////////////////
// nadajnik
///////////////////////////////////////////////
/***************************************************/
void rfInit(void)
{
writeCmd(0x80E7); //EL,EF,868band,12.0pF
writeCmd(0x8239); //!er,!ebb,ET,ES,EX,!eb,!ew,DC
writeCmd(0xA640); //frequency select
writeCmd(0xC647); //4.8kbps
writeCmd(0x94A0); //VDI,FAST,134kHz,0dBm,-103dBm
writeCmd(0xC2AC); //AL,!ml,DIG,DQD4
writeCmd(0xCA81); //FIFO8,SYNC,!ff,DR
writeCmd(0xCED4); //SYNC=2DD4
writeCmd(0xC483); //@PWR,NO RSTRIC,!st,!fi,OE,EN
writeCmd(0x9850); //!mp,90kHz,MAX OUT
writeCmd(0xCC17); //OB1, COB0, LPX, Iddy, CDDIT?CBW0
writeCmd(0xE000); //NOT USED
writeCmd(0xC800); //NOT USED
writeCmd(0xC040); //1.66MHz,2.2V
}
/***************************************************/
void rfSend(unsigned char data)
{
WAIT_NIRQ_LOW();
writeCmd(0xB800 + data);
}
/***************************************************/
void main(void) {
volatile unsigned int i=0;
volatile unsigned int j = 0;
unsigned char ucTablicaHelp[16] = {
0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C,
0x4D, 0x4E, 0x4F
};
QB8Init();
rfInit();
for(i=0;i<1000;i++)for(j=0;j<123;j++);
for(;{
writeCmd(0x0000);
rfSend(0xAA);
rfSend(0xAA);
rfSend(0xAA);
rfSend(0x2D);
rfSend(0xD4);
for (i = 0; i < 16; i++){
rfSend(ucTablicaHelp[i]);
}
rfSend(0xAA);
rfSend(0xAA);
rfSend(0xAA);
for(i=0;i<1000;i++)for(j=0;j<123;j++);
}
}
////////////////////////////////////////////////
// odbiornik
///////////////////////////////////////////////
void FifoReset(void){
uiWriteCommand(0xCA81);
uiWriteCommand(0xCA83);
}
/***************************************************/
void RFInit(void){
uiWriteCommand(0x80E7); //EL,EF,868band,12.0pF
uiWriteCommand(0x8299); //er,!ebb,ET,ES,EX,!eb,!ew,DC
uiWriteCommand(0xA640); //freq select
uiWriteCommand(0xC647); //4.8kbps
uiWriteCommand(0x94A0); //VDI,FAST,134kHz,0dBm,-103dBm
uiWriteCommand(0xC2AC); //AL,!ml,DIG,DQD4
uiWriteCommand(0xCA81); //FIFO8,SYNC,!ff,DR
uiWriteCommand(0xCED4); //SYNC=2DD4;
uiWriteCommand(0xC483); //@PWR,NO RSTRIC,!st,!fi,OE,EN
uiWriteCommand(0x9850); //!mp,90kHz,MAX OUT
uiWriteCommand(0xCC17); //!OB1,!OB0, LPX,!ddy,DDIT,BW0 between 5 and 10MHZ
uiWriteCommand(0xE000); //NOT USE
uiWriteCommand(0xC800); //NOT USE
uiWriteCommand(0xC040); //1.66MHz,2.2V
}
/***************************************************/
unsigned char ucRFRecv(void){
unsigned int uiRecvData;
for(;{
uiRecvData = uiWriteCommand(0x0000);
if((uiRecvData & 0x8000)){
uiRecvData = uiWriteCommand(0xB000);
return(uiRecvData & 0x00FF);
}
}
}
/***************************************************/
void main(void) {
unsigned char ucDataCounter;
unsigned char ucData[16];
QB8Init();
RFInit();
FifoReset();
for(;{
for(ucDataCounter = 0;ucDataCounter < 16; ucDataCounter++){
ucData[ucDataCounter] = ucRFRecv();
}
FifoReset();
}
}
z góry dziękuję za każdą pomoc