Tonausgabe mit Atxmega128A1 / halvedDisc2®

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
   }
}



Links:

    Hochschule Mittweida

    halvedDisc

    halvedDisc2
   
    Datenblatt des ATxMega128A1




<----- Falls Du hier links KEIN Menü siehst: KLICK HIER