/* 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-8 | 0
|