Source file: /~heha/Mikrocontroller/Sprache/sprich.zip/TomsDiner.cpp

/* Sprachausgabe mit ATmega32U4, beliebiger Urlader.
  Hardware: USB-Standardbeschaltung wie Arduino Leonardo, hier: Pro Micro
  Lautsprecher über 2 Emitterfolger-Komplementärpärchen
  an PB5 (!OC4B) und PB6 (OC4B) = Arduino-Pins 9 und 10
 */

#include "talkie.h"	// erzeugt Talkie-Namespace mit say() und idle()
#include <avr/pgmspace.h>
#include <avr/signature.h>

// Tom's Diner von Suzanne Vega, reichlich 2 Minuten in 24 Kilobytes.
// Wird per avr-objcopy aus einer Binärdatei eingebaut!
// (Um den Quelltext nicht sinnlos explodieren zu lassen.)
// Ungelöst: Im Disassemblerlisting wird spDINER nicht als Daten ausgespuckt.
extern const byte spDINER[] PROGMEM;

int main() {
  MCUSR = 0;
  WDTCSR= 0x18;
  WDTCSR= 0;		// ubaboot hinterlässt laufenden Watchdog: Töten!
  CLKPR = 0x80;
  CLKPR = 0;		// Atmel Flip hinterlässt gedrosselten Takt: Volle 16 MHz aktivieren
  SMCR  = 0x01;		// sleep aktivieren
  PRR0  = 0xA5;
  PRR1  = 0x89;
  PLLFRQ= 0x6A;		// Timer4 mit PLL:64 MHz speisen
  PLLCSR= 0x12;		// PLL starten
  while (!(PLLCSR&1));	// warte bis PLL bereit
  DDRD |= 0x20;		// TX-LED aktivieren (Aktivitätsanzeige bzw. Sleep-Anzeige)
  Talkie::say(spDINER);
  for(;;) {
    Talkie::idle();
  }
}
Detected encoding: UTF-80