'************************************************************************** '* 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