Forum: Projekte & Code Klingel mit 100 Melodien - last minute Weihnachtsgeschenk


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von egberto (Gast)


Angehängte Dateien:

Lesenswert?

Anbei meine Türklingel als Einsteigerprojekt mit minimalem 
Hardwareaufwand (ATTINY45, Batterie, PC-Lautsprecher, Kleinkram).

Viel Spaß beim Nachbauen!

egberto

von Michael S. (Gast)


Lesenswert?

Hallo egberto,

gestern Abend habe ich dein Projekt mal nachgebaut.
Mit einem tiny85.

Leider wollte sich das eeprom-file nicht laden lassen (der Inhalt des 
Eeproms stimmt nach dem Laden nicht mit dem der Datei überein).
Die Ursache ist mir im Moment nicht bekannt.

Ich habe dann kurzerhand den Inhalt des eeproms in den pgm_space 
verbannt - und so läuft das Teil.

Michael S.

von egberto (Gast)


Lesenswert?

Hast du das EEPROM File aus dem zip genommen oder selbst compiliert?

Da das EEPROM des attiny85 ja doppelt so groß ist wie das des Tiny45 
liegt es ja eventuell daran (mal versucht als Devicetyp tiny45 trotz des 
Tiny85 einzustellen?)

Frohes Fest

egberto

von Michael S. (Gast)


Lesenswert?

Hallo egberto,

ich habe unter der aktuellen avr-gcc das Projekt neu kompiliert.
Es gelingt mir aber nicht, mit avrdude das eep-file zu auf den tiny85 zu 
übertragen (es ist unvollständig und die Daten passen nicht zueinander).
Ich arbeite allerdings auch zum ersten Mal mit dem tiny85.
Zunächst habe ich avrdude im Verdacht ..
Allerdings könnte ich auch selbst einen Fehler machen ..

Übrigens hatte ich im letzten Jahr an ähnlicher Übung herumgebastelt.
Wie üblich aber nicht zu einem Ende gebracht.
Aber dabei hatte ich auch einige "Musik"-Samples gesammelt.
Vielleicht kann ich die ja auf dein "Format" übertragen.

Nun wirklich ein frohes Fest.

Michael S.

von egberto (Gast)


Lesenswert?

Ich kenne deinen Programmer + avrdude nicht -> wenn das Programm anläuft 
wird sofort im EEPROM ein neuer SEED geschrieben (also eine Zelle 
verändert), falls also die Software die Resetleitung nach dem Brennen 
und vor dem Kontrollesen kurz wieder frei gibt, sind EEPROM Inhalt und 
eep file an einer Stelle verschieden-> das kann man getrost ignorieren.

Frohes Restfest

von Michael S. (Gast)


Angehängte Dateien:

Lesenswert?

Hallo egberto,

deine "Klingel" ist eigentlich zu schade, um sie nur als Klingel und per
Zufallsauswahl zu betreiben.
Daher habe ich ihr einen USI/TWI-Slave zur Seite gestellt.
Nun lassen sich gezielt via TWI die Melodien abrufen.

Das Array der Noten habe ich so umgeordnet, dass jedes Lied ein eigenes
Array darstellt.
Ein Array von Pointern (auf die Liedarrays) ermöglicht den Zugriff auf 
jedes der Lieder.
Die Länge eines Liedes ist in seinem ersten Byte abgelegt.
Damit wird das Ändern von Liedern einfacher, es muss nicht jedesmal der
Zeiger auf den Liedanfang manuell neu berechnet werden.

Eine weitere eingebaute Option:
Man kann per TWI einen "Notensatz" verschicken, der dann
vom USI-Slave abgespielt wird (gedacht zum Testen von neuen Melodien).

Viel Spaß beim Komponieren ...

mfg

Michael S.

von egberto (Gast)


Lesenswert?

Hallo Michael S,

sehr hübsch (ich habe allerdings keinen Plan, wie ich das praktisch 
nutzen sollte) und ein gute Beispiel für dieses ganze USI geraffel.

Ein kleiner Nachteil- man braucht einen ATTINY85 an Stelle des ATTINY45, 
kann dann allerdings noch an den Melodien feilen (oder PWM, Hüllkurven 
etc. machen).

Viele Grüße,

egberto

von Michael S. (Gast)


Lesenswert?

hallo egberto,

die leidige Frage nach dem Sinn - manchmal ist ja auch der Weg das Ziel.
Nun, ich bastele seit einiger Zeit an diversen Modulen mit der
Gemeinsamkeit, dass sie alle über eine TWI-Schnittstelle miteinander
kommunizieren könn(t)en.
Angefangen hat es mit dem Ersatz des PCF8575 durch ein ATTINY2313.
Dann folgte eine Tastatur (in diesem Fall mit einem PCF8575),
ein RGB-Dimmer, ein über TWI angesprochenes LCD-Display,
Schalter, die über IR schnurlos geschaltet werden können,
US-Entfernungsmesser, RS232-TWI Interface etc.
Und ein TWI-Master, der alles ansteuert, der wollte natürlich auch noch 
entstehen.
Die Weihnachtszeit habe ich genutzt, um noch eine DCF-Uhr - und deine 
Klingel an den Bus zu bringen.

In Hausbussystemen kenne ich Akustikmodule, die z.B. bei offenstehender 
Haustür "Die Haustür steht auf ... Die Haustür steht auf ..." vor sich
her plappern.
Die "Klingel" könnte ähnliche akustische Hinweise geben.
Etwa wie eine Kirchturmglocke die Zeit ansagen.
Oder Warnzeichen für auf programmierte Termine geben.
Also irgendwie als akustische Komponente in einem Bus-System arbeiten.
Mehr weiss ich auch noch nicht ...

mfg

Michael S.

von egberto (Gast)


Lesenswert?

Hallo Michael,

war ja auch nicht als Kritik gedacht - ich brauchte halt nur ein 
schnelles Geschenk für meine Neffen, die wohl nie erfahren werden 
(mangels Interesse) was TWI oder ATTINY ist.

Deine TWI "Sammlung" klingt interessant, hast du das irgendwo 
veröffentlicht und dokumentiert?

Viele Grüße,

egberto

von Michael S. (Gast)


Angehängte Dateien:

Lesenswert?

hallo egberto,

leider habe ich (mindestens) eines deiner Lieder [#9] zerschossen.
Es fehlt die Geschwindigkeit an 2. Position.
Ist in der lied.h behoben.

Ausserdem habe ich zum "Abtippen" von Noten einige Konstanten
deklariert, so dass man die codierten "Noten" eingeben kann als
Summe von Tondauer und Note.

Das habe ich praktisch an drei kleinen Melodien ausprobiert.
Sie sind in separaten Daten definiert und werden anstelle von Lied #5,
#11 und #12 includiert.
Findet sich alles in der lied.zip.


mfg

Michael S.

von egberto (Gast)


Lesenswert?

Hallo Michael,

sehr schön, jetzt wird die Lied-Geschichte so langsam "benutzbar", ich 
habe das damals mit einem Konverter aus Nokia RTTL Klingeltönen 
konvertiert und für die C-Control dann zusammen "geklatscht". Die 
Qualität der "Lieder" ist auch sehr durchwachsen (um es mal positiv 
auszudrücken).

Hast du eigentlich deinen PCF8575 Emulator schon hier irgendwo gepostet? 
Da hätte ich großes Interesse dran, da ich mit TWI noch nix gemacht 
habe.

Schönes Wochenende,

egberto

von Michael S. (Gast)


Angehängte Dateien:

Lesenswert?

Hallo egberto,

ich habe es nicht lassen können und noch einige Stücke aus dem 
"Songbook"
eines Keyboards abgetippt (sind angehängt).
Allerdings werden dabei auch langsam die Grenzen des Verfahrens 
erkennbar.
Angesichts des minimalen Aufwandes (1 tn85, 2 Transistoren + 1 Elko)
ist das Ergebnis aber ganz passabel.

Den PCF8575 Emulator kann ich dir gerne posten.
Eigentlich hast du ihn schon (in der USI-Klingel), allerdings in der 
Version für den tn25.
Der hat aber nur 3 freie PortPins (8 - vcc - gnd - sda - scl - reset = 
3).
Wenn's 8 Pins sein sollen, dann könnte man den tiny26 oder tiny2313 
nehmen.
Für letzteren habe ich einen funktionierenden Code.
Folgt ...

mfg

Michael S.

von Michael S. (Gast)


Angehängte Dateien:

Lesenswert?

hallo egberto,

hier folgt der PCF8575a-Emulator.

Was ich übrigens an der TWI-Thematik reizvoll finde ist, dass man sich
Hardwarekomponenten wie Softwaremodule erstellen kann und bei Bedarf
miteinander kombiniert.

Das wird am Beispiel eines LCDs jedem deutlich:
Ein LCD an einen mc anzuflanschen bedeutet immer, reichlich viele
Strippen zu ziehen und viel Programmcode für den Treiber zu vergeuden
- und lange nach dem oder den Fehler(n) zu suchen.

Ein LCD - auf TWI-Basis, einmal aufgebaut, wird an den Bus angeschlossen
und funktioniert.
Auf dem LCD-Display ist genug Platz etwa für Balkengrafiken, 
verschiedene Fonts, Beeper etc. (da kommt mir ja glatt eine Idee ...).
Auf dem Master auf der anderen Seite bleibt erfreulich viel benutzbarer 
Speicher, die 2kB Flash der kleinen AVR's waren fast immer ausreichend.

Das man aus diesen Komponenten gar ein (eingeschränktes) Hausbussystem 
machen könnte, ist nur ein willkommener Nebeneffekt.


mfg

Michael S.

von egberto (Gast)


Lesenswert?

Vielen Dank!!

kannst du ja noch als eigenen Beitrag in der Codesammlung posten, damit 
man es besser wieder findet !

Schönes Wochenende

von Jürg H. (ha1)


Lesenswert?

Hallo.
Hab diesen thread gelesen und finde ihn interessant. Leider Gottes bin 
ich zu sehr Laie um das jetzt nachzubauen. Aber ich würds gerne. Soll 
heissen: Ich habe einen Programmer für PIC's ich habe ein paar: 16F628 
rumliegen. Mangels wissen und etwas mehr zeit, habe ich aber noch nie so 
richtig damit erfahrungen sammeln können.

Dies könnte ich doch evtl. verwenden um endlich in die Materie zu 
kommen. Als reine bastel Variante.

Ist es möglich einen PIC 16F628 dafür zu verwenden?
Noch was: wie geht das dann?

PS: Besonderes Interesse habe ich deshalb, weil "Michael S." geschrieben 
hat: Man kann dies ding dann evtl. ansteuern und Texte ausgeben wie: 
"Die Tür steht offen" usw. Denn ich habe eine Haussteuerung. An die kann 
man alles ran machen. 1-wire, Funk FS20, USB oder serielles, und was es 
alles so gibt.
Damit könnte ich doch glatt über dein Weihnachtsprojekt, also die 
Klingel, sowas ausgeben wie: "Sie haben eine EMAIL erhalten", oder "Im 
Bad ist die Luftfeuchtigkeit zu hoch" etc. etc.

...Aber zunächst würde ich mal wahnsinnig gerne einfach nur dein 
eigentliches Projekt nachbauen. Aber mittels PIC, denn hierfür habe ich 
alles daheim.

wie siehst du das?
MfG, Jürg

von zufall (Gast)


Lesenswert?

@ Jürg: Das hat er nicht geschrieben.
(Man kann natürlich alles selber bauen, mit Zeit, Geld und Know-How.)

Hier Audio mit PIC:
http://www.youtube.com/watch?v=kDwGq29n3X0
http://www.romanblack.com/picsound.htm

von Uwe S. (de0508)


Lesenswert?

Hallo,

ich habe auch versucht den Code auf einem ATtiny85 zum laufen zu 
bringen.
Lieder gibt der tiny85 nur einen Ton aus.

Wer hat denn einen Tipp?

Das macht der avr-gcc.
1
avr-gcc -mmcu=attiny85  -Os -g -Wall -I. -c Klingel-ATTINY.c
2
avr-gcc -mmcu=attiny85   -Os -g -Wall -I. -Wl,-Map,Klingel-ATTINY.map,--cref -o Klingel-ATTINY.out Klingel-ATTINY.o
3
   text     data      bss      dec      hex  filename
4
   4034      240        1     4275     10b3  Klingel-ATTINY.out
5
avr-objcopy -O ihex -j .text -j .data Klingel-ATTINY.out Klingel-ATTINY.hex

von Thomas Kiss (Gast)


Lesenswert?

Dieses Projekt kommt wie gerufen !!!!

aber ich hätte eine Bitte an Euch....

Ich benutze Bascom und mit C kenne mich garnicht aus.habe auch keinen 
Compiler..könnte jemand , für die Leute die diese Schaltung "nur" 
nachbauen möchten eine HEX File bereitstellen ? Wäre supper !!!

Danke !!

von Thomas Kiss (Gast)


Lesenswert?

Nachtrag : tiny2313 oder Atemaga8 habe ich genügend da...aber wenn es 
ein bestimmte AVR sein soll wegen der Hex Datei ist auch kein Problem..

von Uwe S. (de0508)


Lesenswert?

Hallo Thomas,

für den ATmega8 schau mal hier:

Beitrag "Melodieklingel BASCOM ATmega8"

von Thomas Kiss (Gast)


Lesenswert?

Fast perfekt..nun die Frage, der Optokoppler ( angegeben im Plan OK1 
oder so ) ist ganz schön gross..kann ich einen IC nehmen ?

sowas ? 
http://www.reichelt.de/?;ACTION=3;LA=444;GROUP=A55;GROUPID=3046;ARTICLE=2514;START=0;SORT=artnr;OFFSET=500;SID=30TK6-an8AAAIAAErlzr0fd7a7fb317ec9ec85d51f8b6617d828a

von Mirko (Gast)


Lesenswert?

@Uwe S.

Fuse CKDIV8?

@Thomas Kiss

Ist ziemlich egal, wenn du R vergößerst (mal mit 33k testen, hängt von 
deiner Klingelspannung ab) kannst du zur Not auch einen Transistor 
nehmen.

Wenn du direkt einen Taster anschließen kannst, einfach am AVR Pin gegen 
Masse und Optokoppler Diode und R weglassen.

Viel Erfolg,

Mirko

von Uwe S. (de0508)


Angehängte Dateien:

Lesenswert?

Hallo,

hier nun meine lauffähige Klingel für den ATtiny85.

Es stehen noch Daten im EEPROM, die hatte ich vergessen.

Mit dem neuen Makefile wird alles richtig erzeugt !

Das Script "prog.sh" kann beim Programmieren helfen.


Viel Spaß.

von Mirko (Gast)


Lesenswert?

@Uwe S.

Danke, das hilft hier einigen bestimmt.

@Thomas Kiss

Nachtrag:
Den Optokoppler habe ich eigentlich nur drin, um bei langen Leitungen 
Störungen zu vermeiden (es wird ja quasi mit Strom und nicht mit 
Spannung geschaltet).
Außerdem gibt es eine Potentialtrennung zum Klingelkreis (ist z.B. 
hilfreich, wenn man die Klingel auch über den Klingeltrafo mit Strom 
versorgen will).
Den Optokoppler hatte ich noch liegen, war so ein altes DDR-Teil.

Viele Grüße,

Mirko

von Byte (Gast)


Lesenswert?

Auch wenn der Tiny da viel zu klein sein wird, schwirrt mir da grad so 
eine dumme Idee im Kopf rum die ich mal kundtun wollte :-)
Wenn man das ganze jetzt mit einem Fingerabruckscanner statt einer 
Klingeltaste machen würde, könnte man ja eigentlich  verschiedenen 
Fingerabdrücken eine Melodie zuweißen g

So wüßte man schon anhand der Klingelmelodie wer vor der Tür steht :-)
Auch könnte man zwischenspeichern wer wann in den letzten 2-3 Tagen 
geklingelt hat.

Allerdings denk ich mal das ein AVR dafür nicht wircklich geeignet wäre 
Fingerabrücke in einer annehmbaren zeit zu vergleichen.

von Barny (Gast)


Lesenswert?

Byte schrieb:
> Allerdings denk ich mal das ein AVR dafür nicht wircklich geeignet wäre
>
> Fingerabrücke in einer annehmbaren zeit zu vergleichen.
Normalerweise wird in diesen Scannern schon die Intelegenz eingebaut und 
diese geben dem Prozessor bescheid wer da gescannt wurde.

Aber es gibt ein paar Dinge die du bedenken solltest.

Wie stellt man sicher, dass jeder mitbekommt, dass er den Finger über 
den Sensor ziehen soll und nicht nur drücken?

Traditionell sind die Klingeltaster außen angebracht.
Will man wirklich im Winter die Handschuhe ausziehen, nur um zu 
klingeln?

Will man überhaupt, dass bei einem fremden Haus sein Fingerabdruck 
gescannt wird?

Wie verhält sich der Scanner bei wechselnden Witterungen?

von Hermann (Gast)


Lesenswert?

Hallo egberto,

ich habe deine herrliche Klingel nachgebaut und als Wohnungsbimmel 
verwendet.
( mein Chinamodel mit Vogelgezwitzscher hatte sich verabschiedet )
ein Layout könnte ich bei Bedarf hochladen ( ca 4 x 2cm )

bei der "Vorlage" von Hannes Lux gefällt mir, das es eine 
"Batterie-Leer-Meldung" gibt. Könnte das noch jemand in den Tiny packen? 
:)
Ich habe leider dazu keine Ahnung heul

Ich betreibe das ganze mit 3x AA Batterien und würde mich mindestens 
nach ein paar Jahren wundern, wenn mich keiner mehr besucht :) aber 
wenns nicht mehr bimmelt ... kann ich auch keinem öffnen.

na jetzt bin ich mal gespannt :)


liebe Grüsse
Hermann

von Hermann (Gast)


Lesenswert?

p.s.

ich habe überigens die "Originalversion" mit Tiny45 gebaut.

von Jandelä (Gast)


Lesenswert?

>last minute Weihnachtsgeschenk
Ihr macht eine Panik.
Also ich hab noch keine Geschenke besorgt ......

von Egberto (Gast)


Lesenswert?

Hallo Hermann,

Da noch Geist rein zu stecken, habe ich eigentlich keine Lust (Zeit), du 
hast ja den Quelltext von mir und die Vorgehensweise von Hannes Lux - 
eigentlich super Voraussetzungen sich mit der Materie zu beschäftigen 
(bei Fragen wird dir gern geholfen!).

Du solltest dann allerdings auf einen tiny85 ausweichen, es kommt ja 
noch Code hinzu und der tiny45 ist ziemlich voll.

Viel Erfolg,

Mirko(egberto)

von egberto (Gast)


Lesenswert?

Noch ein Nachtrag:

wenn wenigstens alle paar Wochen jemand bei dir klingelt, solltest du 
während des Klingelns merken, wenn die Batterie zusammenbricht.

Ich habe leider da auch noch keine Erfahrungen, die Klingel meiner 
Neffen tut es nach über 3 Jahren immer noch wie am ersten Tag (mit den 
gleichen 3x AA Alcaline).

Schönes WE,

egberto

von Hermann (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Mirko,

wenn das Teil 3 Jahre lang läuft - lohnt der Aufwand wirklich nicht!
Wenn Sie nicht mehr ordentlich bimmelt ( hiert eher melodiert :)
werden die Batterien/ Akkus getauscht -fertig.

ich baue mittlerweile das 3te Model davon:
1x Wohnungsklingel
1x Sohnemann ( Baumhaus )
1x auf Lager zum gelegentlichen Verschenken.

anbei mal 2 Bildchen

Danke für das schöne Projekt :)

von KlingelKind (Gast)


Lesenswert?

Danke für das witzige kleine Projekt!

Habe es schnell mit einem Tiny85 auf einem Steckbrett aufgebaut und die 
fertigen Dateien aus dem aller ersten Post genommen. Programmiert habe 
ich mit dem "mySmartUSB light" und der zugehörigen Software. Hat 
problemlos geklappt.

Als kleine Änderung habe ich einen Taster dran gebaut und ein Poti vor 
den Lautsprecher, da es mir zu laut war.
Macht wirklich Spaß den Knopf zu drücken und die Melodien durch zu 
hören.
Vielleicht kommt sie doch als Klingel an die Wohnungstür oder irgendwie 
als Rätsel (Melodienraten?) in einen Geocache... :-)

von Benny (Gast)


Lesenswert?

Mal eine kleine Elektronik-Anfängerfrage.
Warum braucht man kein Basis-Vorwiderstand bei der Ausgangsstufe?

von drago (Gast)


Lesenswert?

http://www.lautsprechershop.de/theorie/transistor3.htm

siehe:

komplementärer Emitterfolger

von DL8MA (Gast)


Lesenswert?

hallo,

Zuerst mich ich mich bei egberto, Uwe S. (de0508) und den anderen Usern 
die sich hier im Thread beteiligt haben bzw. die Schaltung und die 
Software zur Verfügung gestellt haben bedanken.

Die Jugendgruppe des DARC OV Waiblingen hat die Klingel auf 
Lochrasterplatinen nachgebaut. Ihr hab damit auch aktiv die Jugendarbeit 
unterstützt!

Eine kleine Doku mit Video der Aufbauvariante die wir gewählt haben 
findet Ihr hier:

=> http://www.dl8ma.de/jugendarbeit/melodienklingel

Gruss
Jürgen

von Uwe S. (de0508)


Lesenswert?

Hallo Jürgen,

super, ich hatte das Projekt, ich glaube vor 2 Jahren bei unserer OV 
Weihnachtsfeier dabei, das war auch lustig.

73, Uwe
DOK F07

von Paul B. (paul_baumann)


Lesenswert?

DL8MA schrob:
>Zuerst mich ich mich bei egberto....

Ach, Du Dich auch?
;-)
Flücht
MfG Paul

von DL8MA (Gast)


Lesenswert?

ups :-(

das sollte natürlich "Zuerst möchte ich mich ..." lauten ...

danke für den Hinweis. Leider kann ich das jetzt nicht mehr ändern :-(

Gruss
Jürgen, DL8MA

von chris (Gast)


Angehängte Dateien:

Lesenswert?

Ein sehr schönes Projekt. Der ARM-Dip ist vielleicht etwas 
überdiemensioniert für die Klingel, aber trotzdem lustig anzuhören.

Beitrag "Re: Arm Synthesizer mit LPC1114"

von Jürgen, DL8MA (Gast)


Lesenswert?

hallo,

Die Melodien-Türklingel mit dem ATTiny85 wurde inzwischen ja auch von 
anderen DARC-Jugendgruppen aufgebaut.

Im HamCamp auf der HAMRadio 2013 in Friedrichshafen ( 
http://www.hamcamp.de) wollen wir den Aufbau einer solchen 
Melodienklingel als Bastelaktion anbieten. Dazu wird es eine einseitige 
Leiterplatte geben. Der erste Entwurf ist fertig. Nach einem Testaufbau 
geht die Vorlage an einen Leiterplattenhersteller.

Da wir hier im Forum die Anregung für dieses nette Projekt bekommen 
haben möchten wir jetzt als kleines Dankeschön interessierten User 
anbieten sich an unsere Leiterplattenbestellung anzuschliessen.

Gegenüber der Grundversion ist diese Version flexibler und etwas 
erweitert bzw. vereinfacht:

* zweiter Taster
* ev. noch eine LED
* kleines Lochrasterfeld
* Wegfall des Optokopplereingangs

Denkbar ist damit z.B. eine kleine Steuerung die mit den zwei Tasten und 
einer Treiberschaltung auf dem Lochrasterfeld etwas ansteuert Oder, 
oder, oder ...

Diese Erweiterungen ermöglicht es uns die selbe Platine später bei 
anderen Projekten einzusetzen.

Infos zur Leiterplatte dazu gibt es hier:

=> http://www.dl8ma.de/jugendarbeit/melodienklingel/leiterplatte.php

Gruss
Jürgen, DL8MA

von Uwe S. (de0508)


Lesenswert?

Danke Jürgen,

viel Erfolg auf der HamRadio 2013 ich kann leider nicht kommen.

73, Uwe

von Jürgen, DL8MA (Gast)


Lesenswert?

hallo,

sodele - das Layout ist jetzt in der V 1.0 soweit fertig. Jetzt noch ein 
Testaufbau und dann kann es zum Leiterplattenfertiger.

Die aktuelle Version ist hier zu sehen:

=> http://dl8ma.de/jugendarbeit/melodienklingel/leiterplatte.php

Wer bei der Sammelbestellung mitmachen möchte kann sich noch bis heute 
spät abend bei mir melden.

Gruss
Jürgen

von Jürgen, DL8MA (Gast)


Lesenswert?

hallo,

die Leiterplatte ist fertig. Die ersten Musterschaltungen wurden 
aufgebaut. Ab Donnerstag können die Teilnehmer des HamCamps auf der 
HamRadio in Friedrichshafen dann diese nette Bastelprojekt aufbauen.

Bilder von der bestückten Leiterplatte findet man hier:

=> http://www.dl8ma.de/jugendarbeit/melodienklingel/leiterplatte.php

Jürgen, DL8MA

http://www.DL8MA.de

von Jürgen, DL8MA (Gast)



Lesenswert?

hallo,

die Bastelaktion mit der Melodienklingel ist im HamCamp auf der HamRadio 
in Friedrichshafen gut angekommen.

Einer der Teilnehmer hat die Klingel kurzerhand "missbraucht" und eine 
amerikanische Polizeisirene programmert und damit einen Kettcar den wir 
für einen Wettbewerb da hatten ausgerüstet :-)

Ich hab hier mal zwei Bilder von der Bestückungsvariante 
"Melodienklingel" angehängt.

Weitere Infos wie z.B. den Bestückungsplan findet man hier:

=> http://www.dl8ma.de/jugendarbeit/melodienklingel/leiterplatte.php

Gruss
Jürgen, DL8MA

http://www.DL8MA.de

von Selina (Gast)


Lesenswert?

Hallo zusammen,

finde ich ein super Projekt!
Hab es bereits nachgebaut und funktioniert einwandfrei.

Jedoch bräuchte ich es ein wenig lauter. Wie kann ich das am einfachsten 
bewerkstelligen?
Einfach den gleichen Emitterfolger noch ein zweites Mal dahintersetzen?

Für Tipps wäre ich sehr dankbar!

Viele Grüße und ein schönes Restwochenende.

Selina

von egberto (Gast)


Lesenswert?

Eigentlich ist das Teil ja schon recht laut.. am einfachsten wäre erst 
mal ein größerer Lautsprecher (aus altem Radio oder so).
Hintereinanderschalten kann man die Endstufen nicht, man könnte dort mit 
höherer Spannung arbeiten, aber dann muss man die Stromversorgung und 
die Bauelementedimensionierung neu überdenken.

von Daniel Q. (daniel_q)


Lesenswert?

Guten Morgen, ich würde gerne mal die Schaltung nachbauen.
Weiß aber nicht genau welche Codes die Richtigen sind.
Ich habe jetzt das Melodienklingel V 1.1 von  Jürgen (DL8MA) im Auge.
Welcher Code ist dafür der Richtige?

lg Daniel

von Egberto (Gast)


Lesenswert?

Wenn du einen Attiny 45 nimmst oder selber die Quellen compilierst, 
kannst du die Originaldateien nehmen, für Attiny 85 hat Uwe S. das wohl 
angepasst (durch den doppelt so großen Speicher muss man dort keine 
Tabellen mehr im EEPROM ablegen).

Schönes Rest-WE,

Egberto

von Dominic A. (neo123)


Angehängte Dateien:

Lesenswert?


von Uwe S. (de0508)


Lesenswert?

Hi,

so klingt es aus meinem Empfänger manchmal auch.

Keiner weiß was Du da gemacht hast, ein Bild und Schaltplan etc. wären 
toll.

Liegt vielleicht an der Taktfrequenz... resp. Vorteiler.

von Egberto (Gast)


Lesenswert?

Der Lautsprecher ist ok, hast du alle (CKDIV8 !!) Fuses richtig 
gesetzt??

Viele Grüße,

Egberto

von Dominic A. (neo123)


Angehängte Dateien:

Lesenswert?

Anbei mein Schaltplan.
Die Fuses habe ich Online mit diesem Tool gewählt: 
http://www.engbedded.com/fusecalc Anbei ein Bild wie ich es eingestellt 
habe.
Beim Programmieren ergibt das folgende Kommandozeile:
1
avrdude -p attiny85 -B 5 -U lfuse:w:0x62:m -U hfuse:w:0xdf:m -U efuse:w:0xff:m  -c usbasp    -U flash:w:Klingel-ATTINY.hex -U eeprom:w:Klingel-ATTINY.eep
Tut mir Leid falls irgendwelche Infos fehlen. Das ist das erste mal das 
ich einen AVR benutze.

Grüsse

Edit: Auf dem Schema sind die Power Pins vertauscht ich weiss. Das habe 
ich auf dem PCB korrigiert.

: Bearbeitet durch User
von Egberto (Gast)


Lesenswert?

Ok, die Fuses sind Low aktiv - im Text zur Klingel steht CKDIV8 
"ausschalten", also auf High setzen -bei dir also Haken raus!

Weiterhin fehlt der "Siebelko" in der Spannungsversorgung, ich hoffe, du 
arbeitest nicht mit Batterie! So 470u bis 1000u würde ich aber trotzdem 
vorsehen.

Viele Grüße,

Egberto

von Dominic A. (neo123)


Lesenswert?

Ein Siebkondensator ist vorhanden. Jedoch ist dieser im Schemaausschnitt 
nicht zu sehen.

Super. Mit den richtigen Fuses klingt es richtig gut =).
Danke für diese tolle Projekt.

Grüsse

von Uwe S. (de0508)


Lesenswert?

Hallo,

wie viele Ampere sollen da fließen ?
Etwa 1 Ampere ?

Egberto schrieb:
> So 470u bis 1000u würde ich aber trotzdem
> vorsehen.

Der Wert ist viel zu groß.

von Egberto (Gast)


Lesenswert?

Im Original ist der komplementäre Emitterfolger ohne Widerstand in Serie 
zum Lautsprecher ausgeführt.
Bei Batteriebetrieb benötigt man dann den kräftigen Elko an der 
Versorgungsspannung, damit die Spannung für den uC nicht zusammenbricht.
An einem Labornetzgerät ist das natürlich kein Problem, aber z.B. An 
einem Steckernetzteil ist es vom Design her einfach besser, die 
Versorgungsspannung etwas zu puffern.

Viele Grüße,

Egberto

von Jürgen F. (rubinlicht)


Lesenswert?

Hallo ich bin neu hier.
Ich habe die Schaltung nachgebaut.
Ich habe die EEP und HEX Datei mit Batego II von Batronix in den Chip 
gebrannt. Leider höre ich nur ein Ton. Irgendwie kriege ich den Chip 
nicht am Laufen. Mit Fuses habe ich auch schon herumprobiert.

Hat jemand da ein Tipp?

Grüsse

von egberto (Gast)


Lesenswert?

CKDIV8 Fuse?

von Jürgen F. (rubinlicht)


Lesenswert?

Ja, das habe auch probiert. Einmal höre ich ein 50HZ Ton und deaktiviert 
ein ca. 400HZ Ton. Ich überlege mir das Starterkit STK500 zu kaufen. Das 
Kit wird doch den Chip unterstützen?
Danke für die schnelle Antwort.

Grüße an egberto

von Jörg E. (jackfritt)


Lesenswert?

EEP File wurde bei mir nicht übertragen. Dann kommt auch nur ein langer 
Ton.
Oder zufall was im eeprom halt noch drin stand....
Habe aber alles für den attiny85 compiliert... Anderen atiny?

: Bearbeitet durch User
von Jörg E. (jackfritt)


Lesenswert?

@Egberto und alle "Liedermacher"
Herrliche Spielerei. Vielen Dank dafür. Ich singe jeden 2 Song mit.
"Arbeit? Welche Arbeit? ;)"

: Bearbeitet durch User
von Moritz A. (moritz_a)


Angehängte Dateien:

Lesenswert?

Da ich nicht der begabteste im Noten lesen bzw Melodien vorstellen bin, 
aber auch nicht immer alles neu flashen wollte, habe ich passend zum 
verwendeten Format ein kleines Perlskript geschrieben, dass über den 
System-Speaker die Melodie ausgibt.

Die Anwendung ist denkbar einfach:
1
./play.pl <<<"66,1,0,136,128,107,128,72,64,72,141,136,134,136,128,111,128,72,64,72,144,143,139,136,143,148,72,70,64,70,131,139,200,200,192,82,143,141,139,200,171,72,64,72,141,136,134,200,175,72,64,72,144,143,139,136,143,148,72,70,64,70,131,139,200,200"

bzw
1
./play.pl 66,1,0,136,128,107,128,72,64,72,141,136,134,136,128,111,128,72,64,72,144,143,139,136,143,148,72,70,64,70,131,139,200,200,192,82,143,141,139,200,171,72,64,72,141,136,134,200,175,72,64,72,144,143,139,136,143,148,72,70,64,70,131,139,200,200
2
^D

von Basti (Gast)


Lesenswert?

Hallo zusammen,
ich habe eine Frage zu diesem Projekt.
Ich würde die Klingel gerne nachbauen, habe aber wenig Erfahrung in 
programmieren von Mikrocontrollern.
Dazu kommt, dass ich den ATtiny gern über einen Arduino programmieren 
würde.
Die konkrete Frage ist bei mir also:Wie muss ich den Code ändern und wie 
bekomm ich die Lief.H datei in den Speicher des Attiny.
Grüße
Basti

von chris_ (Gast)


Lesenswert?


von Jörg E. (jackfritt)


Lesenswert?

@chris_:Als wäre es damit getan einen Link zu posten. Dort fehlt ja noch 
der ganze Code für den Melodienteil.
Also muss da noch einiges umgeschrieben werden. Und dann noch die Frage 
ob das dann noch alles so da rein passt, weil Arduino ja auch noch einen 
Bootloader benötigt.

Ich würde eher sagen, erstmal die grundlagen von arduino lernen und dann 
langsam an silche Projekte herantrauen.

von chris (Gast)


Lesenswert?

>Anbei meine Türklingel als Einsteigerprojekt mit minimalem Hardwareaufwand 
(ATTINY45, >Batterie, PC-Lautsprecher, Kleinkram).

Attiny 45: 4k Flash
Attiy  85: 8k Flash
Bootloader: 2.5k

von Basti (Gast)


Lesenswert?

Hallo Chris und Jörg,
Danke für die schnelle Antwort.
Der Link ist schon etwas hilfreich, hab andere Tutorien dazugefunden, 
die waren aber nicht so gut geschrieben, und wenn der ATTiny85 wollte 
ich erst mal den Test mit LED blinken ausprobieren.

Mit dem Arduino kann mir ein Bekannter helfen, es geht wenn ich mit 
meinen jetzigen Kenntnissen nicht weiter komme.

 Bin jetzt nur mit dem Bootloader etwas verwirrt.
Der Arduino braucht den und wird dann als ISP verwendet, daher dachte 
ich wird der Bootloader nicht auf den ATTiny übertragen.

Bis ich den ATTiny habe, kann ich mich erst mal um das Umschreiben des 
Code kümmern, dafür muss ich den nur erst mal Zeile für Zeile 
Analysieren und verstehen.

Schon mal vielen Danke
Ich melde mich wieder wenn ich es geschaft habe oder konkrette Probleme 
habe.

von chris_ (Gast)


Lesenswert?

>Der Arduino braucht den und wird dann als ISP verwendet, daher dachte
>ich wird der Bootloader nicht auf den ATTiny übertragen.

Den Arduino kann man als reinen ISP-Programmierer verwenden. Wenn Dir 
jemand ein HEX-File für den Attiny85 macht, kannst Du es direkt flashen. 
Dann muss auch kein Code umgeschrieben  werden. Wenn Du aber wirklich 
mit der IDE Code für den Tiny schreiben willst, dann muss das ganze wohl 
auf die Arduino-Lib angepasst werden.

von grummel (Gast)


Lesenswert?

GEHT NICHT: usi_klingel
Beitrag "Re: Klingel mit 100 Melodien - last minute Weihnachtsgeschenk"
Michael S. (Gast)
usi_klingel_090108.zip (29,1 KB, 1642 Downloads)
1
>make
2
3
-------- begin --------
4
avr-gcc (GCC) 4.9.2 20141224 (prerelease)
5
Copyright (C) 2014 Free Software Foundation, Inc.
6
This is free software; see the source for copying conditions.  There is NO
7
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
8
9
10
Compiling C: klingel_inc.c
11
avr-gcc -c -mmcu=attiny85 -I. -gdwarf-2 -DF_CPU=8000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wundef -Wa,-adhlns=obj/klingel_inc.lst  -std=gnu99 -Wundef -MD -MP -MF .dep/klingel_inc.o.d klingel_inc.c -o obj/klingel_inc.o
12
In file included from klingel_inc.c:11:0:
13
lied.h:43:9: error: variable 'ton' must be const in order to be put into read-only section by means of '__attribute__((progmem))'
14
 uint8_t ton[] PROGMEM =
15
         ^
16
lied.h:93:9: error: variable 'L1' must be const in order to be put into read-only section by means of '__attribute__((progmem))'
17
 uint8_t L1[] PROGMEM = {66,1,0,136,128,107,128,72,64,72,141,136,134,136,128,111,128,72,64,72,144,143,139,136,143,148,72,70,64,70,131,139,200,200,192,82,143,141,139,200,171,72,64,72,141,136,134,200,175,72,64,72,144,143,139,136,143,148,72,70,64,70,131,139,200,200};
18
         ^
19
In file included from klingel_inc.c:11:0:
20
lied.h:97:9: error: variable 'L2' must be const in order to be put into read-only section by means of '__attribute__((progmem))'
21
 uint8_t L2[] PROGMEM = {39,2,65,3,3,67,131,65,65,65,65,4,4,68,132,67,67,67,65,3,3,67,131,65,65,65,65,4,4,68,132,67,66,65,77,236,72,70,232};
22
23
24
[... und so weiter ...]
25
26
         ^
27
Makefile:539: die Regel für Ziel obj/klingel_inc.o scheiterte
28
make: *** [obj/klingel_inc.o] Fehler 1

von grummel (Gast)


Angehängte Dateien:

Lesenswert?

Okay, jetzt geht es. hab überall das gewünschte const hingeschrieben.

Und utf-8 iss cool deshalb hab ich noch:

for file in *.h *.c Makefile;do iconv -f latin1 -t utf-8 "$file" -o 
"${file}";done

über die Dateien rübergebügelt.

von Marcus H. (Firma: www.harerod.de) (lungfish) Benutzerseite


Angehängte Dateien:

Lesenswert?

chris schrieb:
>>Anbei meine Türklingel als Einsteigerprojekt mit minimalem Hardwareaufwand
> (ATTINY45, >Batterie, PC-Lautsprecher, Kleinkram).
>
> Attiny 45: 4k Flash
> Attiy  85: 8k Flash
> Bootloader: 2.5k

Das geht noch einen Tick kompakter - siehe Bild im Anhang.
- der Tiny10 hat massig Platz: 1k Flash  16 Byte Register  32 Byte 
SRAM
- ca. 200 Maschinenbefehle für den Tongenerator, inkl. Framework und 
Sensorauswertung
- um einen Piezo-Piepser anzusteuern, braucht's nur vier Bauteile, auf 
dem freien Platz kann ein Transistortreiber nachbestückt werden

von Egberto (Gast)


Lesenswert?

Na dann, wir warten auf deine Umsetzung ;-) (aber die 100 Melodien 
müssen auch drin sein!)

Viele Grüße,

Egberto

von Basti (Gast)


Lesenswert?

Hallo zusammen,
Hab den ATTiny85 endlich erhalten.
Habe den Arduino als ISP verwendet und mit WinAVR in Programmer's Notpad 
kompiliert.
Nach dem ich die Zeilen:
1
   int ANZ;
2
   unsigned char *lied;
3
   unsigned int *liedofs;
angefügt hatte ließ es sich das Programm auch Kompilieren und auf den 
ATTiny schreichben.
Nach dem die Klingel nicht funktioniert habe ich ein Blink-test mit LEDs 
durchgeführt, d.h. Programm geschrieben, kompiliert und die LED blinken.

Meine Vermutung ist, dass bei meinen Aufbau mit den BC327 und BC337 
etwas nicht stimmt. Kann ich dieses einfacher nachprüfen als die 
Kennlinien für die Bauelemente aufzunehmen? Oder habe ich eine andere 
Fehlerquelle übersehen?

Grüße
Basti

von chris_ (Gast)


Lesenswert?

Die Schaltung kannst Du ohne die Transistoren testen, wenn Du einen 
Orhörer oder Piezo direkt am Ausgang des Attiny anschließt.

von Egberto (Gast)


Lesenswert?

Wenn du das ohne deine Anpassung nicht compilert bekommst, stimmt was 
nicht!
Wurde die header Datei (lied.h oder so) auch mit eingebunden?

Grüße,

Egberto

von Basti (Gast)


Lesenswert?

Hallo zusammen,
dann kann ich hier nur mal die Ausgabe von WinAVR einstellen. Meine 
Vermutung ist, dass ich etwas nicht korrekt eingestellt habe. Habe 
selbst dazu wenig gefunden was mir direkt weiter hilft.
Ich habe versucht die Version von  Michael S. mit der geänderten lied.h 
Datei und weitern Anhänge hineinzuladen.
1
-------- begin --------
2
avr-gcc (WinAVR 20100110) 4.3.3
3
Copyright (C) 2008 Free Software Foundation, Inc.
4
This is free software; see the source for copying conditions.  There is NO
5
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
6
7
8
Compiling C: Klingel-ATTINY.c
9
avr-gcc -c -mmcu=attiny85 -I. -gdwarf-2 -DF_CPU=1000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=./Klingel-ATTINY.lst  -std=gnu99 -MMD -MP -MF .dep/Klingel-ATTINY.o.d Klingel-ATTINY.c -o Klingel-ATTINY.o 
10
Klingel-ATTINY.c: In function 'MyRandGet':
11
Klingel-ATTINY.c:72: error: 'ANZ' undeclared (first use in this function)
12
Klingel-ATTINY.c:72: error: (Each undeclared identifier is reported only once
13
Klingel-ATTINY.c:72: error: for each function it appears in.)
14
Klingel-ATTINY.c: In function 'main':
15
Klingel-ATTINY.c:123: error: 'liedofs' undeclared (first use in this function)
16
Klingel-ATTINY.c:124: error: 'ANZ' undeclared (first use in this function)
17
Klingel-ATTINY.c:124: error: 'lied' undeclared (first use in this function)
18
make.exe: *** [Klingel-ATTINY.o] Error 1
19
20
> Process Exit Code: 2
Die Klingel gibt zwar geräusche von sich, aber keien die nach einer 
Meldoie klingen, oder gar auf den Taster reaktieren.
Ein umstöpseln der Kopfhörer bringt keine Änderung.
Beste Grüße
Basti

von Jörg E. (jackfritt)


Lesenswert?

@Basti
Irgendwie kann ich bei der Error Meldung des gcc gar nicht glauben das 
hier irgendwas an Programm herausgekommen ist. Vielleicht solltest du 
nochmals deine komplette Buildumgebung mit deinem Blinkprogramm 
überprüfen.

Die Fehlermeldungen sollten dir schon alle Hinweise liefern.

von Egberto (Gast)


Lesenswert?

Sorry, ich bin z.Z. Nur mit Ipad/Handy unterwegs(Urlaub!!!!!!), kann 
also kein zip etc aufmachen.
In der Erinnerung sind ANZ etc Konstanten in dem Header File, dein Build 
Process scheint irgendwie nicht ok zu sein.
Nimm doch erstmal die Hex Files hier aus dem Forum zum Test, dann kanst 
du dich rantasten.

Grüße,

Egberto

von Castle R. (castle)


Lesenswert?

Egberto schrieb:
> Sorry, ich bin z.Z. Nur mit Ipad/Handy unterwegs(Urlaub!!!!!!), kann
> also kein zip etc aufmachen.

Doch, kannst du z.B. mit der GoodReader App aufmachen und reinschauen. 
;)

von Jörg E. (jackfritt)


Lesenswert?

Uwe S. schrieb:
> Egberto schrieb:
>> Sorry, ich bin z.Z. Nur mit Ipad/Handy unterwegs(Urlaub!!!!!!), kann
>> also kein zip etc aufmachen.
>
> Doch, kannst du z.B. mit der GoodReader App aufmachen und reinschauen.
> ;)


Im Urlaub würde ich mir das nicht antun ?

von Basti (Gast)


Lesenswert?

@Jörg
Das Buildprogramm bricht natürlich schon ab bei diesen Fehlermeldungen,
nur Egberto sagte, dass das Programm ja unmodifiziert laufen sollte 
nicht das ich die Variabeln noch difinieren müsste, wenn ich die 
definiere läuft das compilieren und ich kann den code auf den Attiny 
schieben.
Ich werde noch mal versuchen ein BlinkProgramm zu schreiben

@Egberto
Mit den Hex-files ist dort nicht das problem, dass die für den Attiny 45 
und nicht den 85 geschrieben sind? Ansonsten muss ich gleich nur schnell 
googeln wie ich die hex-files direkt verwende.

Noch mal danke für die Hilfe

von Basti (Gast)


Lesenswert?

Hallo,
hab noch mal rumgespielt.
Das Blinken funktioniert hab es jetzt auch über den WinAVR geschrieben, 
und mit der selben Make-Datei verwendet.
Das Flashen mit den Hex-files: Gelingt mir nicht oder ich stell mir 
eventuell etwas flasches vor. Sollte nur ein Make-file haben oder 
erzeugen und dann im Programm auf Programmieren clicken um die schon 
vorhandenen Hex-File zu verwenden oder?
Bei diesen Versuch tretten Fehler auf, die ich nicht behebe kann. Da mit 
der ursprung nicht klar ist(hatte den compilervermutet und geändert und 
ähnliches im make-file konnte es nicht beheben; avrdudeport ist auf com6 
umgestelltum die komunikation mit dem Arduino aufzubauen)

Hab nur statt den 470µF einen 300µF kondensator
und bei den BC337 udn BC327 bin ich mir nur sicher das es sich um pnp 
bzw npn Transitoren handelt, die Aufschrieft fehlt.
Die Fehler habe ich erst mal unberücksichtiggelassen, da das Signal was 
am kopfhörer ankommt sich nicht verändert wenn ich über die schaltung 
gehe oder direkt am ausgang zum ground nur die kopfhörer verwende.
Grüße
Basti

von Mego (Gast)


Lesenswert?

Schönes Mini-Projekt!

Gibt es eigentlich eine Titelliste - bei meinen musikalischen 
Fähigkeiten habe ich Probleme, die eine oder andere Melodie zu erkennen.

Grüsse

Mego

von egberto (Gast)


Lesenswert?

Nein - wie oben irgendwo beschrieben, habe ich das mal (vor vielen 
Jahren) aus hunderten Nokia Klingeltönen (RTTL) extrahiert und die 
halbwegs brauchbaren verwendet - damals für die C-Control I.

Du kannst hier ja ein Quiz starten - so nach dem Motto: Wer kann mir am 
schnellsten sagen, was Lied Nr. 65 ist... ;-)

Grüße,

Egberto

von E...... B. (ludwig63)


Lesenswert?

Ich habe die Schaltung nachgebaut aber es tut nichts
linkt  es am ATtiny 45 Code
Können sie mir da helfen


Grüsse

: Bearbeitet durch User
von egberto (Gast)


Lesenswert?

Was hast du denn alles gemacht?
Du musst das hex und das eep file in den Chip flashen sowie die CKDIV8 
Fuse verändern.

Viele Grüße,

egberto

von E...... B. (ludwig63)


Lesenswert?

Ich habe nur den Hex Code hochgeladen im ATtiny 45
Was muss ich noch machen

Gruß

von egberto (Gast)


Lesenswert?

Hallo,

steht da - auch das eep file brennen und die Fuse setzen (wie das genau 
geht, hängt von deinem Programmer ab)

Viele Grüße,

egberto

von E...... B. (ludwig63)


Lesenswert?

Ich Programmiere mit dem myAVR Prog Tool und mit AVR Studio 6 oder geht 
die Schaltung nicht mit Attiny 45 oder brauche ich einen anderen  Attiny


Ich kenne nicht  so gut aus

Gruß

Wer kann mir da helfen

von Egberto (Gast)


Lesenswert?

Die Schaltung ist für einen Attiny 45.

Eventuell hilft dir der Link unten ja weiter.

Im letzten Bild unter EEPROM muss dann das .eep File ausgewählt werden.

http://wiki.fichtelbahn.de/doku.php?id=programmer:programmer_avrstudio

Grüße,

Egberto

von Jürgen S. (jurs)


Lesenswert?

Egberto schrieb:
> Die Schaltung ist für einen Attiny 45.
>
> Eventuell hilft dir der Link unten ja weiter.
>
> Im letzten Bild unter EEPROM muss dann das .eep File ausgewählt werden.
>
> http://wiki.fichtelbahn.de/doku.php?id=programmer:programmer_avrstudio
>
> Grüße,
>
> Egberto

Nach über acht Jahren und inzwischen über 8000 Downloads und weil es 
sonst bisher wohl niemand für notwenig gehalten hat:

HERZLICHEN DANK für das Programm mit den enthaltenen Notendaten!

Egberto, da hast Du damals wirklich ein schönes kleines Anfängerprojekt 
gepostet.

Ich selbst hatte mir die ZIP Datei mal vor fünf Jahren heruntergeladen, 
als ich mit Arduino angefangen habe. Damals hatte ich das Programm auf 
Arduino UNO (Atmega328) portiert, und dank der guten Dokumentation des 
Datenformats war das auch überhaupt kein Problem. Heute habe ich mir die 
Arduino-Portierung mal auf ein Arduino-kompatibles Board gezogen und mal 
wieder reingehört: Eine Vielzahl alter bis uralter Melodien
Keine ganzen Lieder, sondern mehr kurze Tonfolgen  mit Intros von 
vorwiegend alten Fernsehserien, aber auch Schlagern vergangener Tage.
Teils nur Fragmente mit ganz wenigen Noten.
Auf die Rückfrage wegen einer Titelliste aus dem Jahr 2015 ist ja 
niemand angesprungen, daher auf die schnelle nur mal ein paar, die ich 
sofort wiedererkannt habe:
#3 „Ausgerechnet Bananen,Bananen verlangt sie von mir!
#10 Pippi Langstrumpf:
 Zwei mal drei macht vier widdewiddewitt und drei macht neune,
ich mach? mir die Welt, widdewidde wie sie mir gefällt.
#13 Muppets Show:
Schmeißt Euch in Frack und Fummel
und Vorhang auf "Hallo"
Freut euch auf Spaß und Rummel
in der heutgen Muppetshow!

#18 Augsburger Puppenkiste:

eine Insel emit zwei Bergen und dem tiefen weiten Meer,
 Mit viel Tunnels und Geleisen und dem Eisenbahnverkehr ,
 Nun, wie mag die Insel heissen, ringsherum ist schoener Strand ,
jeder sollte einmal reisen in das schoene Lummerland.

#22; Ententanz

#23: "Was wollen wir trinken, sieben Tage lang, was wollen wir trinken, 
so ein Durst.
#24; Die ersten sieben Noten von "99 Luftballons"
Hast Du etwas Zeit für mich
#28: Die ersten Noten von Hans Albers "Flieger-Lied"
Flieger, Grüß mir die Sonne, grüß mir die Sterne und grüß mir den Mond!

#36: Toccata (Johann Sebastian Bach)
#39; Erste Noten vom Intro "die Adams-Familie"
#45: Popcorn
#62: Jaques Offenbach Can Can
#65: Intro "Dallas"
#66: Thema "Das Boot" (Klaus Doldinger)
#71: Griechischer Wein
#78: Hey Macarena
#82: Wenn ich einmal reich wär
#84:Rudolph the red-nosed rendeer
#91: Strangers in the night
#99: greensleeves
#100: Girl from Ipanema

Wenn ich jetzt richtig gezählt habe, dann habe ich 20 von 100 erkannt.

Wahrscheinlich kenne ich sehr viel mehr Lieder der Liste, vielleicht 
sogar alle.

Aber bei den wenigen Noten, die da pro Lied teilweise nur angespielt 
werden und bei dem historischen Alter der Lieder , schon schwierig.

Vielleicht wird es Zeit, dass nochmal jemand weitere 100 Melodien 
drauflegt?

Kinderlieder, Volkslieder, weitere Weihnachtslieder außer "Dudolph dem 
Rentier, es sollte wohl möglich sein, noch mehr Piepsen zu lassen . Wemm 
ich  alleine an die ganzen Intros der vielen Fernsehserien aus den 60er, 
70er und 80er Jahren denke,die ich mir damals alle angesehen habe, teils 
noch in schwarz-weiss,  ich habe hier und heute in den 100 Melodien 
jedenfalls erstmal neben Pippi Langstrumpf und der Augsburger 
Puppenkiste nur noch die Adams-Familie und das Dallas-Intro erkannt. Ein 
paar mehr Fernsehserien waren wohl dabei, aber so etwas prägnantes wie 
"Bonanza", dass sich sicher gut piepsen läßt, habe ich heute nicht 
herausgehört.

Wenn jemand selbst reinhören möchte und ein Arduin-kompatibles Board mit 
Piezo-Piepser hat: Selbstverständlich stelle ich jedem Interessenten 
gerne auch meine Portierung des Programms auf Arduino/Atmega328 zur 
Verfügung.

Aber von den "Melodien" bitte nicht zu viel versprechen, das sind 
manchmal nur ganz wenige Töne, von "99 Luftballons" beispielsweise nur 
exakt die ersten sieben Töne der Textzeile "Hast Du etwas Zeit für 
mich", und kein Deut mehr.

Vielleicht könnte ich bei einem zweiten Durchhören noch ein paar weitere 
ernennen.
Aber wenn kein Interesse besteht, dann lassen wir es weiter bei dem 
Stand, wie wir ihn seit über acht Jahren haben: Es sollen 100 Melodien 
sein, teils nur wenige kurze Noten angespielt, aber nichts genaues weiß 
man nicht.

Anyway, ich wollte nur mal ein ganz großes DANKESCHÖN loswerden für die 
Bereitstellung dieses tollen Projekts"für Mikrocontroller und 
Piezo-Piepser" vor acht Jahren!

: Bearbeitet durch User
von Reiner (Gast)


Lesenswert?

Hallo zusammen.
Die treat's sind ja schon etwas älter, aber für mich immer noch 
interessant.
Und vielleicht liest das ja noch jemand und kann mir helfen, oder einen 
Tip geben.
Leider komme ich auf keinen grünen Zweig. Mit Arduino 1.6.1 probiert mit 
Atmel Studio 6 probiert...nix...
Arduino will den "Quelltext"(hex und oder eep Datei) gar nicht erst und 
Atmel auch nicht. Arduino nimmt nur eigene Dateien wie ino, ect. (Wie 
könnte ich denn die Dateien aus der Zip in ino oder ähnlch umwandeln?)
Bei Arduino 1.6.1. über Bsp.-->  und dann -->  Digital -->  Meldie, 
funktionier das zumindest über ein Arduino Mini (Atmega328p)an pin ...
Ich würde wirklich gern das ganze fertig bekommen um es zu verschenken. 
Die Schaltung steht, nur krieg ich die Dateien nicht ins Programm um auf 
einen ATTiny 85 zu brennen.
H i l f e!!!

Danke schon mal für eventuelle Geduldsproben mit mir.

von Reiner (Gast)


Lesenswert?

Jürgen S. schrieb:
> ndern m

---bitte mal meinen Beitrag vom heutigen (24.4.2017) lesen, vllt. kommt 
ja da auch schon das erhoffte aha für kich. l.g. reiner

von Jürgen S. (jurs)


Lesenswert?

Reiner schrieb:
> Leider komme ich auf keinen grünen Zweig. Mit Arduino 1.6.1 probiert mit
> Atmel Studio 6 probiert...nix...
> Arduino will den "Quelltext"(hex und oder eep Datei) gar nicht erst und
> Atmel auch nicht. Arduino nimmt nur eigene Dateien wie ino, ect. (Wie
> könnte ich denn die Dateien aus der Zip in ino oder ähnlch umwandeln?)
> Bei Arduino 1.6.1. über Bsp.-->  und dann -->  Digital -->  Meldie,
> funktionier das zumindest über ein Arduino Mini (Atmega328p)an pin ...
> Ich würde wirklich gern das ganze fertig bekommen um es zu verschenken.
> Die Schaltung steht, nur krieg ich die Dateien nicht ins Programm um auf
> einen ATTiny 85 zu brennen.
> H i l f e!!!
Der originale Quelltext aus 2008 ist für AtTiny45 unf NUR für AtTiny45 
Mikrocontroller.

Das Programm verwendet hardwarenahe pProgrammierung mit direkter 
Manipulation von Controller-Registern, das läuft ohne Anpassungen 
nirgendwoanders drauf.

Die Lied.h Datei enthält circa 4000 Bytes an Daten für 100 Melodien, 
also im Schnitt circa. 40 Bytes pro Melodie.

Mein Testprogramm für Atmega 328 mit allen 100 Melodien ist circa 8000 
Bytes groß, kompiliert mit Arduino 1.81.

Ein .ino Programm für die Arduino-IDE kann ich hier auf Wunsch gerne 
posten.


Aber vorher die Frage an Dich:

Funktioniert auf Deinem AtTiny85 die Arduino tone() Funktion?

Bekommst Du zum Beispiel dieses Beispiel auf Deinem Attiny zum Piepsen:
https://www.arduino.cc/en/Tutorial/toneMelody
Wie sieht es damit aus?

Und wie viele Bytes Flash-Programmspeicher sind auf dem Controller 
überhaupt frei, um ein Programm hineinzuladen?

: Bearbeitet durch User
von Reiner (Gast)


Lesenswert?

Der attiny85 ist nackt.
Ich hab auch schon versucht ein Bsp. Wie hier genannt probiert, da kommt 
nur beim testen eine knackende Tonfolge. Also keine Melodie, auf dem UNO 
läuft der Test.. Ich hatte mir hier auch die zip für den 85 
runtergeladen. Aber nix...
Ich wäre für den download für arduino 1.6.1. Sehr dankbar.
L.g.

von Uwe S. (de0508)


Angehängte Dateien:

Lesenswert?

Reiner,

erkläre das mal bitte ?
Was hat die Hex- und die EEP-Datei mit dem Arduino zu tun ?
Aus meiner Erfahrung, wird nichts mit dem Arduino-Framework - zu 
langsam.

Nutze einen neuen Attiny85, spiele beide Dateien auf und stelle die 
Fusebits ein.

Ich habe dafür sogar ein Linux Shellscript erstellt: prog.sh

Die Hardwarebeschaltung sieht man im anhängigen PDF.

von Jürgen S. (jurs)


Lesenswert?

Reiner schrieb:
> Der attiny85 ist nackt.

Nackt, also ohne irgendeinen  Bootloader drauf?

Und Programme kannst Du mit einem ISP-Programmer draufladen?
Aber eine (tone() Funktion für die Arduino-IDE zum Erzeugen von 
Piepstönen hast Du nicht?


Das ist jetzt natürlich etwas ungünstig. Du hast nix in Sachen tone() 
Funktion, und ich habe nix in Sachen AtTiny, womit man ohne tone() 
Funktion Töne machen könnte.

Was würdest Du davon halten:
Eine kleine Ersatzfunktion für tone() machen, die eine Rechteckfrequenz 
an einem Ausgang einfach in einerblockierenden Schleife erzeugt, mit 
delayMicroseconds() Aufrufen zwischen zwei Flankenwechseln, entsprechend 
der gewünschten Frequenz. Das wäre ja fast überhaupt kein Aufwand.

Also eine IDE mit den Funktionen digitalWrite() und delayMicroseconds() 
hast Du für Deinen AtTiny Controller und kannst Programme mit diesen 
beiden Funktionen mit Deiner IDE schreiben und dann auch irgendwie auf 
den Controller laden, und sei es außerhalb der IDE mit ISP-Programmer?

Was wolltest Du denn als Funktionsumfang jetzt genau haben? Exakt das, 
wie es hier beschrieben wurde:
Ein Pin als INPUT für einen Tastschalter
Ein Pin als OUTPUT für den Piezo-Lautsprecher
Und wenn man den Tastschalter drückt, soll eine zufällig ausgewählte der 
100 Melodien spielen?

Nichts weiter, ja?

Ich kann ja mal probieren, "tone()" aus meinem Sketch rauszunehmen und 
durch eine Ersatzfunktion zu ersetzen.
Das sollte eigentlich funktionieren.
Kann aber bis morgen dauern.
Ich poste dann den geänderten Arduino-Code hier in den Thread hinein, 
und ohne tone() im Code sollte das dann auch für einen AtTiny85 in der 
Arduino-IDE kompilierbar sein.

von Jürgen S. (jurs)


Lesenswert?

Reiner schrieb:
> Der attiny85 ist nackt.
> Ich hab auch schon versucht ein Bsp. Wie hier genannt probiert, da kommt
> nur beim testen eine knackende Tonfolge. Also keine Melodie, auf dem UNO
> läuft der Test.. Ich hatte mir hier auch die zip für den 85
> runtergeladen. Aber nix...
> Ich wäre für den download für arduino 1.6.1. Sehr dankbar.
>

OK, hier erstmal ein ganz einfaches Testprogramm, nur zum Testen, ob 
Dein AtTiny damit drei Töne erzeugen kann:
----- schnipp - hier fängt das Testprogramm an
1
const byte SPEAKERPIN=9;
2
3
void jursTone(const byte speakerPin,const int frequency, const int duration)
4
{
5
  pinMode(speakerPin,OUTPUT);
6
  unsigned long startTime=millis();
7
  int halfPeriod=1000000L/frequency/2;
8
  while(millis()-startTime<duration)
9
  {
10
    digitalWrite(speakerPin,HIGH);
11
    delayMicroseconds(halfPeriod);
12
    digitalWrite(speakerPin,LOW);
13
    delayMicroseconds(halfPeriod);
14
  }
15
}
16
17
18
void dreiTonKlang()
19
{
20
  jursTone(SPEAKERPIN,660,1000);
21
  delay(200);
22
  jursTone(SPEAKERPIN,550,1000);
23
  delay(200);
24
  jursTone(SPEAKERPIN,440,1000);
25
  delay(200);
26
    
27
}
28
  
29
  
30
  
31
32
33
34
void setup() 
35
{
36
  dreiTonKlang();
37
38
}
39
40
void loop() 
41
{
42
43
}
44
45
46
// ----- schnapp - Ende des Testprogramms

Bei jedem Start/Reset des Controllers wird in der setup() Funktion eine 
Dreitonfolge abgespielt:
1000ms lang 660 Hz
200 ms Pause
1000ms lang 550 Hz
200 ms Pause
1000ms lang 440 Hz
- danach Pause bis zum nächsten Reset
Verwendet werden nur ganz wenige Arduino-Funktionen, die Du in der IDE 
auch für AtTiny zur Verfügung haben solltest:
- pinMode()
- digitalWrite()
- millis()
- delay()
- delayMicroseconds()

Wenn das funktioniert und Du damit die Dreitonfolge auf Deinem AtTiny 
abspielen kannst, dann sollte das mit der 100-Melodien-Klingel vom 
Prinzip her auch möglich sein.

Aber teste bitte erstmal die Dreitonfolge!
Funktioniert das?

von Reiner (Gast)


Lesenswert?

So guten Morgen zusammen!
Nach dem Kaffee gleich ran gesetzt und probiert.
Status:
Die 3 Tonfolge lässt sich problemlos auf nen ATTiny85 flashen. Habe die 
Ports( Pin ) nur geändert auf "1" um auch die Schaltung wie hier 
beschrieben, zu testen. Das funktioniert soweit ganz gut.
Nun zu der Frage.
Es soll eine Klingel werden. Anstelle des Optokoppler, verwende ich aber 
ein Schaltrelais, welches beim betätigen des Klingelknopfes anzieht und 
somit einen Minusimpuls auf das Reset vom µC abgibt, um den AT immer 
wieder eine "Tonfolge --> Melodie" zu entlocken. Ob nun zufällige 
Wiedergabe oder immer der Reihe nach von 0 -100 ist völlig egal. Für 
mich wäre sogar denkbar die Titel Anzahl zu verringern und da dafür aber 
längere Melodien zu erhalten.
Ich will ja nicht dreist sein oder klingen, da ich von schreiben solcher 
Programme eigentlich keine Ahnung habe, würde ich dich bitten, Deiner 
Kreativität freien Lauf zu lassen und überrasche mich. Vielleicht noch 
als Denkanstoß. Die Klingel soll dann Ihren Platz bei meiner Mutter 
finden, da ihr der Schrille Klingelton einer mechanischen Glocke 
gewaltig auf den Nerv geht. (Mutter = "älteres" Baujahr = also, ältere 
bekannte Melodien...

Dann lass ich mich mal überraschen. Schaue heute hin und wieder mal hier 
rein. Ist ja fast wie Weihnachten. Hab ich was,  hab ich nichts.....

Danke im voraus.
L.G.
Reiner

von bernte (Gast)


Lesenswert?

Hallo Jürgen,

hatte dich gestern angeschrieben wegen der Arduino Datei.

besten Gruß

von Jürgen S. (jurs)


Lesenswert?

Reiner schrieb:
> Status:
> Die 3 Tonfolge lässt sich problemlos auf nen ATTiny85 flashen. Habe die
> Ports( Pin ) nur geändert auf "1" um auch die Schaltung wie hier
> beschrieben, zu testen. Das funktioniert soweit ganz gut.

Na wunderbar!
Wenn Dein AtTiny die drei Töne der Dreitonfolge abspielen kann, dann 
sollte es auch keine prinzipiellen Hindernisse beim Abspielen von 
gepiepsten "Melodien" mit mehr Tönen und mehr verschiedenen Noten geben.
Nachdem inzwischen auch " bernte (Gast)" Interesse an einem Arduino-Code 
gezeigt hat, werde ich das Originalprogramm mal soweit 
konvertieren/adaptieren, so dass es auf jedem Micocontroller laufen 
sollte, der von der Arduino-IDE unterstützt wird, und den Code dann hier 
posten.


> Nun zu der Frage.
> Es soll eine Klingel werden. Anstelle des Optokoppler, verwende ich aber
> ein Schaltrelais, welches beim betätigen des Klingelknopfes anzieht und
> somit einen Minusimpuls auf das Reset vom µC abgibt, um den AT immer
> wieder eine "Tonfolge --> Melodie" zu entlocken. Ob nun zufällige
> Wiedergabe oder immer der Reihe nach von 0 -100 ist völlig egal. Für
> mich wäre sogar denkbar die Titel Anzahl zu verringern und da dafür aber
> längere Melodien zu erhalten.
> Ich will ja nicht dreist sein oder klingen, da ich von schreiben solcher
> Programme eigentlich keine Ahnung habe, würde ich dich bitten, Deiner
> Kreativität freien Lauf zu lassen und überrasche mich. Vielleicht noch
> als Denkanstoß. Die Klingel soll dann Ihren Platz bei meiner Mutter
> finden, da ihr der Schrille Klingelton einer mechanischen Glocke
> gewaltig auf den Nerv geht. (Mutter = "älteres" Baujahr = also, ältere
> bekannte Melodien...

Musikwünsche können von mir leider NICHT berücksichtigt werden.

Wer selbst Lieder in dem von egberto damals erfundenen Datenformat 
beitragen möchte, der kann die Daten hier posten und ich kann es dann 
als Melodie Nummer 101, 102, 103, 104, und so weiter gerne einbauen. 
Aber ich setze mich nicht hin und besorge mir Notenblätter von 
Wunschmelodien, um diese in das Datenformat zu codieren und in Daten und 
Code des Programms einzubauen.

Was ich machen könnte: RTTTL-Player: Wenn jemand seine Wunschmelodien 
hier als RTTTL-Strings postet, dann kann ich ggf. ein ANDERES PROGRAMM 
für Arduino hier posten, das in der Lage ist, RTTTL-Stringformat auf 
Piezo-Laufsprecher abzuspielen. Wunschlieder also nur für den, der auch 
selbst liefert: Wer als Wunschlied aus den 1920er Jahren anstelle von 
"ausgerechnet Bananen" (das hat egberto damals in Datenform als Melodie 
mitgeliefert) stattdessen "mein kleiner grüner Kaktus" gepiepst bekommen 
möchte und dafür einen Code braucht, der müßte die Noten dafür in einem 
brauchbaren Format selber liefern, also entweder im "egberto-Format" 
oder im "RTTTL-Stringformat". Dann will ich gerne prüfen, wie ich das in 
den Code einbaue.

Ansonsten werde ich hier demnächst einen Arduino-Code zum Abspielen von 
genau denjenigen 100 Melodien bzw. Frequenz-Tonfolgen posten, die 
egberto im Jahr 2008 hier zur Verfügung gestellt hat.

Und den Code kann sich dann jeder, der daran interessiert ist, mit der 
Arduino-IDE kompilieren und auf x-beliebige Atmega und ARM Cortex 
Controller oder auf AtTiny85 Controller hochladen, wie er Spass dran 
hat.

Aber zum Einbau weiterer oder anderer Melodien würde ich etwas 
Unterstützung benötigen.

von Jürgen S. (jurs)


Lesenswert?

bernte schrieb:
> Hallo Jürgen,
>
> hatte dich gestern angeschrieben wegen der Arduino Datei.
>
> besten Gruß

Hallo, ich habe es mir hier vorgemerkt und werde in den kommenden Tagen 
einen Arduino-Code für eine konvertierte/adaptierte 100-Melodien-Klingel 
posten, der dann in der Arduino-IDE für jeden von der IDE untersützten 
Controller kompiliert werden kann, passend für alles:
- Atmega-Controller (Atmega168, Atmega328, Atmega2560 etc.
- AtTiny85 Controller
- ARM Cortex
- ESP8266 Controller

Und wer will, kann es dann piepsen lassen
Aber eben immer nur die 100 Tonfolgen, die egberto damals reingepackt 
hat.
Wer etwas anderes als das möchte, soll selbst die Tonfolge(n) liefern, 
die er haben möchte.
Stay tuned - den Arduino-Code hänge ich dann hier an den Thread dran.

: Bearbeitet durch User
von bernte (Gast)


Lesenswert?

THX

von Reiner (Gast)


Lesenswert?

Super, dann warte ich auf Deinen Post mit den herkömmlichen Liedern von 
"ehemals" Da ich momentan in der guten Lage bin, mich langfristigen 
Projekten zu widmen, setze ich mich mal dran, und werde mir mit Hilfe 
der Vorlage von Noten aus Bernd seinem ehemaligen Post, einige Melodien 
zusammenstellen. Kann aber bissel dauern, den mein Notenverständnis ist 
gleich 2 und bei 3 fängt ein Toastbrot an zu singen. Aber ich krieg das 
schon hin.
Hab da auch schon so ne Idee wie es gehen könnte. bernd hat ja in seiner 
Datei eine "txt" Datei mit "Lied". Wenn ich davon die noten mit der 
Frequenz nehme z.B. "C" mit 262, dann gehe ich jetzt mal davon aus, das 
wenn ich von dir einen Ton nehme (z.B. 440,1000) und ich die 440 durch 
262 ersetze, dann den Ton "C" bekomme. (Richtig?)
Notenbücher gibts ja tausende und da dann die Lieder (die einzelnen 
Noten)so zu setzen das es "klingt", dürfte kein Problem sein. 
Voraussetzung ist, das es so funktioniert wie ich mir das gerade 
vorgestellt habe.
Vielleicht kannste ja daraus dann was machen. Mal sehen wie die 
Melodieklingel ankommt, wenn Sie dann bei Muttern läuft, vielleicht ist 
dann ja eine zweite zu Weihnachten drin, Also nein, nur ein neuer Attiny 
mit anderen Melodien, meine ich.
In diesem Sinne voller Erwartungen auf den "Download"
L.G. Reiner

von Reiner (Gast)


Lesenswert?

Ich hab das ganze jetzt zum Spass mal mit Atmelstudio 6.0 probiert, weil 
ja hex file und so...
Da käme dann die Meldung bei mir...
Vielleicht dazu ne Idee?

Reading | ################################################## | 100% 
0.00s

avrdude.exe: Device signature = 0x1e950f
avrdude.exe: NOTE: "flash" memory has been specified, an erase cycle 
will be performed
             To disable this feature, specify the -D option.
avrdude.exe: erasing chip
avrdude.exe: reading input file "Debug\Klingel-ATTINY.hex"
avrdude.exe: can't open input file Debug\Klingel-ATTINY.hex: No such 
file or directory
avrdude.exe: read from file 'Debug\Klingel-ATTINY.hex' failed

avrdude.exe done.  Thank you.

von egberto (Gast)


Lesenswert?

Hallo Jürgen + "Klingelgemeinde",

Vielen Dank für das Lob + die Anregungen und Modifikationen!!

Nur zur Historie:

Ich hatte die Klingel ursprünglich mal für die C-Control 1 gebaut - da 
wurde mir die Hardware aber zu teuer (pro Baustein damals 50 Euro (oder 
DM?)).

Die Klingeltöne habe ich nicht selbst gemacht, die sind aus Nokia 
Klingeltönen (RTTTL) mit einem Konverter + Handarbeit erzeugt.

Das ist dann wahrscheinlich auch der einfachste Weg, neue Melodien 
einzufügen
bzw. man schreibt gleich einen rtttl Interpreter (meine Chips hatten 
dafür aber zu wenig Platz).

Viel Spaß,

egberto

von Stromtuner (Gast)


Lesenswert?

Du kannst Dir ein Midifile schnappen und den dich interessierenden Kanal 
rausziehen und mit einem kleinen Phyton-Script die Notendaten 
generieren.
Elm Chan hat das doch mit seiner Spieldose vorgemacht. 6fach Polyphon 
mit DDS. kein 50%50 RTTL-gequicke aus den 90ern.
Oder Du packst Dir eine Wavedatei auf eine Micro-SD Karte.

Das der Thread nochmal hochgeholt wurde...

StromTuner

Spieldose:  http://elm-chan.org/works/mxb/report.html
Waveplayer: http://elm-chan.org/works/sd8p/report.html

von Jürgen S. (jurs)


Lesenswert?

egberto schrieb:
> Hallo Jürgen + "Klingelgemeinde",
>
> Vielen Dank für das Lob + die Anregungen und Modifikationen!!
>
> Nur zur Historie:
>
> Ich hatte die Klingel ursprünglich mal für die C-Control 1 gebaut - da
> wurde mir die Hardware aber zu teuer (pro Baustein damals 50 Euro (oder
> DM?)).
>
> Die Klingeltöne habe ich nicht selbst gemacht, die sind aus Nokia
> Klingeltönen (RTTTL) mit einem Konverter + Handarbeit erzeugt.
>
> Das ist dann wahrscheinlich auch der einfachste Weg, neue Melodien
> einzufügen
> bzw. man schreibt gleich einen rtttl Interpreter (meine Chips hatten
> dafür aber zu wenig Platz).
>
> Viel Spaß,
>
> egberto

Mensch, der egberto!
Du lebst noch!
Und Du postest sogar in Deinem bald neun Jahre alten Thema immer noch 
mit!

Das finde ich ja SUPER!
Insbesondere im Vergleich zu den Themenstartern heutezutage, die oft 
nicht über die Aufmerksamkeitsspanne einer Eintagsfliege hinauskommen 
und manchmal bereits auf Antworten, die neun Stunden nach der Erstellung 
eines Themas geschrieben wurde, schon überhaupt nicht mehr reagieren und 
auf nimmer Wiedersehen aus dem Forum verschwinden.

Dass Du Dich auch nach fast neun Jahren immer noch um Antworten in 
Deinem alten Thema kümmerst, fällt mir um so positiver auf.So ganz aus 
der Mode gekommen sind Piepstöne über Piezo-Lautsprecher bei 
Mikrocontroller-Basteleien ja nie. Sei es als Türklingel, als Weckalarm 
für Wecker, als Warn-Alarmgeber für alle möglichen 
Automatisierungsaufgaben, zur Untermalung von Lichteffekten bei 
LED-Spielereien an Weihnachtsdekoration oder im RC- oder sonstigem 
Modellbau.

Die Mikrocontroller werden moderner, vielbittiger, schneller, mit mehr 
RAM und Programmspeicher, aber das Piezo-Piepsen bleibt uns als Geräusch 
erhalten, teils sogar mit denselben alten Tonfolgen von anno dunnemals.
;-)

: Bearbeitet durch User
von Jürgen S. (jurs)


Lesenswert?

Reiner schrieb:
> avrdude.exe: Device signature = 0x1e950f

Offenbar liest Dein ISP-Programmer die falsche Device-Signatur.

Mein Google sagt, ein AtTiny85 sollte die Signatur 1E 93 0B haben.

Falsche Brenngeschwindigkeit?

von Jürgen S. (jurs)


Lesenswert?

So, und hier nach über acht Jahren nun eine Arduino-Version der 
100-Melodien-Klingel:
1
// Anfangdes Arduino-Programms
2
const byte BUTTONPIN=2;
3
const byte SPEAKERPIN=9;
4
const byte MELODIES=100;
5
const uint16_t ton[]PROGMEM=
6
{
7
262, // c    tone frequenciesin Hz
8
277, //cis
9
294, //d
10
311, //dis
11
330, //e
12
349, //f
13
370, //fis
14
392, //g
15
416, //gis
16
440, //a
17
466, //b
18
495, //h
19
524, //c'
20
554, //cis'
21
588, //d'
22
622, //dis'
23
660, //e'
24
698, //f'
25
740, //fis'
26
784, //g'
27
831, //gis'
28
880, //a'
29
929, //b'
30
992, //h'
31
1050, //c''
32
1106, //cis''
33
1179, //d''
34
1244, //dis''
35
1316, //e'
36
1397, //f''
37
1562, //g'' auf position von fis'' verschoben
38
};
39
40
41
42
const uint8_t duration[] PROGMEM=
43
{
44
2, //1/32 Zeit in 20 ms Schritten
45
3, //1/32.
46
4, //1/16
47
6, //1/16.
48
8, //1/8
49
12,//1/8.
50
16,//1/4
51
24,//1/4.
52
};
53
54
55
const uint8_t lied[] PROGMEM = {
56
57
1 //Lied Nr. 1 Offset:0
58
59
,0,136,128,107,128,72,64,72,141,136,134,136,128,111,128,72,64,72,144,143,139,136,143,148,72,70,64,70,131,139,200,200,192,82,143,141,139,200,171,72,64,72,141,136,134,200,175,72,64,72,144,143,139,136,143,148,72,70,64,70,131,139,200,200
60
61
,2 //Lied Nr. 2 Offset:65
62
63
,65,3,3,67,131,65,65,65,65,4,4,68,132,67,67,67,65,3,3,67,131,65,65,65,65,4,4,68,132,67,66,65,77,236,72,70,232
64
65
,4 //Lied Nr. 3 Offset:103
66
67
,141,8,10,72,6,5,72,8,10,79,13,12,74,12,205
68
69
,4 //Lied Nr. 4 Offset:119
70
71
,13,18,13,20,13,16,18,13,21,13,23,13,20,21,13,20,13,18,13,20,13,16,18,13
72
73
,3 //Lied Nr. 5 Offset:144
74
75
,111,0,111,0,111,0,75,0,18,111,0,75,0,18,175,64,118,0,118,0,118,0,87,0,18,110
76
77
,2 //Lied Nr. 6 Offset:171
78
79
,13,12,77,8,0,8,0,4,0,4,0,1,0,1,0,13,12,77,9,0,9,0,6,0,70,1,0,1,0,13,12,77,8,0,8,0,4,0,4,0,1,0,1,0,8,6,4,3,1,3,4,1,4,6,72,64,79,13,15,11,15,10,15,8,15,15,0,15,0,15,0,79,13,15,11,15,10,15,8,15,15,0,15,0,15,0,8,6,4,3,1,3,4,1,4,6,129
80
81
,3 //Lied Nr. 7 Offset:269
82
83
,73,66,0,78,11,73,66,0,73,7,6,7,8,9,66,68,134,128,73,66,0,78,11,73,66,0,73,7,6,7,8,9,66,68,130
84
85
,3 //Lied Nr. 8 Offset:305
86
87
,8,8,72,74,69,0,104,74,69,0,104,74,72,7,134
88
89
,3 //Lied Nr. 9 Offset:321
90
91
,15,0,18,0,15,0,16,0,13,0,80,64,21,0,16,0,85,64,20,0,16,0,84
92
93
,3 //Lied Nr. 10 Offset:345
94
95
,72,77,81,77,79,64,18,17,15,13,76,79,72,76,141,81,64,72,77,81,77,79,64,18,17,15,13,76,79,72,76,141
96
97
,3 //Lied Nr. 11 Offset:378
98
99
,69,71,72,74,72,71,69,68,68,69,71,5,4
100
101
,3 //Lied Nr. 12 Offset:392
102
103
,76,74,76,74,76,74,76,10,109,76,77,76,77,76,77,15,113,79,81,79,81,79,81,15,108,74,76,74,76
104
105
,3 //Lied Nr. 13 Offset:422
106
107
,77,77,74,76,10,76,72,64,77,77,74,12,10,0,104,64,69,69,72,70,5,70,13,1,3,69,5,5,0,5,72
108
109
,3 //Lied Nr. 14 Offset:454
110
111
,15,8,8,15,8,8,15,8,16,8,15,8,8,15,8,8,15,8,16,8,14,7,7,14,7,15,7,14,7,7,14,7,7,14,7,15,7
112
113
,2 //Lied Nr. 15 Offset:492
114
115
,15,16,15,16,15,16,15,16,15,15,16,17,18,19,20,84,128,84,128,87,64,77,64,84,128,84,128,82,64,83,64,84,128,84,128,87,64,77,64,84,128,84,128,82,64,83,64,87,84,207,207,0,87,84,206,206,0,87,84,205,205,64,75,77
116
117
,5 //Lied Nr. 16 Offset:557
118
119
,8,13,16,15,13,16,13,15,13,9,11,136,8,13,16,15,13,16,13,15,13,8,7,134,6
120
121
,3 //Lied Nr. 17 Offset:583
122
123
,74,74,81,17,204,77,76,77,79,77,76,74,74,74,81,17,204,77,76,77,79,77,76
124
125
,4 //Lied Nr. 18 Offset:607
126
127
,145,143,13,8,8,8,8,8,15,13,12,8,8,8,8,0,15,13,12,8,8,8,8,8,10,12,13,12,13,17,20
128
129
,2 //Lied Nr. 19 Offset:639
130
131
,5,0,6,5,5,0,5,5,6,5,5,5,4,5,5,5,5,0,6,5,5,0,6,5,6,5,5,5,4,5,5,5,3,0,5,3,3,0,5,3,5,3,3,3,1,3,3,3,3,0,5,3,3,0,5,3,5,3,3,3,1,3,3,3
132
133
,2 //Lied Nr. 20 Offset:704
134
135
,173,40,100,136,225,128,173,40,100,136,225,128,171,42,104,138,227,128,173,40,100,136,225
136
137
,2 //Lied Nr. 21 Offset:728
138
139
,24,0,25,0,27,24,20,17,24,20,17,13,20,17,13,10,128,25,0,27,0,29,25,22,18,25,22,18,15,22,18,15,12,192,31,29,25,22,18,15,12,25,22,18,15,12,18,15,12,18,145
140
141
,4 //Lied Nr. 22 Offset:780
142
143
,8,8,10,10,5,5,72,8,8,10,10,5,5,72,8,8,10,10,13,13,76,76,74,72,70,6,6,8,8,3,3,70,6,6,8,8,3,3,70,6,6,8,8,10,12,77,74,72,69,65
144
145
,3 //Lied Nr. 23 Offset:831
146
147
,79,15,13,76,141,138,74,79,79,13,108,79,15,13,76,141,138,76,72,138,64,76,77,79,145,113,114,79,177,79,15,13,76,141,138,74,79,79,13,108,79,15,13,76,141,138,76,72,106
148
149
,3 //Lied Nr. 24 Offset:881
150
151
,79,17,109,81,79,13,106
152
153
,3 //Lied Nr. 25 Offset:889
154
155
,74,64,74,64,74,13,113,64,81,15,13,81,15,13,81,15,13,17,17,15,13
156
157
,2 //Lied Nr. 26 Offset:911
158
159
,141,18,18,18,0,79,77,170,77,18,18,18,0,81,79,177,81,81,77,79,77,81,77,79,74,77,72,75,74,70
160
161
,2 //Lied Nr. 27 Offset:942
162
163
,68,69,192,71,72,192,68,69,0,71,72,0,77,76,0,68,69,0,76,203,192,10,8,5,3,197,192,68,69,128,71,72,128,68,69,0,71,72,0,77,76,0,68,69,0,81,208
164
165
,3 //Lied Nr. 28 Offset:990
166
167
,141,168,64,8,10,12,141,168,64,8,10,12,141,111,17,146,113,15,212
168
169
,2 //Lied Nr. 29 Offset:1010
170
171
,8,10,11,1,3,4,6,8,10,11,13,15,16,0,18,20,22,215,0,21,23,21,0,19,0,21,0,19,0,21,0,19,0,18,0,16,0,79,78,0,16,0,17,0,82,0,15,0,11,9,0,11,137,0,71,6,0,198,198
172
173
,2 //Lied Nr. 30 Offset:1070
174
175
,10,15,10,15,202,134,136,195,128,10,15,10,15,202,134,136,205,128,10,15,10,15,202,134,69,67,193,128,10,15,10,15,202,136,227
176
177
,1 //Lied Nr. 31 Offset:1106
178
179
,78,207,207,192,192,78,239,192,192,49,47,46,207,207,192,192,78,207,207,192,192,76,237,192,192,47,45,44,205,205,192,192,75,236,192,192,13,12,10,44,234,192,192,10,8,7,42,232,232
180
181
,3 //Lied Nr. 32 Offset:1156
182
183
,129,198,168,9,11,201,161,65,166,72,73,65,41,33,13,235
184
185
,3 //Lied Nr. 33 Offset:1173
186
187
,8,8,8,8,72,74,72,69,64,1,3,1,67,67,65,133
188
189
,3 //Lied Nr. 34 Offset:1190
190
191
,81,150,113,19,149,78,78,147,113,15,145,106,10,140,108,14,143,79,81,147,117,22,184
192
193
,2 //Lied Nr. 35 Offset:1214
194
195
,15,14,15,17,18,17,18,19,20,19,20,22,23,22,20,23,22,10,14,17,22,20,18,17,18,17,15,14,15,10,12,14,15,14,15,17,18,17,18,19,20,19,20,22,23,22,20,23,22,10,14,17,22,20,18,17,15
196
197
,2 //Lied Nr. 36 Offset:1272
198
199
,10,8,202,202,8,6,3,5,194,0,163,192,10,8,202,202,101,102,98,195
200
201
,2 //Lied Nr. 37 Offset:1293
202
203
,69,0,6,8,0,173,0,67,0,5,198,64,72,0,10,12,0,178,64,74,0,12,141,143,145
204
205
,3 //Lied Nr. 38 Offset:1319
206
207
,67,72,200,76,10,8,204,138,200,133,195,67,69,200,76,10,8,204,74,76,207,207
208
209
,3 //Lied Nr. 39 Offset:1342
210
211
,13,82,22,82,13,76,148,18,81,20,81,13,74,146,13,82,22,82,13,76,148,18,81,13,79,17,210
212
213
,1 //Lied Nr. 40 Offset:1370
214
215
,12,15,12,15,12,15,12,15,15,18,15,18,15,18,15,18,18,22,18,22,18,22,18,22
216
217
,3 //Lied Nr. 41 Offset:1395
218
219
,72,72,8,12,79,79,79,15,13,76,77,77,13,12,74,3,76,8,74
220
221
,4 //Lied Nr. 42 Offset:1415
222
223
,12,17,21,22,21,17,12,10,9,10,108
224
225
,2 //Lied Nr. 43 Offset:1427
226
227
,141,64,40,0,232,64,37,0,134,0,42,0,136,0,33,0,225
228
229
,1 //Lied Nr. 44 Offset:1445
230
231
,10,12,10,12,10,12,10,128,10,12,10,12,10,12,10,12,10
232
233
,2 //Lied Nr. 45 Offset:1463
234
235
,77,75,77,72,68,72,129,77,75,77,72,68,72,129,77,79,80,13,80,13,80,79,11,79,11,79,77,75,72,75,141
236
237
,2 //Lied Nr. 46 Offset:1495
238
239
,41,47,48,41,110,172,201,201,41,47,48,41,110,172,201,201
240
241
,3 //Lied Nr. 47 Offset:1512
242
243
,11,7,11,16,76,0,11,9,6,9,14,75,9,7,64,7,4,73,4,64,9,7,75,9,7
244
245
,3 //Lied Nr. 48 Offset:1538
246
247
,15,0,13,0,10,10,13,13,15,15,13,10,64,15,0,17,17,15,0,12,12,15,0,17,0,15,12
248
249
,4 //Lied Nr. 49 Offset:1566
250
251
,72,74,76,13,12,12,10,10,8,8,1,67,170
252
253
,2 //Lied Nr. 50 Offset:1580
254
255
,12,10,140,133,64,13,12,77,76,138,64,13,12,141,133,64,10,8,74,72,71,74,168
256
257
,3 //Lied Nr. 51 Offset:1604
258
259
,71,74,108,71,74,13,140,71,74,108,74,167
260
261
,2 //Lied Nr. 52 Offset:1617
262
263
,102,11,176,79,43,40,45,210,210
264
265
,3 //Lied Nr. 53 Offset:1627
266
267
,143,76,13,143,0,76,13,175,81,79,77,76,77,108,0,72,10,140,0,74,76,167,64,136,106
268
269
,2 //Lied Nr. 54 Offset:1653
270
271
,69,70,72,13,72,13,8,13,72,143,72,104,141,128,70,72,74,13,74,13,10,13,74,143,72,104,141
272
273
,2 //Lied Nr. 55 Offset:1681
274
275
,79,81,211,211,19,20,19,17,15,19,81,0,246,246,0,84,83,207,207,0,204,0,202,202,0,79,81,211,211,19,20,19,17,15,19,81,0,214,214,0,147,0,216,216,0,150,0,209,209
276
277
,3 //Lied Nr. 56 Offset:1731
278
279
,104,5,129,133,136,205,113,15,141,133,135,200
280
281
,3 //Lied Nr. 57 Offset:1744
282
283
,82,81,77,10,207,64,77,15,81,77,202
284
285
,4 //Lied Nr. 58 Offset:1756
286
287
,5,17,5,17,5,18,5,20,5,17,5,17,5,18,5,15,5,17,5,17,5,18,5,20,5,17,5,17,5,18,5,15,5,17,13,5,15,5,12,5,13,5,10,5,12,5,9,202
288
289
,5 //Lied Nr. 59 Offset:1805
290
291
,37,5,5,37,6,8,10,72,0,8,10,10,8,77,72,6,101,0,5,6,8,3,67,3,5,6,65
292
293
,4 //Lied Nr. 60 Offset:1833
294
295
,76,13,5,10,13,15,8,12,77,10,13,17,82,17,15,13,5,10,13,12,3,8,138
296
297
,3 //Lied Nr. 61 Offset:1857
298
299
,141,77,12,13,15,13,12,10,77,13,10,141,77,12,13,10,8,5,6,200,8,6,5,3,5,6,8,10,136,136,8,10,12,10,8,6,5,3,5,3,65,65,1,3,69,70,131,200
300
301
,4 //Lied Nr. 62 Offset:1906
302
303
,65,65,3,6,5,3,72,72,8,10,5,6,67,67,3,6,5,3,1,12,10,8,6,5,3,129
304
305
,6 //Lied Nr. 63 Offset:1933
306
307
,17,22,24,121,17,89,17,114,0,17,18,27,25,120,0,15,88,22,148
308
309
,5 //Lied Nr. 64 Offset:1953
310
311
,19,19,19,19,84,19,81,17,22,83,79,128
312
313
,3 //Lied Nr. 65 Offset:1966
314
315
,5,106,5,113,10,78,12,14,74,69,74,83,81,14,15,177,0,5,74,83,81,14,15,81,12,14,74,69,74,14,15,108,10,138
316
317
,4 //Lied Nr. 66 Offset:2001
318
319
,100,3,1,3,4,8,107,10,8,10,11,15,178,64,102,5,3,5,6,10,109,12,10,12,13,17,180,128
320
321
,2 //Lied Nr. 67 Offset:2030
322
323
,134,102,8,106,8,102,1,131,134,193,134,136,138,104,6,136,104,10,200,129,97,1,134,97,1,131,99,3,200,133,101,5,133,101,3,129,99,5,198
324
325
,5 //Lied Nr. 68 Offset:2070
326
327
,10,15,14,15,17,18,17,18,20,150
328
329
,5 //Lied Nr. 69 Offset:2081
330
331
,6,6,10,11,13,11,10,6,6,10,11,13,10,3,3,6,8,10,8,6,3,3,10,8,0,70
332
333
,5 //Lied Nr. 70 Offset:2108
334
335
,40,35,11,10,13,10,6,40,35,11,10,13,10,6,43,38
336
337
,4 //Lied Nr. 71 Offset:2125
338
339
,150,86,24,217,64,25,25,89,24,123,89,88,86,145,81,18,212,64,20,20,84,19,118,84,82,81,143,79,17,210,64,18,18,82,17,116,82,81,79,209,64,79,81,82,84,64,153,152,87,64,150,86,24,217,64,25,25,89,24,123,89,88,86,145,81,18,212,64,20,20,84,19,118,84,82,81,143,79,17,210,64,18,18,82,17,116,82,81,79,205,64,143,76,202
340
341
,3 //Lied Nr. 72 Offset:2220
342
343
,72,77,79,81,170,64,10,12,77,15,77,74,0,76,13,76,10,72,77,79,81,178,145,239
344
345
,2 //Lied Nr. 73 Offset:2245
346
347
,73,0,73,0,76,0,144,0,206,0,233,0,73,0,73,0,71,0,140,0,201,201,128,73,0,73,0,76,0,144,0,206,0,245,64,83,0,83,0,80,0,140,0,245,245
348
349
,3 //Lied Nr. 74 Offset:2291
350
351
,8,13,0,13,15,0,15,20,0,20,17,64,84,0,84,0,18,79
352
353
,3 //Lied Nr. 75 Offset:2310
354
355
,69,77,76,74,5,5,13,13,12,12,10,0,70,77,76,74,6,6,13,13,12,12,10
356
357
,2 //Lied Nr. 76 Offset:2334
358
359
,175,17,0,114,0,111,0,18,0,18,0,17,0,15,0,113,0,106,0,177,18,0,116,0,113,0,20,0,20,0,18,0,17,0,143
360
361
,2 //Lied Nr. 77 Offset:2370
362
363
,72,69,72,173,177,111,17,82,138,64,74,77,86,148,64,79,81,82,145,64,77,79,81,175,173,140
364
365
,3 //Lied Nr. 78 Offset:2397
366
367
,70,6,6,70,6,6,6,6,6,6,6,10,1,1,70,6,6,70,6,6,6,6,6,6,3,1,64,70,6,6,70,6,6,6,6,6,6,6,10,64,173,74,13,10,6,64,128
368
369
,3 //Lied Nr. 79 Offset:2445
370
371
,84,82,81,10,106,76,13,79,0,82,81,79,8,104,74,12,77,0,81,79,77,70,70,8,74,0,76,76,13,111,200
372
373
,2 //Lied Nr. 80 Offset:2477
374
375
,71,64,74,64,140,128,71,64,74,64,140,128,71,64,74,64,76,64,79,79,78,78,74,64,236,128,7,72,64,74,64,76,64,72,64,167,133,128,7,72,64,74,64,44,44,72,64,167,133,128,7,72,64,74,64,76,64,72,64,71,64,69,64,67,64,66,64,195,195
376
377
,3 //Lied Nr. 81 Offset:2547
378
379
,82,17,79,14,77,12,75,10,8,10,11,74,8,141,0,13,10,0,10,10,9,10,18,0,13,13,0,10,11,0,11,11,0,13,143,0,11,8,0,8,8,7,8,17,0,15,15,0,11,10,0,10,10,0,11,141
380
381
,3 //Lied Nr. 82 Offset:2604
382
383
,20,18,20,18,81,77,64,17,18,20,18,20,18,17,18,20,22,23,22,23,22,84,64,85,84,83,82,16,15,13,15,80,64,16,15,13,15,80,77,84
384
385
,2 //Lied Nr. 83 Offset:2645
386
387
,14,0,16,0,145,17,0,19,0,81,16,0,14,0,12,0,140,14,0,16,0,144,14,0,16,0,113,0,115,0,81,16,0,14,0,12,0,142,14,0,12,0,140,14,0,16,0,145,17,0,19,0,81,16,0,14,0,12,0,140,14,0,16,0,144,14,0,16,0,113,0,115,0,81,16,0,14,0,12,0,142,14,0,12,0,140
388
389
,2 //Lied Nr. 84 Offset:2732
390
391
,8,74,8,69,77,74,168,8,10,8,10,72,77,172,64,6,72,6,67,76,74,168,8,10,8,10,72,74,165
392
393
,2 //Lied Nr. 85 Offset:2762
394
395
,1,1,65,1,1,65,1,1,6,72,74,0,1,1,65,1,1,65,10,10,8,69,65,0,1,1,65,1,1,65,1,1,6,72,74,0,6,10,77,13,13,13,11,10,8,6,106,6
396
397
,2 //Lied Nr. 86 Offset:2811
398
399
,216,145,147,149,150,216,145,128,209,218,150,152,154,156,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,11,10,11,10,11,10,11,10,11,10,11,10,11,10
400
401
,3 //Lied Nr. 87 Offset:2860
402
403
,81,17,17,17,17,17,81,74,77,81,79,15,15,15,15,15,15,8,0,76,79,81,17,17,17,17,17,17,19,20,22,0,84,81,15,12,0,74,0,74
404
405
,4 //Lied Nr. 88 Offset:2901
406
407
,109,81,83,22,116,81,77,10,7,7,7,136,0,0,7,7,7,8,107,13,13,13,77
408
409
,2 //Lied Nr. 89 Offset:2925
410
411
,8,0,13,0,12,0,13,0,15,0,17,0,18,0,116,0,84,82,116,0,84,82,116,0,84,82,84,86,82,84,209,209,64,8,0,13,0,12,0,13,0,15,0,17,0,18,0,116,0,84,82,116,0,84,82,116,0,84,82,81,82,79,81,205
412
413
,2 //Lied Nr. 90 Offset:2990
414
415
,72,72,72,141,77,212,64,84,118,20,82,212,212
416
417
,5 //Lied Nr. 91 Offset:3004
418
419
,6,8,8,6,72,0,8,6,8,10,8,6,5,6,6,5,70,0,6,5,6,8,6,69,0,3,5,5,3,69,0,3,5,6,5,3,0,139
420
421
,2 //Lied Nr. 92 Offset:3043
422
423
,72,141,64,76,138,64,77,79,81,79,77,140,64,8,8,74,77,72,8,8,74,77,72,82,145,64,79,141
424
425
,3 //Lied Nr. 93 Offset:3072
426
427
,65,3,5,3,5,7,8,7,8,10,8,5,10,12,141,140
428
429
,4 //Lied Nr. 94 Offset:3089
430
431
,7,7,7,3,0,12,0,5,0,5,0,5,9,9,10,12,10,10,10,5,0,3,0,7,0,7,0,7,5,5,7,5
432
433
,2 //Lied Nr. 95 Offset:3122
434
435
,81,5,0,5,0,5,0,5,0,5,0,76,5,0,5,0,5,0,5,0,5,0,77,5,0,5,0,5,0,5,0,5,0,74,5,0,5,0,5,0,5,0,5,0,76,5,0,5,0,5,0,72,5,0,5,0,5,0,74,5,0,5,0,5,0,5,0,5,0,71,5,0,5,0,5,0,5,0,5,0,72,5,0,5,0,5,0,5,0,5,0,74,5,0,5,0,5,0,5,0,5,0,71,5,0,5,0,5,0,72,5,0,5,0,5,0,69
436
437
,3 //Lied Nr. 96 Offset:3240
438
439
,14,11,128,11,9,7,9,11,78,11,78,16,11,128,11,9,7,9,11,78,11,78,16,12,128,12,11,9,11,12,80,19,80,114,112,110,108,75,73
440
441
,2 //Lied Nr. 97 Offset:3280
442
443
,132,132,104,4,107,8,132,132,104,4,107,8,134,97,12,129,102,4,99,4,97,3,107,1,99,11,132,132,104,4,107,8,132,132,104,4,107,8,134,134,134,104,6,132,136,196
444
445
,5 //Lied Nr. 98 Offset:3327
446
447
,22,13,17,22,24,17,13,24,25,17,13,25,19,15,22,19,17,13,22,77,17,13,10,8,8,10,74
448
449
,2 //Lied Nr. 99 Offset:3355
450
451
,72,139,77,111,16,79,141,74,102,8,74,139,72,104,6,72,138,70,131,72,139,77,111,17,79,141,74,102,8,74,107,10,72,103,5,71,136
452
453
,4 //Lied Nr. 100 Offset:3393
454
455
,116,17,17,79,116,17,81,17,15,116,81,81,15,84,20,17,81,17,15,82,79,79,15,13,81,77,77,13,75,141
456
457
};
458
459
460
461
462
uint16_t liedofs [] = { //Anfaenge der Lieder
463
0 //Lied 1
464
,65 //Lied 2
465
,103 //Lied 3
466
,119 //Lied 4
467
,144 //Lied 5
468
,171 //Lied 6
469
,269 //Lied 7
470
,305 //Lied 8
471
,321 //Lied 9
472
,345 //Lied 10
473
,378 //Lied 11
474
,392 //Lied 12
475
,422 //Lied 13
476
,454 //Lied 14
477
,492 //Lied 15
478
,557 //Lied 16
479
,583 //Lied 17
480
,607 //Lied 18
481
,639 //Lied 19
482
,704 //Lied 20
483
,728 //Lied 21
484
,780 //Lied 22
485
,831 //Lied 23
486
,881 //Lied 24
487
,889 //Lied 25
488
,911 //Lied 26
489
,942 //Lied 27
490
,990 //Lied 28
491
,1010 //Lied 29
492
,1070 //Lied 30
493
,1106 //Lied 31
494
,1156 //Lied 32
495
,1173 //Lied 33
496
,1190 //Lied 34
497
,1214 //Lied 35
498
,1272 //Lied 36
499
,1293 //Lied 37
500
,1319 //Lied 38
501
,1342 //Lied 39
502
,1370 //Lied 40
503
,1395 //Lied 41
504
,1415 //Lied 42
505
,1427 //Lied 43
506
,1445 //Lied 44
507
,1463 //Lied 45
508
,1495 //Lied 46
509
,1512 //Lied 47
510
,1538 //Lied 48
511
,1566 //Lied 49
512
,1580 //Lied 50
513
,1604 //Lied 51
514
,1617 //Lied 52
515
,1627 //Lied 53
516
,1653 //Lied 54
517
,1681 //Lied 55
518
,1731 //Lied 56
519
,1744 //Lied 57
520
,1756 //Lied 58
521
,1805 //Lied 59
522
,1833 //Lied 60
523
,1857 //Lied 61
524
,1906 //Lied 62
525
,1933 //Lied 63
526
,1953 //Lied 64
527
,1966 //Lied 65
528
,2001 //Lied 66
529
,2030 //Lied 67
530
,2070 //Lied 68
531
,2081 //Lied 69
532
,2108 //Lied 70
533
,2125 //Lied 71
534
,2220 //Lied 72
535
,2245 //Lied 73
536
,2291 //Lied 74
537
,2310 //Lied 75
538
,2334 //Lied 76
539
,2370 //Lied 77
540
,2397 //Lied 78
541
,2445 //Lied 79
542
,2477 //Lied 80
543
,2547 //Lied 81
544
,2604 //Lied 82
545
,2645 //Lied 83
546
,2732 //Lied 84
547
,2762 //Lied 85
548
,2811 //Lied 86
549
,2860 //Lied 87
550
,2901 //Lied 88
551
,2925 //Lied 89
552
,2990 //Lied 90
553
,3004 //Lied 91
554
,3043 //Lied 92
555
,3072 //Lied 93
556
,3089 //Lied 94
557
,3122 //Lied 95
558
,3240 //Lied 96
559
,3280 //Lied 97
560
,3327 //Lied 98
561
,3355 //Lied 99
562
,3393 //Lied 100
563
};
564
565
//Format Lied :
566
567
//1. Byte: speed 2 schnell, 3..5 normal
568
//2. Byte - n Byte Noten
569
570
571
//Aufbau eines Notenbytes:
572
573
//Bit
574
// 7  6  5  4  3  2  1  0
575
// |__|__|  |__|__|__|__|_Tonhoehe ( 1..31 (C..G'') incl. aller Halbtonschritte
576
//    |                                             ausser 31: G'' statt FIS''
577
//    |                                     wenn 0, kein Ton sondern Pause
578
//    |
579
//    |___________________________________________Tonlaenge
580
//
581
//                                                7: 1/4.
582
//                                                6: 1/4
583
//                                                5: 1/8.
584
//                                                4: 1/8
585
//                                                3: 1/16.
586
//                                                2: 1/16
587
//                                                1: 1/32.
588
//                                                0: 1/32
589
//   Ende Lied.h
590
591
592
/*
593
//Türklingel mit 100 Melodien M. Baudisch 12/2008
594
*/
595
596
597
void setup() 
598
{
599
  // put your setup code here, to run once:
600
//  Serial.begin(9600);
601
//  Serial.println("I\nprogram is up and running...");
602
  pinMode(BUTTONPIN,INPUT_PULLUP);
603
  pinMode(SPEAKERPIN,OUTPUT);
604
  jursTone(SPEAKERPIN,440,600);
605
}
606
607
void jursTone(const byte pin,const int frequency, const int duration)
608
{
609
  unsigned long startTime=millis();
610
  int halfPeriod=1000000L/frequency/2;
611
  while(millis()-startTime<duration)
612
  {
613
    digitalWrite(SPEAKERPIN,HIGH);
614
    delayMicroseconds(halfPeriod);
615
    digitalWrite(SPEAKERPIN,LOW);
616
    delayMicroseconds(halfPeriod);
617
  }
618
}
619
620
621
622
623
uint16_t liedcount;  
624
uint16_t liedende;
625
uint8_t liednr=0;
626
byte lspeed=0;
627
uint8_t dauer;
628
uint8_t hoehe;
629
uint8_t note ;
630
631
632
void playlied(int liednr)
633
{
634
//  Serial.print("Melodie Nr.: ");Serial.println(liednr);
635
   if (liednr==MELODIES) liedende=sizeof(lied); 
636
   //bei letztem Lied ist Endwert Größe des Arrays
637
   else liedende=liedofs[liednr]; //ansonsten 1 Byte vor nächstem Lied
638
  Serial.print(liedofs[liednr-1]);Serial.print(" ");Serial.println(liedende);
639
//  liedcount=liedofs[liednr-1];
640
  lspeed= pgm_read_byte(&lied[liedcount]);
641
//  Serial.print("Speed: ");Serial.print(lspeed);Serial.println();
642
   for (liedcount=liedofs[liednr-1]+1;liedcount<liedende;liedcount++)
643
   {
644
      note=pgm_read_byte(&lied[liedcount]); //Note holen
645
      Serial.println(note);
646
      hoehe=note & 0x1f; //Tonhöhe ausmaskieren (5 Bit)
647
      dauer= pgm_read_byte(&duration[note >> 5]); // 5 Bit nach rechts schieben und Zeit holen
648
      if (hoehe) //wenn keine Pause, somdern ein Ton
649
      {
650
         jursTone(SPEAKERPIN,pgm_read_word(&ton[hoehe-1]),dauer*lspeed*20);
651
         delay(int(dauer)*int(lspeed)*int(20));
652
      }
653
      else // es ist nur eine Pause
654
       delay(lspeed*dauer*20);
655
   }
656
}
657
658
659
660
661
662
663
byte b,liedNummer;
664
bool buttonPressed()
665
{
666
  static byte oldState;
667
  byte newState=digitalRead(BUTTONPIN);
668
  if(newState!=oldState && newState==LOW)  
669
  {
670
    oldState=newState;
671
    return true;
672
  }
673
  oldState=newState;
674
  return false;
675
}
676
677
678
void loop() 
679
680
{
681
  if (buttonPressed())
682
  {
683
  randomSeed(micros());  
684
  playlied(1+random(100));
685
  }
686
687
}
688
// Ende des Arduino-Programms


Der Code verwendet nur weniger als eine handvoll Library-Funktionen und 
sollte daher auf jedem Arduino-kompatiblen Board mit zwei freien Pins 
laufen, einschließlich AtTiny85

Getestet habe ich auf Atmega328, das Kompilat ergibt ein 6784 Bytes 
großes Programm.

Als Beschaltung  wird ein Tastschalter an Pin-2
und ein Piezo-Lautsprecher an Pin-9 verwendet.
(Diese Konstanten können im Code natürlich geändert werden.

Die Testbeschaltung ist:
- Tastschalter an Pin-2, schaltet gegen GND
- Piezo-Lautsprecher zwischen Pin-9 und GND

Zur Auswertung des Tastschalters wird im Programm der interne Pull-up 
Widerstand aktiviert

Beim Drücken des Tastschalters wird jedesmal eine der 100 vorhandenen 
Melodien nach dem Zufallsprinzip ausgewählt und abgespielt. Die 
loop()-Funktion dazu lautet einfach:
1
void loop() 
2
3
{
4
  if (buttonPressed())
5
  {
6
  randomSeed(micros());  
7
  playlied(1+random(100));
8
  }
9
10
}

Der Zufallszahlengenerator wird jedsmal erst beim Drücken des 
Tastschalters neu initialisiert, und zwar mit dem Stand des 
Mikrosekundenzählers, um damit zu verhindern, dass jedesmal nach einem 
Neustart/Reset des Controllers dieselbe "zufällige Reihenfolge 
abgespielt wird, sondern die zufällige Melodie "wirklich zufällig" 
ausgewählt wird, im Moment des Tastendrucks.

Ach ja, Nachtrag zu meinem Beitrag von gestern: Beim Testen des Codes 
habe ich heute noch eine weitere Melodie erkannt (aber ich kann die 
Nummer nicht sagen, da per Zufallsprinzip auf Tastendruck ausgewählt und 
abgespielt):
- eine der Tonfolgen ist: In München steht ein Hofbräuhaus - oans - zwoa 
- gsuffa!

Hinweise: Beim Neustart/Reset wird ein kurzer Kontroll-Piepser 
ausgegeben, danach ist der Tastschalter scharf geschaltet.
Sobald der Tastschalter-Pin gegen GND geschlossen wird, spielt eine der 
Tonfolgen.
 Und"Serial" hat in dem Programm keine Funktion, weil in der setup() 
Funktion kein "Serial.begin(9600)" drinsteht. Ggf. im setup() ergänzen, 
oder alle Zeilen mit Ausgaben auf Serial ignorieren oder aus dem 
Programm herauslöschen.

von Markus (Gast)


Lesenswert?

Es gibt die Möglichkeit, so viel Code einfach als *.ino File anzuhängen. 
Dann erstellt dieses Form sogar automatisch einen Knopf neben dem File, 
der den Code direkt anzeigt.
Also: Bitte verpacken!

von Jürgen S. (jurs)


Angehängte Dateien:

Lesenswert?

Markus schrieb:
> Es gibt die Möglichkeit, so viel Code einfach als *.ino File anzuhängen.
> Dann erstellt dieses Form sogar automatisch einen Knopf neben dem File,
> der den Code direkt anzeigt.
> Also: Bitte verpacken!

OK, also auf speziellen Wunsch von Markus nochmal als .ino Datei.

Das nachträgliche Editieren meines Beitrags war leider nicht mehr 
möglich, weil Markus bereits eine Antwort gepostet hat, und damit 
verhindert, dass ich meinen letzten Beitrag nochmal bearbeiten konnte.

Anyway. Viel Spass mit dm Code, wer immer ihn gebrauchen kann!

von bernte (Gast)


Lesenswert?

wenn es an der Stelle eine Möglichkeit gäbe für dreimal Daumen hoch täte 
ich sie hier einfügen

Danke für deine Zeit und Mühe
ich denke ich werde meine Frau heute Abend mit dem Gepiepse nerven
irgendwo sollten noch ein paar Arduino Uno clones rumliegen

von Reiner (Gast)


Lesenswert?

Super Sache!!!
Ganz liebe  Dank für Deine große Mühe!
Ich hab natürlich auch gleich mal getestet und gespielt. Auf mein Uno 
mit Atmega328 gibts keine Probleme!! Läuft wie beschrieben.
Jedoch krieg ich es nicht auf den 85.
Fehlermeldung hier:
Ich hab zwar deine Mitteilung bzgl der Seriel Zeilen gelesen, doch wenn 
ich die komplett rauslösche, kommt trotzdem diese Fehlermeldung.
Ich weiß ich kann nerven, aber als µC Anfänger darf man das.

Arduino: 1.6.1 (Windows XP), Platine: "ATtiny, ATtiny85, 8 MHz 
(internal)"

sketch_apr25g.ino: In function 'void playlied(int)':

sketch_apr25g.ino:637:3: error: 'Serial' was not declared in this scope

Fehler beim Kompilieren.

  Dieser Report hätte mehr Informationen mit
  "Ausführliche Ausgabe während der Kompilierung"
  aktiviert in Datei > Einstellungen

von Jürgen S. (jurs)


Lesenswert?

Reiner schrieb:
>
> sketch_apr25g.ino:637:3: error: 'Serial' was not declared in this scope
>
> Fehler beim Kompilieren.

Ich würde lieber nochmal im Code nach "Serial" suchen und alle Ausgaben 
auf Serial für den AtTiny entfernen, bevor er für den Tiny kompiliert 
wird.

Mir ist beim Drüberschauen über den Code heute aber doch noch ein Bock 
aufgefallen, den ich geschossen habe:
Die Noten werden viel zu stark im "Stakkato" gespielt, weil ich die 
Pause nach dem Spielen einer Note genau so lang mache wie die Spieldauer 
der Note.

Es dürfte besser sein, die Pause zwischen den Noten deutlich kürzer zu 
machen als die Spieldauer der Note, zum Beispiel nur ein fünftel so 
lang:
1
     jursTone(SPEAKERPIN,pgm_read_word(&ton[hoehe-1]),dauer*lspeed*20);
2
         delay(dauer*lspeed*4); // kurze Pause nach jedem Ton

Einen Piano-Sound bekommt man mit einer Rechteckfrequenz natürlich nie, 
aber die Pausendauer nach jeder Note ist im geposteten Code wohl zu 
lang, die würde ich wohl von "*20" auf "*4" im delay() nach der Note 
reduzieren.

von Reiner (Gast)


Lesenswert?

So liebe klingelgemeinde.....
Ganz großen Dank an alle, insbesondere an Jürgen!  Ich hab jetzt den 
85Igel zum laufen bekommen.  Danke danke danke....
Aber wenn ich ehrlich bin, ich trau mich ja kaum das hier zufragen, 
gibt's noch mehr was mich interessieren würde. Ich Häng noch an einer 
Sache mit 433mhz. Ich komm mit dem virtuelle wire nicht klar. Hab dazu 
schon viel gelesen aber ich steig nicht dahinter. Für heute reichts aber 
erstmal.
Nochmal danke!
In diesem Sinne schönen abend euch allen.

von Reiner (Gast)


Lesenswert?

Soooo.
Duten morgen zusammen.
Werden wir mal das schei... Wetter nutzen (bei uns liegt Schnee und es 
schneit weiter) um noch bissel rum zu löten und krach zu machen.
Ich erwähnte ja gestern schon, das ich noch an einem Projekt hänge mit 
433MHz Funk. Soll später mal die Gartenbeleuchtung schalten. Nur schreit 
mich die IDE immer an das irgendwas mit der virtuell wire wäre.

Ich weiß, das Forum hier geht ja ausschlieslich um die Sache mit der 
Melodieklingel, aber mir scheint, der liebe "Jürgen" hat noch viel mehr 
drauf als den Sketch gestern.
Dafür aber noch mal tausend dank! das Teil ist mit ner kleinen 
Verstärkerstufe und nem 8Ohm / 4Watt Lautsprecher in ein Gehäuse 
"geflogen" und dat funzt!!

Ich hab mich schon einige Tage durch Foren gekämpft, bin aber auch nicht 
schlauer als vorher.
Hat vielleicht jemand ne Idee wo ich noch was lesen könnte dazu, oder 
hat gar der  "Jürgen" eine zündende Idee?
Den Sketch gibts ja zu hunderten im Internet, aber keiner davon 
funktioniert.
Na mal schauen, ob ich hier ne vielversprechende Info / Antwort bekomme. 
Denn hier geht es wesentlich netter und freundlicheer zu als in manch 
anderen Foren.
(Da macht "lernen" doch auch Spass. Gerade als Anfänger im Umgang mit 
programmieren und µC im allgemeinen, braucht man keine "unsinnigen" 
Antworten oder "dumme" Komntare.
In diesem Sinne schönen Montag gewünscht.
L.G.  Reiner
DE- SAC - Altenberg / Osterzgebirge

von Reiner (Gast)


Lesenswert?

Sorry völlig im Tag vertan, das kommt davon wenn man nur zu Hause hockt.
Schönen Mittwoch meine ich natürlich....

von Mampf F. (mampf) Benutzerseite


Lesenswert?

Ui nettes Projekt! Die Lieder landen vmtl bald in einem STM32 mit einem 
Piezo-Piepserl xD

von Henning (Gast)


Lesenswert?

Moin,
erstmal vielen Dank für dieses coole Projekt. Das passt perfekt für mein 
momentanes Vorhaben. Anlässlich eines Geburtstages möchte ich etwas ganz 
besonderes basteln und ein AVR soll "Happy Birtday" abspielen. Die 
Schaltung hab ich gerade eben mal schnell mit nem Mega8 auf dem 
Breadboard zusammengesteckt und den Code entsprechend modifiziert -Alles 
kein Problem -
Da ich aber so unmusikalisch wie nur was bin, gelingt es mir nicht, 
dafür eine "Happy Birthday"-Melodie Bit-technisch zu komponieren. Hat da 
jemand zufällig schon mal das passende Array für erstellt oder könnte 
mir da einer helfen?

Grüße Henning

von egberto (Gast)


Lesenswert?

z.B. hiermit solltest du das leicht selbst hinbekommen:

https://www.irish-folk-songs.com/happy-birthday-tin-whistle-sheet-music.html#.W-kkGPkxnMg

Viele Grüße,

Egberto

von Klaus R. (klaus2)


Lesenswert?

Hallo Egberto,

ich hatte immer vor deine Klingel mal für die Haustür zu nutzen, trotz 
mangelnder Polyphonie - heute war es dann soweit...nach 10min lief das 
ganze, 1h später hing es an der Wand. Mal den WAF abwarten, aber die 
Hoffnung stirbt zuletzt :)

Einige der Melodien sind "etwas kurz" für die Ankündigung der 
Gäste...muss ich mal sehen, ob dich die mit etwas Handarbeit 
"auskommentieren" kann - oder hat das vll schon jmd getan bzw. sogar 
erweitert?

Danke nochmals für das kurzweilige "Feierabendprojekt"!

Klaus.

: Bearbeitet durch User
von egberto (Gast)


Lesenswert?

Am einfachsen filterst du die ungewünschten Melodien nach dem 
Zufallsgenerator raus, dann brauchst du an den Tabellen (erstmal) nichts 
zu ändern.

Grüße,

Egberto

von Klaus R. (klaus2)


Lesenswert?

Guter QnD Hinweis, Danke!

Klaus.

von Klaus R. (klaus2)


Lesenswert?

...mir fällt auf dass die Klingel sehr empfindlich ggü Störungen ist? Es 
gab schon einige Fehlauslösungen -> WAF nachts stark negativ :)

Auf der Klingelleitung finden sich schwankende Phantomspgen (kapazitiv 
eingekoppelt?) von 2-8V AC, diese musste ich mit einem 1,2k parallel zum 
Optokoppler "killen". Zudem scheint es Probleme mit EMV und dem sehr 
empfindlichen Pin-Interrupt zu geben, der Lichttaster im Flur löst ab & 
an die Klingel aus. Daher:

- 100ms delay eingefügt (sonst "weiterschlafen")
- Optische Anteige (falls das Lied schon vorbei ist, blinkt die 20s 
weiter)

Klaus.

von Bernd (Gast)


Lesenswert?

Hier läuft die Klingel seit Jahren ohne Fehlauslösung.
Nur ein paar Klingeltöne sind etwas kurz.
Getriggert wird via Optokoppler vom AC-Klingelstrom und versorgt von der 
Gleichspannung der Wechselsprechanlage.

Klaus R. schrieb:
> Auf der Klingelleitung finden sich schwankende Phantomspgen (kapazitiv
> eingekoppelt?) von 2-8V AC, diese musste ich mit einem 1,2k parallel zum
> Optokoppler "killen".
Da hat wohl jemand parallel zur Klingelleitung ein 230V-Kabel verlegt?
Kannst Du abschätzen wie lang die Klingelleitung ist?

> Zudem scheint es Probleme mit EMV und dem sehr
> empfindlichen Pin-Interrupt zu geben, der Lichttaster im Flur löst ab &
> an die Klingel aus.
Neben der Softwarelösung hilft vmtl. auch eine kleine R-C-Kombination am 
Pin.

von Klaus R. (klaus2)


Lesenswert?

...ja, ich bin ach drauf und dran die (zu) kurzen Klingeltöne zu 
verlängern. Aber erstmal rausfinden, welche es sind und wo 
gespeichert...oder ich bin "faul" und wiederhole sie erstmal, bis sie 
mindestens 5s Abspielzeit erreichen (das geht dtl schneller).

R/C = im fertigen Gerät rumlöten, delay = flexible Softwareanpassung 
über externen Anschluss flashen :)

Es werden so 30m sein...

Klaus.

von Egberto (Gast)


Lesenswert?

Meinen Kollegen nerven eher die langen Klingeltöne (z.B. Griechischer 
Wein, Mission Impossible etc.) - die Geschmäcker sind halt verschieden.
Aber alle mir bekannten Nachbauer sagen, es gibt Melodien, die hört man 
nach Jahren (gefühlt) zum 1. mal, aber das kann am Zufallsgenerator 
liegen, dessen Verteilung nun wirklich nicht gaussch (wie schreibt man 
das) ist.

Schönen Abend,

Egberto

von Bernd (Gast)


Angehängte Dateien:

Lesenswert?

Weihnachten ist durch, aber das nächste kommt bestimmt :-)
Nochmal Danke an Egberto, für das nette Projekt!


Hier ist eine Version, die den Waveform-Generator nach
http://www.technoblogy.com/show?QVN
verwendet.

Damit klingen die Töne nicht so 'eckig', sondern schön 'soft'.
Nachteilig ist die wesentlich geringere Lautstärke gegenüber der 
Ursprungsvariante mit Rechteckausgang.
Wahlweise können auch ein Dreieck- oder eine Sägezahnsignal ausgegeben 
werden. Da kommen dann wieder - mehr oder weniger - harmonische 
Oberwellen ins Spiel (und es wird auch wieder etwas lauter).

Genutzt wird die PWM von Timer 1, der von der internen High-Speed-PLL 
(64 MHz) getaktet wird. Die eigentliche Samplerate beträgt 20 kHz.

Das ganze Projekt ist pinkompatibel zur Ursprungsvariante (PB1 = 
Lautsprecher, PB2 = Trigger). Nur in den ATtiny45 passt es nur rein, 
wenn man ein paar Melodien opfert. Im Anhang eine Variante für einen 
ATtiny85.

Ich habe bei mir zwischen Portpin und 'Verstärker' noch ein Poti (1 
kOhm) für die Lautstärkeregelung und einen Kondensator (1 µF), der die 
PWM etwas glättet, drin. Alternativ wäre zu überlegen, für die Ausgabe 
gleich einen LM386 (oder eines dieser günstigen DIY-Verstärkerboards aus 
China) vorzusehen.

von Jürgen F. (rubinlicht)


Lesenswert?

Schöm und gut mit den runden Tönen.
Ein Verstärker muss dann her. Leider kenne ich nur Verstärker mit einem 
2-10mA Ruhestrom. Das würde eine Batterie schnell leer ziehen. Kann man 
nicht auf einem Ausgang ein H Signal geben, wenn der Chip aktiv ist? 
Damit könnte man mit einem Leistungsmosfet den Verstärker ein und aus 
schalten. Ich bin nicht firm in C-Programmierung und kriege das nicht 
hin.

: Bearbeitet durch User
von Bernd (Gast)


Lesenswert?

Jürgen F. schrieb:
> Schön und gut mit den runden Tönen.
Ich experimentiere gerade mit dem Wavetable Generator von elm-chan:
http://elm-chan.org/works/mxb/report.html

Mit Polyphonie klingt das echt nochmal um einiges besser.

> Ein Verstärker muss dann her.
Der komplementäre Emitterfolger eignet sich leider nicht für die 
Wavetable-PWM-Signale, da er zu nichtlinear ist. Die Schaltung von 
elm-chan verwendet einfach einen zweiten Portpin mit negiertem Ausgang: 
das ergibt den doppelten Spannungshub am Lautsprecher.

> Leider kenne ich nur Verstärker mit einem
> 2-10mA Ruhestrom. Das würde eine Batterie schnell leer ziehen. Kann man
> nicht auf einem Ausgang ein H Signal geben, wenn der Chip aktiv ist?
Ja, klar.

> Damit könnte man mit einem Leistungsmosfet den Verstärker ein und aus
> schalten.
Welcher Pin soll es denn sein?
1
 * Funktion PIN         PIN  Funktion
2
 *              +--v--+
3
 *  /RESET  PB5 |1   8| VCC
4
 *  n.c.    PB3 |2   7| PB2  SCK/PCINT2 /Taster + interner Pull-Up
5
 *  n.c.    PB4 |3   6| PB1  MISO/OC1A  Lautsprecher
6
 *          GND |4   5| PB0  MOSI
7
 *              +-----+

von Bernd (Gast)


Angehängte Dateien:

Lesenswert?

Hier nochmal der Schaltplan zur elm-chan Variante...

von Jürgen F. (rubinlicht)


Lesenswert?

Na dann nimm den Pin 2 mit PB3. Da ja mit der Variante der Pin 3 mit PB 
4 belegt ist.

von Jürgen F. (rubinlicht)


Lesenswert?

Noch ein Nachtrag. Ich würde mich wirklich riesig freuen über den 
Aktiv-Signal an Pin 2.

von Jürgen F. (rubinlicht)


Lesenswert?

Da gibt es die Stelle Soundon und Soundoff.
Kann man darunter den Pin 2, für den Verstärker, ein und ausschalten?
Wie lauten die Befehle? Da müsste auch ein Eintrag bei {Global defines} 
für PB3 gemacht werden.

von Bernd (Gast)



Lesenswert?

Jürgen F. schrieb:
> Da gibt es die Stelle Soundon und Soundoff.
Ja, das ist die richtige Stelle:
1
#define     AMP_ON          (PB3)
2
#define     SOUNDON         set_bit( DDRB, SPEAKER);   set_bit( PORTB, AMP_ON);
3
#define     SOUNDOFF        clear_bit( DDRB, SPEAKER); clear_bit( PORTB, AMP_ON);

Dann muß noch der Port initialisiert werden (in setup):
1
    // Verstaerker: Ausgang
2
    set_bit( DDRB, AMP_ON);
3
    clear_bit( PORTB, AMP_ON);

Anbei noch der vollständige Quelltext und das hex-File.

von Jürgen F. (rubinlicht)


Lesenswert?

Ich habe es hingekriegt. Dein HEX-File ging nicht.
Ich habe 4 Einträge gemacht. Da muss man aufpassen. Denn Soundon und 
Soundoff
sind 2 mal eingetragen. Erst hatte ich es so, dass bei jeder Noter der 
Verstärker ausging. Getest habe ich es mit einer LED, die flackerte 
dann.
Also die 2 Einträge an der Stelle:

speed = pgm_read_byte( &lied[ liedcount]);
         SOUNDON;
                    DDRB |= (1 << PB3); //setzen
                    PORTB |= (1 << PB3);
         liedcount++;

Und am Ende:


         SOUNDOFF; // falls noch Ton an
                    DDRB &= ~(1 << PB3); //löschen
                    PORTB &= ~(1 << PB3);
         sleep_mode();
         liednr = MyRandGet() + 1;

: Bearbeitet durch User
von Bernd (Gast)


Lesenswert?

Jürgen F. schrieb:
> Ich habe es hingekriegt.
Sehr fein!

Was für einen Verstärker verwendest Du?

> DDRB &= ~(1 << PB3); //löschen
Hier muß man aufpassen. Da wird der Pin auf Eingang geschaltet und damit 
hochohmig. Die Spannung am Schalteingang des Verstärkers ist nicht mehr 
definiert und der Verstärker kann durch Störungen o.ä. unabsichtlich 
aktiviert werden.

Außerdem verwende ich äußerst gerne sprechende Namen im Quelltext. Damit 
kommentiert sich der Code quasi von selbst:
1
#define     AMP_PIN         (PB3)
2
#define     AMP_INIT        set_bit( DDRB, AMP_PIN);
3
#define     AMP_ON          set_bit( PORTB, AMP_PIN);
4
#define     AMP_OFF         clear_bit( PORTB, AMP_PIN);
5
6
...
7
8
void setup( void)
9
{
10
11
    set_sleep_mode( SLEEP_MODE_PWR_DOWN);
12
13
    // Verstaerker: Ausgang
14
    AMP_INIT;
15
    AMP_OFF;
16
17
...
18
19
                speed = pgm_read_byte( &lied[ liedcount]);
20
                AMP_ON;
21
                SOUNDON;
22
                liedcount++;
23
24
...
25
26
    else 
27
    {
28
        SOUNDOFF; // falls noch Ton an
29
        AMP_OFF;
30
        sleep_mode();

von Jürgen F. (rubinlicht)


Lesenswert?

Jau, jez geht´s

Danke Bernd.
Deine Version ist natürlich schöner.
Es waren ja meine erstem C Versuche.
Ich schalte ein BC546 mit hohen Basiswiderstand, der ein P-Mosfet die 
12Volt einschaltet. Der Verstärker wird ein TDA 2030 werden. Kann man 
als Modul bei Ebay erwerben. Probiert habe ich es nicht. Müsste aber so 
gehen. Am Gate werde ich auch noch Widerstand gegen 12V schalten, wegen 
halt des offenen Kollektor.

von Jürgen F. (rubinlicht)


Angehängte Dateien:

Lesenswert?

Hier die Schaltung für den Verstärker.
Die Module von Ebay muss man umbauen wegen der starken Verstärkung.
Ein Widerstand tauschen um Gain zu reduzieren.

von Bernd (Gast)


Lesenswert?

Ok. In diesem Fall ist es kein Problem, wenn der Ausgang PB3 hochohmig 
ist.
Wenn Du das Modul fertig hast, wäre es nett, den Ruhestrom (mit und ohne 
Abschaltung) zu ermitteln und hier mitzuteilen.

von Jürgen F. (rubinlicht)


Angehängte Dateien:

Lesenswert?

Ich habe noch so ein Verstärkermodul gefunden.

Bernd schrieb:
> Wenn Du das Modul fertig hast, wäre es nett, den Ruhestrom (mit und ohne
> Abschaltung) zu ermitteln und hier mitzuteilen.
Also mit Abschaltung ist der Strom unmessbar klein.
Ohne Abschaltung liege ich bei 23mA!
Der Mikrocontroller braucht 0,4µA
Jetzt hat man eine 12V Battrie. Um auf 5V zu kommen könnte man ein 
Spannungsregler nehmen. Geht aber nicht, der braucht auch 5mA.
Ich löse das so wie im Bild.

Beim Verstärker müssen die Widerstände R4 und R5 im Verhältnis 1:4 sein.
Somit erhält man eine Verstärkungsfaktor von 4. Man kann auch höheren 
Faktor probieren.

von Jürgen F. (rubinlicht)


Angehängte Dateien:

Lesenswert?

Ein besseres Bild.
Also z.B. R4 auf 22k und R5 lassen.

: Bearbeitet durch User
von Klaus R. (klaus2)


Lesenswert?

...besser du nimmst eines der Class D PAM8xxx Module vom Chinesen und 
versorgst alles mit 3,7V - wenn das vom Power nicht reicht, dann halt 
noch einen kleinen step-up auf 9...12V (den du ebenfalls über den 
Control pin ein/ausschaltest). Beides gibt's für ~1€ (!) beim Chinesen.

TDAxxxx & gesplittete Batterien sind schon etwas "wenig zeitgemäß" :)

Klaus.

von Bernd (Gast)



Lesenswert?

Hier nun eine vierstimmige Version mit Wavetable und Hüllkurve!

Neben diesem Projekt, wurden auch Ideen aus den folgenden Projekten 
genutzt:
http://elm-chan.org/works/mxb/report.html
http://www.technoblogy.com/show?20W6


Theorie
Die Ursprungsversion aus dem Jahr 2008 hat Rechtecksignale als Töne 
ausgegeben, die zwar schön laut sind, aber auch nicht sehr harmonisch.
In dieser Variante wird nach dem DDS-Prinzip eine Tabelle mit Samples 
(Wavetable) mit unterschiedlicher Schrittweite ausgelesen und über die 
High-Speed-PWM des ATtiny ausgegeben.
Die High-Speed-PWM (hier 250 kHz) wirkt gewissermaßen als DAC. Auf den 
Tiefpass zum Glätten kann verzichtet werden, das übernimmt der 
Lautsprecher bzw. das Gehör.
Nur durch Änderung der Wavetable lassen sich beliebige Signalformen, wie 
z.B. Sinus, Dreieck, Sägezahn und auch Rechteck erzeugen. Die Frequenz 
wird durch Änderung der Schrittweite angepasst.
Im nächsten Schritt wird nun jedes Sample zusätzlich mit einem 
Lautstärkewert multipliziert. Die Lautstärkewerte kommen aus der 
Hüllkurventabelle. Außerdem wird bei der nächsten Note die Wiedergabe 
nicht einfach abgewürgt, sondern die neue Note wird im nächsten Kanal 
abgespielt, während die anderen Kanäle noch ausklingen.
Das Resultat kann man sich in Klangbeispiel.mp3 anhören.


Sample & Hüllkurve
Als Sample habe ich ein lautes asymmetrisches Dreiecksignal mit einem 
leisen Dreiecksignal der dreifachen Frequenz kombiniert (Kurven.png, 
links oben).
Die Hüllkurve (Kurven.png, rechts oben) orientiert sich am Klavierklang.
Wer bessere Vorschläge hat: her damit, ich bin kein Musiker....


Hardware
Es wird sowohl die Variante mit dem komplementären Emitterfolger 
(Ausgang an PB1, schematic__Klingel_original.png) als auch die Schaltung 
nach ELM ChaN (Lautsprecher + Vorwiderstand zwischen PB1 und PB4) 
unterstützt (schematic__elm_chan__mg.png).
Letzteres spart zwei Transistoren und ist trotz Minimalismus genauso 
laut.
Der Taster zum Triggern (low active) gehört immer noch an Pin PB2.
Zusätzlich gibt es den Schaltausgang (high active) an Pin PB3 um einen 
externen Verstärker einzuschalten.


Fuses
Damit die Rechenleistung ausreicht, muß der Takt auf 16 MHz (PLL-CLK) 
erhöht werden.
Das geht mit folgenden Einstellungen:
low fuse: 0xC1
high fuse: 0xDF
extended fuse: 0xFF
Für Avrdude-Nutzer: -U lfuse:w:0xc1:m -U hfuse:w:0xdf:m -U 
efuse:w:0xff:m


Software
Als Sampletakt wird 20 kHz genutzt. Das alte Sample wird zu Beginn der 
Interruptroutine ausgegeben, damit der Jitter reduziert wird.
Anschließend startet die neue Berechnung.
Die Zeit, die in der Interruptroutine benötigt wird, um für alle vier 
Kanäle die Hüllkurve mit der Samplekurve zu multiplizieren, variiert 
zwischen 23 und 45 µs.
Pro Kanal werden max. ca. 12 µs zur Berechnung bnötigt.
Die Auslastung liegt zwischen 45 und 90% und der kleine Tiny muß mal 
richtig was machen :-)
Zum Vergleich:
ELM ChaN hat bei seinem Projekt sechs Kanäle mit 32 kHz Samplerate und 
80% Auslastung realisiert (4 µs pro Kanal).
Hier kann man mit handoptimiertem AVR-Assembler Faktor 3 rausholen 
gegenüber mäßig optimiertem C-Code.


Plopp
Mit dem komplementären Emitterfolger ploppte es im Lautsprecher beim 
Ein- und Ausschalten. Daher wird die PWM langsam hoch- und 
runtergefahren.


Lieder
Außerdem gab es eine kleine Anpassung des kürzesten und des längsten 
Songs.
Der griechische Wein (Nr. 71) sprudelt nur noch 8 statt 38 Sekunden und 
liegt nun mit im Mittelfeld (Stuecklaenge_Histogramm.png).
Das kürzeste Stück (Nr. 40) wurde von 1,0 auf 1,3 Sekunden verlängert.


Ausblick
Jetzt müßten eigentlich noch die Noten umgestellt werden, weil sich 
Akkorde oder eine zweite Stimme oder gar ein zweites Instrument abbilden 
lassen.
Die Rechnung mit der Hüllkurve kann man evtl. von Multiplikation auf 
schnelle Schiebeoperationen umstellen, um so mehr Zeit für eine höhere 
Samplerate oder weitere Stimmen zu bekommen.

Viel Spaß mit dem Update!



P.S.:
Noch ein kleiner Fehler in der letzten Version (die ohne Hüllkurve):
Die 64 MHz-PLL muß nach dem Aufwachen aus dem Sleep-Mode erst wieder 
aktiviert werden.
Andernfalls ist der Takt für den Timer 1 nur 16 MHz, was zu einer 
niedrigen PWM-Frequenz (62,5 kHz) und zu hochfrequenten Interferenzen 
führt.
Dafür reicht es nach dem sleep_mode() die folgende Zeile einzufügen:
1
PLLCSR = 1<<PCKE | 1<<PLLE;

von Stümper (Gast)


Lesenswert?

Interessant! Kann man das ganze auch unter atmega328 verwenden?

Vielen Dank

von Klaus R. (klaus2)


Lesenswert?

Nein, absolut unmöglich...

Klaus.

von Bernd (Gast)


Lesenswert?

Stümper schrieb:
> Interessant! Kann man das ganze auch unter atmega328 verwenden?
Die PLL scheint es nur in den ATtiny25/45/85, ATtiny26 und 
AT90PWM2/AT90PWM3 zu geben. Und vielleicht noch in neueren Chips, für 
die meine Toolchain noch keine Includes hat.

Wenn man statt der PWM einen ganzen 8-Bit-Port mit einem DAC08/DAC0800 
oder R2R-DAC beschaltet, sollte man vergleichbare Ergebnisse erhalten. 
Der Schaltungsaufwand ist höher.
Dafür kann man durch die schnellere HW-Multiplikation die Samplerate 
oder die Stimmenzahl steigern.

von Stümper (Gast)


Lesenswert?

Schade. Die liegen hier noch reichlich herum ... :D
Danke für die Info.

von chris (Gast)


Lesenswert?

Es ginge, wenn jemand die Register anpasst:

http://wiki.openmusiclabs.com/wiki/PWMDAC

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.