Git Product home page Git Product logo

si446x's Introduction

Si4463 Radio Library for AVR and Arduino

This is a library for use with the Si4463 radio IC from Silicon Labs. The Si4463 is used in a number of pre-made modules like the HopeRF RFM26W and Dorji_Com DRF4463F. The whole range of Si446x transceivers should also work with this library.

http://blog.zakkemble.co.uk/si4463-radio-library-avr-arduino/

Documentation

Doxygen pages

Installing

Arduino

Copy the arduino/Si446x/ folder to your Arduino libraries folder.

Add

#include <Si446x.h>

to the top of the sketches that use the library.

Also have a look at Si446x_config.h, that's where you can change which pins are used and stuff.

AVR

Copy the ./Si446x folder to your project and add

#include "Si446x/Si446x.h"

to the source files that use the library.

Check out the examples in the examples folder.


Zak Kemble

[email protected]

si446x's People

Contributors

per1234 avatar zakkemble avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

si446x's Issues

Changing channel without clearing FIFO

I'm implementing a nice frequency hopping mechanism for my comms, so I change the rx/tx channel on transmitter and receiver at the same time, but every time I do that I'm losing any pending packets on the FIFO buffer.
This is made worse because I'm reading and processing them asynchronously, taking full advantage of the FIFO. And my stuff has really short packets: my largest packet is 10 bytes, the FIFO is 64!.

I know the IC has a frequency hopping mechanism built-in, but even the datasheet just plain says "just do it on the MCU". So there must be a quick way to quickly change the channel?

MISO is always high

Hi @ZakKemble,
First , thanks for providing such a comprehensive and documented library for Si446x which is linked and pretty much being used by every person using this chip.

I'm facing a wierd issue and wanted to check with you for help. I'm using the niceRF4463 module and am trying to use your library. (And have tried the library provided with the module)

I'm consistently seeing a high on the MISO line and when I try to fetch the part info i am only getting 1s (255 or 65535) for all the fields in the info structure.

I've tried a lot of things but just can figure what could be the issue here that MISO just isn't being pulled low at any time. Would be grateful if you can share any insight.

Maximum Transfer Speed

Hi,
I need to transfer timelapse photo from ESP32 Cam to the main controller at 500 meters or more.
My use case is in farm where we esp32 cam upload vegetable photos to server. The photo is around 50kB to 100kB.
Is Si446x a feasible solution? I go through several Lora model(Or similar), only Si446x allow the biggest air rate.

Unstable interrupts

Hi, this is an issue I'd noticed occasionally when using an AVR 328p, and recently found to be a deal-breaker when using a much faster STM32F1.

Some interrupts on the micro side don't fire, so the interrupt line keeps low (confirmed with oscilloscope) and no further interrupts are triggered. As a result, everything stops working.

I was able to recover from this state by physically reconnecting the interrupt wire. I also tried adding an external pull-up but no help.
Is this a possible bug in the library or am I missing something?
Are we assuming that the pin falling interrupt will fire eventually, or should the library check for the interrupt pin being low before continuing?

SI446X_INTERRUPTS is not Si446x_config.h

I was trying to get this (the Arduino) version running on an ESP8266 using the ArduinoIDE and had the following issue.

SI446X_INTERRUPTS is not defined in Si466x_config.h but in Si466x.cpp therefore (at least my compiler) did not respect its value when defining the SI466X_NO_INTERRUPT macro in Si466x.h. Therefore the interrupts were never disabled for me and I got some endless loops.
Moving the SI446X_INTERRUPTS to the config header got things working.

Side note for anyone else trying to get this running on an ESP:
Seems to be working so far, but if you are using the included examples make sure to feed the watchdog ESP.wdtFeed(); in any long/endless loop, otherwise your ESP will reset

Getting garbled data.

Hi, I'm trying your library with a pair of cheap Si4463 and ran into problems. I'm using a variation on the IRQ example, and when sending a simple 2 byte message [3|9], what I get on the other side is [2|3]. The received buffer size is correct, and sometimes, due to glitching it reports a bigger buffer and I can peek [2|3|9|0|0|0|0]. So the message is there, but there's something wrong with the reading/writing.

Any tips?

Carrier wave.

Trying to get a carrier wave on a si4463 and Arduino UNO, and trying to detect it with a cc308+
I'm successfully talking to the chip and printing to the serial monitor, though when I try to

  si446x_info_t* info;
  Si446x_getInfo((si446x_info_t*)info);

It appears to freeze up at this point, and I stop getting anything printed to the Serial.
Other things like Si446x_getState, Temprature, and getProperty apear to work fine. (I added getProperty to Si446x.h).
I created a function to setProperty((SI446X_PROP_GROUP_MODEM<<8) | 0x00, 0x18); to the library and I'm calling that from the arduino code, I'm reading the property before and after and can see the property getting changed.
however I'm not picking anything up on the cc308+.
Do I still need to send a command to start transmitting? if so what command arguments need to be sent?
I think I partially understand what's going on with setting properties and the si446x api, ie in the above you're ORing the group (MODEM 0x20) and the index (MODTYPE 0x00) and setting it to 0x18. I'm not quite seeing what the 0x18 is though.

This was helpful: https://cu-taber.github.io/Si4463-API/#details_prop_grp_MODEM
but I feel like I'm being dense with understanding what the hex values that we're setting it to are.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.