
The project is built using the AVRSTUDIO tools version 3.55
The chip is programmed with the FBPRG16 programmer by BA1FB.



The AVR2343 draws roughly 400uA, running, without outputs attached. 

It wakes up every 16mS, and each of the three CW tasks checks to see if 
it's time for that task to advance. If not, they pass control back to 
the system, and the system goes to sleep.

Processor utilization is roughly 0.5% at 1 MHz clock.
I could make this lower by slowing down the T0 ints more, but that would 
make larger errors in the CW pulse widths. 

Timer 0 counts "ticks" that occur every 976uS (1MHz/1024)
My system wakes up every 16 "ticks" or 15.625mS

As is, the 7 WPM "dot" is 167mS wide, which is 10.6 ints wide, so my 
actual dots are 11 ints wide or 172mS. This is like quantization error 
but in reverse.  I want a 167mS dot, but I am counting in "ints", so I 
can only make the pulse equal or wider, up to the next int.

Total code size, 302 words, including 68 words of morse tables, which 
are not very efficient. However, I have a total of 1024 words of code 
space available, and this job needs to be coded quickly, easy to 
understand, and easy to debug. So no real effort to condense the morse table.

The whole thing is a few kbytes of code, in the free atmel assembler 
from www.atmel.com   I program the chips with FBPRG16 a freeware 
programmer by BA1FB, a Chineese Ham, using an adaptor that I built 
according to his schematic for about $5 in parts, which plugs into my PC parallel port. 

No ram or EEPROM is used, other than a couple bytes of RAM for the processor stack.

Three of the I/O pins send CW strings.
One pin allows selection between the two banks of three messages. 
There will be two chips, one set to the high bank, the other to the low bank. 

There is one spare pin, which I am using now to measure CPU "uptime" 
to determine processor usage, but in the flight code, I will set it 
up as an output pin, taken low. 

The chip cost is $2.80 in singles from Digi-key, part number 
AT90LS234310PI-ND   Ideally we could use the 1PI version, if it's 
less expensive, but the industrial DIP is only available in 10 MHz from digikey.  

The chip does not require anything external other than power.
Optionally, a bypass cap on VCC, and a 0.1uF to ground and 
1k pullup on it's /RESET pin (1) would be nice. 

It's been running here for about 8 hours, and other than pulling 
it down to change that one message from "BOB" to "88" and to make 
some cpu utilization measurements, it's been running perfectly 
without interruption or glitch.

Pinout:

Pin 1: "/RESET" pull this up. You could use 10k and a 0.1 uf cap to ground, 
       but this is not strictly  needed. Just pull high will do.

Pin 2: Message bank select, High is the HI, 73, CQ bank, low is ANDE, 88, DAVE

Pin 3: is not used, you can leave it floating (output forced low)

Pin 4: is ground

Pin 5: is CW output 0, HI or ANDE

Pin 6: is CW output 1, 73 or 88

Pin 7: is CW output 2, CQ or (OTHER MESSAGE TBD)

Pin 8: is VCC, 2.7-6V on the "space" chips, 5V on what I have here.
