900 MHz radio

Hope RF module + Atmega 328

Similar projects worth following
A 900 MHz platform to use for all the projects that need fast & far comms

The current BOM has three power supplies, AA, AAA, and LiPo testing + a cap touch sensor + an Atmega 328PB (which also has a cap touch sensor on it) + 900 MHz radio chip. Basically we're testing the kitchen sink.

Look at the tab wedding badge 3 if you want to see current BOM.

Wedding 4.brd

sent for pcb nov 17

brd - 132.55 kB - 11/16/2020 at 13:19


sch - 264.78 kB - 11/16/2020 at 13:19




ino - 8.24 kB - 04/20/2020 at 02:58



although the datasheet cites 9pwm. i see 9 on here.

JPEG Image - 166.25 kB - 04/19/2020 at 16:11



DRAFT: used for a quick cost estimate

Microsoft Excel - 110.00 kB - 03/31/2020 at 17:30


View all 14 files

  • Log to map where we're at

    Sophi Kravitz11/15/2020 at 03:14 0 comments

    Combined both power and MCU boards into one.

    Thinking about using a different chip altogether: 

    • We're using 2 chips for not a lot of stuff. I really liked working with the  Microchip suite. For example, this chip has 16+ GPIO and RF capability in 900 MHz range and is only $4.50.

    Also we might be able to remove:

    • Crystal
    • Resistor on CS pin

  • Atmega328P and Atmega328PB compatible pinouts

    mpinner04/25/2020 at 22:51 0 comments

    I found the same code can work with both P and PB boards. if we line up our pinout properly we might be able to use existing atmega328p boards as a quick way test many (6x) talking together.

    what do you all think worth switching things up a bit?

    //    digitalWrite(0)         //--> D0  -- TX Serial OUT
    //    digitalWrite(1)         //--> D1  -- RX Serial IN
    //    digitalWrite(2)         //--> D2  -- RADIO_IRQ RFM_INT
    //    digitalWrite(3,LOW);    //--> D3  --LED_0
    //    digitalWrite(4,LOW);    //--> D4  --LED_1
    //    digitalWrite(5,LOW);    //--> D5  --LED_2
    //    digitalWrite(6,LOW);    //--> D6  --LED_3
    //    digitalWrite(7,LOW);    //--> D7  --LED_4
    //    digitalWrite(8,HIGH);   //--> B0  --LED_5
    //    digitalWrite(9,HIGH);   //--> B1
    //    digitalWrite(10,HIGH);  //--> B2  --SSO  RFM_CS
    //    digitalWrite(11,HIGH);  //--> B3  --MOSI RADIO AND PROGRAMMING
    //    digitalWrite(12,HIGH);  //--> B4  --MISO RADIO AND PROGRAMMING
    //    digitalWrite(13,HIGH);  //--> B5  --SCK  RADIO AND PROGRAMMING
    //    digitalWrite(14,LOW);   //--> C0  --LED_6
    //    digitalWrite(15,LOW);   //--> C1  --LED_7
    //    digitalWrite(16,LOW);   //--> C2  --LED_8
    //    digitalWrite(17,LOW);   //--> C3  --LED_9
    //    digitalWrite(18,LOW);   //--> XX  --LED_10
    //    digitalWrite(19,LOW);   //--> XX  --LED_11
    //    digitalWrite(20,LOW);   //--> XX  --BATTERY_SENSE
    //    digitalWrite(21,LOW);   //--> XX
    //    digitalWrite(22,LOW);   //--> XX
    //    digitalWrite(23,LOW);   //--> E0
    //    digitalWrite(24,LOW);   //--> E1
    //    pinMode(A2, INPUT_PULLUP); //-->25 (ALSO C2)

  • Starting to think about states and animations

    adellelin04/20/2020 at 02:56 0 comments

    This weekend we started thinking about the possible states of the badges and getting one of them working. We started with 4 of the LEDs on the board that have pwm enabled, writing a slow chase where each of the LEDs fade on and off.

    We're using the elapsedMillis library that allows us to access clock time whilst other processes are going on in the loop. The main concept is when elapsed time is more than the set duration, we reset it. 

    Next thing was to set the state of each LED. All LEDs start in off state with only the first one on. In each loop, turn the next LED on, and turn the current one off. 

    Code is in - RadioHead69_RawDemo_RX_0419b.ino

  • Measuring power draw in sleep modes

    mpinner04/20/2020 at 00:46 0 comments

    Now that we have a setup for programming and testing the TX and RX boards, we're starting to explore a bit of programming. One of the possibilities is use sleep modes to conserve battery power. Lowpower labs has a library that puts the MCU to sleep and wakes it up and various intervals.

    First download the library here, and put it into the Arduino library folder. To get it working for the PB variant, go to the LowPower.h file and add the PB variant to this line. Chage

    #if defined (__AVR_ATmega328P__) || defined (__AVR_ATmega168__)


    #if defined (__AVR_ATmega328P__) || defined (__AVR_ATmega168__) || defined (__AVR_ATmega328PB__) 

    Our test involved sleeping the MCU for 8s at a time, it would wake up, receive radio messages and go back to sleep. Adding this line to the code:

    LowPower.powerDown(SLEEP_8S, ADC_ON, BOD_OFF);

    To calculate the power draw, we disconnected the power board from the controller board, soldered cables to power and ground pins and connected to multimeter in A mode. 

    Initially the radios were chirping and LEDs were flashing to indicate messages received and acknowledgement. The power readings were all over the place. The sleep seemed promising as we'd note a shift to about 16ma when the sleep cycle kicked in and it would jump to 37ma when there was clearly no sleep happening. The LEDs drawing up to 20ma was a little concerning as we'd see the power bounce all over, so we decided to turn all LEDs off to get a better read on the situation.

    At this point we still don't have a good sense of what the radios are doing when we're not explicitly sending or receiving anything. We hope not much. The power draw calculations without LEDs and unused radios are such:

    • During sleep, power draw was about 2mA
    • Without using the low power mode - 26mA

  • Burning the bootloader (when things go wrong)

    adellelin04/06/2020 at 16:16 0 comments

    After getting the first board rev from Sophi, I wanted to test out programming it using an FTDI programmer from Sparkfun. Couple of issues - using a new mac with USB-C hubs, the board didn't get recognized by the mac. The other problem was that the boards come wired at 5V, whereas our board was at 3.3V. I had initially mixed up these issues and thus corrupted the bootloader, this manifested in the board not being recognized anymore when trying to program. 

    To burn the bootloader, we used an AVR programmer and soldered some headers to the board according to these pinouts.

    Connect the AVR programmer to your laptop USB port and then select these board options. The go to the bottom and select Burn Bootloader.

    The board will light up. In order to program the bootloader, make sure that the headers are disconnected from the AVR programmer (even if the programmer is not connected to the laptop). Also cut the trace between the 5V and middle pad, and bridge the middle pad to the 3.3V pad with solder on the FTDI board.

    Now I was able to upload the scripts again to the board and happy days!

  • Setup board environment

    adellelin03/29/2020 at 22:00 0 comments


    Arduino AVR Boards version 1.6.22 and above

    (Tools->Boards->Boards Manager)

    <>Install MiniCore Board<>

    This installation method requires Arduino IDE version 1.8.6 or greater.

    • Open the Arduino IDE.
    • Open the File > Preferences menu item.
    • Enter the following URL in Additional Boards Manager URLs:
    • Open the Tools > Board > Boards Manager... menu item.
    • Search for MiniCore.
    • Click Install.
    • After installation is complete close the Boards Manager window.
    • Selecting the right board:
      • Open the Tools > Board > MiniCore: ATmega328
      • Tools > Variant > 328PB

    <>Install Libraries<>

    From Arduino Library Manager:

    • ElapsedMillis
    • SoftPWM

    RadioHead Library

    - Download this Link and put into /Documents/Arduino/Libraries. This is the reference site.

    Low Power Labs

    - Follow steps here

  • Rev 1 done! Next​

    Sophi Kravitz03/24/2020 at 22:49 0 comments

    One circuit has charlieplexed LEDs

    One circuit has not charlieplexed LEDs

    Using SOT-5 power supply.

    Final rev uses Atmega328P, not "PB"

    Test capacitive touch sensor

    Send extra battery holders

  • Battery life tests

    Sophi Kravitz02/29/2020 at 17:01 2 comments

    The setup: 

    Measure battery voltage (but use benchtop power supply so I can adjust it quickly), check corresponding analog measurement, and check voltage coming out of v-boost (how long will it boost to 3.3V). Analog measurement is sent over the radio to another board which is plugged into the serial monitor. The board taking the measurements is only on benchtop supply power.

    The transmitting board has zero LEDs on except for blinking with TX.

    Test 1:

    too low

    Test 2:

    Send data from a full battery and measure how long it lasts.

    8 LEDS full on. Unfortunately they are yellow-white LEDs from the floor -shrug, no clue what they are- we can call them 20 mA. 

    UPDATE: it lasted 2 hours.

    Battery (volts)
    1.5 (fresh battery)
    1.1 (doesn't comm)
    708 (timestamp 16:15:37)
    675 (timestamp 18:15:12)


    -Figure out conflict between Radiohead library interrupts and Atmega 328 native.

    -Add interrupt 0 to code (interrupt 1 won't work with Radiohead)

    -Look at battery datasheet, make a table with a couple of different ones.

    -Figure out how to program board via UART (reset does not pull down, not sure why)

  • Last month of 2019

    Sophi Kravitz12/30/2019 at 19:26 0 comments

    December 21: ordered parts, stencils, PCBs.

View all 9 project logs

Enjoy this project?



Kosma wrote 05/23/2020 at 08:37 point

why not solar power and AA or lipo? this are naturaly way for this device.

in my opinion good antena is important

  Are you sure? yes | no

mpinner wrote 03/25/2020 at 00:08 point

how are we feeling about charlieplexing these days? 20 leds? or 30? is that too many?

  Are you sure? yes | no

mpinner wrote 01/30/2020 at 18:46 point

cannot wait!

  Are you sure? yes | no

Sophi Kravitz wrote 01/31/2020 at 22:52 point

power tests on the weekend :P

  Are you sure? yes | no

AVR (lordKiCAD) wrote 12/11/2019 at 22:47 point

Join forces ? I 've been wanting to finish a similar project

  Are you sure? yes | no

Sophi Kravitz wrote 12/27/2019 at 17:36 point

hi @AVR yessss, checking out your project now. sorry for late response, I didn't see this

  Are you sure? yes | no

seilerjacinda925 wrote 11/19/2019 at 16:06 point


Nice to meet you after viewing your profile i am Jacinda, from (jakarta) indonesia,

i have a project discussion with you please email me on: (

  Are you sure? yes | no

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates