collapse

* Posts Recentes

Amplificador - Rockboard HA 1 In-Ear por almamater
[Ontem às 19:13]


O que é isto ? por KammutierSpule
[26 de Março de 2024, 19:35]


Bateria - Portátil por almamater
[25 de Março de 2024, 22:14]


Emulador NES em ESP32 por dropes
[13 de Março de 2024, 21:19]


Escolher Osciloscópio por jm_araujo
[06 de Fevereiro de 2024, 23:07]


TP4056 - Dúvida por dropes
[31 de Janeiro de 2024, 14:13]


Leitura de dados por Porta Serie por jm_araujo
[22 de Janeiro de 2024, 14:00]


Distancia Cabo por jm_araujo
[08 de Janeiro de 2024, 16:30]


Meu novo robô por josecarlos
[06 de Janeiro de 2024, 16:46]


Laser Engraver - Alguém tem? por almamater
[16 de Dezembro de 2023, 14:23]

Autor Tópico: [Desenvolvimento] Módulos RFM12-868D (Emissor e Receptor a 866MHz) da HOPERF  (Lida 66721 vezes)

0 Membros e 1 Visitante estão a ver este tópico.

Offline metRo_

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 3.753
Módulos RFM12-868D (Emissor e Receptor a 866MHz) da HOPERF


O TigPT conseguiu comunicar com os módulos, podem ver a informação aqui

Biblioteca RFM12

Características do Produto

Página do Produto
Datasheet
RFM12 programming guide - Há um utilizador no fórum que já se disponibilizou para fazer um tutorial e que tem experiência com este módulo.
RF12 datasheet

Features:
   
    * Distance > 100m
    * low costing, high performance and price ratio
    * tuning free during production
    * PLL and zero IF technology
    * fast PLL lock time
    * high resolution PLL with 2.5KHz step
    * high data rate (up to 115.2 kbps with internal demodulator)
    * differential antenna input
    * automatic antenna tuning
    * Programmable TX frequency deviation (15 to 240 KHz)
    * programmable receiver bandwidth (67 - 400 kHz)
    * analog and digital signal strength indicater(ARSSI/DRSSI)
    * AFC
    * DQD
    * Internal data filtering and clock recovery
    * RX synchron pattern recognition
    * SPI interface
    * clock and reset signal output for external MCU use
    * 16 bit RX Data FIFO
    * Two 8 bit TX data registers
    * 10MHz crystal for PLL timing
    * wakeup timer
    * 2.2V - 5.4V power supply
    * low power consumption
    * stand by current less than 0.3µA

Links com Informação Adicional, projectos externos, etc
http://electronics-diy.com/electronic_schematic.php?id=725
Arduino + RFM12 (1)
Arduino + RFM12 (2)
http://blog.everythingrobotics.com/2008/01/08/rfm12-tutorial-part1/
Artigo da Elektor sobre RFM12 em português!

PCB's
Placa PCB por HyugaTS - Post

Eu criei este tópico na parte de Projecto colectivos para que toda a gente possa participar no desenvolvimento de ferramentas para se usarem estes módulos por isso todas as informações úteis que tenham serão bem-vindas como links para projectos com estes módulos, os vossos testes, resultados, etc.

EDIT: mudei o link para a biblioteca, que o antigo já não dava nada. (ricardo-reis)
« Última modificação: 19 de Janeiro de 2011, 15:25 por ricardo-reis »

Offline metRo_

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 3.753
Aqui estão algumas fotos embora isto ainda não tenha dado nada :S e não liguem à qualidade das fotos.






Offline Fifas

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 2.064
  • El RoboSapiens
metRo_ tenho uma duvida.....qual dos buracos é a antena? ;D é que no datasheet so vejo 1 :P

Offline metRo_

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 3.753
Isso tem dois buracos, um gnd e outro antena, vou tirar uma foto e ja posto mas é facil de ver. Pois o que esta a gnd ve-se bem qual é.

Offline metRo_

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 3.753
Comecei a ler o guia de programação para comunicar com os módulos e tenho algumas duvidas.
Código: [Seleccione]
#define DDR_IN        0
#define DDR_OUT       1

#define PORT_SEL      PORTB
#define PIN_SEL       PINB
#define DDR_SEL       DDRB

#define PORT_SDI      PORTB
#define PIN_SDI       PINB
#define DDR_SDI       DDRB

#define PORT_SCK      PORTB
#define PIN_SCK       PINB
#define DDR_SCK       DDRB

#define PORT_SDO      PORTB
#define PIN_SDO       PINB
#define DDR_SDO       DDRD

#define PORT_DATA     PORTD
#define PIN_DATA      PIND
#define DDR_DATA      DDRD

#define PB7           7//--\
#define PB6           6//  |
#define RFXX_SCK      5//  |
#define RFXX_SDO      4//  |RF
#define RFXX_SDI      3//  |
#define RFXX_SEL      2//  |
#define NC            1//  |
#define PBO           0//--/

#define SEL_OUTPUT()  DDR_SEL |= (1<<RFXX_SEL)
#define HI_SEL()      PORT_SEL|= (1<<RFXX_SEL)
#define LOW_SEL()     PORT_SEL&=~(1<<RFXX_SEL)

#define SDI_OUTPUT()  DDR_SDI |= (1<<RFXX_SDI)
#define HI_SDI()      PORT_SDI|= (1<<RFXX_SDI)
#define LOW_SDI()     PORT_SDI&=~(1<<RFXX_SDI)

#define SDO_INPUT()   DDR_SDO&=~(1<<RFXX_SDO)
#define SDO_HI()      PIN_SDO&(1<<RFXX_SDO)

#define SCK_OUTPUT()  DDR_SCK |= (1<<RFXX_SCK)
#define HI_SCK()      PORT_SCK|= (1<<RFXX_SCK)
#define LOW_SCK()     PORT_SCK&=~(1<<RFXX_SCK)

#define RF12_DATA     4//PD4
#define DATA_OUT      DDR_DATA|=1<<RF12_DATA
#define HI_DATA       PORT_DATA|=1<<FR12_DATA

#define LEDG_OUTPUT() DDRD|=~(1<<6)
#define LEDR_OUTPUT() DDRD|=~(1<<7)
#define LEDG_ON()     PORTD&=~(1<<6)
#define LEDG_OFF()    PORTD|=~(1<<6)
#define LEDR_ON()     PORTD&=~(1<<7)
#define LEDR_OFF()    PORTD|=~(1<<7)

Suponho que tenha a ver com configuraçõs do SPI mas para que é que ele faz varias vezes PORT_SEL, PORT SDO, PORT_SDI e lhes atribui PORTb?

Ou por exemplo isto:
Código: [Seleccione]
#define SEL_OUTPUT()  DDR_SEL |= (1<<RFXX_SEL)
#define HI_SEL()      PORT_SEL|= (1<<RFXX_SEL)
#define LOW_SEL()     PORT_SEL&=~(1<<RFXX_SEL)

#define SDI_OUTPUT()  DDR_SDI |= (1<<RFXX_SDI)
#define HI_SDI()      PORT_SDI|= (1<<RFXX_SDI)
#define LOW_SDI()     PORT_SDI&=~(1<<RFXX_SDI)
o que faz?


Offline HyugaTS

  • Mini Robot
  • *
  • Mensagens: 16
  • Kill all humans!
Uma vez que o RFM12 não é breadboard Friendly decidi fazer uma PCB para poder adaptar na breadboard. E como não encontrei sitio melhor decidi "pedir" emprestado o tópico do metRo_  ;)
os ficheiros feitos em Eagle estão em anexo.
Pus também algumas imagens. Não liguem ao estado da solda. Sou mau em trabalhos manuais :P
Enjoy ;D





My software never has bugs. It just develops random features.

Offline TigPT

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 5.372
    • Tiago Rodrigues
Muito bom, obrigado por partilhares HyugaTS.

Offline metRo_

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 3.753
Adicionado ao primeiro post e parece que os conectores smd já deram jeito a alguém :)

Offline Fifas

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 2.064
  • El RoboSapiens
metRo_ mi duvida...mi duvida ;D

nesta foto ve-se a antena no buraco de dentro
http://blog.everythingrobotics.com/wp-content/uploads/2008/06/2146382426_ce95ba0034_o.jpg

no teu tens na de fora

aqui so tem 1 buraco
http://blog.everythingrobotics.com/wp-content/uploads/2008/06/image001.jpg


tirem a minha duvida pf :P

Offline TigPT

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 5.372
    • Tiago Rodrigues
Eu diria que era na de dentro pois a de fora é massa.

Se calhar é por isso que o metRo_ não os consegue meter a falar :P

Quando testar os meus posto ;)

Offline metRo_

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 3.753
Na altura em que tirei as fotos ainda nao tinha soldado as antenas, confirma-se que é na de dentro pois a de fora é massa, foi assim que soldei!

Offline Njay

  • Mini Robot
  • *
  • Mensagens: 3.598
    • Tróniquices
Comecei a ler o guia de programação para comunicar com os módulos e tenho algumas duvidas.
Código: [Seleccione]
#define DDR_IN        0
#define DDR_OUT       1

#define PORT_SEL      PORTB
#define PIN_SEL       PINB
#define DDR_SEL       DDRB
(...)

Suponho que tenha a ver com configuraçõs do SPI mas para que é que ele faz varias vezes PORT_SEL, PORT SDO, PORT_SDI e lhes atribui PORTb?

É como estares a dizer que o pino SEL está no porto X, o pino SDO está no porto Y, etc. Por acaso, neste caso, todos estes pinos são no mesmo porto (PORTB), mas podia não ser. Desta forma, usando as constantes, podes facilmente mudar a localização de um pino, alterando apenas a respectiva constante e deixando o resto do código inalterado.

Ou por exemplo isto:
Código: [Seleccione]
#define SEL_OUTPUT()  DDR_SEL |= (1<<RFXX_SEL)
#define HI_SEL()      PORT_SEL|= (1<<RFXX_SEL)
#define LOW_SEL()     PORT_SEL&=~(1<<RFXX_SEL)

#define SDI_OUTPUT()  DDR_SDI |= (1<<RFXX_SDI)
#define HI_SDI()      PORT_SDI|= (1<<RFXX_SDI)
#define LOW_SDI()     PORT_SDI&=~(1<<RFXX_SDI)
o que faz?

Constantes como por exemplo RFXX_SEL têm o nº (ou indice) do bit. Quando fazes 1 << RFXX_SEL estás a criar uma "máscara" (um valor) em que apenas o bit índice RFXX_SEL activo (= 1). Por exemplo, se RFXX_SEL for 2 (que por acaso ;) até é), 1 << RFXX_SEL = 1 << 2 = 100b (em binário) = 4 (decimal).
As macros que têm o pipe | (ou-lógico bit-a-bit) estão a colocar no registo respectivo um bit a 1, as que usam o & (e-lógico bit-a-bit) estão a zerar um bit.

Examplos:

#define DDR_SEL  DDRB  // o registo DDRB define se cada bit do porto B é um input ou output
#define RFXX_SEL  2
#define SEL_OUTPUT()  DDR_SEL |= (1<<RFXX_SEL)

SEL_OUTPUT() -> coloca a 1 o bit índice 2 do registo DDRB
Como? Vamos ver os passos que dá o compilador na interpretação do código:

SEL_OUTPUT()
DDR_SEL |= (1 << RFXX_SEL)
DDRB = DDRB | (1 << RFXX_SEL)
DDRB = DDRB | (1 << 2)
DDRB = DDRB | 4
DDRB = DDRB | 100b    (note-se o "b" que indica que o nº esta no formato binário)

Portanto, fazendo um OR (OU) do registo DDRB com o valor 100b (binário) resulta sempre num valor em que o bit 2 fica a 1 e os restantes ficam inalterados.

No caso das macros com o & (AND, ou em pt, E), o que se faz é um AND com a máscara invertida. Isto resulta sempre em zerar o bit porque a máscara invertida é um valor em que todos os bits são 1 excepto o nosso bit de interesse (como o RFXX_SEL). Fazendo um AND com outro valor (neste caso, o valor do registo), resulta em que o nosso bit fica a zero e todos os outros ficam inalterados.

Tenho a certeza que a net tá cheia de tutoriais sobre isto, façam uma pesquisazita.
« Última modificação: 22 de Maio de 2009, 02:46 por Njay »

Offline metRo_

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 3.753
Muito obrigado :)

Offline Njay

  • Mini Robot
  • *
  • Mensagens: 3.598
    • Tróniquices
metRo_, na mensagem original do tópico falta um link para um doc importante:

http://www.hoperf.com/pdf/RF12.pdf

O RFM12 é o nome do módulo, que é baseado num chip chamado RF12 que a HOPE fabrica. O link acima é a datasheet do chip. Estava agora a dar uma olhada nos docs para começar a "atacar" este módulo e estava a ver que faltava alguma informação nos docs que aí tens (como por exemplo os timmings da interface SPI).

Offline TigPT

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 5.372
    • Tiago Rodrigues
Obrigado Njay, já adicionei ;)