Hallo zusammen,
ich habe hier so einen mini Lautsprecher, der mit einem ATtiny85 gekoppelt, das Harry Potter Theme abspielen soll.
Dazu nutze ich untenstehenden code.
Über meinem Arduino Uno klingt der sound sauber.
Am ATtiny85 habe ich mit dem Anspielen der Töne jedoch immer ein vibrieren/ brummen im Hintergrund, was den sound versaut.
Ich habe bereits probiert mit den Werten im code zu spielen, was aber dahingehend nichts verändert hat.
Ich sehe im code auch nichts, was dieses brummen verursachen könnte.
Der Lautsprecher ist direkt an den ATtiny angeschlossen. Ob Pin1 oder 2 (PWM/ keine PWM) macht auch keinen Unterschied.
Würde mich sehr freuen, wenn hier jemand nen Tipp hat
Viele Grüße
// Harry Potter Theme arranged by Dodo le Guitariste
// TONES ==========================================
#define Bb 2146
#define b 2024
#define c 1912
#define db 1805
#define d 1703
#define eb 1608
#define e 1517
#define f 1432
#define gb 1351
#define g 1276
#define ab 1233
#define a 1136
#define bb 1073
#define B 1012
#define C 956
#define Db 902
#define D 851
// Define a special note, 'R', to represent a rest
#define R 0
// SETUP ============================================
// Set up speaker on a PWM pin (digital 9, 10 or 11)
int speakerOut = 2;
void setup() {
pinMode(speakerOut, OUTPUT);
}
// MELODY and TIMING =======================================
// melody[] is an array of notes, accompanied by beats[],
// which sets each note's relative length (higher #, longer note)
int melody[] = { b, e, g, gb, e, B, a, gb, e, g, gb, eb, f, b, b, e, g, gb, e, B, D, Db, C, ab, C, B, bb, gb, g, e, g, B, g, B, g, C, B, bb, gb, g, B, bb, Bb, c, B, g, B, g, B, g, D, Db, C, ab, C, B, bb, gb, g, e, R };
int beats[] = { 32, 64, 16, 32, 64, 32, 64, 64, 64, 16, 32, 64, 32, 64, 32, 64, 16, 32, 64, 32, 64, 32, 64, 32, 64, 32, 64, 32, 32, 128, 32, 64, 32, 64, 32, 64, 32, 64, 32, 64, 16, 32, 64, 32, 128, 32, 64, 32, 64, 32, 64, 32, 64, 32, 64, 32, 64, 32, 32, 128, 8 };
int MAX_COUNT = sizeof(melody) / 2; // Melody length, for looping.
// Set overall tempo
long tempo = 10000;
// Set length of pause between notes
int pause = 120;
// Loop variable to increase Rest length
int rest_count = 125; //<-BLETCHEROUS HACK; See NOTES
// Initialize core variables
int tone_ = 0;
int beat = 0;
long duration = 0;
// PLAY TONE ==============================================
// Pulse the speaker to play a tone for a particular duration
void playTone() {
long elapsed_time = 0;
if (tone_ > 0) { // if this isn't a Rest beat, while the tone has
// played less long than 'duration', pulse speaker HIGH and LOW
while (elapsed_time < duration) {
digitalWrite(speakerOut,HIGH);
delayMicroseconds(tone_ / 2);
// DOWN
digitalWrite(speakerOut, LOW);
delayMicroseconds(tone_ / 2);
// Keep track of how long we pulsed
elapsed_time += (tone_);
}
}
else { // Rest beat; loop times delay
for (int j = 0; j < rest_count; j++) { // See NOTE on rest_count
delayMicroseconds(duration);
}
}
}
// LET THE WILD RUMPUS BEGIN =============================
void loop() {
// Set up a counter to pull from melody[] and beats[]
for (int i=0; i<MAX_COUNT; i++) {
tone_ = melody[i];
beat = beats[i];
duration = beat * tempo; // Set up timing
playTone();
// A pause between notes...
delayMicroseconds(pause);
}
}