collapse

* Posts Recentes

O que é isto ? por SerraCabo
[12 de Abril de 2024, 14:20]


Amplificador - Rockboard HA 1 In-Ear por almamater
[11 de Abril de 2024, 20:46]


Emulador NES em ESP32 por dropes
[10 de Abril de 2024, 15:30]


Meu novo robô por josecarlos
[29 de Março de 2024, 18:30]


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


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]


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 69719 vezes)

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

Offline metRo_

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 3.753
Re: [Desenvolvimento] Módulos RFM12-868D (Emissor e Receptor a 866MHz) da HOPERF
« Responder #90 em: 22 de Setembro de 2009, 15:46 »
Eu neste momento não tenho o meu, mas era muito baseado na biblioteca do gajo pois nunca consegui colocar a comunicar um dispositivo SPI com código feito por mim e depois acabo por ir buscar as bibliotecas. Esse código que tens é em C, certo?

Tenho que ver se encontro isso para dares uma vista de olhos. Mas tenho que tentar o teu aumentando a velocidade se funciona aqui. Isso visto estar em C deve funcionar sem grandes alterações no Arduino e sempre dá para aprender.

Offline Tyran

  • Mini Robot
  • *
  • Mensagens: 293
Re: [Desenvolvimento] Módulos RFM12-868D (Emissor e Receptor a 866MHz) da HOPERF
« Responder #91 em: 22 de Setembro de 2009, 17:17 »
Por spi tens duas maneiras de comunicar, ou implementas tu próprio spi em "quaisquer" pinos através de software sendo que tens de controlar manualmente tudo ou usas spi por hardware que é só usares os registos já para o efeito que fazem tudo por ti, basicamente só tens de programar o modo e ao carregar o registo de dados ele manda tudo automaticamente.

EDIT: ora que coisa, o meu attiny agora só funciona ligar directamente o pino de reset a 5v, se meter 5v->R->pino, o pino fica a 0,3v :S
« Última modificação: 22 de Setembro de 2009, 18:18 por Tyran »

Offline metRo_

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 3.753
Re: [Desenvolvimento] Módulos RFM12-868D (Emissor e Receptor a 866MHz) da HOPERF
« Responder #92 em: 22 de Setembro de 2009, 18:53 »
Essa R é de que valor? é mais por curiosidade que por efeitos práticos :p Pois o mais certo é ser uma resistencia de valores normais à volta dos k.

Isso é muito estranho, de certeza que o pino não está a curto-circuitar com nada?

Offline Tyran

  • Mini Robot
  • *
  • Mensagens: 293
Re: [Desenvolvimento] Módulos RFM12-868D (Emissor e Receptor a 866MHz) da HOPERF
« Responder #93 em: 22 de Setembro de 2009, 18:59 »
é de 10k.

Não está, so tenho aquilo no reset, é estranho porque foi de repente... deixou de dar o micro! andei a verificar e reparei que o reset que tá marado  :-\

Offline metRo_

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 3.753
Re: [Desenvolvimento] Módulos RFM12-868D (Emissor e Receptor a 866MHz) da HOPERF
« Responder #94 em: 22 de Setembro de 2009, 19:16 »
Troca de resistencia.

Offline Tyran

  • Mini Robot
  • *
  • Mensagens: 293
Re: [Desenvolvimento] Módulos RFM12-868D (Emissor e Receptor a 866MHz) da HOPERF
« Responder #95 em: 22 de Setembro de 2009, 19:24 »
Já troquei  :(

Parece que o pino está configurado para output  :-\

Offline metRo_

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 3.753
Re: [Desenvolvimento] Módulos RFM12-868D (Emissor e Receptor a 866MHz) da HOPERF
« Responder #96 em: 22 de Setembro de 2009, 19:32 »
estou :S

Offline Tyran

  • Mini Robot
  • *
  • Mensagens: 293
Re: [Desenvolvimento] Módulos RFM12-868D (Emissor e Receptor a 866MHz) da HOPERF
« Responder #97 em: 22 de Setembro de 2009, 19:57 »
Hmm, será algum fio pelo meio da breadboard a fazer a algum shunt? Vou ver...  :o

Offline metRo_

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 3.753
Re: [Desenvolvimento] Módulos RFM12-868D (Emissor e Receptor a 866MHz) da HOPERF
« Responder #98 em: 22 de Setembro de 2009, 20:09 »
É o que me parece a mim :S

Já vi o código mt mt por alto. Vou assim que tiver um tempo analisar com muita calma e obrigado por disponiblizares.

Offline Tyran

  • Mini Robot
  • *
  • Mensagens: 293
Re: [Desenvolvimento] Módulos RFM12-868D (Emissor e Receptor a 866MHz) da HOPERF
« Responder #99 em: 22 de Setembro de 2009, 20:54 »
De nada, é verdade tmb meti nem disse nada, o tiny emite, o mega8 recebe. Como demorei muito tempo para meter a dar nem sei se vou ter tempo agora para meter os dois a fazer ambas as coisas  :(

Ora não me parece haver contacto algum por baixo da bread...

Offline Tyran

  • Mini Robot
  • *
  • Mensagens: 293
Re: [Desenvolvimento] Módulos RFM12-868D (Emissor e Receptor a 866MHz) da HOPERF
« Responder #100 em: 24 de Setembro de 2009, 21:19 »
é mesmo do tiny... meti outro, um tiny461 no mesmo sitio de encaixe e tá ok... poderá ter sido eu sem querer desabilitar do pino a função reset? se assim for, talvez só com high voltage parallel programming acho ou qualquer coisa assim... mas isso já só com uma dragon ou assim é que consigo fazer  :-\
vou ter de ir aos labs pedir para usar uma...

cumpzz

Offline Njay

  • Mini Robot
  • *
  • Mensagens: 3.598
    • Tróniquices
Re: [Desenvolvimento] Módulos RFM12-868D (Emissor e Receptor a 866MHz) da HOPERF
« Responder #101 em: 24 de Setembro de 2009, 22:29 »
poderá ter sido eu sem querer desabilitar do pino a função reset?

Sim, isso pode acontecer, às vezes até se ocorrer um erro na programação (devido por exemplo a um cabo que se solta ou um mau contacto num pino enquanto ele está a ser programado).

Offline amando96

  • Mini Robot
  • *
  • Mensagens: 1.631
  • MAC address? But I have windows...
    • Projects, News, Blog, Tutorials
Re:[Desenvolvimento] Módulos RFM12-868D (Emissor e Receptor a 866MHz) da HOPERF
« Responder #102 em: 12 de Outubro de 2009, 13:44 »
Hoje agarrei nisto e tive a ler os datasheets, uns sites, fazer ligações e um bocado de código e já funcionam.

Ainda tenho alguns problemas de ruído mas já consigo mandar dados e receber respostas.

A ver se faço uns esquemas das ligações e o software para partilhar convosco.

Para já fica uma foto para lhe irem ganhado o gosto ;)

SNIP*
Foto do esquema, o modulo é ligado onde estão os pins, com a parte da antena virada para o topo da breadboard.
SNIP*

Código: [Seleccione]
// Configure some values in EEPROM for easy config of the RF12 later on.
// 2009-05-06 <jcw@equi4.com> http://opensource.org/licenses/mit-license.php
// $Id: $

#include "RF12.h"
#include <util/crc16.h>
#include <avr/eeprom.h>

typedef struct {
    uint8_t nodeId;
    uint8_t group;
    char msg[RF12_EEPROM_SIZE-4];
    uint16_t crc;
} RF12Config;

static RF12Config config;

char cmd;
uint8_t value, arg;
uint8_t testbuf[RF12_MAXDATA];

static void addCh(char* msg, char c) {
    uint8_t n = strlen(msg);
    msg[n] = c;
}

static void addInt(char* msg, uint16_t v) {
    if (v > 10)
        addInt(msg, v / 10);
    addCh(msg, '0' + v % 10);
}

static void saveConfig() {
    // set up a nice config string to be shown on startup
    memset(config.msg, 0, sizeof config.msg);
    strcpy(config.msg, " ");
   
    uint8_t id = config.nodeId & 0x1F;
    addCh(config.msg, '@' + id);
    strcat(config.msg, " i");
    addInt(config.msg, id);
    if (config.nodeId & 0x20)
        addCh(config.msg, '*');
   
    strcat(config.msg, " g");
    addInt(config.msg, config.group);
   
    strcat(config.msg, " @ ");
    static uint16_t bands[4] = { 315, 433, 868, 915 };
    uint16_t band = config.nodeId >> 6;
    addInt(config.msg, bands[band]);
    strcat(config.msg, " MHz ");
   
    config.crc = ~0;
    for (uint8_t i = 0; i < sizeof config - 2; ++i)
        config.crc = _crc16_update(config.crc, ((uint8_t*) &config)[i]);

    // save to EEPROM
    for (uint8_t i = 0; i < sizeof config; ++i) {
        uint8_t b = ((uint8_t*) &config)[i];
        eeprom_write_byte(RF12_EEPROM_ADDR + i, b);
    }
   
    if (!rf12_config())
        Serial.println("config save failed");
}

static void showHelp() {
    Serial.println();
    Serial.println("Available commands:");
    Serial.println("  <nn> i    - set node ID (standard node ids are 1..26)");
    Serial.println("              (or enter an upper case 'A'..'Z' to set id)");
    Serial.println("  <n> b     - set MHz band (4 = 433, 8 = 868, 9 = 915)");
    Serial.println("  <nnn> g   - set network group (RFM12 only supports 212)");
    Serial.println("  <n> c     - set collect mode (advanced use, normally 0)");
    Serial.println("  <n> a     - send test packet of 5 x <n> bytes, with ack");
    Serial.println("  <n> s     - send test packet of 5 x <n> bytes, no ack");
    Serial.println("Current configuration:");
    rf12_config();
}

void setup() {
    Serial.begin(57600);
    Serial.print("\n[RF12DEMO]");

    if (rf12_config()) {
        config.nodeId = eeprom_read_byte(RF12_EEPROM_ADDR);
        config.group = eeprom_read_byte(RF12_EEPROM_ADDR + 1);
    } else {
        config.nodeId = 0x41; // node A1 @ 433 MHz
        config.group = 0xD4;
        saveConfig();
    }
   
    for (uint8_t i = 0; i < sizeof testbuf; ++i)
        testbuf[i] = i;
       
    showHelp();
}

void loop() {
    if (Serial.available()) {
        char c = Serial.read();
        if ('0' <= c && c <= '9')
            value = 10 * value + c - '0';
        else if ('a' <= c && c <='z') {
            Serial.print("> ");
            Serial.print((int) value);
            Serial.println(c);
            switch (c) {
                default:
                    showHelp();
                    break;
                case 'i': // set node id
                    config.nodeId = (config.nodeId & 0xE0) + (value & 0x1F);
                    saveConfig();
                    break;
                case 'b': // set band: 4 = 433, 8 = 868, 9 = 915
                    value = value == 8 ? RF12_868MHZ :
                            value == 9 ? RF12_915MHZ : RF12_433MHZ;
                    config.nodeId = (value << 6) + (config.nodeId & 0x3F);
                    saveConfig();
                    break;
                case 'g': // set network group
                    config.group = value;
                    saveConfig();
                    break;
                case 'c': // set collect mode (off = 0, on = 1)
                    if (value)
                        config.nodeId |= 0x20;
                    else
                        config.nodeId &= ~0x20;
                    saveConfig();
                    break;
                case 'a': // send test packet of 5 x N bytes, request an ack
                case 's': // send test packet of 5 x N bytes, no ack
                    cmd = c;
                    arg = value < 9 ? 5 * value : sizeof testbuf;
                    break;
            }
            value = 0;
        } else if ('A' <= c && c <= 'Z') {
            config.nodeId = (config.nodeId & 0xE0) + (c & 0x1F);
            saveConfig();
        } else if (c > ' ')
            showHelp();
    }

    if (rf12_recvDone()) {
        Serial.print(rf12_crc == 0 ? "OK" : " ?");
        for (uint8_t i = 0; i < rf12_len + 2 && i < 20; ++i) {
            Serial.print(' ');
            Serial.print((int) rf12_buf[i]);
        }
        Serial.println();
       
        if (rf12_crc == 0 && (rf12_hdr & ~RF12_HDR_MASK) == RF12_HDR_ACK) {
            Serial.println(" -> ack");
            uint8_t addr = rf12_hdr & RF12_HDR_MASK;
            rf12_sendStart(RF12_HDR_CTL | RF12_HDR_DST | addr, 0, 0);
        }
    }

    if (cmd && rf12_canSend()) {
        Serial.print(" -> ");
        Serial.print((int) arg);
        Serial.println(" b");
        rf12_sendStart(cmd == 'a' ? RF12_HDR_ACK : 0, testbuf, arg);
        cmd = 0;
    }
}

Depois de fazer upload deste código, fazer ligação por serial e enviar o comando "<1>i" para o arduino por serial, seguido do comando "<8>b" para que este fique configurado como defice 1 na frequência de 868Mhz

De seguida fazer upload para o segundo arduino do mesmo código e configurar com "<2>i" e "<8>b" para ficar como device 2 e a mesma frequência.

Depois disto, e de tudo ligado, basta enviar o comando de teste "<2>a" ao que o outro dispositivo de ve de responder com "10"

Se isto acontecer é porque tem tudo bem ligado e os módulos a funcionar.

Depois disto vamos fazer um código nosso para podermos enviar e receber dados à vontade, mas já dá para ver se está tudo ok.

Ahh em anexo está a biblioteca.

o meu responde 10 b, é isso que devo receber?? obg :)

Offline Tyran

  • Mini Robot
  • *
  • Mensagens: 293
Re: [Desenvolvimento] Módulos RFM12-868D (Emissor e Receptor a 866MHz) da HOPERF
« Responder #103 em: 26 de Dezembro de 2009, 00:37 »
Bem andei a enviar umas coisitas por RF com o arduino com o código do jeelabs e deparo-me com a minha falha em configurar o arduino 0017 ou então o terminal de comunicações dele está básico demais que resulta em não conseguir converter para hexa por exemplo o que lá vejo e como não ser ler "Tiago" em decimal  ;D

Fica em anexo uma programa que fiz para ver, sei que existe aos pontapés mas assim tmb treinei o dedo  :)

Nota: Quem confiar tem o exe quem não confiar (e fazem muito bem!  ;D) tem o código também  :D
« Última modificação: 26 de Dezembro de 2009, 00:39 por Tyran »

Offline ricardo-reis

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 1.338
Re: [Desenvolvimento] Módulos RFM12-868D (Emissor e Receptor a 866MHz) da HOPERF
« Responder #104 em: 19 de Janeiro de 2011, 16:24 »
venho pedir uma dica sobre um erro que me está a dar ao compilar o programa rf12demo, na versão 21 do ide do arduino.


C:\Program Files\arduino-0021\libraries\RF12\RF12sio.cpp:5:19: error: Ports.h: No such file or directory
In file included from C:\Program Files\arduino-0021\libraries\RF12\RF12sio.cpp:7:
C:\Program Files\arduino-0021\libraries\RF12/RF12sio.h:8: error: 'MilliTimer' does not name a type
C:\Program Files\arduino-0021\libraries\RF12\RF12sio.cpp: In member function 'void RF12::send(uint8_t)':
C:\Program Files\arduino-0021\libraries\RF12\RF12sio.cpp:100: error: 'sendTimer' was not declared in this scope
C:\Program Files\arduino-0021\libraries\RF12\RF12sio.cpp: In member function 'uint8_t RF12::poll()':
C:\Program Files\arduino-0021\libraries\RF12\RF12sio.cpp:136: error: 'ackTimer' was not declared in this scope
C:\Program Files\arduino-0021\libraries\RF12\RF12sio.cpp:153: error: 'ackTimer' was not declared in this scope
C:\Program Files\arduino-0021\libraries\RF12\RF12sio.cpp:153: error: 'sendTimer' was not declared in this scope
C:\Program Files\arduino-0021\libraries\RF12\RF12sio.cpp:155: error: 'sendTimer' was not declared in this scope
C:\Program Files\arduino-0021\libraries\RF12\RF12sio.cpp:172: error: 'ackTimer' was not declared in this scope

este aqui acima é o output do erro que dá ao tentar compilar, alguma sugestão acerca de como contornar isto?

a biblioteca foi copiada pra dentro da pasta libraries do ide. dentro da pasta da biblioteca rf12 estão os ficheiros: (como era suposto)
RF12.cpp
RF12.h
RF12sio.cpp
RF12sio.h