{"id":18041981,"url":"https://github.com/camilstaps/atsamf-source","last_synced_at":"2026-05-18T02:02:52.516Z","repository":{"id":91511200,"uuid":"231937369","full_name":"camilstaps/ATSAMF-source","owner":"camilstaps","description":"Source code of the ATSAMF QRP transceiver by Rick PA5NN","archived":false,"fork":false,"pushed_at":"2022-12-10T20:40:18.000Z","size":2078,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-04-05T02:41:30.991Z","etag":null,"topics":["arduino","atsamf","electronics","ham-radio","qrp"],"latest_commit_sha":null,"homepage":null,"language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/camilstaps.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,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-01-05T15:28:51.000Z","updated_at":"2021-12-27T13:09:33.000Z","dependencies_parsed_at":null,"dependency_job_id":"4cc79748-5e49-4479-86e9-fcc09bb04e58","html_url":"https://github.com/camilstaps/ATSAMF-source","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/camilstaps/ATSAMF-source","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/camilstaps%2FATSAMF-source","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/camilstaps%2FATSAMF-source/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/camilstaps%2FATSAMF-source/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/camilstaps%2FATSAMF-source/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/camilstaps","download_url":"https://codeload.github.com/camilstaps/ATSAMF-source/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/camilstaps%2FATSAMF-source/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279000703,"owners_count":26082837,"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-08T02:00:06.501Z","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":["arduino","atsamf","electronics","ham-radio","qrp"],"created_at":"2024-10-30T16:22:24.735Z","updated_at":"2025-10-08T21:44:25.288Z","avatar_url":"https://github.com/camilstaps.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ATSAMF source\n\nThis repository contains the software for the [ATSAMF][], a multiband QRP CW\ntransceiver with discrete components, based on the ATS and SODA POP designs by\n[Steve Weber (KD1JV)][KD1JV] and developed by Rick Rabouw (PA5NN).\n\nThe software is based on [Camil Staps (PA5ET)][PA5ET]'s\n[software][sodapop-source] of the [SODA POP][sodapop], with additional features\nand a larger display.\n\nThe original software of the SODA POP was written by Steve. The [alternative\nversion][sodapop-source] was written by Camil with contributions by [David\nGiddy (VK3IL)][VK3IL]. The adaptation to the ATSAMF is by Camil.\n\nThis is open source software, copyright \u0026copy; Steve Weber, Camil Staps, and\nDavid Giddy, and licensed under GPL v3 (see the LICENSE file).\n\n---\n\n- [Flashing the firmware](#flashing-the-firmware)\n- [Operation](#operation)\n- [Compile-time settings](#compile-time-settings)\n- [Optional features](#optional-features)\n\n---\n\n## Flashing the firmware\n\n1. Download this repository from\n   https://github.com/camilstaps/ATSAMF-source/archive/master.zip.\n2. In the Arduino IDE open `ATSAMF/ATSAMF.ino`.\n3. Using `Sketch` \u0026rarr; `Manage Libraries`, install the `Etherkit Si5351`\n   library by Jason Milldrum.\n4. Download\n   https://github.com/ladyada/Adafruit_CharacterOLED/archive/master.zip and\n   add it to the IDE using `Sketch` \u0026rarr; `Include Library` \u0026rarr;\n   `Add .ZIP Library`.\n5. Connect the device to your computer and upload the sketch.\n\n## Operation\n\nOperation is similar to that described in the [SODA POP][sodapop] manual.\nIt can be described by the state machine below.\nA detailed description is given under the image.\n\n![State machine](README/states.png)\n\n### Startup\nOn startup, the band will be shown. After a 1.5s delay, the rig turns on.\n\n### Tuning\nUse the rotary encoder to tune. Tuning can be done in steps of 10Hz, 100Hz,\n1kHz and 10kHz. Rotate through these steps by pressing the rotary encoder. For\nall steps except 10Hz, the corresponding digit on the display will blink.\n\nDirect Frequency Entry (DFE) can be used by holding the encoder button for 1s.\nIt is only available when a paddle is connected. The display reads `DFE`. Key\nin the desired frequency. The current digit blinks. Save with the keyer button\nor cancel with the RIT button. When all four digits are entered, the new\nfrequency is saved automatically. Abbreviations can be used for 0 (T) and 9\n(N) and for all numbers when enabled (see under\n[Optional features](#optional-features)).\n\n### RIT\nPressing the RIT button turns RIT on. This allows you to fix the transmitting\nfrequency and receive at an offset of up to \u0026plusmin;10kHz. The display shows\nthe RIT offset.\n\n### Tune mode\nPressing the keyer button for 2s turns tune mode on. In this mode, the keyer\nbutton enables and disables transmission, which is useful when tuning the\nantenna. You can also use the dot and dash of the paddle to enable and disable\ntransmission respectively. Use RIT to exit tune mode.\n\n### Message memory\nPressing the keyer button allows you to send a message from memory. Select the\nright memory using the rotary encoder and press KEYER. Use the RIT button to\ncancel.\n\nWhen a message is being transmitted, you can still use the RIT button to cancel\nit. You can also enter beacon mode by pressing the keyer button. In beacon\nmode, the message is repeated continuously with an adjustable delay in between\n(see `BEACON_INTERVAL` under [Compile-time settings](#compile-time-settings)).\nDuring transmission, the keys are only checked *between* the transmitted\ncharacters, so you'll have to hold the buttons longer than normally.\n\nTo update the memory, hold the keyer button for 5s. Enter the message using the\npaddle. This is not possible with a straight key. An open circle in the right\nbottom blinks once after a character space is detected; a closed circle blinks\nafter a word space has been detected. To finish, press the keyer button again.\nThe message will be played back. After this, store the message with the rotary\nencoder and the keyer button. Pressing the RIT button allows you to key in a\nmessage again; pressing the RIT button once more returns to the default state.\n\nThe maximum message length is 64 by default (can be changed in `settings.h`).\nIf you try to enter more characters, the error routine is enabled (see below).\n\n### Preferences\nChange the code speed by holding the RIT button for 2s. Use the paddle or the\nrotary encoder to change, and save with the keyer button.\n\nChange the band by holding the RIT button for 5s. Save with the keyer button.\n\n### Calibration\nThe calibration routine is explained in the manual. Hold the RIT button for 8s\nto enter the calibration routine. This proceeds through the following steps:\n\n1. Correct the Si5351 frequency. Connect a frequency counter to TP3 and turn\n   the rotary encounter to obtain 10MHz.\n2. Correct the intermediate frequency (IF). First adjust CT3 to peak the signal\n   on TP2. Then adapt the frequency using the rotary encoder to peak the signal\n   on TP1 *with a scope*. If the IF had to be changed, readjust CT3; repeat\n   until both TP1 and TP2 are peaked.\n3. Select the right band with the rotary encoder.\n4. Peak the signal with CT1 and CT2. The adjustment can be sharp, especially on\n   the higher frequency bands.\n\nPressing the keyer button returns to the default state.\n\n### Errors\nWhen an error is detected, the display shows `Error` and an alarm signal is\ngiven on the sidetone. You need to power cycle the device.\n\n## Compile-time settings\nThere are several compile-time settings in `settings.h`. Change them before\nuploading the code to the chip.\n\n- `WPM_DEFAULT`: the default key speed in WPM (20).\n- `KEY_MIN_SPEED`: the minimum key speed in WPM (5). Lower speeds than 5 may\n  damage the rig, because the on-time for dashes will be rather long.\n- `KEY_MAX_SPEED`: the maximum key speed in WPM (30). Higher speeds than 30 are\n  untested and may present timing issues.\n- `SIDETONE_FREQ`: the frequency of the sidetone in Hz (600).\n- `MEMORY_LENGTH`: the maximum length of messages in memory, including word\n  spaces (64). Higher values than 255 are unsupported.\n- `MEMORY_EEPROM_START`: the start address of the memory in EEPROM (16). Don't\n  change this unless you know what you're doing.\n- `BEACON_INTERVAL`: the number of dot times between two transmissions of a\n  message in beacon mode. A dot time is 1.2s / WPM (e.g. a beacon interval of\n  15 means 1.5s on 10WPM).\n- `TUNING_STEPS`: an array of tuning steps in mHz. These steps are rotated\n  through with the encoder button.\n- `TUNING_STEP_DIGITS`: which digit to blink when in a tuning step. An array of\n  the same length as `TUNING_STEPS`. Values should be taken from `BLINK_NONE`,\n  `BLINK_0`, `_1`, `_2` and `_3` (`0` is the rightmost digit).\n- There are several band plans. Define one of `PLAN_IARU1`, `_IARU2`, `_IARU3`,\n  `_VK`.\n  The exact boundary definitions are in `bands.h`.\n- Change the default operating frequency of a band by defining e.g.\n\n      #define DEFAULT_OP_FREQ_20 1405500000\n\n## Optional features\nThere are several features that can be added to the rig if you want to. This is\ndone by adding and removing `#define` lines to `settings.h`.\n\n- `OPT_USER_DEFINED_CHARACTERS`: use user-defined LCD characters for a prettier\n  user interface. This may not be compatible with all displays.\n- `OPT_ERASE_EEPROM`: erase the EEPROM by holding RIT for 11s.\n- `OPT_OBSCURE_MORSE_ABBREVIATIONS`: adds number abbreviations to DFE according\n  to the table below. Abbreviations for 0 (T) and 9 (N) are always enabled.\n\n  | Letter | Number\n  ---|---\n  | A | 1\n  | U | 2\n  | W | 3\n  | V | 4\n  | S | 5\n  | B | 6\n  | G | 7\n  | D | 8\n\n[KD1JV]: http://kd1jv.qrpradio.com/\n[PA5ET]: https://camilstaps.nl\n[VK3IL]: https://www.vk3il.net/\n[sodapop]: https://groups.yahoo.com/neo/groups/AT_Sprint/files/SODA%20POP/\n[sodapop-source]: https://github.com/camilstaps/SODA-POP-source\n[ATSAMF]: https://a03.veron.nl/projectvoorstel-pa5nn-zelfbouw-qrp-hf-cw-transceiver/\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcamilstaps%2Fatsamf-source","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcamilstaps%2Fatsamf-source","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcamilstaps%2Fatsamf-source/lists"}