Klingel mit 100 Melodien - last minute Weihnachtsgeschenk

Gast #1088994
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.
Gast #1089096
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.
Gast #1089530
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
Gast #1102988
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.
Angehängte Dateien:
Gast #1103133
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.
Gast #1104416
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.
Angehängte Dateien:
Gast #1104658
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
Gast #1105477
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.
Angehängte Dateien:
Gast #1105481
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.
Angehängte Dateien:
#1106655
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
#1973870
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
Gast #1974181
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
Gast #2086824
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.
Gast #2087265
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?
Gast #2661540
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
Gast #2661841
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)
Gast #2662612
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
Gast #2667838
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 :)
Angehängte Dateien:
Gast #2674794
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... :-)
Gast #3046200
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
Gast #3197852
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
Gast #3200886
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
Gast #3215627
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
Gast #3242457
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
Gast #3303186
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
#3382740
Lesenswert?

Angehängte Dateien:
#3384081
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.
Angehängte Dateien:
Gast #3384279
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
#3716494
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
Angehängte Dateien:
Gast #4137526
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
#4138934
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.
Gast #4139742
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.
Gast #4139774
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.
Gast #4140928
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
(Firma: www.harerod.de) Persönliche Seite #4143410
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
Angehängte Dateien:
Gast #4145916
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
Gast #4149272
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
Gast #4150626
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
Gast #4151299
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
Gast #4209291
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
#4987072
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!
Gast #4987574
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.
#4987613
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?
#4987906
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.
Angehängte Dateien:
#4987942
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.
#4988134
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?
Gast #4988251
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
#4988377
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.
#4988394
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.
Gast #4988411
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
Gast #4988482
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.
Gast #4988572
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
Gast #4988655
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
#4988658
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.
;-)
#4988756
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.
#4988782
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!
Angehängte Dateien:
Gast #4988899
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
#4988947
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.
Gast #4989055
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.
Gast #4989576
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
Gast #5618273
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
#6045078
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.
#6057772
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.
Gast #6058226
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.
#6059536
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.
Gast #6060006
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
Gast #6089115
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.
Angehängte Dateien:
#6090799
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.
Gast #6090851
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
 *              +-----+
Gast #6091655
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.
#6091698
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;
Gast #6091729
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();
#6091767
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.
#6092093
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.
Angehängte Dateien:
#6092115
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.
Gast #6102240
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;
Gast #6104415
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.
#7274516
Lesenswert?

Hallo Forumgemeinschaft ,
 ich möchte auch die Klingel mit Attiny45 aus dem ersten Beitrag 
nachbauen . Ich habe mich etwas eingelesen und bis der bestellte 
Controller kommt hätte ich noch eine Frage bezüglich der Beschaltung des 
Attiny : muss ich auch den Reset -Pin (1) per Widerstand auf Vcc legen 
oder wird das schon durch das Programm (HEX ) gemacht ?
 Vielen Dank
Josef
Gast #7274574
Lesenswert?

Verzeiht wenn ich als Grinch rede:

Wer von Euren Lieben verdient wirklich von so einer Quälmaschine 
heimgesucht zu werden?

Was mich betrifft, würde es mir beim zweiten Anhören schon gewaltig auf 
die Nerven gehen.

Also, wenn ihr Eure Mitmenschen gerne habt, tut es ihnen bitte nicht an.

Vernichtet Quellen, Schaltpläne und Gerber Daten auf dem Scheiterhaufen 
um die Menschheit von diesen Ausgeburten zu bewahren.

Naja, wenn das alles nicht zutreffen sollte, viel Freude damit!

Hochachtungsvoll,
Grinch
Angehängte Dateien:
#7368692
Lesenswert?

Schöne Sache. Habe die einfache Version der Melodieklingel nachgebaut. Mit dem polyphonen Programm hatte ich leider keinen Erfolg. Allen Danke für Ihre Beiträge. Hat mir Zeit erspart. Somit konnte ich mich der Hausklingelanlage widmen.

Anbei poste ich mal die Schaltung für eine Funkklingel mit dem Funkmodul (RX + TX) von Qiachip RX480E. Die Herausforderung war, daß das Klingelsignal über den Bus von einer Siedle HTS811 Gegensprechanlage kommt. (Klemme Pin 7) Weiterhin kommt noch der Etagenruf (Klemme ERT) hinzu. Gemeinsame Masse ist (Klemme Pin 1). Es gibt sehr sehr ähnliche Anlagen (1+n System), wie HAT-402, Elcom 1308810. Diese Anlage hat einen Relaisausgang (5.1/6.1 potentialfreier Kontakt) für eine Zweitklingel. Über die Jumper JP3 und JP6 muß das Relais freigegeben werden. Wenn dies nicht funktioniert, dann kann analog meines Schaltplans die Schaltung angekoppelt werden. 3 -> ERT, 6 -> Bus (7), 5 -> Masse (1).

THX

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren