'**************************************************************************
'* Name : Timer-Ton
'* Function : First Steps Example
'* Hardware : aTeVaL Evaluation Board - http://www.ehajo.de
'**************************************************************************
'* Compiler : lunaAVR 2013.r4 (or newer)
'**************************************************************************
'* Author : rgf, avr@myluna.de
'* Date/Version: 16.08.2013
'* www : http://avr.myluna.de
'**************************************************************************
' µC-Belegung am Beispiel Atmega328p
' Summer: PortD.7 !Die Lötbrücke "SPKR" auf der Lötseite muss geschlossen sein!
' Taste1: PortD.2
' Taste2: PortD.3
'**************************************************************************
avr.device = atmega328p 'Controller-Typ festlegen
avr.clock = 8000000 'Dem Compiler mitteilen mit welcher Taktrate der Controller läuft
avr.stack = 64 'Den Programmstack einstellen
'Die Port-Pins der Taster und des Summers mit einem Bezeichner
'versehen. Dies zur besseren Lesbarkeit im Quelltext
#define SUMMER as PortD.7
#define TASTE1 as PortD.2
#define TASTE2 as PortD.3
'Diese Werte berechnen sich aus "8MHz / Frequenz des Tones / 2"
'Sollte ein anderer CPU-Takt verwendet werden muessen
'die Werte neu berechnet werden.
#define TON_C as 15152
#define TON_CIS as 14545
#define TON_D as 13468
#define TON_ES as 12618
#define TON_E as 12121
#define TON_F as 11364
#define TON_FIS as 10899
#define TON_G as 10101
#define TON_GIS as 9479
#define TON_A as 9091
#define TON_B as 8421
#define TON_H as 8081
#define TON_CC as 7576
#define TON_CCIS as 7273
#define TON_DD as 6734
#define TON_EES as 6309
#define TON_EE as 6061
#define TON_FF as 5682
#define TON_FFIS as 5450
#define TON_GG as 5051
#define TON_GGIS as 4740
#define TON_AA as 4546
#define TON_BB as 4211
#define TON_HH as 4041
SUMMER.mode = output,low 'Summer als Ausgang
TASTE1.mode = input,pullup 'Taste1 als Eingang, Pullup einschalten
TASTE2.mode = input,pullup 'Taste2 als Eingang, Pullup einschalten
'Den Timer1 Konfigurieren
'Taktteiler des Timers einstellen auf 1:1 (8 Mhz)
Timer1.Clock = 1
'Compare-Interrupt aktivieren
Timer1.CmpA.Isr = timer1_compare
'CTC-Mode aktivieren (Zähler setzt sich selbsttätig zurück)
Timer1.CmpA.Clear.enable
' Outputcompare-Register setzen, hier fuer Ton A
' Um einen anderen Ton auszugeben muss man hier
' einen anderen Wert aus den Defines eintragen
Timer1.CmpA.Value = TON_C
'Globale Interrupts einschalten
Avr.Interrupts.Enable
'Hauptschleife
do
if TASTE1=0 then
'Taste 1 wurde gedrueckt, Ton starten
Timer1.CmpA.enable
end if
if TASTE2=0 then
'Taste 2 wurde gedrueckt, Ton aus
Timer1.CmpA.disable
end if
loop
isr timer1_compare
SUMMER.toggle
endisr