Skocz do zawartości

Nie mogę nawiązać komunikacji z CC1100


jesik

Pomocna odpowiedź

Witam, pisze z następującym problemem nie mogę nawiązać komunikacji z cc1100 kiedy próbuje odczytać wartość jakiegoś rejestru dostaje same 0 co pewnie oznacza też że to co próbuje mu wpisać do niego też nie dochodzi.... Przy pisaniu programu posiłkuje się artykułem z elektroniki praktycznej 3/2008 gdzie opisali ten układ. W artykule przykłady pisane są pod Atiny, ja staram się go przerobić pod arduino(w moim przypadku pro mikro) program pisze w arduino IDE (co zresztą widać) oraz używam konwerterów poziomów logicznych.

Linki do artykułów:

http://ep.com.pl/files/2961.pdf

http://ep.com.pl/files/2998.pdf

http://ep.com.pl/files/3029.pdf

http://ep.com.pl/files/3039.pdf

// rejestry konfiguracyjne
#define IOCFG0      B00000010 //0x02;    //06    GDO0 Output Pin Configuration
#define PKTCTRL0    B00001000 //0x08;    //05    Packet Automation Control
#define FSCTRL1     B00001011 //0x0B;    //06    Frequency Synthesizer Control
#define FREQ2       B00001101 //0x0D;    //21    Frequency Control Word, High Byte
#define FREQ1       B00001110 //0x0E;    //62    Frequency Control Word, Middle Byte
#define FREQ0       B00001111 //0x0F;    //76    Frequency Control Word, Low Byte
#define MDMCFG4     B00010000 //0x10;    //F6    Modem Configuration
#define MDMCFG3     B00010001 //0x11;    //83    Modem Configuration
#define MDMCFG2     B00010010 //0x12;    //03    Modem Configuration
#define DEVIATN     B00010101 //0x15;    //15    Modem Deviation Setting
#define MCSM0       B00011000 //0x18;    //18    Main Radio Control State Machine Configuration
#define FOCCFG      B00011001 //0x19;    //16    Frequency Offset Compensation Configuration
#define FSCAL3      B00100011 //0x23;    //E9    Frequency Synthesizer Calibration
#define FSCAL2      B00100100 //0x24;    //2A    Frequency Synthesizer Calibration
#define FSCAL1      B00100101 //0x25;    //00    Frequency Synthesizer Calibration
#define FSCAL0      B00100110 //0x26;    //1F    Frequency Synthesizer Calibration
#define TEST2       B00101100 //0x2C;    //81    Various Test Settings
#define TEST1       B00101101 //0x2D;    //35    Various Test Settings
#define TEST0       B00101110 //0x2E;    //09    Various Test Settings

//komendy
#define SRES      0x30   //komenda zerowania układu TRX
#define SRX       0x34   //tryb odbiorczy
#define SIDLE     0x36   


int clock=15;
int slave=10;
int miso=14;
int mosi=16;

byte dana=15;

void setup (void)
{
pinMode(clock, OUTPUT);
pinMode(slave, OUTPUT);
pinMode(miso, INPUT);
pinMode(mosi, OUTPUT);
Serial.begin(9600); 
}  

void loop (void)
{

 zerowanie();
 start_rejestr();
 czytaj();  
}

// procedura zerowania
void zerowanie()
{
 //ssynchronizacja układów
digitalWrite(clock, HIGH);
digitalWrite(slave, LOW);
digitalWrite(mosi, LOW); 
//delay(1);
digitalWrite(slave, HIGH);
digitalWrite(clock, LOW);
delay(40);
digitalWrite(slave, LOW);
while((digitalRead(miso))!=LOW);
//wysłanie polecenia zerowania do TRX
shiftOut(mosi,clock,MSBFIRST,SRES);
digitalWrite(slave, HIGH);

while(digitalRead(miso)==LOW);
while(digitalRead(miso)!=LOW);

digitalWrite(slave, HIGH);

}

//zapisuje wartości do rejestru TRX
void zapis( byte adres, byte wartosc){
digitalWrite(clock, LOW);
digitalWrite(slave, LOW);
while(digitalRead(miso)!=LOW);
shiftOut(mosi, clock, MSBFIRST, adres);// podaje adres
__asm__("nop\n\t");
shiftOut(mosi, clock, MSBFIRST, wartosc);// podaje wartość do zapisu pod wskazany adres
digitalWrite(slave, HIGH);
}

//wprowadza wartosci startowe do rejestrów
void start_rejestr()
{
 zapis(IOCFG0,0x06);
 zapis(PKTCTRL0,0x05);
 zapis(FSCTRL1,0x06);
 zapis(FREQ2,0x21);
 zapis(FREQ1,0x62);
 zapis(FREQ0,0x76);
 zapis(MDMCFG4,0xF6);
 zapis(MDMCFG3,0x83);
 zapis(MDMCFG2,0x03);
 zapis(DEVIATN,0x15);
 zapis(MCSM0,0x18);
 zapis(FOCCFG,0x16);
 zapis(FSCAL3,0xE9);
 zapis(FSCAL2,0x2A);
 zapis(FSCAL1,0x00);
 zapis(FSCAL0,0x1F);
 zapis(TEST2,0x81);
 zapis(TEST1,0x35);
 zapis(TEST0,0x09);
}

void czytaj()
{
digitalWrite(clock, LOW);
digitalWrite(slave, LOW);
while(digitalRead(miso)!=LOW);
shiftOut(mosi, clock, MSBFIRST, B10000010);// podaje adres
__asm__("nop\n\t");
dana= shiftIn(miso, clock, MSBFIRST);
digitalWrite(slave, HIGH);
Serial.println(dana);
}

w tym miejscu kod utyka ponieważ niemożne się doczekać zmiany sygnału od TRX'a

while(digitalRead(miso)==LOW);

while(digitalRead(miso)!=LOW);

W celach testowych chciałem odczytać wartość rejestru 000010, domyślnie ma on wartość 0x3F a próbuje mu wpisać 0x06 natomiast otrzymuje same 0 co pewnie wiąże się z tym że, układ nic nie wystawia na linie i po prostu sczytuje jeden ciągły stan jaki na niej jest.

Widzę, że dużo ludzi ma problem z tym układem więc liczę na pomoc ludzi którzy już przez to przebrnęli i z góry za nią dziękuje.

Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.