{"id":21710238,"url":"https://github.com/rhthomas/pt3p-zeta","last_synced_at":"2026-05-13T12:48:50.152Z","repository":{"id":81147456,"uuid":"120691409","full_name":"rhthomas/pt3p-zeta","owner":"rhthomas","description":"Library for radio module and part III project solution.","archived":false,"fork":false,"pushed_at":"2018-05-14T14:43:14.000Z","size":518,"stargazers_count":1,"open_issues_count":0,"forks_count":2,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-20T17:53:58.756Z","etag":null,"topics":["msp430","msp430fr5739","radio","rf","transient","zetaplus"],"latest_commit_sha":null,"homepage":"","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/rhthomas.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2018-02-08T00:53:38.000Z","updated_at":"2024-05-05T01:16:55.000Z","dependencies_parsed_at":null,"dependency_job_id":"249bda91-d38b-488b-9e2d-bdde2ea2e689","html_url":"https://github.com/rhthomas/pt3p-zeta","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/rhthomas/pt3p-zeta","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rhthomas%2Fpt3p-zeta","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rhthomas%2Fpt3p-zeta/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rhthomas%2Fpt3p-zeta/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rhthomas%2Fpt3p-zeta/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rhthomas","download_url":"https://codeload.github.com/rhthomas/pt3p-zeta/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rhthomas%2Fpt3p-zeta/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279058705,"owners_count":26094845,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-15T02:00:07.814Z","response_time":56,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["msp430","msp430fr5739","radio","rf","transient","zetaplus"],"created_at":"2024-11-25T23:14:18.592Z","updated_at":"2025-10-15T06:58:09.195Z","avatar_url":"https://github.com/rhthomas.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# pt3p-zeta\nLibrary for radio module and part III project solution.\n\n---\n\n## The Project\nThe synopsis of my Part III individual project is networking in transient\nsystems. Take for example an end node of which is only powered by a transient -\nthat meaning it is intermittent and non-constant - supply such as a solar cell,\nit would only be powering the device when there is light incident on the cell\n(i.e. daytime). Any messages that are sent to this node when it is not powered\nwould therefore be lost.\n\nMy approach to solving this problem is to incorporate wake-up receiver (WuRx)\ntechnology with low power operation and non-volatile memory.\n\n## The Platform\n![Pinout diagram](./pinout.png)\n\n### Micro-controller\nThe micro-controller of choice is the MSP430FR5739 from Texas Instruments. This\nis due to its low power consumption and integrated non-volatile FRAM memory. The\nintention for the final solution is that the received data will be stored in NVM\nuntil the supply is sufficient to handle the data. Hence after a SPI transfer\nfrom the radio, the data will be written to FRAM and the MCU will sleep.\n\n### Supply Monitoring\nThe supply of the node is monitored by a low-power comparator that triggers at\napproximately 3V. When the supply is above 3V, the node is active and runs the\ncode for its *normal* operation. When the supply is below this, the node will\ncut its power-supply and only wake-up when there is activity on the channel.\nShould a packet be incoming the device is woken, writes the received packet to\nnon-volatile memory (NVM), and then shuts down again. This keeps the inactive\nconsumption very low -- on the order of nano-amps -- allowing the inactive\ndevice to survive for a very long time.\n\n### RF Radio\nThe radio that will be used - and hence the repo is for - is the ZETAPLUS module\nfrom RF solutions. This comes with a CODEC chip for simple SPI/UART\ncommunications and a very low power sleep state. The actual radio part of the\nmodule is the Si4455 from Silicon labs.\n\n### Wake-up Trigger\nThe wake-up trigger is in the form of the UB20 voltage detector and associated\nrectifying antenna from the [University of Bristol](http://www.bristol.ac.uk/engineering/research/em/research/zero-standby-power/).\nThis ultra-low-power and very sensitive voltage detector will connect the power\nsupply to the MCU when the rectenna detects RF activity, thus allowing it to\nreceive the packet.\n\n## The Repository\nThis repository contains the code necessary for driving the ZETAPLUS radio that\nI have chosen as the communications method for this project. Onboard the module\nthere is a CODEC chip which decodes simple\n[*Hayes commands*](https://en.wikipedia.org/wiki/Hayes_command_set) in order set\nthe required registers on the Si4455 radio, from Silicon Labs.\n\n### Directory Structure\n* `hibernus/` - Contains hibernus library from D. Balsamo et al.\n* `lib/` - Contains the library files of the implementation.\n    * `spi` - Contains the SPI initialisation and transfer functions.\n    * `uart` - Contains the UART initialisation and print functions for\n      debugging.\n    * `util` - Used to setup peripherals such as clocks/timers/pins etc.\n        for the MSP430FR5793.\n    * `zeta` - This holds the main library functions for interfacing with the\n    radio module.\n* `test/` - Main files to test each module.\n    * `test-hib.c` - Test hibernus modifications work.\n    * `test-radio-rx.c` - Test receiving packets from radio module.\n    * `test-radio-tx.c` - Test transmitting packets from radio module.\n    * `test-radio.c` - Unified radio test suite. Just different `define` for Tx'er or Rx'er.\n    * `test-sdn-hib.c` - Incorporate hibernus into the shutdown test case. This\n        shows two modes of operation; active, which counts up the LEDs, and\n        inactive, where the processor flashes the LEDs and then removes power.\n        This is the backbone of the main proposed operation.\n    * `test-sdn.c` - Test the simple case where the same code is run, but\n        release the latch of the power-supply.\n* `LICENSE` - Here is the copyright licenses of any other software that is used\n  in this project (although it may not be included in the repo).\n* `README.md` - This file.\n* `main.c` - Combined main file which will demonstrate the proposed solution to\n  the project. This will receive few updates until all other modules have been\n  tested and work as expected.\n* `pinout.png` - Pinout diagram for connecting peripherals to the MSP board.\n\n## Documentation\nThe library used in this project is documented with Doxygen style comments. The\ncompiled Doxygen is available [here](https://rhthomas.github.io/docs/zeta).\n\n## TODO\n- [x] Write libraries.\n\t- [x] UART\n\t- [x] SPI\n\t- [x] ZETAPLUS\n- [x] Configure radio with libraries (i.e. set RF baud and sync bytes).\n- [x] Get transmission working.\n- [x] Receive packet over RF.\n- [x] Store packet in NVM.\n- [x] Wake-up node over RF with UB20.\n    - [x] Investigate relationship between rectenna output voltage and range.\n- [x] Write unified `main.c` program.\n\t- [x] Test Hibernus.\n    \t- [x] Test comparator.\n    \t- [x] Test Hibernus in isolation.\n\t\t- [x] Remove clashes with clock/pin initialisation *(change as per the\n              above pinout diagram)*.\n        - [x] Sleep hibernus test in LPM4.5.\n    - [x] Test shutdown hardware.\n    - [x] Incorporate hibernus into shutdown hardware.\n    - [x] Test `main.c` without radio modules (Hardware triggers i.e. buttons).\n    - [x] Test `main.c` with radio hardware included.\n    - [x] Incorporate NVM packet storage.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frhthomas%2Fpt3p-zeta","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frhthomas%2Fpt3p-zeta","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frhthomas%2Fpt3p-zeta/lists"}