Der kleine Lautsprecher der halvedDisc2® (auf der
Rückseite / hinter dem Display) ist an PORTF0 angeschlossen.
Experiment 1 - einfaches Toggeln des Bits 0 an Port F:
/*
* Programm: speaker.c
* Author: tux@mikrocontrollerspielwiese.de
*/
#include <avr/io.h> // Bibliothek mit Befehlen für Mikrocontroller Ein- und Ausgaben
#define F_CPU 2000000UL // Taktfrequenz 2 MHz
#include <util/delay.h>
int main (void) {
PORTF_DIR = 0b00000001; // Datenrichtungsregister: Pin des Speakers ist nun Ausgang
while(1) {
PORTF.OUT = 0b00000001;
_delay_ms(0.1);
PORTF.OUT = 0b00000000;
_delay_ms(0.1);
}
return 0;
}
Experiment 2 - Benutzen eines Timers:
/*
* SpeakerMitTimer.c
* Author: tux@mikrocontrollerspielwiese.de
*/
#include <avr/io.h>
#include <avr/interrupt.h>
// Interrupt Service Routine des Timers F0
ISR(TCF0_OVF_vect) {
PORTF.OUT ^= 0b00000001; // Toggeln des Speaker-Pins
}
int main(void) {
PORTF_DIR = 0b00000001; //Datenrichtungsregister: Pin von Speaker ist nun Ausgang
cli(); //Interrupts deaktivieren, um in Ruhe die Timerinterrupts zu konfigurieren
// Timer F0 konfigurieren
TCF0.CTRLA = TC_CLKSEL_DIV64_gc; //Prescaler: 64
TCF0.CTRLB = 0; //select Modus: Normal
TCF0.PER = 50; //Zähler-Top-Wert, Werte: 1...65535
TCF0.CNT = 0; //Zähler zurücksetzen
TCF0.INTCTRLA = 0b00000011; //Interrupt Highlevel
// Interrupts High-,Medium- und Lowlevel freigeben
PMIC.CTRL |= PMIC_HILVLEN_bm |PMIC_MEDLVLEN_bm|PMIC_LOLVLEN_bm;
sei(); //Interrupts aktivieren
while(1)
{
//derzeit nix drin hier
}
}