Skocz do zawartości

[C] RFM70 2,4GHz


Pomocna odpowiedź

Czy udało się komuś uruchomić te moduły? Odpaliłem przykłady na PIC i niestety nie działają. BTW w linku wyżej jest wersja dla STM8 a nie na STM32. Jeśli miał by ktoś działający kod to był bym bardzo wdzięczny.

pozdrawiam.

[ Dodano: 21-04-2011, 11:33 ]

Udało mi się odpalić moduły na PICu. Czy ktoś wie jak sprawdzić RSSI? Potrzebuje mierzyć moc sygnału.

pozdrawiam,

  • 3 tygodnie później...

Ogólnie rzecz biorąc to powinien Cie interesować Register Bank 1 a konkretnie adres 05.

Bit 18 to

RSSI measurement:

0:Enable

1:Disable

Tutaj ustawiamy 0.

Nastepnie interesuja Cie bity 29:26 gdzie mozna ustawic 16 poziomow wykrywania CD z krokiem 2dB.

RSSI Threshold for CD detect

0: -97 dBm, 2 dB/step, 15: -67 dBm

Teraz jezeli wiesz ze nadajnik nadaje, jest generowana fala nośna, ustawiasz Threshold for CD detect na -67 dBm i sprawdzasz w Register Bank 0 bajt pod adresem 09 czyli flage wykrycia CD.

Jezeli jest 0 to zchodzisz z poziomem na -69 dBm i znowu sprawdzasz CD, i tak w kolko az wykryjesz CD.

Tym sposobem mozna rozroznic 16 poziomow "mocy sygnalu".

Nalezy pamietac ze to wszystko mozna robic tylko w trybie RX i dobrze przelaczac sie pomiedzy bankami.

Taka jest moja koncepcja, moze jest lepszy sposob.

Jak ubierzesz to w jakies fajne funkcje to sie podziel prosze 🙂

  • 3 tygodnie później...

Witam.

Jakim macie minimalny pobór prądu przez rfm70. Mi się udało zejść do 0,6mA wg datasheet powinno się dać zejść do 3uA. Udało się komuś?

  • 9 miesiące później...

Witam wszystkich,

czy od czasu kiedy post był obficie komentowany komuś wpadła do ręki jakaś biblioteka dla tego modułu?

Zaczynam z nim zabawę i szukam działającego wzorca.

pozdrawiam

Własnie miałem ostatnio zamiar zakupić takie moduły i nie mogłem znaleźć bibliotek w Bascomie. Przeszukując YT znalazłam filmik mirkka36 gdzie w opisie napisał, że udostępni wkrótce biblioteki. Nie wiem czy to zrobił, czy nie, ale wystarczyło zapytać wujka Google o: rfm70 c library, po czym dostawałeś wynik prowadzący do: http://www.voti.nl/rfm70/

Czołem,

dotarłem do tej samej strony za radami wuja 🙂

przeglądałem tamtejszy kod i trzeba dopisać sobie plik konfiguracyjny z pinologią.

Pytanie zadałem w tym wątku ze względu na toczącą się tu dyskusję.

Pomyślałem, że ktoś już udostępnił bibliotekę.

W każdym razie dzięki za odpowiedź.

Jest baza, na której można pracować.

pozdrawiam

  • 3 tygodnie później...

Witam serdecznie, obecnie przymierzam się do implementacji tych modułów do jednego ze swoich projektów, jeżeli wszystko przejdzie pomyślnie to z przyjemnością udostępnię bibliotekę.

pozdrawiam

bastek79

  • 4 tygodnie później...

Witam.

Jaki zasięg udaje się wam uzyskać na tych modułach, bo mi z oryginalną anteną przy wysyłaniu małych porcji danych zasięg mam niecałe 20m, po przerobieniu modułów na zewnętrzne anteny dookolne zasięg wynosi prawie 30m. Prędkość 1mbps, moc maksymalna.

Nie testowałem jeszcze przy docelowych paczkach danych a ma być to 512bajtów wysyłane 40 razy na sekundę.

__________

Komentarz dodany przez: Treker

Witam

Udało mi się uruchomić komunikację jednostronną pomiędzy modułami RFM70. W przykładowym kodzie: Master nadaje, Slave odbiera i wysyła ponownie do mastera. Nie działa gdyż:

Po inicjalizacji włączenie trybu TX, ustawia dany moduł zawsze na TX. Późniejsze zmiany na RX nic nie pomagają, analogicznie gdy pierwszy raz przełączymy moduł na odbiornik, ten zawsze już będzie odbiornikiem.

Kody przełączające tryby:

void RFM70_SwitchToRxMode()
{
uint8_t value;

//SPI_Command(FLUSH_RX);//flush Rx
SPI_Write_Reg(WRITE_REG,FLUSH_RXX,0);
value=SPI_Read_Reg(STATUS);	// read register STATUS's value
SPI_Write_Reg(WRITE_REG,STATUS,value);// clear RX_DR or TX_DS or MAX_RT interrupt flag

CE_Low();
value=SPI_Read_Reg(CONFIG);	// read register CONFIG's value//PRX

value|=0x01;
value|=0x02;
 	SPI_Write_Reg(WRITE_REG, CONFIG, value); // Set PWR_UP bit, enable CRC(2 length) & Prim:RX. RX_DR enabled..
CE_High();


}

void RFM70_SwitchToTxMode()
{
uint8_t value;
SPI_Command(FLUSH_TX);//flush Tx
value=SPI_Read_Reg(STATUS);	// read register STATUS's value
SPI_Write_Reg(WRITE_REG,STATUS,value);// clear RX_DR or TX_DS or MAX_RT interrupt flag

CE_Low();
value=SPI_Read_Reg(CONFIG);	// read register CONFIG's value
//PTX
	value=value&0xfe;	//	mask all bits without first / switch to PTX
	value|=0x02;
 	SPI_Write_Reg(WRITE_REG, CONFIG, value); // Set PWR_UP bit, enable CRC(2 length) & Prim:RX. RX_DR enabled.
CE_High();
}

Np: dla odbiornika: odbiornik pracuje poprawnie, w przypadku gdy po inicjalizacji włączamy TX a potem RX, odbiornik już nie pracuje

//RFM70_SwitchToTxMode();
_delay_ms(200);

RFM70_SwitchToRxMode();
_delay_ms(200);

Wie ktoś może dlaczego moduły nie mogą przełączać się między RX, a TX, po wybraniu na początku któregokolwiek z nich??

Dzięki za info i pozdro, przepraszam za złe sformułowanie myśli, przemęczony ostatnio jestem

#define Chip_Enable()           CE_PORT |= (1<<CE_BIT)	
#define Chip_Disable()          CE_PORT &=~(1<<CE_BIT)	

#define FLUSH_TX            0xE1
#define FLUSH_RX            0xE2
#define PRIM_RX     (1<<0)

//switches module to RX-mode, use after Send_Packet to receive data
void Select_RX_Mode(){
uint8_t Value;
SPI_Write_Command(FLUSH_RX);    //flush RX

Value=SPI_Read_STATUS();
SPI_Write_Register(STATUS,Value);  //clear RX_DR or TX_DS or MAX_RT interrupt flag

Chip_Disable();                                 //without this, the module won't switch modes properly
Value=SPI_Read_Register(CONFIG);	            //keep CONFIG's value
if( (Value&PRIM_RX)==0 ){                       //switch if NOT in RX-mode
    SPI_Write_Register(CONFIG, Value|PRIM_RX);  //set PRIM_RX in CONFIG's value and write it back back
}
Chip_Enable();                                  //without this, the module won't switch modes properly	
}

//switches module to TX-mode
void Select_TX_Mode(void){
uint8_t Config;
SPI_Write_Command(FLUSH_TX); //flush TX

Chip_Disable();                                     //without this, the module won't switch modes properly
Config=SPI_Read_Register(CONFIG);                   //keep CONFIG's value
if( (Config&PRIM_RX)!=0 ){                          //switch if in RX-mode
	SPI_Write_Register(CONFIG, Config&(~PRIM_RX));  //clear PRIM_RX in CONFIG's value and write it back back
}
Chip_Enable();                                      //without this, the module won't switch modes properly
}

Tak wyglądają moje procedury, i moduły przełączają się normalnie miedzy trybami pracy. Jaki zasięg udaje ci się uzyskać? Jak go poprawić? Stosujesz inne anteny niż wbudowane?

Witam

Procedury twoje z moimi są praktycznie identyczne, a u mnie się układy nie przełączają, widocznie błąd jest gdzie indziej w kodzie, tylko czemu wszystko działa oprócz tego to już jest zagadką. Znalazłem jednak jakiś tam sposób na przełączanie, przed przełączeniem na TX lub RX robię coś takiego:

void power_down(void)
{
uint8_t testt;
CE_Low();
testt=SPI_Read_Reg(CONFIG);
testt&=0xFD; //wyłączenie bitu zasilania
SPI_Write_Reg(WRITE_REG, CONFIG, testt);

Nie mam zbytnio czasu dalej męczyć tych modułów, może jednak przerobię jeszcze kod z Voti:http://www.voti.nl/rfm70/

Pozdro

  • 3 miesiące później...

brabus, browar dla ciebie 🙂 Kurde, nawet nie wiesz jak mnie ucieszyłeś tą biblioteką (i jeszcze bardziej tym, że ruszyła "z kopa" ). Uiszczę rąbka tajemnicy, że sam pracuję nad malutkim Hexapodem ze sterowaniem radiowym (właśnie na RFM70).

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