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

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Gość
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • 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.