|
Blinkende LED mit Atxmega128A1 / halvedDisc2®
Die LED der halvedDisc2® (im Bild links oben) ist an
PORTF1 angeschlossen.
Experiment 1 - einfaches Toggeln des Bits 1 an Port F:
/*
* Program: LED.c (LED blinkt)
* 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> // enthält
den Befehl: _delay_ms();
int main (void) {
PORTF_DIR =
0b00000010; // Datenrichtungsregister: Pin der LED ist
nun Ausgang
while(1) {
PORTF.OUT = 0b00000010; // LED aus
_delay_ms(500);
// 500ms
PORTF.OUT=0b00000000; // LED an
_delay_ms(500); //
500ms
}
return 0;
}
Experiment 2 - Benutzen eines Timers:
/*
* LedMitTimer.c
(LED blinkt)
* Author:
tux@mikrocontrollerspielwiese.de
*/
#include <avr/io.h>
#include
<avr/interrupt.h>
// Interrupt Service Routine
des Timers F1
ISR(TCF1_OVF_vect) {
PORTF.OUT
^= 0b00000010; // Toggeln des Led-Pins
}
int main (void) {
PORTF_DIR =
0b00000010; //Datenrichtungsregister: Pin von Led ist nun
Ausgang
cli();
//Interrupts deaktivieren, um in Ruhe den Timerinterrupt
zu konfigurieren
// Timer F1
konfigurieren
TCF1.CTRLA
= TC_CLKSEL_DIV64_gc; //Prescaler: 64
TCF1.CTRLB
= 0;
//select
Modus: Normal
TCF1.PER =
10000;
//Zähler-Top-Wert, Werte:
1...65535
TCF1.CNT =
0;
//Zähler zurücksetzen
TCF1.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
}
}
Links:
Hochschule Mittweida
halvedDisc
halvedDisc2
Datenblatt
des ATxMega128A1
|