Showing posts with label GitHub. Show all posts
Showing posts with label GitHub. Show all posts

Wednesday, August 13, 2014

Git and GitHub - For Sotfware Development

Beware, this post may be contagious.

My confession: over the last few weeks I have become a "Git and GitHub Junkie" !

During my work career I have used several Software Development Tools. Most have had some sort of Revision Control, the simplest is no control at all, where files are backed up by the user. Others automate the process, and provide tools to allow the user to see the difference between revisions. In general, most just document the time line of a software project and provide a snap shot of the project when requested. That is, they provide a one dimensional view of a software project.

As an analogy comparison, Git and GitHub provides a three dimensional view or "branches" to a software project. Where simultaneous branches are used for; Development, Experimentation, Patches, HotFixes, and Deployment,  all from within one software project environment. When complete, branches can be merged to update the project, history is maintained for project completeness.

The "GitHub" is the network accessible repository, where others can access your published project.

The "Git"  is the local environment on your computer, where the actual work is typically done. There are command-line and GUI window operations to control the local software development, and which all work with most program development/editor tools.

When necessary, local Git Tools provide means to transfer status and data to-or-from the networked "GitHub". Internally and during transfers, Git and GitHub protects the data from corruption and miss handling with sophisticated cryptographic methods. The use of cryptographic methods is NOT for obscuration nor security, but is simply used to maintain data integrity. What goes into the network or local repository, will come out exactly as it went in.

Each view of a project is call a "branch", Git provides (almost) simultaneous views of a software project. For the developer, a simple command switches between branches.

Typical Local Developer commands are as follows, my linux command-line alases are shown within parentheses, "()":
  • List the current branches = (gbr), git branch 
  • Switch branches = (gco ...), git checkout <branch name>
  • Create a new branch (clone of current) = (gco -b ...), git checkout -b <a new branch name>
  • Save current branch edits = (gci ...), git commit -a -m "A quick note that is saved in history"
  • Merge another branch with the current = (gmg ...), git merge <other branch name>
  • Get current status = (gst), git status 
  • Upload to the GitHub = (gpu ...), git push --all
  • To get Help = git --help

There are other commands that do more sophisticated things, but the basics as listed above will do most things for a new user.

Branches can be named anything, but typical branch names are: "Release", "Dev" (development), "HotFix", "Exp" (experimental). These are then divided into yet other branches to support actual development effort.

For example; When HotFix1234 is finished, it would be merged into HotFix, which could be merged into Dev, and which would ultimatly be merged into Release at the appropriate time. Note: Multiple HotFixNN's could be worked on at the same time, if they effect different sections of code, they will merge without conflicts, otherwise the conflicts will need to be resolved during the merge process. Tools are available to assist with conflict resolution.

My GitHub repository is https://github.com/wa0uwh, over time more software projects will be included.

My current Git software project is "Minima - Alternate Tuning Method" (see previous posts).


Yes,  . . . I am a Git and GitHub Junkie,  . . . and with help,   I am finally willing to admit it !!

--

Tuesday, August 5, 2014

Minima - Software Progress 2

Current State

Updated: Aug 7, 2014 11:26
Updated: Aug 9, 2014 18:32
Updated: Aug 14, 2014 18:20
Updated: Aug 20, 2014 21:59
Updated: Sep 1, 2014 06:44
Updated: Sep 23, 2014 10:12

See the next post for help text, and here for a users successful build.

The additional functions that my Minima Alternate Tuning Method Repository provides are as following.
  • High resolution, plus/minus 1Hz Tuning (thanks to Jeff - KO7M).
  • Near Normal Dial Tuning Method as found on most Dial Radio system.
  • Support for six additional buttons
  • Tuning Cursor positioning via Left/Right push buttons.
  • Automatic (original) or Manual Selection of Sideband via push button.
  • Ham Band Switching via Up and Down push buttons
  • Nine Ham Band Memories, with Frequency and Sideband Saved
  • Two Memories for each Band, implemented and saved as "A" and "B" VFO
  • RF386 Power Amplifier Filter Selection via generated clock pulses on PD7 (pin13).  Note: It works now, with new revised timing pulses.
  • Tuning by 2500Hz Steps (similar to FT-817, mode set via button 7)
  • Re-Center Tuning Knob while any Button, Key, or PTT is pressed, without changing the Freq
  • RIT Mode, implemented as +-990Hz in 10Hz Steps
  • Limit TX to within the Ham Bands (currently, the user must control Sidebands out side of the Ham Bands)
  • Include Jeff -KO7M Si570 Driver "Tuning Click Fix"
  • Frequency Dial Calibration via IF Frequency Adjustment
  • IF Configuration and Adjustments
  • On demand, save user specified Band Memories into non-volatile memory, and retrieved on power up.
  • Factory Reset - By Holding any Button at Power-ON or Processor Reset
  • Split, Cross-Band or In-Band operations; Transmit on "A" VFO and Receive on "B" VFO (Note: I need to check the Regulations to see if Split operations is legal on HF?)
  • Automatic CW ID and/or CW CQ Calling Memories.
  • Two CW Macros and Two QRSS Macros Beacon
  • User Preference Menu Edit Mode
The software can be access at:


Some Plans

Additional functions that are currently being planned, are:
  • Implement option for UK Band Limits and Default Frequencies

Long Term Plans

Some longer term implementation ideas include:
  • Implement WSPR, and PropNET Transmit Beacon modes.
  • Limits imposed on modes, based on Band Plans, i.e., SSB Transmit only in phone section. A "digital" mode could allow computer controlled transmit via a sound card on Upper Sideband.
  • etc, etc
--

Sunday, August 3, 2014

Minima - Software Progress

With a now working Minima Controller board (see previous post), I can continue software development and test.

I have just added the following functions to my Minima GitHub Repository:
  • Tuning by 2500Hz Steps (mode set via button 7)
  • Re-Center Tuning Knob while any button is pressed, without changing the Freq

I now have working, but not officially published:
  • RIT is working as expected (tested via the Si570 RF output)
  • Limit TX to within the Ham Bands (currently, the user must control Sidebands out side of the Ham Bands)

The above new functions are added to the current list:
  • High resolution, plus/minus 1Hz Tuning (thanks to Jeff - KO7M).
  • Near Normal Dial Tuning Method as found on most Dial Radio system.
  • Tuning Cursor positioning via Left/Right push buttons.
  • Automatic (original) or Manual Selection of Sideband via push button.
  • Ham Band Switching via Up and Down push buttons
  • Nine Ham Band Memories, with Frequency and Sideband Saved
  • RF386 Power Amplifier Filter Selection via generated clock pulses (Note: Not a lot of testing has been done on this yet)
More clean up and testing is needed.

--

Tuesday, July 22, 2014

Minima - Programming

UPDATED: Aug 14, 2014 15:58


Due to my Minima CPU Module damage (see: Link) I will have some time to consider some addition modifications to my Minima Program.

Please provide comments and feedback.

Current Status

As currently implemented the following functions exist and published on my GitHup Repository. This implementation is know as an "Minima Alternate Tuning Method". Note: these functions are not found in the Farhan's original sketch.
  • High resolution, plus/minus 1Hz Tuning (thanks to Jeff - KO7M).
  • Near Normal Dial Tuning Method as found on most Dial Radio system.
  • Tuning Cursor positioning via Left/Right push buttons.
  • Automatic (original) or Manual Selection of Sideband via push button.
  • Ham Band Switching via Up and Down push buttons
  • Nine Ham Band Memories, with Frequency and Sideband Saved
  • RF386 Power Amplifier Filter Selection via generated clock pulses (Note: Not a lot of testing has been done on this yet)

Recent Additions

These are some recently implemented, but NOT published, functions that are being tested. These will be made available soon.
  •  Re-centering the Tuning POT can be done while any button is pushed (held) without changing the current frequency - DONE
  • Tuning 2500 Hz Steps, similar to FT-817 left knob. Note: most SSB stations are spaced 2500 Hz apart as seen on most waterfalls. - DONE

Some Plans

Additional functions that are currently being planned, are:
  • Two Memories for each band, implemented and saved as "A" and "B" VFO - DONE
  • Plus or minus 990 Hz RIT with 10 Hz resolution - DONE
  • Cross-Band or In-Band operations; Transmit on "A" VFO and Receive on "B" VFO (Note: I need to check the Regulations to see if Cross-Band operations is legal?) - DONE
  • Transmit enabled only within the nine Ham Bands (Note: due to complexity, 60m band is not currently planned) - DONE

Long Term Plans

Some longer term implementation ideas include:
  • Frequency Dial Calibration - DONE
  • IF Configuration and Adjustments - DONE
  • On demand, save user specified Band Memories into non-volatile memory,  and retrieved on power up. - DONE
  • Implement a simple Menu System for user specified function and modes.
  • Implement simple automatic CW ID and CW CQ Calling Memories. - DONE
  • Implement QRSS, WSPR, and PropNET Transmit Beacon modes. QRSS - DONE
  • Limits imposed on modes, based on Band Plans, i.e., SSB Transmit only in phone section. A "digital" mode could allow computer controlled transmit via a sound card on Upper Sideband.
  • "Factory" Reset (memories and configuration) on demand. - DONE
  • etc, etc

The GitHUB

With the normal GitHUB functionality different "Named" levels of complexities can be made available for users;
  • Farhan's Original Sketch
  • My Alternate Tuning Method without buttons (this works with the original Minima Hardware as documented by Farhan)
  • My Alternate Tuning Method used with Six additional buttons (used by functions as proposed here)
  • Beta code with new untested functions

Hardware Requirements

All of the above proposed functionality requires only the addition of a few parts (see: Link);
  • One 47K Resistor between two pins on the microprocessor.
  • Six simple push button switches with six 4.7K Resistors, all installed on the front panel. 
  • For RF protection, a few bypass Caps are suggested (see: Link).

Implementation

To implement all of the above functionality in the programming space available, a Sketch rewrite for size optomization may be necessary. Therefore, the original Sketch and programming details may become less obvious to a novice programmer.


Your Help Needed

Other implementation ideas are Requested, Encouraged and Welcome.

OR, this could be a starting point for your own GitHUB Fork, a place to save your Sketch Modifications and share in the programming fun.

OR, someone that likes to write user documentations is always welcome to help. But note, all of this is in flux, and therefore flexibility is a necessity.

Please provide comments and feedback.

--

Monday, June 2, 2014

Learning GIT Hub

In the previous post I listed several GIT Hub URL's, after some reading it appears that I have misused the GIT functionality.

If I understand the documentation correctly, I should have "forked" Farhan's "radiono" repository, which puts a proper "copy" within my GIT Hub account with the same name.

And then, I should have "cloned" that to my local workstation system. where I should have created a "branch", where modifications would be made.

Then "commit" is used to update my local branch copy. then a "merge" to update my "master" copy,  and then a "push" is used to update my GIT Hub master copy.

My "forking/cloning/branching/commiting/merging/pushing" activity shows up on my and Farhan's repository, like is:
and

Most of this GIT stuff is NEW to me, I am still learning, but I think I am now on the right track.

I will/have corrected the links in the previous post.

Much more reading is necessary.

--

Sunday, June 1, 2014

Minima - Proposed New Tuning Method

This post is for a few brave (adventuresome) Minima builders/users. This is a "work in progress" and therefore feedback is requested.

Although I have not completed my experimental Minima Transceiver build, I have built the Digital Control Module and have been working on the Arduino software that controls the Display and the rest of the Minima hardware. See my previous blog posts, or at:

Minima Digital Control and VFO Module
Running REV 0.4.erb
One of the modification that I have made is to incorporate Jeff's (KO7M) 1Hz Driver for the Si570. This modification allows for 1Hz Tuning of the my Minima's VFO. Jeff's Si570 code is available on GIT Hub at:


Also, I have been working to modify the Arduino Sketch to provide an Alternate Tuning Method, what I consider a "Near-Normal" tuning method or functionality, for the original Farhan's Minima circuit and hardware. With only the original circuit's tuning POT to work with, functionality is of course somewhat limited.

The original Minima Arduino Sketch (REV 0.4) changes frequency via the Tuning Pot and pre-programmed steps. Tuning rate is dependent on how far from the "center of rotation" the Tuning Pot is turned. To tune "up and down" around a received signal the Tuning Pot must be turned past the Pot's center location, which of course is not typical of a normal receiver. Farhan's original Minima Arduino Sketch (REV 0.4) is available at:


The original Minima Arduino Sketch of VERY functional. But, I as programmer, and like they say: "programmers will be programmers, and they will modify programs", so, I am, what I am  :-)

My goal for this program modification is to maintain the functionality of the original Minima Arduino Sketch and incorporated Jeff's Integer Si570 Driver, which provides High Resolution Tuning (< 1Hz).

My modified Sketch, can replace the original Minima Sketch (REV 0.4) via a normal Arduino IDE compile and download. And if needed, the original Sketch can be re-installed via the same method.

This modified Minima Sketch (REV 0.4.erb) is available on my GIT Hub, at:


This revision ALSO provides the following:
  • This Sketch can be used in place of original Minima REV 0.4 Sketch (but of course, use at your own risk).
  • Provides Eight Digits for Frequency Display
  • Provides 1Hz Tuning Resolution

     Provides a Near-Normal Tuning Method
  • Tuning is accomplished by moving the cursor via the Tuning Pot to the digit that you want to change.
  • Then wait for the underline cursor to start flashing.
  • Then change the digit by turning the Pot left for lower, and right for higher frequency.
  • Near the Stops (the Pot rotational Stops) the digit will change automatically.
  • At the Stops, the digit automatically changes even faster.

After you stop Tuning (i.e., stop changing the digit), the mode switches back to "cursor move mode" for a few seconds, as indicated by the Non-blinking Cursor, then repeats.
  • The cursor can be "parked" to the right of the least digit.

The current Mode is indicated by the cursor style:
  • Blinking Underline Cursor = Digit Change Mode
  • Non-Blinking Underline Cursor = Cursor Move Mode

These modes are ALSO indicated by the far right character on the top line:
  • "*" = Cursor Move Mode
  • "-" = Digit Change Mode
  • "<" = Digit Changing to lower frequency
  • ">" = Digit Changing to hight frequency

Note: If the Cursor Move Mode seems to get lost, move the cursor to each of the two hard Stops to recalibrate cursor movement.

Some new functions on my To-Do list include:
  • Stay Compatable with Original Minima Hardware
  • Provide for Rolling Menus
  • Band Pick from Menus
  • User Defined Frequency Memories
  • User Defined Frequency Tuning Steps (e.g. similar to FT-817's 2.5KHz steps)
  • Transmit Macro (send CW CQ, ID or more)
  • Transmit Mode from Menu
  • Beacon Modes: CW, QRSS, and WSPR-Tx
  • User Defined Operational Preferences; Digit Count, Tuning Rate, etc
  • etc

If you try this initial experimental "REV 0.4.erb", I hope you find it useful.


Have fun !!
and, Provide Feedback !!


UPDATE
Git Hub Repository URL's have been corrected.


--