Anbei meine Türklingel als Einsteigerprojekt mit minimalem
Hardwareaufwand (ATTINY45, Batterie, PC-Lautsprecher, Kleinkram).
Viel Spaß beim Nachbauen!
egberto
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.
Hast du das EEPROM File aus dem zip genommen oder selbst compiliert?
Da das EEPROM des attiny85 ja doppelt so groß ist wie das des Tiny45
liegt es ja eventuell daran (mal versucht als Devicetyp tiny45 trotz des
Tiny85 einzustellen?)
Frohes Fest
egberto
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.
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
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.
Hallo Michael S,
sehr hübsch (ich habe allerdings keinen Plan, wie ich das praktisch
nutzen sollte) und ein gute Beispiel für dieses ganze USI geraffel.
Ein kleiner Nachteil- man braucht einen ATTINY85 an Stelle des ATTINY45,
kann dann allerdings noch an den Melodien feilen (oder PWM, Hüllkurven
etc. machen).
Viele Grüße,
egberto
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.
Hallo Michael,
war ja auch nicht als Kritik gedacht - ich brauchte halt nur ein
schnelles Geschenk für meine Neffen, die wohl nie erfahren werden
(mangels Interesse) was TWI oder ATTINY ist.
Deine TWI "Sammlung" klingt interessant, hast du das irgendwo
veröffentlicht und dokumentiert?
Viele Grüße,
egberto
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.
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
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.
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.
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
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.
Dieses Projekt kommt wie gerufen !!!!
aber ich hätte eine Bitte an Euch....
Ich benutze Bascom und mit C kenne mich garnicht aus.habe auch keinen
Compiler..könnte jemand , für die Leute die diese Schaltung "nur"
nachbauen möchten eine HEX File bereitstellen ? Wäre supper !!!
Danke !!
@Uwe S.
Fuse CKDIV8?
@Thomas Kiss
Ist ziemlich egal, wenn du R vergößerst (mal mit 33k testen, hängt von
deiner Klingelspannung ab) kannst du zur Not auch einen Transistor
nehmen.
Wenn du direkt einen Taster anschließen kannst, einfach am AVR Pin gegen
Masse und Optokoppler Diode und R weglassen.
Viel Erfolg,
Mirko
Hallo,
hier nun meine lauffähige Klingel für den ATtiny85.
Es stehen noch Daten im EEPROM, die hatte ich vergessen.
Mit dem neuen Makefile wird alles richtig erzeugt !
Das Script "prog.sh" kann beim Programmieren helfen.
Viel Spaß.
@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
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.
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?
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
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)
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
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 :)
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... :-)
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
ups :-(
das sollte natürlich "Zuerst möchte ich mich ..." lauten ...
danke für den Hinweis. Leider kann ich das jetzt nicht mehr ändern :-(
Gruss
Jürgen, DL8MA
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
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
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
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
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
Eigentlich ist das Teil ja schon recht laut.. am einfachsten wäre erst
mal ein größerer Lautsprecher (aus altem Radio oder so).
Hintereinanderschalten kann man die Endstufen nicht, man könnte dort mit
höherer Spannung arbeiten, aber dann muss man die Stromversorgung und
die Bauelementedimensionierung neu überdenken.
Guten Morgen, ich würde gerne mal die Schaltung nachbauen.
Weiß aber nicht genau welche Codes die Richtigen sind.
Ich habe jetzt das Melodienklingel V 1.1 von Jürgen (DL8MA) im Auge.
Welcher Code ist dafür der Richtige?
lg Daniel
Wenn du einen Attiny 45 nimmst oder selber die Quellen compilierst,
kannst du die Originaldateien nehmen, für Attiny 85 hat Uwe S. das wohl
angepasst (durch den doppelt so großen Speicher muss man dort keine
Tabellen mehr im EEPROM ablegen).
Schönes Rest-WE,
Egberto
Hi,
so klingt es aus meinem Empfänger manchmal auch.
Keiner weiß was Du da gemacht hast, ein Bild und Schaltplan etc. wären
toll.
Liegt vielleicht an der Taktfrequenz... resp. Vorteiler.
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:
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.
Ok, die Fuses sind Low aktiv - im Text zur Klingel steht CKDIV8
"ausschalten", also auf High setzen -bei dir also Haken raus!
Weiterhin fehlt der "Siebelko" in der Spannungsversorgung, ich hoffe, du
arbeitest nicht mit Batterie! So 470u bis 1000u würde ich aber trotzdem
vorsehen.
Viele Grüße,
Egberto
Ein Siebkondensator ist vorhanden. Jedoch ist dieser im Schemaausschnitt
nicht zu sehen.
Super. Mit den richtigen Fuses klingt es richtig gut =).
Danke für diese tolle Projekt.
Grüsse
Hallo,
wie viele Ampere sollen da fließen ?
Etwa 1 Ampere ?
Egberto schrieb:> So 470u bis 1000u würde ich aber trotzdem> vorsehen.
Der Wert ist viel zu groß.
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
Hallo ich bin neu hier.
Ich habe die Schaltung nachgebaut.
Ich habe die EEP und HEX Datei mit Batego II von Batronix in den Chip
gebrannt. Leider höre ich nur ein Ton. Irgendwie kriege ich den Chip
nicht am Laufen. Mit Fuses habe ich auch schon herumprobiert.
Hat jemand da ein Tipp?
Grüsse
Ja, das habe auch probiert. Einmal höre ich ein 50HZ Ton und deaktiviert
ein ca. 400HZ Ton. Ich überlege mir das Starterkit STK500 zu kaufen. Das
Kit wird doch den Chip unterstützen?
Danke für die schnelle Antwort.
Grüße an egberto
EEP File wurde bei mir nicht übertragen. Dann kommt auch nur ein langer
Ton.
Oder zufall was im eeprom halt noch drin stand....
Habe aber alles für den attiny85 compiliert... Anderen atiny?
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:
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
@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.
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.
>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.
Okay, jetzt geht es. hab überall das gewünschte const hingeschrieben.
Und utf-8 iss cool deshalb hab ich noch:
for file in *.h *.c Makefile;do iconv -f latin1 -t utf-8 "$file" -o
"${file}";done
über die Dateien rübergebügelt.
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
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
intANZ;
2
unsignedchar*lied;
3
unsignedint*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
Wenn du das ohne deine Anpassung nicht compilert bekommst, stimmt was
nicht!
Wurde die header Datei (lied.h oder so) auch mit eingebunden?
Grüße,
Egberto
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.
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
@Basti
Irgendwie kann ich bei der Error Meldung des gcc gar nicht glauben das
hier irgendwas an Programm herausgekommen ist. Vielleicht solltest du
nochmals deine komplette Buildumgebung mit deinem Blinkprogramm
überprüfen.
Die Fehlermeldungen sollten dir schon alle Hinweise liefern.
Sorry, ich bin z.Z. Nur mit Ipad/Handy unterwegs(Urlaub!!!!!!), kann
also kein zip etc aufmachen.
In der Erinnerung sind ANZ etc Konstanten in dem Header File, dein Build
Process scheint irgendwie nicht ok zu sein.
Nimm doch erstmal die Hex Files hier aus dem Forum zum Test, dann kanst
du dich rantasten.
Grüße,
Egberto
Egberto schrieb:> Sorry, ich bin z.Z. Nur mit Ipad/Handy unterwegs(Urlaub!!!!!!), kann> also kein zip etc aufmachen.
Doch, kannst du z.B. mit der GoodReader App aufmachen und reinschauen.
;)
Uwe S. schrieb:> Egberto schrieb:>> Sorry, ich bin z.Z. Nur mit Ipad/Handy unterwegs(Urlaub!!!!!!), kann>> also kein zip etc aufmachen.>> Doch, kannst du z.B. mit der GoodReader App aufmachen und reinschauen.> ;)
Im Urlaub würde ich mir das nicht antun ?
@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
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
Schönes Mini-Projekt!
Gibt es eigentlich eine Titelliste - bei meinen musikalischen
Fähigkeiten habe ich Probleme, die eine oder andere Melodie zu erkennen.
Grüsse
Mego
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
Ich Programmiere mit dem myAVR Prog Tool und mit AVR Studio 6 oder geht
die Schaltung nicht mit Attiny 45 oder brauche ich einen anderen Attiny
Ich kenne nicht so gut aus
Gruß
Wer kann mir da helfen
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!
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.
Jürgen S. schrieb:> ndern m
---bitte mal meinen Beitrag vom heutigen (24.4.2017) lesen, vllt. kommt
ja da auch schon das erhoffte aha für kich. l.g. reiner
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?
Der attiny85 ist nackt.
Ich hab auch schon versucht ein Bsp. Wie hier genannt probiert, da kommt
nur beim testen eine knackende Tonfolge. Also keine Melodie, auf dem UNO
läuft der Test.. Ich hatte mir hier auch die zip für den 85
runtergeladen. Aber nix...
Ich wäre für den download für arduino 1.6.1. Sehr dankbar.
L.g.
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.
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.
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
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?
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
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.
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.
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
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.
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
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
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.
;-)
Reiner schrieb:> avrdude.exe: Device signature = 0x1e950f
Offenbar liest Dein ISP-Programmer die falsche Device-Signatur.
Mein Google sagt, ein AtTiny85 sollte die Signatur 1E 93 0B haben.
Falsche Brenngeschwindigkeit?
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
voidloop()
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.
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!
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!
wenn es an der Stelle eine Möglichkeit gäbe für dreimal Daumen hoch täte
ich sie hier einfügen
Danke für deine Zeit und Mühe
ich denke ich werde meine Frau heute Abend mit dem Gepiepse nerven
irgendwo sollten noch ein paar Arduino Uno clones rumliegen
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
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:
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.
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.
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
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
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.
Am einfachsen filterst du die ungewünschten Melodien nach dem
Zufallsgenerator raus, dann brauchst du an den Tabellen (erstmal) nichts
zu ändern.
Grüße,
Egberto
...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.
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.
...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.
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
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.
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.
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?
Da gibt es die Stelle Soundon und Soundoff.
Kann man darunter den Pin 2, für den Verstärker, ein und ausschalten?
Wie lauten die Befehle? Da müsste auch ein Eintrag bei {Global defines}
für PB3 gemacht werden.
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;
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:
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.
Hier die Schaltung für den Verstärker.
Die Module von Ebay muss man umbauen wegen der starken Verstärkung.
Ein Widerstand tauschen um Gain zu reduzieren.
Ok. In diesem Fall ist es kein Problem, wenn der Ausgang PB3 hochohmig
ist.
Wenn Du das Modul fertig hast, wäre es nett, den Ruhestrom (mit und ohne
Abschaltung) zu ermitteln und hier mitzuteilen.
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.
...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.
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.htmlhttp://www.technoblogy.com/show?20W6Theorie
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:
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.
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
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
Josef B. schrieb:> muss ich auch den Reset -Pin (1) per Widerstand auf Vcc legen
Die neueren Tinys haben den Widerstand schon intern verbaut, schaden tut
es aber defintiv nicht.
VG Paul
Vielen Dank Paul . Ich habe gestern noch die Leiterplatte mit EAGLE
gemacht und habe schon praeventiv auch diesen Widerstand eingezeichnet.
Ich denke so 10 k Ohm wuerden gehen , oder etwas kleiner ? Attiny-s
sind auch angekommen,einer auch schon programmiert , hoffe dass es diese
Woche noch klappt.
Gruss aus dem Banat (Rumaenien )
Josef
egberto schrieb:> Hardwareaufwand (ATTINY45, Batterie, PC-Lautsprecher, Kleinkram).
Krandios! Danke Danke Danke!
Bei mir wirds Weihnachten richtig festlig! hab alles in der Basteltruhe.
Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.
Wichtige Regeln - erst lesen, dann posten!
Groß- und Kleinschreibung verwenden
Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang