Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

CC1000 i power up

kamilcgi 05 Lis 2005 19:53 1134 1
  • #1 05 Lis 2005 19:53
    kamilcgi
    Poziom 2  

    Witam,
    Zbudowalem maly system do transmisji bezprzewodowej na bazie CC1000. Wszystko dziala ok poza budzeniem CC1000 z power down. Stosuje procedury opisane w datasheet'cie oraz korzystam z dostępnych bibliotek. Niestety rzaden z tych sposobow nie dziala. Program pisze w C i wg datasheet'a po "power down" nalezy obudzic urzadzenie dla RX lub TX poprzez odpowiednie zaprogramowanie rejestru Main i wykonanie kilku petli opozniajacych. Niestety cos jest nie tak i brak mi juz pomyslow.
    Musze wylaczac uklad na okolo 5sek a nastepnie wlaczyc go na okolo 0.5sek i tak w nieskonczonosc. Ta petla czasowa ma zmniejszyc zurzycie baterii.

    Przejscie modulu do stanu supienia realizuje procedura:
    void SetupCC1000PD(void)
    {
    WriteToCC1000Register(CC1000_PA_POW,0x00);
    WriteToCC1000Register(CC1000_MAIN,0x3F);
    }

    Wyjscie z tego stanu:
    void PowerUpCC1000(void)
    {
    WakeUpCC1000ToRX(RX_Current);
    SetupCC1000RX(RX_Current);
    }

    gdzie:

    void WakeUpCC1000ToRX(char RXCurrent)
    {
    int i;


    WriteToCC1000Register(CC1000_MAIN,0x3B); // Turn on xtal oscillator core
    WriteToCC1000Register(CC1000_CURRENT,RXCurrent); // Program VCO current for RX
    WriteToCC1000Register(CC1000_PLL,RX_PLL); // Use RX refdiv setting

    // Insert wait routine here, must wait for xtal oscillator to stabilise,
    // typically takes 2-5ms.
    for (i=0;i<0x7FFE;i++);

    WriteToCC1000Register(CC1000_MAIN,0x39); // Turn on bias generator
    // Wait for 250us, insert wait loop here
    // for (i=0;i<0x1000;i++);
    WriteToCC1000Register(CC1000_MAIN,0x31); // Turn on frequency synthesiser
    }



    char SetupCC1000RX(char RXCurrent)
    {
    int i;
    char lock_status;

    WriteToCC1000Register(CC1000_MAIN,0x11); // Switch into RX, switch to freq. reg A
    WriteToCC1000Register(CC1000_PLL,RX_PLL); // Use RX refdiv setting
    WriteToCC1000Register(CC1000_CURRENT,RXCurrent); // Program VCO current for RX

    // Wait 250us before monitoring LOCK
    for (i=0;i<0x1000;i++);

    // Wait for lock
    for(i=LOCK_TIMEOUT; ((ReadFromCC1000Register(CC1000_LOCK)&0x01)==0)&&(i>0); i--);

    // If PLL in lock
    if ((ReadFromCC1000Register(CC1000_LOCK)&0x01)==0x01){
    // Indicate PLL in LOCK
    lock_status = LOCK_OK;
    // Else (PLL out of LOCK)
    }else{
    // If recalibration ok
    if(CalibrateCC1000()){
    // Indicate PLL in LOCK
    lock_status = LOCK_RECAL_OK;
    // Else (recalibration failed)
    }else{
    // Reset frequency syncthesizer (ref.: Errata Note 01)
    ResetFreqSynth();
    // Indicate PLL out of LOCK
    lock_status = LOCK_NOK;
    }
    }

    // Return LOCK status to application
    return (lock_status);
    }

    Jesli ktos wie jak dobie poradzic z tym problemem, prosze o odpowiedz na moj problem.

    Pozdrawiam,
    kamilcgi_

    0 1
  • #2 06 Lis 2005 12:04
    GienekS
    Poziom 32  

    Przyznam się że też usypiam CC1000 ale do budzenia nie stosuję żadnych specyficznych procedur po prostu wywołuję go do pracy w TX i niema z tym żadnych problemów.

    0