AVR Butterfly¶
The Butterfly Demo board from Atmel uses an Atmega169 controller. It uses the internal 8MHz oscillator which can be calibrated with the external 32kHz quartz.
amforth uses the serial connection (3pin connection on the left side) as it’s terminal.
amforth completely replaces the flash content. It overwrites the bootloader. You definitely need ISP or JTAG to upload amforth to the controller. Afterwards the serial programming does not work anymore. You’ve been warned!
A lot of useful code and examples how to use the various parts of the butterfly can be found at the wiki of the German FIG Forth e.V. at www.forth-ev.de/wiki/doku.php/projects:avr:hilfsmittel. Basic Knowledge of the German language is required.
The 32 kHz external quartz can be used to generate a timer tick. The following definition may help:
\ implement a timer with the 32kHz oszillator
decimal
\ timer/counter subsystem
182 constant ASSR
\ timer/counter2
179 constant OCR2A
178 constant TCNT2
176 constant TCCR2A
112 constant TIMSK2
75 constant GPIOR2
55 constant TIFR2
4 constant OC2addr
5 constant OVF2addr
variable tick
\ increment the tick variable
: timer2isr ( -- )
1 tick +!
;
\ initialize and start the timer.
: +32kHz ( -- )
\ Set timer 2 to asyncronous mode (32.768KHz crystal)
1 3 lshift ASSR c!
\ Start with prescaler 128
1 0 lshift
1 2 lshift or TCCR2A c!
\ Wait until timer 2's external 32.768KHz crystal is stable
begin
ASSR c@
1 2 lshift \ TCN2UB
1 0 lshift or \ TCR2UB
1 1 lshift or \ OCR2UB
and
until
0 tick !
\ use overflow interrupt
['] timer2isr OVF2addr int!
1 TIMSK2 c!
;
: -32kHz
\ Turn off interrupt
0 TIMSK2 c!
\ Turn off timer 2 asynchronous mode
ASSR c@
1 3 lshift invert and ASSR c!
;