Hallo, ich bin auf der Suche nach einer Schaltung, die an einem passiven Mini-Piepser(„magnetic buzzer“) eine Art Dreiklang(varierenden Klang) erzeugt. Die Versorgungsspannung liegt bei 2-5V. Im besten Fall so simpel wie möglich und nur mit (wenigen) Standardteilen realisierbar. Wahrscheinlich werde ich ums Experimentieren nicht herum kommen, aber vielleicht hat jemand einen Ansatz. Ich habe bereits schon die üblichen Standardschaltungen (zB. die mit zwei Transistoren) aufgebaut und damit erhält man nur einen konstanten Ton. Viele Grüße Alexander
Alexander H. schrieb: > so simpel wie möglich und nur mit (wenigen) Standardteilen ... ist natürlich von deinen Kenntnissen und Möglichkeiten abhängig. Die µC-Fraktion wird zu einem Arduino o. Ä. greifen, diejenigen, die auch Hardware machen können, schaffen das mit einem 8-Pin µC + Treiber-Transistor, wer nur Röhren kennt macht's halt mit einem 19"-Gestell mit Röhren. Welche Technologien beherrscht du? Rein mit Transistoren würde zunächst ein "One-Hot-Zähler" (3 Transistoren, 3 Kondensatoren und 3 Widerstände) und dein astabiles Flip-Flop gebraucht, dazu vielleicht ein paar Dioden um Kondensatoren oder Widerstände im FF umzuschalten. Ich weiß aber nicht, ob es dabei bleibt. Du meinst mit "Dreiklang(varierenden Klang)" drei Töne hintereinander, nicht gleichzeitig? Sozusagen Ding-Dang-Dong? Nachtrag: Ich habe jetzt erst deinen Beep.mp3 bemerkt. Das scheint mir ja ein ziemlich komplexer Ablauf zu sein. Nix Ding-Dang-Dong. Ich kann noch nicht einmal erkennen, welche und wie viele Töne in welcher Reihenfolge abgespielt werden.
:
Bearbeitet durch User
Uwe B. schrieb: > Alexander H. schrieb: >> so simpel wie möglich und nur mit (wenigen) Standardteilen > > ... ist natürlich von deinen Kenntnissen und Möglichkeiten abhängig. Die > µC-Fraktion wird zu einem Arduino o. Ä. greifen, diejenigen, die auch > Hardware machen können, schaffen das mit einem 8-Pin µC + > Treiber-Transistor, wer nur Röhren kennt macht's halt mit einem > 19"-Gestell mit Röhren. > Welche Technologien beherrscht du? Rein mit Transistoren würde zunächst > ein "One-Hot-Zähler" (3 Transistoren, 3 Kondensatoren und 3 Widerstände) > und dein astabiles Flip-Flop gebraucht, dazu vielleicht ein paar Dioden > um Kondensatoren oder Widerstände im FF umzuschalten. Ich weiß aber > nicht, ob es dabei bleibt. > Du meinst mit "Dreiklang(varierenden Klang)" drei Töne hintereinander, > nicht gleichzeitig? Sozusagen Ding-Dang-Dong? Diese Lösung würde ich bevorzugen. Es gibt einige Oszillatorschaltungen, die schon fast etwas ähnliches machen. Es fehlt nur der Tonwechsel (in dem Fall sind es zwei Töne in sehr schneller Abfolge: Ton1>Ton2>Ton1). Wahrscheinlich ist der Klang sehr abhängig von der Wellenform. Ich hab mal mit Audacity reingezoomt und gesehen, dass die Welle immer Kurz auf der X-Achse verweilt. Wie würde man das mit Standardteilen analog erzeugen?
Moin, Wenn man sich den beep.mp3 deutlich verlangsamt anhoert, kann man draufkommen, dass das 6 Toene in 3 verschiedenen Tonhoehen sind, die da nacheinander abgespielt werden. Wo kommt das denn her? Sind das Lichtsprueche der Frogs, die die Orion aufgefangen hat? Vor 40 Jahren haett ich da irgendwas mit einem CD4017 und fuer den Oszillator einen UJT 2N2646 hergenommen. Vor 45 JAhren vielleicht was mit nem SN7492 und SN7442... Heute wuerd' ichs eher mit nem attiny13a aufbauen/nachprogrammieren. Gruss WK
Das Ganze ist ein Sechsklang. Wie das Spektrum zeigt. ☺ Man wird wohl ca. ein Dutzend Transistoren brauchen, um es zu erzeugen. Endstufe nicht mitgerechnet.
:
Bearbeitet durch User
Ich habe es mir jetzt auch mit Audacity angesehen. Deine Bilder sagen herzlich wenig aus. Im wesentlichen sind es 3 Töne, die in 6 relativ gleich langen Abschnitten erscheinen (A-A-B-C-B-A), mit kleinen Pausen dazwischen, und wahrscheinlich von Störgeräuschen überlagert sind, und wegen eines schlechten Mikros auch noch unterschiedliche Amplituden haben. Die Frage ist jetzt, wie genau soll es sein? Irgendwo zwischen irgendwas ähnlichem und einer genauen Kopie? Wie gesagt (oder geschrieben): Drei Töne hintereinander müssten mit 3 Transistoren für den Ablauf (oder z. B. 6 für 6 Töne oder 11 für 6 Töne und 5 zusätzliche Pausen) und zwei für den Oszillator machbar sein. Dazu eine Menge passive Bauteile und wohl auch Dioden. Nicht analog: Mit einem 8-Pin µC, einem Transistor (und einem Stützkondensator), also mit 3 Bauteilen, wäre eine ganze Melodie möglich. Mit Digitaltechnik würden es auch weniger Bauteile.
Uwe B. schrieb: > Mit Digitaltechnik würden es auch weniger Bauteile. Wenn es dann noch so analog klingen soll wie im Beispiel dann bräuchte man noch ein paar Widerstände und Kondensatoren zum Wegfiltern der Oberwellen.
Wastl schrieb: > zum Wegfiltern der Oberwellen. Ich glaub die Tröte die das verlautbaren wird, filtert schon genug.
Cartman E. schrieb: > Ich glaub die Tröte die das verlautbaren wird, filtert schon genug. Das erklärt auch den weitgehend dreiecksförmigen Verlauf des Signals und die geringeren Amplituden bei den höheren Frequenzen.
Uwe B. schrieb: > Cartman E. schrieb: >> Ich glaub die Tröte die das verlautbaren wird, filtert schon genug. > > Das erklärt auch den weitgehend dreiecksförmigen Verlauf des Signals und > die geringeren Amplituden bei den höheren Frequenzen. Eher eine Mischung aus Rechteck und ein wenig Sägezahn, sagt das Epektrum. Die 3. Oberwelle ist prominent vertreten. Es sind aber auch Anteile einer 2. und 4. Oberwelle erkennbar. Die fünfte Oberwelle hat es nur knapp ins Spektrum geschafft. ☺ Möglicherweise ist das Rechteck auch unsymmetrisch.
:
Bearbeitet durch User
Ich tippe auf nicht ganz perfekten bzw. gut aufgenommenen Sägezahn.
:
Bearbeitet durch User
Uwe B. schrieb: > Ich habe es mir jetzt auch mit Audacity angesehen. Deine Bilder > sagen herzlich wenig aus. Im wesentlichen sind es 3 Töne, die in 6 > relativ gleich langen Abschnitten erscheinen (A-A-B-C-B-A), mit kleinen > Pausen dazwischen, und wahrscheinlich von Störgeräuschen überlagert > sind, und wegen eines schlechten Mikros auch noch unterschiedliche > Amplituden haben. > Die Frage ist jetzt, wie genau soll es sein? Irgendwo zwischen irgendwas > ähnlichem und einer genauen Kopie? > Wie gesagt (oder geschrieben): Drei Töne hintereinander müssten mit 3 > Transistoren für den Ablauf (oder z. B. 6 für 6 Töne oder 11 für 6 Töne > und 5 zusätzliche Pausen) und zwei für den Oszillator machbar sein. Dazu > eine Menge passive Bauteile und wohl auch Dioden. > Nicht analog: Mit einem 8-Pin µC, einem Transistor (und einem > Stützkondensator), also mit 3 Bauteilen, wäre eine ganze Melodie > möglich. > Mit Digitaltechnik würden es auch weniger Bauteile. Ok, dass es sogar sechs Töne sind, hatte ich nicht rausgehört. Es muss nicht exakt gleich werden, aber ungefähr. Vielleicht kann man über Bauteilwerte noch nachjustieren. Ich hatte mal eine Schaltung mit zwei Transistoren http://embeddeddreams.com/site/2008/10/06/fun-and-easy-to-build-buzzer-circuit/ aufgebaut, und dann experimentell einen Kondensator hinzugefügt, damit war ein Zweiklang mit Pause dazwischen möglich. Vielleicht gibt es ja eine trickreiche Oszillatorschaltung, die in etwa das macht? Wäre der NE555 ein Möglichkeit? Sabi schrieb: > Ich tippe auf nicht ganz perfekten bzw. gut aufgenommenen > Sägezahn. Hatte ich mir auch schon überlegt, da viele Buzzer so ähnlich klingen. Das würde die Tonerzeugung vielleicht ein bisschen einfacher machen, oder?
:
Bearbeitet durch User
Alexander H. schrieb: > Ok, dass es sogar sechs Töne sind, hatte ich nicht rausgehört. Tja, siehste mal. > Ich hatte mal experimentell eine Schaltung mit zwei Transistoren > http://embeddeddreams.com/site/2008/10/06/fun-and-easy-to-build-buzzer-circuit/ > aufgebaut, und dann experimentell einen Kondensator hinzugefügt, damit > war ein Zweiklang mit Pause dazwischen möglich. Ein paar mehr Transistoren braucht es schon. Aber der Anfang ist so schon nicht ganz falsch. > Vielleicht gibt es ja eine trickreiche Oszillatorschaltung, die in etwa > das macht? Bestimmt. > Wäre der NE555 ein Möglichkeit? Der kann zwar Alles, aber nichts davon Richtig gut. Besser nicht. > Sabi schrieb: >> Ich tippe auf nicht ganz perfekten bzw. gut aufgenommenen >> Sägezahn. Ein Sägezahn hat keine so starke 3. Oberwelle. > Hatte ich mir auch schon überlegt, da viele Buzzer so ähnlich klingen. > Das würde die Tonerzeugung vielleicht ein bisschen einfacher machen, > oder? Nicht wirklich.
Die aufgenommene Signalform ergibt sich nur zufällig aus den Schallwandlern. dahinter steckt zweifellos immer ein Rechteck. Und es geht auch sicherlich nicht darum, den perfekten Sound nachzuahmen, also wenig Grund, über Oberwellen zu diskutieren. Ich habe mal meine Idee aufgezeichnet. Drei verschiedene Töne hintereinander, gestartet durch eine Taste. Oder gestrichelt: Wiederholend. Alle Transistoren in der selben Grundschaltung. Tonhöhenunterschiede durch unterschiedliche Widerstände. Ein Treiber für den Wandler habe ich nicht gezeichnet. Für mehr Töne werden einfach zusätzliche Stufen eingefügt. Ich bin nicht sich sicher, ob das auf Anhieb genau so klappt, aber viel dürfte nicht falsch sein. Ich bin jetzt erst mal ein paar Stunden weg.
:
Bearbeitet durch User
Uwe B. schrieb: > Ich bin nicht sich sicher, ob das auf Anhieb genau so klappt, aber viel > dürfte nicht falsch sein. +1 Aber der Pausengenerator fehlt da noch. Oder umgekehrt, der Generator für ein die Tonlänge bestimmendes Gate. Das würde ebenso eine solche Zeitstufe wie für die Töne sein, würde aber von jeder dieser Ton-Zeitstufen ausgelöst. Womit wir beim geschätzten Dutzend wären. > Ich bin jetzt erst mal ein paar Stunden weg. Ich auch. ☺
:
Bearbeitet durch User
Meiner Meinung nach sind die Töne wie folgt: 50ms Ton an, 20ms Pause Tonfrequenz A: 2000Hz Tonfrequenz B: 3200Hz Die Sequenz ist: A,A,B,still,B,A Das ganze dauert 6*70ms = 420ms
Cartman E. schrieb: > Aber der Pausengenerator fehlt da noch. Ich vermute sehr stark, dass es dem TO (Alexander) gar nicht um solche Details wie Pausen geht, vielleicht nicht einmal um genau diese Tonfolge, sondern nur um das Prinzip. Den Aufwand für 6 Töne mit 5 Pausen nach dem von mir vorgeschlagenen, rein analogen Prinzip, hatte ich schon vorher beschrieben: Uwe B. schrieb: > Drei Töne hintereinander müssten mit 3 > Transistoren für den Ablauf (oder z. B. 6 für 6 Töne oder 11 für 6 Töne > und 5 zusätzliche Pausen) und zwei für den Oszillator machbar sein. Dazu > eine Menge passive Bauteile und wohl auch Dioden. Blöd, dass ich das nicht gleich im Simulator gezeichnet habe. Dann hätte ich ruck-zuck gewusst, ob es so klappt, oder ob noch was geändert werden muss. Christoph M. schrieb: > Die Sequenz ist: A,A,B,still,B,A Ich vernehme statt "still" einen sehr schwachen, dafür stark gestörten Ton mit etwas niedriger Frequenz als Ton B. Aber ob das Absicht oder nur eine Störung ist, und ob das überhaupt in irgendeiner Weise relevant ist, weiß ich nicht. Deswegen noch einmal @ Alexander: Uwe B. schrieb: > Die Frage ist jetzt, wie genau soll es sein? Irgendwo zwischen irgendwas > ähnlichem und einer genauen Kopie?
Etwas Ähnliches reicht absolut aus.😉 Danke für Eure Expertisen bisher! Unter „two tone oscillator“ findet man auch jede Menge Schaltungen, aber es ist schwierig, da was Passendes zu finden.
Wenn man den IC noch beschaffen kann wäre das eine Lösung. https://media.elv.com/file/2004_04_02_gs3.pdf
Alexander H. schrieb: > Etwas Ähnliches reicht absolut aus.😉 Vermutlich wirst du schwer enttäuscht sein, wenn es nur ähnlich ist. Das wäre etwa so, als wenn sich Bob Marley an "Smoke on the Water" versuchen würde. ☺ Schönes Wochenende!
Alexander H. schrieb: > Etwas Ähnliches reicht absolut aus. Ich finde es schade, dass du zwar mit etwas Ähnlichem zufrieden bist, aber mit keiner Silbe kommentierst, ob dir an meinem Schaltungsvorschlag etwas nicht gefällt oder passt, oder ob es zu aufwändig ist, sich falsch verhält, oder ob der Vorschlag aus irgend einem weiteren Grund doch nicht als "etwas Ähnliches" zählt. Wenn es daran liegt, dass du die Schaltung und die Verhaltensweise (noch) nicht verstehst, kann ich beides erklären, und auch die Möglichkeiten, die man mit Modifikationen hat. Allerdings nicht schriftlich - das würde mir dann doch zu aufwändig.
Uwe B. schrieb: > Alexander H. schrieb: >> Etwas Ähnliches reicht absolut aus. > > Ich finde es schade, dass du zwar mit etwas Ähnlichem zufrieden bist, > aber mit keiner Silbe kommentierst, ob dir an meinem Schaltungsvorschlag > etwas nicht gefällt oder passt, oder ob es zu aufwändig ist, sich falsch > verhält, oder ob der Vorschlag aus irgend einem weiteren Grund doch > nicht als "etwas Ähnliches" zählt. > Wenn es daran liegt, dass du die Schaltung und die Verhaltensweise > (noch) nicht verstehst, kann ich beides erklären, und auch die > Möglichkeiten, die man mit Modifikationen hat. Allerdings nicht > schriftlich - das würde mir dann doch zu aufwändig. Danke für den super Vorschlag! Ich befürchte, da ich nur ganz wenig Platz für den Aufbau habe, würde das Ganze auch in SMD platzmässig knapp. Wenn ich alle Teile (insbesondere Widerstände) zusammenbekomme, werde ich es interessehalber zumindest mal aufbauen. Analoge Tonerzeugung ist ziemlich cool und vielleicht nutze ich deine Schaltung im nächsten Projekt (wo Platz keine Rolle spielt). Also nochmal zu den Anforderungen: ein dem „Beep“ ähnliche Tonfolge mit dem gleichen Frequenzbereich reicht. Die Pausen müssen auch nicht exakt stimmen. Es sollte ähnlich klingen, also kein reiner Sinus (wohl eher Sägezahn). Ich hab den Abend damit verbracht und die Schaltung aus obigem Link etwas abgeändert (hauptsächlich Cs eingefügt). Es geht schon ein bisschen in die richtige Richtung und man hört eine Tonfolge statt einem gleichförmigen Ton. Die Trennung zwischen den Tönen müsste nur noch schärfer werden. Werde die Schaltung morgen nachreichen.
Du hast es aufgebaut und es funktioniert prinzipiell? Das würde mich freuen. In der Schaltung sind keine Pausen zwischen den Tönen vorgesehen. Die lassen sich einfach mit weiteren Stufen in der "Steuerkette" erzeugen, bei denen die Reihenschaltung der Widerstände und Dioden entfällt. Dann bleibt der Oszillator stehen. Allerdings ist ist zu erwarten, dass der Anlauf des folgenden Tons nicht ganz sauber ist. Aber vielleicht "ausreichend ähnlich". Hättest du vorher geschrieben, dass nicht nur "Analogtechnik", sondern auch Platzbedarf bzw. Anzahl der Bauelemente ein wichtiges Kriterium ist, hätte ich den Vorschlag nicht gemacht. Zumal die Frage nach Pausen und ggf. mehr Tönen noch einmal zu einem erheblich größeren Aufwand führt. Digital wäre das mit wenigen CMOS-ICs erschlagen. Ich vermute, für bis zu 5 Töne incl. 4 Pausen ungefähr 2 x '4046 (Takt und VCO) und 1 x '4017 (Statuszähler) + ~10 Widerstände (+ Dioden?) und 2 Kondensatoren. Noch weniger Platzbedarf: 1 µC mit 8 Pins: Nahezu beliebig viele Töne und Pausen. Fertig. In allen Schaltungen kommt noch der Treiber und die Stromversorgung hinzu.
Da wir ja im MC-Netz sind, könnte man es glatt mit einem Microcontroller machen. Im Anhang mal die Version mit pipico2. Wer es ausprobieren will: Taste auf pipico drücken und u2f-File auf das Laufwerk schieben. Der Ton kommt an Pin 19. Er ist mit einem RC-Tiefpassfilter direkt mit der Soundkarte gesampelt. Was ich beim Experimentieren festgestellt habe: im Lautsprecher mit Verstärker hört sich der Ton relativ gut an, aber mit dem Piezo, mit dem ich es ausprobiert habe, hat ziemlich starke Resonanzen, deshalb ist die Lautstärke der beiden Tonfrequenzen extrem unterschiedlich.
Uwe B. schrieb: > Die aufgenommene Signalform ergibt sich nur zufällig aus den > Schallwandlern. dahinter steckt zweifellos immer ein Rechteck. Und es > geht auch sicherlich nicht darum, den perfekten Sound nachzuahmen, also > wenig Grund, über Oberwellen zu diskutieren. > Ich habe mal meine Idee aufgezeichnet. Drei verschiedene Töne > hintereinander, gestartet durch eine Taste. Oder gestrichelt: > Wiederholend. Alle Transistoren in der selben Grundschaltung. > Tonhöhenunterschiede durch unterschiedliche Widerstände. Ein Treiber für > den Wandler habe ich nicht gezeichnet. Für mehr Töne werden einfach > zusätzliche Stufen eingefügt. > Ich bin nicht sich sicher, ob das auf Anhieb genau so klappt, aber viel > dürfte nicht falsch sein. > Ich bin jetzt erst mal ein paar Stunden weg. So, hab das Ganze mal versucht aufzubauen. Die Schaltung läuft noch nicht so recht, wahrscheinlich hab ich einen Fehler drin. Beim Anklemmen sehe ich ein 40Khz Rechteck, beim Drücken der Taste ein 50khz Rechteck. Ich war mir aber auch nicht sicher, was für Potis und Kondensatoren ich verwende sollte. Wie zu erwarten gab die Bastelkiste auch keine 100k und 10k her, hab daher 180k und 6,8k genommen.😂😊 Die wichtigste Frage: wo muss der Buzzer eigentlich korrekt abgeschlossen werden, oder geht ein direkter Betrieb garnicht? Potis 3x 1,2k Kondensatoren 5x 100nF Viele Grüße Alexander
:
Bearbeitet durch User
Hallo Alexander, da fehlt dir die Kenntnis darüber, wie die Schaltung funktioniert, was da passiert. Gravierender Fehler: Die 3 "Steuerstufen" sollen Zeitkonstanten im Bereich von einigen 100 ms haben, der Oszillator im Bereich von einigen 100 µs. Die ersten 3 Kondensatoren müssen sich also größenordnungsmäßig die 1000-fache Kapazität wie die anderen beiden haben. Wenn du willst, kann ich dir erklären, was in der Schaltung passiert. Nur nicht hier, nicht schriftlich. Wenn du schon 1,2k-Potis (das glaube ich nicht, wo gibt's die denn???) für die Tonhöhen-Einstellung hast, kann man die Schaltung auch eleganter machen: Sie können die 1k-Kollektor-Widerstände ersetzen und die Widerstände in Reihe mit den Dioden würden entfallen. Ferner hatte ich geschrieben, dass ich selber nicht sicher bin, dass nicht doch die eine oder andere Kleinigkeit anders sein muss. Insbesondere hatte ich den Verdacht, dass eine Kapazität an der Tonsteuer-Leitung erforderlich sein könnte, allerdings würde die wiederum bei der eben beschriebenen Schaltungsänderung mit den Potis entfallen. Da bei dir Frequenzen von ~50 kHz entstehen, sind die von dir angegebenen C-Werte sicherlich falsch. Wahrscheinlich hast du, zumindest im Oszillator, 100 pF statt 100 nF eingesetzt. Alles das würde ich selber simulieren, um die Funktionsfähigkeit der Schaltung zu untersuchen und vernünftige Werte für die Widerstände und Kondensatoren zu ermitteln, bevor ich sie aufbaue. Dass eine weitere Treiberstufe für den Buzzer erforderlich sein wird, hatte ich auch schon geschrieben. Viel Erfolg!
Christoph M. schrieb: > Meiner Meinung nach sind die Töne wie folgt: > 50ms Ton an, 20ms Pause Das erinnert mich an die Tonfolge von der Telekom Werbung, die hört sich nämlich so an: di-di-di-DA-di https://youtu.be/DDqdk_h2Pvo?si=UqAiQA16n7_uyIDK Um die Wirksamkeit und den Kontrast zwischen den einzelnen Tönen hervorzuheben, wurde immer ein Abstand von 134 Millisekunden dazwischen gebaut. Das kann man sehr gut mit einem CD4017 nachbauen. Wie man einen CD4017 startet und resettet, kann man in einem Schaltplan sehen, den Herr Hinz und Falk Brunner vor einiger Zeit in einem anderen Thread dargestellt haben. Den finde ich jetzt aber leider nicht mehr. Die ungeraden Ausgänge Q1, Q3, Q5 und Q7 vom CD4017 werden nicht beschaltet, dadurch entstehen die nötigen Pausen zwischen den Tönen. An Q9 wird eine Diode zum Reseteingang gelegt. Als Taktgeber für den Clockeingang könnte man hier tatsächlich den NE555 mit einer Frequenz von 7,5 Hz verwenden.
:
Bearbeitet durch User
Hi, ich denke das Ganze schreit gradezu förmlich nach einem kleinen ATtiny Microcontroller und einem Transistor (wenn überhaupt nötig). Also ein 8-pinniges SMD-Gehäuse (µC) + SMD-Cap (Stützcap) + Widerstand + Transistor. Ich würde das ehrlich gesagt niemals diskret aus Logik-ICs zusammenbauen. Mir wäre das viel zu viel Aufwand :-) Was genau möchtest Du denn damit machen? Geht es dir eher um Löten lernen, Logic-ICs kennenlernen, oder interessiert dich auch das Programmieren? lg
Hallo, also die Idee mit CD4017 ist genial! Ich werde das auch mal aufbauen. Die Ähnlichkeit zum Telekom Signaturklang ist da, das ist ja interessant.😉👍 Leider hab ich wirklich extrem wenig Platz (10x6mm). Und das Ganze sollte mit 10mA/3V auskommen. Da wird leider fast alles zu groß. Hab mittlerweile mit viel Probierei eine Analog-Oszillator Variante aufgebaut, die an ein Telefonklingeln erinnert. Immer noch nicht so richtig das, was ich suche, aber momentan das Beste bisher. Zwischenzeitlich hatte ich sogar eine „Warbling Siren“ mit PUT aufgebaut. https://www.eleccircuit.com/warbling-alarm-circuit-with-tone-generator/ Den PUT habe ich mittels NPN+PNP gebastelt. Das hörte sich gut an, aber eben auch eher langweilig. Teilweise kommt dann noch eine Temperaturempfindlichkeit dazu…😂 Den Ton für den Attiny würde man dann (wie oben von Christoph vorgeschlagen) per Software umwandeln und dann programmieren? Ich schalte meinen Ton mit 1Hz über einen anderen uC ein. Wäre denn der Attiny überhaupt so schnell? Gibt es evtl. irgendwelche Spezial-ICs für den Zweck?
Alexander H. schrieb: > Leider hab ich wirklich extrem wenig Platz (10x6mm). > Und das Ganze sollte mit 10mA/3V auskommen. Doch so wenig Platz. Wenn es so eng ist, dann greif zu einem Controller in einem BGA16 Gehäuse. Da bleibt dann sogar noch reichlich Luft. > Den Ton für den Attiny würde man dann (wie oben von Christoph > vorgeschlagen) per Software umwandeln und dann programmieren? > Ich schalte meinen Ton mit 1Hz über einen anderen uC ein. Wäre denn der > Attiny überhaupt so schnell? Den Attiny gibt es m.W. nicht in BGA16. Aber schnell genug sind eigentlich alle. > Gibt es evtl. irgendwelche Spezial-ICs für den Zweck? Von Holtek und Princeton Technology ganz bestimmt.
https://forum.arduino.cc/t/pwm-with-attiny85/182466 https://www.arrow.com/en/research-and-events/articles/programming-attiny85-with-arduino Alexander H. schrieb: > Leider hab ich wirklich extrem wenig Platz (10x6mm). > Und das Ganze sollte mit 10mA/3V auskommen. ich lese https://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-2586-AVR-8-bit-Microcontroller-ATtiny25-ATtiny45-ATtiny85_Datasheet-Summary.pdf Seite 18/30 Unit of Measure = mm E 4.00 BSC mit Pinabstand 0.5mm kommt 4mm x 4mm hin sollte doch auf 10x6mm passen
:
Bearbeitet durch User
Moin, Alexander H. schrieb: > Leider hab ich wirklich extrem wenig Platz (10x6mm). Dann biste mit deinen Einzeltransistorschaltungen oder gar 4017 sowieso voellig drueber. Also 5-8 fuessiger µContoller mit selbstgeschriebener Software ist da schon das Mittel der Wahl. > Und das Ganze sollte mit 10mA/3V auskommen. Da wirds auch langsam unrealistisch. Also bisschen hoehergeskillte Amper ;-) sollte schon gehen. Alleine die "Audioendstufe" wird das schon locker brauchen, wenn du da einen "magnetic buzzer" anschliessen willst. Hoeren wirst du das ganze ja wahrscheinlich auch noch wollen. Vermutlich nicht nur in einem reflexionsarmen Raum, sondern in "normaler" Umwelt mit Hintergrundgeraeuschen... Gruss WK
Alexander H. schrieb: > Hallo, > > ich bin auf der Suche nach einer Schaltung, die an einem passiven > Mini-Piepser(„magnetic buzzer“) eine Art Dreiklang(varierenden Klang) > erzeugt. ... > Viele Grüße > Alexander Das kann nicht funktionieren, systembedingt. Ein Dreiklang ist so etwas wie ein Akkord. Also benutze mehrere Piepser. Aber es wird trotzdem piepsig klingen.
Alexander H. schrieb: > Leider hab ich wirklich extrem wenig Platz (10x6mm). Wenn da in der nicht genannten Höhe nicht mindestens 50mm und beidseitige Bestückung mit kleinen 0402 Bauteilen möglich sind, dann bleibt realistisch betrachtet nur ein 6-Pin µC im SOT-Gehäuse über: - https://www.mouser.de/c/semiconductors/embedded-processors-controllers/microcontrollers-mcu/8-bit-microcontrollers-mcu/?package%20%2F%20case=SOT-23-6 Das wäre auch von Anfang an mein Lösungsweg gewesen. Das nötige Programm passt locker und luftig auf 1 Bildschirmseite und besteht im Großen und Ganzen aus Delays. Alexander H. schrieb: > Leider hab ich wirklich extrem wenig Platz (10x6mm). > Und das Ganze sollte mit 10mA/3V auskommen. Scheiß Salamitaktik. Die Info zu dieser extremen Einschränkung hättest du gleich im allerersten Post geben müssen und nicht erst 4 Tage später.
:
Bearbeitet durch Moderator
Lothar M. schrieb: > Alexander H. schrieb: >> Leider hab ich wirklich extrem wenig Platz (10x6mm). >> Und das Ganze sollte mit 10mA/3V auskommen. > Scheiß Salamitaktik. Die Info zu dieser extremen Einschränkung hättest > du gleich im allerersten Post geben müssen und nicht erst 4 Tage später. die Höhe ist doch nach seinen eigenen Angaben nicht begrenzt, also eine Adapterplatine vertikal einlöten ;-) oder ist das die nächste Salamischeibe?
Lothar M. schrieb: > Das wäre auch von Anfang an mein Lösungsweg gewesen. Heute in der Mittagspause kurz gemacht. Programm kommt morgen.
:
Bearbeitet durch Moderator
Lothar M. schrieb: > Lothar M. schrieb: >> Das wäre auch von Anfang an mein Lösungsweg gewesen. > Heute in der Mittagspause kurz gemacht. Programm kommt morgen. Grässlich, das muss man nicht zeigen....
Esmu P. schrieb: > Lothar M. schrieb: >> Lothar M. schrieb: >>> Das wäre auch von Anfang an mein Lösungsweg gewesen. >> >> Heute in der Mittagspause kurz gemacht. Programm kommt morgen. > > Grässlich, das muss man nicht zeigen.... Also das klingt deutlich dichter am Original als alles was du so gezeigt hast. Esmu P. schrieb: > Das kann nicht funktionieren, systembedingt. > Ein Dreiklang ist so etwas wie ein Akkord. Also benutze mehrere Piepser. > Aber es wird trotzdem piepsig klingen. Klar, ein Lautsprecher (nichts anderes ist so ein Minipiepser, wenn auch ein sehr schlechter, mit ausgeprägter Resonanz) kann ausschließlich reine Sinustöne abspielen. Wer kennt sie nicht, die Hifi-Zimmer die für jeden Oberton einen Lautsprecher haben.
J. T. schrieb:... > Klar, ein Lautsprecher (nichts anderes ist so ein Minipiepser, wenn auch > ein sehr schlechter, mit ausgeprägter Resonanz) kann ausschließlich > reine Sinustöne abspielen. Wer kennt sie nicht, die Hifi-Zimmer die für > jeden Oberton einen Lautsprecher haben. Ist die Volks-Verblödung mittlerweile auch hier im Forum angekommen?
Esmu P. schrieb: > Ist die Volks-Verblödung mittlerweile auch hier im Forum angekommen? Scheinbar schon, immerhin meinst du ja, es braucht mehrere Piepser für nen Mehrklang. Falls es dir entgangen sein sollte, der TO schrieb von passiven Piepsern, also solche die sich nicht mit Gleichspannung zufrieden geben um die Wechselspannung zum Piepsen intern zu erzeugen. Und wer blödt ist neigt auch zum Meckern, da Blödheit Unverständnis erzeugt, und Unverständis wieder aggro macht. Und mein lieber Scholli, bist du am Meckern. Merkst das eigentlich noch selbst oder denkst du, du gibst hiöfreiche und zielführende Tips?
Esmu P. schrieb: > Ist die Volks-Verblödung mittlerweile auch hier im Forum angekommen? Das war am 29.08.2016 10:05.
Lothar M.
>Heute in der Mittagspause kurz gemacht. Programm kommt morgen.
Vielleicht ist es ja auch ganz einfach :-)
Es kompiliert, aber ob und wie es klingt habe ich nicht getestet.
1 | // https://github.com/storbukas/ATtiny85
|
2 | |
3 | #define SPEADERPIN 0
|
4 | |
5 | void play(uint16_t f) |
6 | {
|
7 | tone(SPEADERPIN, f, 50); |
8 | delay(20); |
9 | noTone(SPEADERPIN); |
10 | }
|
11 | |
12 | void setup() |
13 | {
|
14 | }
|
15 | |
16 | /*
|
17 | 50ms Ton an, 20ms Pause
|
18 | Tonfrequenz A: 2000Hz
|
19 | Tonfrequenz B: 3200Hz
|
20 | |
21 | Die Sequenz ist: A,A,B,still,B,A
|
22 | Das ganze dauert 6*70ms = 420ms
|
23 | */
|
24 | uint16_t A = 2000; |
25 | uint16_t B = 3200; |
26 | |
27 | void loop() |
28 | {
|
29 | play(A); |
30 | play(A); |
31 | play(B); |
32 | delay(70); |
33 | play(B); |
34 | play(A); |
35 | delay(1000); |
36 | }
|
:
Bearbeitet durch User
Christoph M. schrieb: > #define SPEADERPIN 0 No offense, aber ist das nur ein konsequenter Vertipper oder sollte das ein Speakerpin werden? Falls es kein Speakerpin sein sollte, was ist ein Speaderpin, bzw wofür steht es?
:
Bearbeitet durch User
>No offense, aber ist das nur ein konsequenter Vertipper oder sollte das >ein Speakerpin werden? In diesem Bild würde ich den Pin PB5 als Index 0 interpretieren: https://github.com/storbukas/ATtiny85/blob/main/resources/ATtiny85-Pin-Diagram-Simple.png Ansonsten: Dieser MC könnte klein genug sein: https://www.heise.de/news/Kleinster-Mikrocontroller-hat-acht-Anschluesse-auf-1-38-Quadratmillimetern-10312469.html
:
Bearbeitet durch User
H. H. schrieb: > Esmu P. schrieb: >> Ist die Volks-Verblödung mittlerweile auch hier im Forum angekommen? > > Das war am 29.08.2016 10:05. Benutzername max707 Angemeldet seit 29.08.2016 10:05 Beiträge 1662
Lothar M. schrieb: > Lothar M. schrieb: >> Das wäre auch von Anfang an mein Lösungsweg gewesen. > > Heute in der Mittagspause kurz gemacht. Programm kommt morgen. Das klingt richtig gut! Der Attiny85 ist in TSSOP sehr klein, das passt dann locker. Außerdem funktioniert das Ganze dann sicher(ohne Temperaturabhängigkeit). Ich hatte ursprünglich vor, zwei Töne (mit Jumper) umschaltbar zu machen. Der eine Alarm/Sirenen-Ton war ja analog noch machbar, aber die komplexere Tonfolge ist wirklich ein Fall für einen Attiny. 👍😊 Wie geht man beim Erstellen der Töne vor? Vielleicht kriege ich den zweiten Ton noch selber hin. Die Umschaltung mittels Steckbrücke müsste dann wohl auch noch im Attiny hinterlegt werden. Wie würde so etwas softwaremässig gemacht? Was bräuchte ich noch an Beschaltung (Abblock-C, evtl. Treibertransistor?) Es gibt ja die Varianten Attiny25/45/85, wieviel Speicher(Flash/Eprom) benötige ich mindestens? Auf die Schnelle hab ich keinen Attiny85 in TSSOP finden können, aber einen ATtiny45. Vielen Dank für die ganzen Ideen! 👍
:
Bearbeitet durch User
Alexander H. >Wie geht man beim Erstellen der Töne vor? Vielleicht kriege ich den >zweiten Ton noch selber hin. Du installierst dir die Arduino IDE und den Attiny85 Support von hier: https://github.com/storbukas/ATtiny85 Dort findet sich auch ein Verdrahtungsplan zur Programmierung des Attiny85 mit einem Arduino Uno. Im Beispielprogramm lassen sich die Töne leicht anpassen: Beitrag "Re: Alarmton/Buzzer-Dreiklang erzeugen" Vielleicht wird ist der Code so verständlicher:
1 | void loop() |
2 | |
3 | {
|
4 | play(2000); // spiele 2000Hz |
5 | play(2000); // spiele 2000Hz |
6 | play(3200); // spiele 3200Hz |
7 | delay(70); // 70 Millisekunden Ruhe |
8 | play(3200); // usw. |
9 | play(2000); |
10 | delay(1000); // eine Sekunde Ruhe |
11 | }
|
Natürlich wäre das alles viel zu einfach. Um State-Of-The-Art zu sein, solltest du einen RISC-V Mikrocontroller verwenden und um es wirklich zu verstehen in RISC-V Assembler programmieren. Dazu solltest du dich etwas in die verschiedenen Risc-V Architekturen einarbeiten und die Compiler-Toolchain etwas genauer betrachten. Danach einfach das passende Make-File erstellen und den Treiber für den Programmieradapter geschickt installieren. Debuggen lässt sich das ganze mit dem GDB, den sollte man in etwas weniger als einer Woche erlernen können. Ich habe hier mal ein Beispiel für ein Blink-Programm mit System-Timer als Zeitbasis gemacht: Beitrag "Re: RISCV (CH32V003): GNU Assembler übersetzt "CALL" nicht korrekt (oder bin ich nur zu doof?)"
:
Bearbeitet durch User
Alexander H. schrieb: > Wie geht man beim Erstellen der Töne vor? Wie gesagt: im einfachsten Fall mit _delay(). Und dann sieht das Programm so aus:
1 | #include <avr/io.h> |
2 | #define F_CPU 16000000L
|
3 | #include <util/delay.h> |
4 | |
5 | void A (void) { |
6 | for(int i=0; i<100; i++) { // A: 2kHz, 50ms |
7 | PORTB = 0x01; |
8 | _delay_us(250); |
9 | PORTB = 0x00; |
10 | _delay_us(250); |
11 | }
|
12 | }
|
13 | |
14 | void B (void) { |
15 | for(int i=0; i<160; i++) { // B: 3k2Hz, 50ms |
16 | PORTB = 0x01; |
17 | _delay_us(155); |
18 | PORTB = 0x00; |
19 | _delay_us(156); |
20 | }
|
21 | }
|
22 | |
23 | int main(void) |
24 | {
|
25 | DDRB = 0x01; // B0 = LED |
26 | while(1) |
27 | {
|
28 | // 50ms Ton an, 20ms Pause Tonfrequenz A: 2000Hz Tonfrequenz B: 3200Hz
|
29 | // Die Sequenz ist: A,A,B,still,B,A Das ganze dauert 6*70ms = 420ms
|
30 | A(); |
31 | _delay_ms(20); // kurze Pause |
32 | A(); |
33 | _delay_ms(20); // kurze Pause |
34 | B(); |
35 | _delay_ms(20); // kurze Pause |
36 | _delay_ms(50); // still |
37 | _delay_ms(20); // kurze Pause |
38 | B(); |
39 | _delay_ms(20); // kurze Pause |
40 | A(); |
41 | |
42 | _delay_ms(3000); // wart mal ab... |
43 | }
|
44 | }
|
Man könnte sich sogar die Funktionen "sparen", dann wird das Ganze ein wenig länger. Wenn man eine Tonausgabe-Bibliothek nimmt, dann wird die Eigenleistung wie oben gezeigt noch deutlich geringer.
:
Bearbeitet durch Moderator
Ich krieg immer Mecker, wenn ich Statusausgaben mitm Relais signalisiere. "Tütelüt", wenn gut und "NÖPNÖPNÖPNÖÖP" wenn schlecht. Oder wenn man nen Stecker verkehrt ansteckt, gibts dann auch "Alarm". Man munkelt, die Relais machen das nicht lange mit. Ich weiss mal garnicht, wo ich das eigentlich herhabe. Ausgedacht hab ich mir das nicht selbst. Also die Melodie dann schon, aber nicht das Framework. Hätte man ja die Credits mit angeben können. Zum uC: ich nehm immer die kleinen ATTiny2313 im MLF Gehäuse für "sowas", wenn kein Platz ist. Wegen der UART und Bootloader. Man muss ja die Software irgendwie in den Drahtigel hineinbekommen. ------------------------------------- Ha - kurz gesucht und gleich gefunden: https://docs.arduino.cc/built-in-examples/digital/toneMelody/
1 | #include "pitches.h" |
2 | |
3 | // notes in the melody:
|
4 | int melody[] = { |
5 | |
6 | NOTE_G3, NOTE_B3, NOTE_D4, NOTE_G3, NOTE_B3, NOTE_D4, NOTE_C4, NOTE_G3, NOTE_B3, NOTE_C4, NOTE_B3, NOTE_G3 |
7 | };
|
8 | |
9 | // note durations: 4 = quarter note, 8 = eighth note, etc.:
|
10 | int noteDurations[] = { |
11 | |
12 | 4, 4, 2, 4, 4, 8, 2, 4, 4, 2, 4, 1 |
13 | //8, 8, 4, 8, 8, 16, 4, 8, 8, 4, 8, 2
|
14 | };
|
15 | |
16 | void Play_MUSIC() { |
17 | // iterate over the notes of the melody:
|
18 | |
19 | for (int thisNote = 0; thisNote < 12; thisNote++) { |
20 | |
21 | // to calculate the note duration, take one second divided by the note type.
|
22 | |
23 | //e.g. quarter note = 1000 / 4, eighth note = 1000/8, etc.
|
24 | |
25 | int noteDuration = 800 / noteDurations[thisNote]; |
26 | |
27 | tone(Relais_2, melody[thisNote] / 2, noteDuration); |
28 | // to distinguish the notes, set a minimum time between them.
|
29 | |
30 | // the note's duration + 30% seems to work well:
|
31 | |
32 | int pauseBetweenNotes = noteDuration * 1.3; |
33 | |
34 | delay(pauseBetweenNotes); |
35 | |
36 | // stop the tone playing:
|
37 | |
38 | |
39 | noTone(Relais_2); |
40 | }
|
41 | }
|
in "pitches.h" stehen dann die Defines für die Notenwerte in gerundete Hertz
1 | #define NOTE_B0 31
|
2 | .
|
3 | .
|
4 | .
|
5 | |
6 | #define NOTE_AS7 3729
|
7 | #define NOTE_B7 3951
|
8 | #define NOTE_C8 4186
|
9 | #define NOTE_CS8 4435
|
10 | #define NOTE_D8 4699
|
11 | #define NOTE_DS8 4978
|
:
Bearbeitet durch Moderator
Wieviel Platz benötigt denn das Programm mit zwei Piepstönen ungefähr? Dann könnte man abschätzen ob Attiny25/45 oder Attiny85 besser geeignet ist. Der ATtiny85 hat doch alle Pins für ISP. Die Anschlüsse würde ich herausführen und dann per TL866 programmieren. Da ich eine Batterieanwendung plane (2,8V), könnte ich entweder die Versionen ab >2,7V(20MHz) oder auch die Versionen <2,7V(10MHz) nutzen. Ich müsste mich vorher festlegen, wegen der korrekten Wiedergabe des Tones, oder? Der uC ist dann immer AN, bzw. müsste standardmäßig immer eingeschaltet sein? Wäre er normalerweise im sleep, könnte ich mir vorstellen, dass es Probleme geben könnte, denn der Ton soll ja mittels 1Hz Puls(lowside geschaltet) eingeschaltet werden. Was wäre denn der ungefähre Stromverbrauch, bei immer eingeschaltetem uC(und würde sleep Vorteile im Stromverbrauch bringen?)? Ich habe was von 300uA gelesen. Sollte der sleep-Modus mehr Nachteile bringen, verzichte ich lieber darauf.
Alexander H. schrieb: > Wieviel Platz benötigt denn das Programm mit zwei Piepstönen ungefähr? > Dann könnte man abschätzen ob Attiny25/45 oder Attiny85 besser geeignet > ist. Wenig. > Was wäre denn der ungefähre Stromverbrauch, bei immer eingeschaltetem > uC(und würde sleep Vorteile im Stromverbrauch bringen?)? > Ich habe was von 300uA gelesen. Sollte der sleep-Modus mehr Nachteile > bringen, verzichte ich lieber darauf. Man kann den Controller ja aufwecken. ☺ Wirklich sparsame brauchen aber auch wenn das Programm läuft, weniger als einige uA. Piepsen ist ja auch keine anspruchsvolle Beschäftigung.
Alexander H. schrieb: > denn der Ton soll ja mittels 1Hz Puls(lowside geschaltet) eingeschaltet > werden. Du willst also die Versorgungsspannung für den ATtiny für eine Sekunde einschalten und innerhalb dieser Sekunde soll der ATtiny von selbst starten und seinen Sound einmal abspulen? Dadurch sparst du natürlich einen Eingangs-Pin, der sonst zum Starten benötigt würde. Wichtig ist, dass du zwei Ausgänge hast, um den Piezo als Brücke schalten zu können, um damit die Lautstärke zu erhöhen, denn du hast ja nur 2,8 Volt.
Otto K. schrieb: > Alexander H. schrieb: >> denn der Ton soll ja mittels 1Hz Puls(lowside geschaltet) eingeschaltet >> werden. > > Du willst also die Versorgungsspannung für den ATtiny für eine Sekunde > einschalten und innerhalb dieser Sekunde soll der ATtiny von selbst > starten und seinen Sound einmal abspulen? > Dadurch sparst du natürlich einen Eingangs-Pin, der sonst zum Starten > benötigt würde. Wichtig ist, dass du zwei Ausgänge hast, um den Piezo > als Brücke schalten zu können, um damit die Lautstärke zu erhöhen, denn > du hast ja nur 2,8 Volt. Genau, ich schalte im 1Hz Takt lowside ein. Ich müsste halt testen, dass nicht ein Teil des Tons beim Einschalten verschluckt wird, aber wahrscheinlich geht das. Alternativ könnte man auch den Attiny immer eingeschaltet lassen und per LOW-Signal einschalten? Ok, die Brückenschaltung (besser als Treibertransistor?) spart dann sogar noch ein Bauteil. Es soll nicht sehr laut werden, aber gut hörbar. Werde den ATtiny45(2,7-5,5V/TSSOP8) nutzen.
:
Bearbeitet durch User
So ein Programm braucht kein Platz. Früher hatte ich für so was immer den Attiny13 verwendet (geht dann nur noch Bare-Bone wie von Lothar und nicht mehr mit dem Arduino Framework). Die MCU läuft innerhalb von Millisekunden nach anlegen der Stromversorgung los.
Alexander H. schrieb: > Ok, die Brückenschaltung (besser als Treibertransistor? Für einen Piezo-Lautsprecher ist die Brückenschaltung mit zwei Ausgängen besser. Und für einen 4 Ohm Lautsprecher ist die Transistor Treiberstufe besser.
Ich nutze keinen Piezo sondern einen kleinen „magnetic buzzer“(ca. 50 Ohm Impedanz). Piezos haben wohl ca. >1M Ohm. Also würde ich annehmen, in dem Fall ist vielleicht auch der Transistor besser?
Alexander H. schrieb: > Dann könnte man abschätzen ob Attiny25/45 oder Attiny85 besser geeignet > ist. Schau dir deren Einzelpreise an. Es gibt eigentlich keinen guten Grund, nicht den ATtiny85 zu nehmen. Wenn du das dann noch 20x bauen musst, kannst du immer noch schauen, ob der kleinere reicht. Die Arduino IDE zeigt das ja an. > Ich müsste mich vorher (auf 10 oder 20 MHz) festlegen, wegen der korrekten Wiedergabe des Tones, oder? 8 MHz gehen mit jeder Spannung. > Der uC ist dann immer AN (?) Er kann schlafen, bis er Startsignal (pin cgange interript) kommt. > Was wäre denn der ungefähre Stromverbrauch, bei immer eingeschaltetem uC Das hängt fast linear an der gewählten Taktfrequenz, die man übrigens per Software wecgseln kann (clock prescaler). Schau ins Datenblatt! Im Sleep sind es jedenfalls unter 1 uA, soweit ich mich erinnere. Du kannst zusätzlich zur Brückenschaltung jeweils zwei Ausgänge parallel schalten, um Verluste im IC zu reduzieren.
:
Bearbeitet durch User
https://www.eurohorns.de/PKW-12V-Hupen/Tourhupe-klassisch Aber im Original klangen die doch noch ganz anders, oder? Ist das nicht wieder ein digital Gedöns?
Otto K. schrieb: > den Piezo Es ist ein magnetischer Piepser wie im 1 Post Alexander H. bereits schrieb: > Mini-Piepser(„magnetic buzzer“) Die sind üblicherweise auch unipolar angesteuert schon laut genug. Alexander H. schrieb: > Wieviel Platz benötigt denn das Programm mit zwei Piepstönen ungefähr? Irgendwas unter 5%. Aber ich habe eben eine 400er Restrolle mit vorprogrammierten ATTiny85 hier rumliegen... ;-) Wenn du sparen musst, koste es, was es wolle, dann würde ich aber den ATtiny9 empfehlen: - https://www.mouser.de/ProductDetail/Microchip-Technology/ATTINY9-TSHR?qs=rBGENRD8NwJTK%2Fst6H6pMg%3D%3D
So, hab nun den Attiny45 da und bin gerade dabei, den uC mit Lackdraht zu verkabeln. Bräuchte man dann zwingend die Arduino IDE bzw. das wäre wohl die Programmiersoftware der Wahl, oder? Als Programmiergerät nutze ich den Tl866 (6-Pin ISP). Hardwaremässig würde ich einen 100nF Entkoppel-Kondensator zwischen Vcc und GND(evtl. noch 10uF), einen(oder zwei?) Vorwiderstand in einer Leitung zum Lautsprecher, für die Lautstärke, sowie eine Freilaufdiode vorsehen. Der Lautsprecher soll bipolar betrieben werden. Evtl. wird unipolarer Betrieb bzw. mit Treibertransistor getestet, je nach Stromverbrauch. Wie genau definiere ich die Pins (Ausgang zum Lautsprecher, Umschaltung zwischen Ton 1/2)? Das mit dem Aufwecken aus Sleep würde ich einfach weglassen, da ich ja auch nur simpel Einschalten kann. Versuche mich gerade da einzulesen.😊😅
Alexander H. schrieb: > Bräuchte man dann zwingend die Arduino IDE bzw. das wäre wohl die > Programmiersoftware der Wahl, oder? Der Hersteller empfiehlt seine eigene IDE, das wäre das Microchip Studio und dazu die XC8 Toolchain, von der ich wenig halte. Die Arduino IDE bietet einen erheblich leichteren Einstieg und untersützt mehr Programmieradapter. Deinen Tl866 aber vermutlich nicht. Für den brauchst du wohl zusätzliche Software. Siehe http://stefanfrings.de/avr_ide/index.html
Ok, dachte eher ich kann mit der Arduino IDE eine .hex-file generieren und diese dann per TL866 über ISP aufspielen. https://forum.arduino.cc/t/how-to-get-hex-file-from-arduino-files/128790/2
Alexander H. schrieb: > Ok, dachte eher ich kann mit der Arduino IDE eine .hex-file generieren > und diese dann per TL866 über ISP aufspielen. Ja, das meinte ich mit "zusätzliche Software". Praktischer wäre natürlich, einen kompatiblen Programmieradapter zu verwenden, denn dann kann man direkt in der IDE per Mausklick hochladen.
Wenn du die Arduino IDE verwendest, wirst du das brauchen: https://github.com/SpenceKonde/ATTinyCore/blob/v2.0.0-devThis-is-the-head-submit-PRs-against-this/Installation.md
Alexander H. schrieb: > Bräuchte man dann zwingend die Arduino IDE Nein, natürlich nicht. Die würde bezüglich des Aufwands zum Flashen nur was bringen, wenn du Controller hast, auf denen der Arduino-Bootloader schon drauf ist. Ansonsten musst du ihn sleber erstmal draufbringen und das geht auch wieder nur über ISP. > Der Lautsprecher soll bipolar betrieben werden. Evtl. wird unipolarer > Betrieb bzw. mit Treibertransistor getestet, je nach Stromverbrauch. > > Wie genau definiere ich die Pins (Ausgang zum Lautsprecher, Umschaltung > zwischen Ton 1/2)? > Das mit dem Aufwecken aus Sleep würde ich einfach weglassen, da ich ja > auch nur simpel Einschalten kann. > > Versuche mich gerade da einzulesen.😊😅 Dann lies vielleicht mal das hier: Beitrag "Westminster Soundgenerator mit ATtiny85" Da ist das alles schonmal gelöst. Da wird nur ein sehr viel komplexerer Klang abgespielt. Für dein bissel düdeldü könnte man das Programm ganz sicher ohne jedes Problem so weit abrüsten, dass es auch in einen Tiny45 passt.
Ob S. schrieb: > Nein, natürlich nicht. Die würde bezüglich des Aufwands zum Flashen nur > was bringen, wenn du Controller hast, auf denen der Arduino-Bootloader > schon drauf ist. Ansonsten musst du ihn sleber erstmal draufbringen und > das geht auch wieder nur über ISP. Das liest sich so, als könnte die Arduino IDE nur mit Bootloader verwendet werden. Dem ist aber nicht so. Sie unterstützt wie gesagt auch einige ISP Programmieradapter. Und man kann (wie Alexander vor hat) *.hex Dateien erzeugen, die mit beliebigen anderen ISP Programmieradaptern außerhalb der IDE in den Chip gebracht werden.
:
Bearbeitet durch User
Nemopuk schrieb: > Siehe http://stefanfrings.de/avr_ide/index.html ist das wieder ein neuer Nick von dir Stefan? Wen willst du mit deinen Kenntnissen eigentlich helfen?
Wenn man nichts zum Thema beitragen kann: einfach mal die klappe halten. Stattdessen könntest du dich über den Dativ informieren.
Hallo, bin gerade dabei den Attiny45 zu flashen bzw. überhaupt erst mal eine LED blinken zu lassen.😊 Scheinbar ist es für mich als Anfänger mit AVRisp mkII + AVRdude doch nicht ganz so simpel. Gibt es eine Möglichkeit, per AVRdude den Inhalt des Flash auszulesen und sich das Ganze anzeigen zu lassen? Beim Klicken auf „Read“ bzw. „Verify“ > „Program“ scheint alles zu passen. Vielleicht müssen noch fuses eingestellt werden? Ich wollte das hier testen: https://www.arduinoslovakia.eu/blog/2017/12/attiny85---blik?lang=en Grüne LED mit Vorwiderstand an PB0/GND angeschlossen, aber es passiert nichts. Das Programm sollte doch mit Anlegen von Spannung sofort loslaufen, oder?
Alexander H. schrieb: > Gibt es eine Möglichkeit, per AVRdude den Inhalt des Flash auszulesen > und sich das Ganze anzeigen zu lassen? Auslesen ja, anzeigen nein. Dabei käme nur ein Haufen Zahlen heraus, kein lesbarer Quelltext. > Das Programm sollte doch mit Anlegen > von Spannung sofort loslaufen, oder? Ja. Wie hast du denn das "Board" in der IDE konfiguriert? Zeige mal alle Parameter.
:
Bearbeitet durch User
Ich habe den Code exakt so übernommen/herauskopiert. Hätte ich irgendetwas anpassen müssen?
Es geht nicht um den Quelltext, sondern um die Board-Einstellungen in der IDE. Die müssen mit der Ziel-Hardware übereinstimmen.
Ok, daran wird es liegen. Wo und was müsste ich denn einstellen? Die Arduino IDE fragt zB. nach einem Board. Richtet sich das Ergebnis der compilierten .hex dann danach? Ich nutze ja kein Arduino board sondern den AVRisp.
Alexander H. schrieb: > Die Arduino IDE fragt zB. nach einem Board. Richtet sich das Ergebnis > der compilierten .hex dann danach? Natürlich, es muß passend zum CPU-Typ compiliert werden. Du müstest in den Board-Einstellungen genau Deinen AVR wählen. Ist der nicht da, muß er per Download nachgerüstet werden - ich hoffe, dass arduinoslovakia auch das beschrieben hat.
Es blinkt!👍 Hab es nach folgender Anleitung hinbekommen.😉 https://www.instructables.com/Program-an-ATtiny44458485-with-Arduino/
:
Bearbeitet durch User
Alexander H. schrieb: > Hab es nach folgender Anleitung hinbekommen. Meinst du das?: > Make sure you have the correct Board, Clock, and Processor selected under the Tools Menu for what you are using. Then hit upload.
:
Bearbeitet durch User
Nemopuk schrieb: > Meinst du das?: >> Make sure you have the correct Board, Clock, and Processor selected under the > Tools Menu for what you are using. Then hit upload. Ich glaube eher, drei Schritte vorher "Step 3: Add Support for ATtiny"
Ja genau. Man muss in der Arduino IDE dann den Link (https://raw.githubusercontent.com/damellis/attiny/ide-1.6.x-boards-manager/package_damellis_attiny_index.json) eingeben und dann hat man den Attiny45 mit drin. Der Beep von Lothar hört sich sehr gut an! Wie erhofft legt der Attiny sofort bei Anlegen der Betriebsspannung los. Stromverbrauch nur 8,5mA. Beim zweiten Beep bin ich mir unsicher. Ich sehe hauptsächlich drei Frequenzen, die parallel erklingen(95Hz, 200Hz und 750Hz). Anfangs sind die 95Hz lauter, am Ende dominieren die 750Hz. Sollte ich das überhaupt richtig interpretiert haben🤔 Könnte man so eine Mischung von Frequenzen überhaupt in Software nachahmen?
:
Bearbeitet durch User
Wenn man den BigTrak (ab 1980) fertig programmiert hatte, dann gab es immer diesen individuellen 7-tönigen Bestätigungssound: du-ti-du-ti-du-ti-du Diesen Sound könnte man nachmachen und mit doppelter Geschwindigkeit abspielen, dann hört er sich noch besser an. In dem Video hört man ihn 2 mal, in Sekunde 27 und in Sekunde 49: https://youtu.be/7zOCc145g88?si=XOUee7_0XHOqU_Ds
Alexander H. schrieb: > Der Beep von Lothar hört sich sehr gut an! Welche Firmware hast Du denn nun draufkopiert? den "Beep von Lothar"? Kannst Du bitte nochmal drauf verlinken? EDIT; war nun doch besser, das mitm uC zu machen, als mit 12 Transistoren, oder?
:
Bearbeitet durch User
Moin, Alexander H. schrieb: > Beim zweiten Beep bin ich mir unsicher. Ich sehe hauptsächlich drei > Frequenzen, die parallel erklingen(95Hz, 200Hz und 750Hz). Anfangs sind > die 95Hz lauter, am Ende dominieren die 750Hz. > Sollte ich das überhaupt richtig interpretiert haben🤔 der Beep2.mp3 hoert sich fuer mich an, wie ein Sweep. Faengt also mit einer tiefen Frequenz an und die erhoeht sich dann mit der Zeit. Klingt auch obertonreich, also koennte es wohl ein Saegezahn oder kurze Pulse sein. > Könnte man so eine Mischung von Frequenzen überhaupt in Software > nachahmen? Warum sollte man das nicht koennen? Man kann so gut wie alles in Software nachahmen. Gruss WK
Beitrag "Re: Alarmton/Buzzer-Dreiklang erzeugen" Wenn man jetzt hier noch den zweiten Pin als Ausgang definiert und "entgegenegesetzt" schaltet (am Ende der Tonausgabe beide auf "L" oder"H" oder als Eingang!), kann man den Piepser zwischen zwei Ausgänge "hängen". Oder man verwendet einen Auskoppel-Kondensator, damit nicht ständig Strom durch die Spule fließt. Auch würde ich zwei Doppel-Schottky an die Ausgangspins gegen GND und VCC schalten und einen kleinen Elko (100uF/6V3)parallel zur Betriebsspannung nicht einsparen.
Axel R. schrieb: > Auch würde ich zwei Doppel-Schottky an die Ausgangspins gegen GND und > VCC schalten und einen kleinen Elko (100uF/6V3)parallel zur > Betriebsspannung nicht einsparen. Wenn von den Augangstransistoren der Gegentaktendstufe des µC immer 1 leitet, sind irgendwelche Freilaufdioden unötig, weil der Induktionsstrom ja immer einen Weg freigeschaltet bekommt. Axel R. schrieb: > Wenn man jetzt hier noch den zweiten Pin als Ausgang definiert und > "entgegenegesetzt" schaltet (am Ende der Tonausgabe beide auf "L" > oder"H" oder als Eingang!), kann man den Piepser zwischen zwei Ausgänge > "hängen". Man kann mehrere digitale Ausgangssignale auch einfach mit der XOR-Funktion mischen. Dabei kommt es natürlich zu "Übersteuerungen", denn eigentlich ergibt ja 1+1 = 2. Diese 2 ist binär aber nicht darstellbar und resultiert als 0 in Verzerrungen. Dem Ohr ist das kurioserweise ziemlich egal. Siehe dazu auch den Beitrag "Re: VHDL Grundlagen Tonerzeugung" und den Beitrag "Re: Warum ist hier weniger los als.".
Axel R. schrieb: > Beitrag "Re: Alarmton/Buzzer-Dreiklang erzeugen" > Wenn man jetzt hier noch den zweiten Pin als Ausgang definiert und > "entgegenegesetzt" schaltet (am Ende der Tonausgabe beide auf "L" > oder"H" oder als Eingang!), kann man den Piepser zwischen zwei Ausgänge > "hängen". Oder man verwendet einen Auskoppel-Kondensator, damit nicht > ständig Strom durch die Spule fließt. Auch würde ich zwei > Doppel-Schottky an die Ausgangspins gegen GND und VCC schalten und einen > kleinen Elko (100uF/6V3)parallel zur Betriebsspannung nicht einsparen. Das wollte ich auch noch fragen. Die Lautstärke ist zwar ganz ok, aber an 2,7V würde ein bisschen Reserve nicht schaden. Man sieht oft eine Diode zwischen den Lautsprecherpins(Rück-Induktion?), erfüllt das den gleichen Zweck wie zwei Schottkydioden? Also wie genau kann ich das Programm auf „Brückenschaltung“ (push-pull?) abändern? Ich hab auch gelesen, dass push-pull Betrieb durch „bitbanging“ gelöst werden kann? Leider finde ich so gut wie keine (Code-)beispiele für Lautsprecherbetrieb an zwei Ausgängen. Ich nutze diese Firmware von Lothar:
1 | include <avr/io.h> |
2 | #define F_CPU 16000000L
|
3 | #include <util/delay.h> |
4 | void A (void) { |
5 | for(int i=0; i<100; i++) { // A: 2kHz, 50ms |
6 | PORTB = 0x01; |
7 | _delay_us(250); |
8 | PORTB = 0x00; |
9 | _delay_us(250); |
10 | }
|
11 | }
|
12 | void B (void) { |
13 | for(int i=0; i<160; i++) { // B: 3k2Hz, 50ms |
14 | PORTB = 0x01; |
15 | _delay_us(155); |
16 | PORTB = 0x00; |
17 | _delay_us(156); |
18 | }
|
19 | }
|
20 | int main(void) |
21 | {
|
22 | DDRB = 0x01; // B0 = LED |
23 | while(1) |
24 | {
|
25 | // 50ms Ton an, 20ms Pause Tonfrequenz A: 2000Hz Tonfrequenz B: 3200Hz
|
26 | // Die Sequenz ist: A,A,B,still,B,A Das ganze dauert 6*70ms = 420ms
|
27 | A(); |
28 | _delay_ms(20); // kurze Pause |
29 | A(); |
30 | _delay_ms(20); // kurze Pause |
31 | B(); |
32 | _delay_ms(20); // kurze Pause |
33 | _delay_ms(50); // still |
34 | _delay_ms(20); // kurze Pause |
35 | B(); |
36 | _delay_ms(20); // kurze Pause |
37 | A(); |
38 | |
39 | _delay_ms(3000); // wart mal ab... |
40 | }
|
41 | }
|
:
Bearbeitet durch Moderator
Alexander H. schrieb: > Leider finde ich so gut wie keine (Code-)beispiele für > Lautsprecherbetrieb an zwei Ausgängen. Selber aktiv werden? > Ich hab auch gelesen, dass push-pull Betrieb durch „bitbanging“ gelöst > werden kann? Seis drum. Schließe den Pipser zwischn PB0 und PB1 an und ändere das Programm in diesen Zeilen ab:
1 | :
|
2 | PORTB = 0x01; |
3 | _delay_us(...); |
4 | PORTB = 0x02; |
5 | _delay_us(...); |
6 | :
|
7 | DDRB = 0x03; // B1 und B0 werden im Gegentakt aktiviert |
8 | :
|
Moin, Wenn ich total crazy drauf bin, bau ich sogar noch 2x ein
1 | PORTB = 0x00; |
ein. Und zwar jeweils hier:
1 | _delay_us(IRGENDEINE_ZAHL); |
2 | }
|
3 | PORTB = 0x00; |
4 | }
|
Dann fliesst kein Gleichstrom durch den Buzzer, wenn nix dudelt. Gruss WK
Alexander H. schrieb: > Der Beep von Lothar hört sich sehr gut an! Ist aber nicht wirklich dem Original entsprechend. Ich habe mal mein altes Analyseprogramm rausgekramt, mit dem ich damals den Westminster-Schlag analysiert habe. Es hat sich folgendes ergeben: Sechs "Noten", drei Frequenzen Jede Note (mit Ausnahme der vierten) enthält ca. 50ms Ton, dann 20ms Stille, die vierte Note ist komplett still, sollte sie wohl jedenfalls mal sein, bevor irgendein Idiot Störgeräusche und Rauschen zu der Aufnahme hinzugefügt hat... Die Zuordnung der Frequenzen zu den Noten sieht so aus:
1 | n/f 2k 3k 4k |
2 | --------------- |
3 | 1 x x |
4 | 2 x x |
5 | 3 x x |
6 | 4 |
7 | 5 x x |
8 | 6 x x |
> Beim zweiten Beep bin ich mir unsicher. Ich sehe hauptsächlich drei > Frequenzen, die parallel erklingen(95Hz, 200Hz und 750Hz). Nö, ist viel simpler. Offensichtlich wurde hier näherungsweise mit einem Dirac-Puls gearbeitet. Sprich: nur ganz kurz Saft auf den Buzzer, der Rest des Tones wird durch das mechanische System des Buzzers selber erzeugt. Dessen Resonanzfrequenz liegt offensichtlich bei ca. 2,7kHz. Die Anregung durch den Puls wird dann gut 80 mal wiederholt, wobei die Abstände der Pulse immer kürzer werden. Das erzeugt den wahrgenommenen Frequenz-Sweep. In Wirklichkeit gibt es aber keine Änderung der tatsächlichen Frequenz des Geräuschs, die ist vom ersten bis zum letzten immer so bei 2,7kHz.
:
Bearbeitet durch Moderator
Ob S. schrieb: > der > Rest des Tones wird durch das mechanische System des Buzzers selber > erzeugt. Dessen Resonanzfrequenz liegt offensichtlich bei ca. 2,7kHz. Hmmm... Bei nochmaligem Nachdenken könnte sich bezüglich Beep1 noch eine Änderung ergeben. Wenn man nämlich mal annimmt, dass die Aufnahme mit demselben Buzzer entstanden ist wie die von Beep2 und die grottige Qualität der Quelle meiner Analyse berücksichtigt, dann könnten meine analysierten 3kHz gut und gerne ein Artefakt sein, das aus der Resonanzfrequenz des Beepers resultiert und in Wirklichkeit eben auch 2.7kHz hat und in der Anregung niemals enthalten war. Entsprechend bereinigt würde das dann so aussehen:
1 | n/f 2k 4k |
2 | ----------- |
3 | 1 x |
4 | 2 x |
5 | 3 x |
6 | 4 |
7 | 5 x |
8 | 6 x |
[Mod: die [code]-Tags sind case-sensitiv]
:
Bearbeitet durch Moderator
Danke für die Erklärung (Buzzer im Gegentakt anschliessen). Das werde ich versuchen ins Programm eunzubauen, wenn der Rest wie geplant läuft. Ich bin noch auf ein Problem gestoßen: der Ton wird leider am Ende knapp abgeschnitten, wenn ich den uC im 1Hz Takt lowside einschalte. Ein Stützelko hat auch nicht geholfen. Also komme ich doch nicht um einen Steuereingang (active low?)herum. Ich hab einige unterschiedliche Varianten gefunden. Wie implementiert man das ins Programm am einfachsten? Man müsste wahrscheinlich einen (Taster-) Eingang definieren? Ich bräuchte einen Pull-Up R und könnte einen der Inputs nutzen. Welchen nimmt man am besten, dass später das ISP(im eingebauten Zustand) noch funktioniert? Hatte zB. beobachtet, dass mit Buzzer+Freilaufdiode am Ausgang dann das ISP nicht mehr läuft. Interessant, 2,7KHz alleine hören sich ja erstmal überhaupt nicht so an, wie der Sweep.
:
Bearbeitet durch User
Edit: es sind scheinbar doch 1,5-2Hz und damit leider schneller als gedacht.
Hmm, ich hab nun einige verschiedene Codebeispiele mit Inputkonfiguration dem Code (mit Lothars Tonfolge) vorangestellt. Weil ich es noch nicht besser weiß.😉 Wie zu erwarten war, funktioniert das so nicht. Was muss ich denn beachten, damit ein activ LOW am Eingang die Tonfolge auslöst? Es wurde zwar teilweise kompiliert, aber ich mache irgendetwas grundsätzlich falsch. Wahrscheinlich braucht man erstmal ein Minimum an Erfahrung. Da die Dauer der Tonfolge unter 500ms(2Hz) liegt, müsste es mit dauerhaft eingeschaltetem uC und Einschaltung per Input ja eigentlich auch klappen.
:
Bearbeitet durch User
Alexander H. schrieb: > Was muss ich denn beachten, damit ein activ LOW am Eingang die Tonfolge > auslöst? Du musst beachten, dass der Eingang Aktiv LOW ist. Konkrete Hilfe erfordert konkreten Input (dein Quelltext).
Ich hatte zB. das hier gefunden:
1 | const int buzzerPin = 5; |
2 | const int switchPin = 6; |
3 | int buzzerState = 1; // 1 for off, 0 for on |
4 | |
5 | void setup() { |
6 | pinMode(buzzerPin, OUTPUT); |
7 | pinMode(switchPin, INPUT_PULLUP); // Enable internal pull-up resistor |
8 | Serial.begin(9600); |
9 | }
|
10 | |
11 | void loop() { |
12 | int switchState = digitalRead(switchPin); |
13 | |
14 | if (switchState == LOW) { // Switch is pressed (active-low) |
15 | buzzerState = 1; // Turn on the buzzer |
16 | } else { // Switch is not pressed |
17 | buzzerState = 0; // Turn off the buzzer |
18 | }
|
19 | |
20 | digitalWrite(buzzerPin, buzzerState); // Control the buzzer based on buzzerState |
21 | |
22 | delay(10); // Debounce the switch |
23 | }
|
Falls das ungefähr in die richtige Richtung geht, wie vereine ich das mit der Tonfolge? Ja, also normalerweise ist der Eingang "intern" im uC immer auf LOW, richtig? [Mod: die [c]-Tags das nächste Mal bitte selber einsetzen. Nazulesen über jeder Texteingabebox bei "Wichtige Regeln - **erst lesen**, dann posten!"]
:
Bearbeitet durch Moderator
Alexander H. schrieb: > Ja, also normalerweise ist der Eingang "intern" im uC immer auf LOW, > richtig? Nein, wie kommst du darauf? Es gibt keinen default state. Was default ist, wird durch einen Widerstand bestimmt, der entweder auf Vcc (pullup) oder Gnd (pulldown) geht. Intern gibt es beim TinyX5 nur Pullups, die man einschalten könnte, um einen default state zu erreichen. Der wäre dann aber HIGH.
Ob S. schrieb: > Alexander H. schrieb: >> Ja, also normalerweise ist der Eingang "intern" im uC immer auf LOW, >> richtig? > > Nein, wie kommst du darauf? Es gibt keinen default state. Was default > ist, wird durch einen Widerstand bestimmt, der entweder auf Vcc (pullup) > oder Gnd (pulldown) geht. Intern gibt es beim TinyX5 nur Pullups, die > man einschalten könnte, um einen default state zu erreichen. Der wäre > dann aber HIGH. Default state HIGH gilt für den Eingang? Den internen Pullup zu nutzen hatte ich vor, denn ich will ja per active LOW den Ausgang einschalten. Kann sich jemand den Code von Lothar und meine Ergänzung nochmal anschauen? Ich komme da nicht weiter.
Alexander H. schrieb:> Falls das ungefähr in die richtige Richtung geht, tut es > wie vereine ich das mit der Tonfolge? Dafür hast du doch schon Beispiele bekommen. Wenn du keine Lust auf Lesen und Lernen hast (ja das ist mühsam), kannst du ja versuchen, einen KI Chatbot zu überreden, das für dich zu erledigen. Und nein, das ist keine Verarschung, das können die Dinger wirklich.
Nemopuk schrieb: > Alexander H. schrieb:> Falls das ungefähr in > die richtige Richtung geht, > tut es >> wie vereine ich das mit der Tonfolge? > > Dafür hast du doch schon Beispiele bekommen. Wenn du keine Lust auf > Lesen und Lernen hast (ja das ist mühsam), kannst du ja versuchen, einen > KI Chatbot zu überreden, das für dich zu erledigen. Und nein, das ist > keine Verarschung, das können die Dinger wirklich. Welche Beispiele? Würd ich gerne mal sehen, ob „KI“ das kann. Bitte verlinken, falls jemand hier KI erfolgreich nutzt😉👍
:
Bearbeitet durch User
Alexander H. schrieb: >> Dafür hast du doch schon Beispiele bekommen. Wenn du keine Lust auf >> Lesen und Lernen hast (ja das ist mühsam), kannst du ja versuchen, einen >> KI Chatbot zu überreden, das für dich zu erledigen. > Welche Beispiele? > > Würd ich gerne mal sehen, ob „KI“ das kann. Bitte verlinken, falls > jemand hier KI erfolgreich nutzt Wenn Du keine Lust hast, selbst aktiv zu werden, verschwinde. Du kannst Deine Versuche und Ergebnisse zeigen, aber niemand hat Spaß daran, auch hier diesen KI-Dreck zu diskutieren.
Voilá! Here is your code... This code will Define input PB1. Define output PB0. Use intern pullup on input. Activate buzzer on output, if input is LOW. // Define input PB1 #define PB1 1 // Define output PB0 #define PB0 0 // Set PB1 as input with internal pullup pinMode(PB1, INPUT_PULLUP); // Set PB0 as output pinMode(PB0, OUTPUT); // Check if input is LOW if(digitalRead(PB1) == LOW) { // Activate buzzer on output tone(PB0, 2000, 50); // Tone A 2khz, 50ms delay(50); tone(PB0, 3200, 50); // Tone B 3.2khz, 50ms } // Tone frequency sequence // Tone A 2khz, 50ms tone(PB0, 2000, 50); delay(50); // Tone B 3.2khz, 50ms tone(PB0, 3200, 50); delay(50); // Reference: Arduino Tone Library - https://www.arduino.cc/reference/en/language/functions/advanced-io/tone/ Wird kompiliert, aber bei Input LOW passiert nichts.
Alexander H. schrieb: > aber bei Input LOW passiert nichts was hast du erwartet? KI kann nichts werden wenn die natürliche Inteligenz stetig abnimmt.
Genau das hatte ich von „KI“ auch erwartet, daher überrascht mich das nicht.😊
Joachim B. schrieb: > KI kann nichts werden wenn die natürliche Inteligenz stetig abnimmt. Eine künstliche KI muss ständig von intelligenten Menschen mit intelligenten Sachverhalten, Infos und mit gesicherten Wahrheiten gefüttert werden und nicht mit Fake News, denn sonst kommen aus der KI auch nur Fake News heraus. Man kann nicht erwarten, dass eine KI so schlau ist und sich von selbst in die richtige Richtung entwickelt. Da steckt immer ein kluger menschlicher Kopf dahinter, der das Steuerrad fest in der Hand hält und ggf. kräftig gegenlenkt, damit alles wieder in geordneten Bahnen weiterläuft.
Ok, das hört sich ja vernünftig an. Also liegt es am Anwender. Aber wo ist denn mein Fehler in der Eingabe? Wenn ich hier schon so gute Tipps (KI)bekomme, will ich wenigstens sehen, was ich falsch mache. Das sind doch eigentlich einfache Sachen, die sollte die viel gelobte KI doch locker hinbekommen. Liegt es vielleicht daran, dass die KI nicht spezifisch für den Attiny45 funktioniert? Nächstes Beispiel: This code will Define input PB1. Define output PB0. Use intern pullup on input. Activate led on output, if input is LOW. // Define input PB1 const int PB1 = 1; // Define output PB0 const int PB0 = 0; // Set PB1 as input with internal pullup pinMode(PB1, INPUT_PULLUP); // Set PB0 as output pinMode(PB0, OUTPUT); // Check if input is LOW if(digitalRead(PB1) == LOW){ // Activate LED on output digitalWrite(PB0, HIGH); } // Reference: https://www.arduino.cc/reference/en/language/functions/digital-io/digitalread/ Das wird nicht mal kompiliert (Compilation error: expected unqualified-id before numeric constant).
:
Bearbeitet durch User
Mach bitte wie schon beschrieben die [c]-Tags um den Code.
:
Bearbeitet durch Moderator
Alexander, lerne doch einfach mal die Grundlagen von Arduino, bevor du es zu benutzen versuchst. setup() und loop() spielen eine elementare Rolle, beides fehlt in deinen zuletzt geposteten Code-Fragmenten. Fange damit an: https://docs.arduino.cc/built-in-examples/basics/BareMinimum/ https://docs.arduino.cc/built-in-examples/basics/Blink/ https://docs.arduino.cc/built-in-examples/basics/DigitalReadSerial/ https://docs.arduino.cc/built-in-examples/digital/InputPullupSerial/ https://docs.arduino.cc/built-in-examples/digital/toneMelody/ Oder damit: https://funduino.de/vorwort Noch einfacher und bequemer also mit Arduino geht es nicht. Wer gar nicht lernen will es selbst zu machen, der muss andere dafür bezahlen.
:
Bearbeitet durch User
1 | const int led = 0; |
2 | const int button = 1; |
3 | |
4 | void setup() { |
5 | pinMode(button, INPUT_PULLUP); |
6 | pinMode(led, OUTPUT); |
7 | }
|
8 | |
9 | void loop() { |
10 | if (digitalRead(button)== HIGH)digitalWrite(led, LOW); // Turn LED on if button is not pressed |
11 | else { |
12 | digitalWrite(led, HIGH); // Turn LED off if button is pressed |
13 | |
14 | delay(500); |
15 | }
|
16 | }
|
Ein kleines bisschen weiter bin ich gekommen. Habe mittlerweile verstanden, dass Groß-/Kleinschreibung wichtig ist, und dass die I/Os nicht als 5/6 sondern 1/0 bezeichnet werden. Mit dem Code oben schalte ich eine LED lowside für 500ms ein, das klappt schonmal. :) Nur, wie genau baut man die Tonfolge von Lothar in diese Logik ein (Klammern setzen?)? Ein paar Hinweise wären klasse :)
:
Bearbeitet durch Moderator
Alexander H. schrieb: > Nur, wie genau baut man die Tonfolge von Lothar in diese Logik ein Indem man programmiert. Und wenn man das noch nicht kann, dann muss man es lernen. Wie jeder andere Mensch auch. Meister fallen nicht vom Himmel.
:
Bearbeitet durch User
Nemopuk schrieb: > Alexander H. schrieb: >> Nur, wie genau baut man die Tonfolge von Lothar in diese Logik ein > > Indem man programmiert. Und wenn man das noch nicht kann, dann muss man > es lernen. Wie jeder andere Mensch auch. Meister fallen nicht vom > Himmel. Ja, das sagt sich leicht :) Ich hab nun etwas anderes probiert, das überschreitet aber den Speicher des Attiny45. Kann das sein?
1 | const int buzzer = 0; |
2 | const int button = 1; |
3 | |
4 | void setup() { |
5 | pinMode(button, INPUT_PULLUP); |
6 | pinMode(buzzer, OUTPUT); |
7 | }
|
8 | |
9 | // Define tone frequencies
|
10 | #define TONE_A 2000 // 2kHz
|
11 | #define TONE_B 3200 // 3.2kHz
|
12 | |
13 | // Define tone duration
|
14 | #define TONE_DURATION 50 // 50ms
|
15 | |
16 | // Function to generate tone
|
17 | void generateTone(int frequency, int duration) { |
18 | tone(buzzer, frequency, duration); // Generate tone with specified frequency and duration |
19 | delay(duration); // Wait for tone to finish playing |
20 | }
|
21 | |
22 | // Main code
|
23 | void loop() { |
24 | if (digitalRead(button) == HIGH) { // Check if button is pressed |
25 | digitalWrite(buzzer, LOW); // Turn off buzzer |
26 | } else { |
27 | generateTone(TONE_A, TONE_DURATION); // Generate tone A |
28 | generateTone(TONE_B, TONE_DURATION); // Generate tone B |
29 | }
|
30 | }
|
Sketch uses 2146 bytes (104%) of program storage space. Maximum is 2048 bytes. Global variables use 26 bytes (20%) of dynamic memory, leaving 102 bytes for local variables. Maximum is 128 bytes. Wie kommt es, dass Lothars Ton eigentlich gleich viele Zeilen hat und dennoch viel weniger Platz benötigt?
:
Bearbeitet durch Moderator
Lothar M. schrieb: > Mach bitte wie schon beschrieben die [c]-Tags um den Code. Und zwar genau auf die Art, wie es bechrieben wurde und über jeder Eingabebox steht. Auch mit dem Slash vor dem 'c'. Wenn du beim Programmieren die Anweisungen genauso sorgfältig beachtest, dann hast du einen steinigen Weg vor dir. Der Compiler stört sich nämlich an fehlenden Schrägstrichen. Alexander H. schrieb: > dass die I/Os nicht als 5/6 sondern 1/0 bezeichnet werden. PB0 und PB1 sind beim DIL8 Gehäuse am Pin5 und 6. Das steht im Datenblatt. In einem anderen Gehäuse können die an ganz anderen Pins sein, es bleiben aber PB0 und PB1.
:
Bearbeitet durch Moderator
Alexander H. schrieb: > Sketch uses 2146 bytes (104%) of program storage space. Maximum is 2048 > bytes. Eigentlich hat der ATtiny45 4096 Bytes Flash. Hast du eventuell den falschen Mikrocontroller in der IDE eingestellt oder die Hälfte davon mit einem veralteten Bootloader vergeudet? Mit was für einem USB Adapter programmierst du ihn?
:
Bearbeitet durch User
Ich kompiliere mit der Arduino IDE (board: Attiny25/45/85 IDE v.2.3.6) und schreibe dann die .hex per AVRDude auf den Attiny.
Nemopuk schrieb: > Hast du eventuell den > falschen Mikrocontroller in der IDE eingestellt Das wars! Danke. :) Aber dieser Code macht leider garnichts. :(
:
Bearbeitet durch User
Alexander H. schrieb: > Aber dieser Code macht leider garnichts. Der ATtiny Core von Damelli ist unvollständig. tone() ist dort nicht implementiert, kannst du nicht verwenden. Vielleicht geht es mit dem anderen Core, den ich dir vor einer Woche empfahl: Nemopuk schrieb: > Wenn du die Arduino IDE verwendest, wirst du das brauchen... Und lies dessen Dokumentation. Da steht nämlich, dass dessen tone() Implementierung nur auf Pin 1 und 4 (offenbar sind PB1 und PB4 gemeint) geht.
:
Bearbeitet durch User
Nemopuk schrieb: > Der ATtiny Core von Damelli ist unvollständig. tone() ist dort nicht > implementiert, kannst du nicht verwenden. > > Vielleicht geht es mit dem anderen Core, den ich dir vor einer Woche > empfahl Oder am allerbesten: Gleich ganz ohne Arduino-Gedöhns. Bei der konkreten Aufgabe hilft das nämlich eigentlich kein bissel. Eher im Gegenteil. Spätestens bei der vorlagengerechten Umsetzung von Beep2 wird es nämlich u.U. sogar etwas störend werden. Naja und dazu kommt natürlich noch: Ohne Arduino passt der Kram auch noch ganz locker in einen Tiny25. Na gut, das ist für den TO im Moment irrelevant, er hat ja einen Tiny45 zur Verfügung.
OK, also gibt es hier einige Möglichkeiten fürs Scheitern. ;) Mir fehlt halt noch das logische Verständnis (oder das Hintergrundwissen) dafür, wie Programme aussehen (zB. konkret ob und wie ich Codeteile aneinanderreihen kann). Lothars Ton ist ja klasse, den will ich auch gerne beibehalten. Hab den anderen Core dann noch nach deiner Empfehlung getetest, Code umgeschrieben und neu verdrahtet - kein Erfolg. Ich lasse jetzt erstmal alles hardwaremässig wie gehabt und versuche, das nötige Wissen nachzuholen. Ob S. schrieb: > Gleich ganz ohne Arduino-Gedöhns. Bei der konkreten > Aufgabe hilft das nämlich eigentlich kein bissel. Was wäre denn eine gute Alternative?
:
Bearbeitet durch User
Alexander H. schrieb: > Wie kommt es, dass Lothars Ton eigentlich gleich viele Zeilen hat und > dennoch viel weniger Platz benötigt? Ich verwende keine ausufernden Bibliotheken, die auch sonst noch alles Mögliche können könnten. Sondern ich bearbeite die Portpins direkt über bitweise Zugriffe. Diese Zeilen kann der Compiler super optimieren. Lies mal den Post dort im Beitrag "Re: Meinung zu dieser Produktidee?" ab der Mitte. Alexander H. schrieb: > Was wäre denn eine gute Alternative? Keine Arduino-Bibliotheken, sondern nur rudimentäre C-Funktionen verwenden. Mein Programm benötigt nur knapp 5% des Speicherplatzes eines ATTiny85. Aber es hat eben auch nicht solche Dinge wie einen Bootloader mit an Bord.
Alexander H. schrieb: > Mir fehlt halt noch das logische Verständnis (oder das > Hintergrundwissen) dafür, wie Programme aussehen (zB. konkret ob und wie > ich Codeteile aneinanderreihen kann). Das hättest du in der Zwischenzeit längst lernen können, indem du ein Lehrbuch liest, oder ein Tutorial durcharbeitest. Ich hatte dir vor einer Woche eine Webseite empfohlen, die neben Empfehlungen für IDEs und Programmieradapter auch ein Tutorial enthält. http://stefanfrings.de/mikrocontroller_buch/ Aber wie gesagt: Bücher aus Papier sind auch eine gute Erfindung. Ob S. schrieb: > Oder am allerbesten: Gleich ganz ohne Arduino-Gedöhns Dazu möchte ich ergänzen, dass du auch bei der Methode trotzdem die Arduino IDE benutzen kannst. Wenn dein Hauptprogramm anstelle von setup() und loop() eine main() Funktion enthält und auf Arduino-spezifische Bibliotheken verzichtet, dann kommt dabei ein "reines" C/C++ Programm heraus. Siehe angehängter Screenshot. Dort habe ich einfach einen kleinen C-Quelltext aus einem Tutorial in die Arduino IDE kopiert. Läuft. Ich schreibe das, weil die Arduino IDE für Anfänger erheblich angenehmer ist, als die IDE von Microchip mit ihren überwältigend vielen Menüpunkten und Konfigurations-Dialogen.
:
Bearbeitet durch User
Nach einigen Anläufen und Fehlschlägen funktioniert es nun wie es soll. Ich hab aber ein Delay von 1000ms beibehalten, weil es mit Pausen besser klingt. Nochmal eine Frage an Lothar zur Tonsequenz-Erzeugung: könnte ich einen Sweep (beep2) mit deiner Methode erzeugen? Wie genau berechnet man die erzeugte Frequenz (zB. "for (int i = 0; i < 100; i++) { // A: 2kHz, 50ms")? Vielleicht hat jemand so etwas schon mal gemacht und kann einen Tipp geben?
Hab jetzt was ausprobiert, das geht ungefähr in die Richtung.
1 | #include <avr/io.h > |
2 | #define F_CPU 16000000L |
3 | #include <util/delay.h> |
4 | |
5 | const int button_pin = 1; |
6 | |
7 | void A (void) { |
8 | for (int i = 0; i < 20; i++) { // A: 2kHz, 50ms |
9 | PORTB |= _BV(0); |
10 | _delay_us(5000); |
11 | PORTB &= ~_BV(0); |
12 | _delay_us(50); |
13 | } |
14 | } |
15 | |
16 | void B (void) { |
17 | for (int i = 0; i < 15; i++) { // B: 3k2Hz, 50ms |
18 | |
19 | PORTB |= _BV(0); |
20 | _delay_us(4000); |
21 | PORTB &= ~_BV(0); |
22 | _delay_us(40); |
23 | }[/c] |
24 | } |
25 | void C (void) { |
26 | for (int i = 0; i < 10; i++) { // B: 3k2Hz, 50ms |
27 | |
28 | PORTB |= _BV(0); |
29 | _delay_us(2500); |
30 | PORTB &= ~_BV(0); |
31 | _delay_us(30); |
32 | } |
33 | } |
34 | void D (void) { |
35 | for (int i = 0; i < 4; i++) { // B: 3k2Hz, 50ms |
36 | |
37 | PORTB |= _BV(0); |
38 | _delay_us(2200); |
39 | PORTB &= ~_BV(0); |
40 | _delay_us(20); |
41 | } |
42 | } |
43 | void E (void) { |
44 | for (int i = 0; i < 2; i++) { // B: 3k2Hz, 50ms |
45 | |
46 | PORTB |= _BV(0); |
47 | _delay_us(2000); |
48 | PORTB &= ~_BV(0); |
49 | _delay_us(50); |
50 | } |
51 | } |
52 | void setup() |
53 | { |
54 | // DDRB |=_BV(0); // Set as output |
55 | pinMode (0, OUTPUT); |
56 | pinMode(button_pin, INPUT_PULLUP); |
57 | } |
58 | |
59 | void loop() |
60 | { |
61 | int button = digitalRead(button_pin); |
62 | if (button == LOW) |
63 | { |
64 | // 50ms Ton an, 20ms Pause Tonfrequenz A: 2000Hz Tonfrequenz B: 3200Hz |
65 | // Die Sequenz ist: A,A,B,still,B,A Das ganze dauert 6*70ms = 420ms |
66 | A(); |
67 | _delay_ms(0); // kurze Pause |
68 | B(); |
69 | _delay_ms(0); // kurze Pause |
70 | C(); |
71 | _delay_ms(0); // kurze Pause |
72 | D(); |
73 | _delay_ms(0); // kurze Pause |
74 | E(); |
75 | _delay_ms(0); // kurze Pause |
76 | |
77 | |
78 | _delay_ms(3000); // wart mal ab... |
79 | } |
80 | _delay_ms(100); |
81 | } |
Aber es ist viel zu leise. Liegt das am Frequenzgang des Buzzers? Ich hoffe, dass man, indem man den Piepser an zwei Ausgänge schaltet noch etwas rausholen kann.
:
Bearbeitet durch User
Alexander H. schrieb: > #define F_CPU 16000000L Wo kommen die 16MHz her? > Aber es ist viel zu leise. Liegt das am Frequenzgang des Buzzers? Nö. Das liegt daran, dass das Programm ziemlicher Schwachsinn ist. Ganz offensichtlich ohne jedes Verständnis der Funktion zusammenkopiert. Deine Funktionen von A bis E erzeugen allesamt nicht wirklich den gewünschten Ton. Und schon garnicht mit der gewünschten Dauer (wenn man die Kommentare mal als Referenz dafür betrachtet, was jeweils gewünscht ist). Und das ist jedem mit auch nur andeutungsweisem Verständnis sofort klar, wenn man z.B. B() und C() vergleicht. Gleicher Wunsch, gleiche Programmstruktur, aber unterschiedliche Implementierung. Kann also unmöglich passen. Wenn überhaupt, könnte nur eine Implementierung passen, tatsächlich passt aber keine von beiden. Dazu kommt aber noch: du brauchst keine sechs Funktionen zur Tonerzeugung, sondern nur allerhöchstens drei, von denen eine nicht mal einen Ton erzeugt, sondern nur eine Notendauer lang nichts tut. Sinnvoller wäre aber, nur eine Funktion zur Tonerzeugung zu haben, der man mittels Parametern die gewünschte Frequenz, die Tondauer und die Pausendauer übergibt. Der Prototyp für diese Funktion könnte z.B. so aussehen: void Note(int Frequency_Hz, int ToneDuration_ms, int PauseDuration_ms); Diese Funktion muss dann vier Sachen tun: 1) Die halbe Periodenzeit für die gewünschte Frequenz ausrechnen 2) Ausrechnen, wieviel Perioden der Frequenz abzuspielen sind, um auf die Dauer der ToneDuration zu kommen. 3) Mit den beiden berechneten Werten die eigentliche Tonerzeugung durchführen. 4) Die gewünschte Pause erzeugen. Bei den Punkten 1) und 2) ist relativ viel zu rechnen (Integer-Divisionen). Da kommt es auf die Güte des Compilers an, ob er von allein erkennt, dass man das schon zur Compilezeit ausrechnen kann. Wenn nicht, muss man ihm ggf. Hilfestellung geben. Das Hauptprogramm würde dann sechs mal die Note()-Funktion aufrufen, etwa so: Note(2000, 50, 20); Note(2000, 50, 20); Note(3200, 50, 20); Note(0, 0, 70); //kein Ton, statt dessen: lange Pause Note(3200, 50, 20); Note(2000, 50, 20); Wobei natürlich noch zu berücksichtigen ist, dass da statt 3200 eigentlich 4000 stehen müsste. Aber das ist erstmal egal. Das ist dann schnell geändert, wenn das Programm erst mal korrekt funktioniert. Eine naive Implementierung von Note() könnte etwa so aussehen: void Note(int Frequency_Hz, int ToneDuration_ms, int PauseDuration_ms) { if (Frequency_Hz > 0 && ToneDuration > 0) { int period_us = 1000000L / Frequency_Hz; int periods = (1000 * ToneDuration) / period_us; int halfperiod_us = period_us / 2; for (int i = 0; i < periods; i++) { PORTB |= _BV(0); _delay_us(halfperiod_us); PORTB &= ~_BV(0); _delay_us(halfperiod_us); } } _delay_ms(PauseDuration); }
Alexander H. schrieb: > Aber es ist viel zu leise. Liegt das am... Du hast da mit den unterschiedlichen delay-Zeiten ein ganz schlechtes Tastverhältnis ins Spiel gebracht. Probierst mal mit 50:50 statt mit 100:1 Der Buzzer kann bei den kurzen 20..50us gar nicht viel Hub machen. Und der Hub ist letztlich die Lautstärke. Ich hatte ja schon gepostet, wie es richtig geht. Auch das mit den [c]-Tags...
:
Bearbeitet durch Moderator
Lothar M. schrieb: > Und > der Hub ist letztlich die Lautstärke. Das ist letztlich ein Trugschluß, denn für die Lautstärke ist die Membranschnelle verantwortlich. Natürlich bedingt eine schnellere Membran einen größeren Hub, da die Membran für einen Hubzyklus bei Frequenz x, Zeit 1/x braucht, und wenn sie sich die Zeit schneller bewegt, natürlich mehr Strecke zurücklegt. Aber am Ende ist es die Membranschnelle, die die Lautstärke bestimmt, darum brauchen Tieftöner auch mehr Hub als Hochtoner um auf die gleiche Lautstärke zu kommen. Aber eigentlich ist der größere Hub eine Folge der höheren Lautstärke und keine Ursache. Das ändert aber natüelich nichts an dem, was du zur Pulsweite gesagt hast.
:
Bearbeitet durch User
Alexander H. schrieb: > Aber es ist viel zu leise. Liegt das am Frequenzgang des Buzzers? Um welchen genau geht es? In dessen Datenblatt sollte ein Diagramm den Wirkungsgrad je nach Frequenz zeigen. > Ich hoffe, dass man, indem man den Piepser an zwei Ausgänge schaltet > noch etwas rausholen kann. Doppelte Spannung -> vierfache Leistung. Das Ohr reagiert logarithmisch auf Lautstärke.
:
Bearbeitet durch User
Nemopuk schrieb: [Brückenbetrieb] > Doppelte Spannung -> vierfache Leistung. Das Ohr reagiert logarithmisch > auf Lautstärke. Ja. Effektiv kann man also durch diese Massnahme nur etwa mit dem Eindruck doppelter Lautstärke rechnen.
SAB0600 ist speziell für 3 Klang Gong, das müsste auch mit 5V funktionieren, habs aber selber noch net probiert...
Kurt schrieb: > SAB0600 ist speziell für 3 Klang Gong, .. und wird von Siemens noch aktiv gefertigt?
Manfred P. schrieb: > und wird von Siemens noch aktiv gefertigt? Vielleicht nimmer gefertigt, aber gibts immer noch zu kaufen. Hab erst vor ein paar Wochen 2 Stück bestellt und auch bekommen...
Nemopuk schrieb: > Doppelte Spannung -> vierfache Leistung. Das Ohr reagiert logarithmisch > auf Lautstärke. nur in der grauen Theorie, bei Autoradios wurde effektiv nur die 3-fache Leistung erreicht.
Ich hab jetzt den Buzzer-Ausgang auf PB0 und PB1 ans Laufen bekommen. Es ist definitiv ein bisschen lauter. An PB0/PB1 waren jeweils 39 Ohm erforderlich, sonst geht der Attiny scheinbar in die Strombegrenzung. Aber leider wird der Ton (ich gebs zu, nicht ansatzweise wie beep2) immer im Loop abgespielt, auch wenn kein LOW mehr am Eingang anliegt. Was mache ich falsch?
1 | #include <avr/io.h > |
2 | #define F_CPU 16000000L
|
3 | #include <util/delay.h> |
4 | |
5 | const int button_pin = 2; |
6 | |
7 | void A (void) { |
8 | for (int i = 0; i < 20; i++) { // A: 2kHz, 50ms |
9 | PORTB = 0x01; |
10 | _delay_us(3000); |
11 | PORTB = 0x02; |
12 | _delay_us(3000); |
13 | |
14 | DDRB = 0x03; // B1 und B0 werden im Gegentakt aktiviert |
15 | }
|
16 | }
|
17 | |
18 | void B (void) { |
19 | for (int i = 0; i < 20; i++) { // B: 3k2Hz, 50ms |
20 | |
21 | PORTB = 0x01; |
22 | _delay_us(2900); |
23 | PORTB = 0x02; |
24 | _delay_us(2900); |
25 | |
26 | DDRB = 0x03; // B1 und B0 werden im Gegentakt aktiviert |
27 | }
|
28 | }
|
29 | void C (void) { |
30 | for (int i = 0; i < 10; i++) { // B: 3k2Hz, 50ms |
31 | |
32 | PORTB = 0x01; |
33 | _delay_us(2800); |
34 | PORTB = 0x02; |
35 | _delay_us(2800); |
36 | |
37 | DDRB = 0x03; // B1 und B0 werden im Gegentakt aktiviert |
38 | }
|
39 | |
40 | }
|
41 | void setup() |
42 | {
|
43 | // DDRB |= 0x03; // Set as output
|
44 | |
45 | pinMode(button_pin, INPUT_PULLUP); |
46 | }
|
47 | |
48 | void loop() |
49 | {
|
50 | int button = digitalRead(button_pin); |
51 | if (button == LOW) |
52 | {
|
53 | // 50ms Ton an, 20ms Pause Tonfrequenz A: 2000Hz Tonfrequenz B: 3200Hz
|
54 | // Die Sequenz ist: A,A,B,still,B,A Das ganze dauert 6*70ms = 420ms
|
55 | A(); |
56 | _delay_ms(0); // kurze Pause |
57 | B(); |
58 | _delay_ms(0); // kurze Pause |
59 | C(); |
60 | _delay_ms(0); // kurze Pause |
61 | |
62 | |
63 | _delay_ms(3000); // wart mal ab... |
64 | }
|
65 | _delay_ms(100); |
66 | }
|
:
Bearbeitet durch User
Alexander H. schrieb: > sonst geht der Attiny > scheinbar in die Strombegrenzung. Du kannst dessen Ausgänge kurzschließen, ohne dass die Funktion des Mikrocontrollers beeinträchtigt wird (nur nicht zu viele gleichzeitig). Wenn es bei dir nur mit einem Widerstand vor dem Schallwandler funktioniert, dann taugt deine Stromversorgung nicht. Zeige mal Fotos vom Aufbau.
:
Bearbeitet durch User
Alexander H. schrieb: > An PB0/PB1 waren jeweils 39 Ohm erforderlich, sonst geht der Attiny > scheinbar in die Strombegrenzung. Garantiert geht der nicht in irgendeine "Strombegrenzung", denn sowas hat dessen Pintreiber gar nicht eingabaut. Der Ausgang ist nach meinen Erfahrungen für gefühlt endlose Zeit kurzschlussfest (Pin gegen Masse und Pin gegen Vcc und auch 2 Pins gegeneinenader) weil die Mostfet dort drin "hinreichend" hochohmig sind. Du hast da andere Effekte. Ich fände es unheimlich hilfreich, wenn wir nach 3 Wochen so langsam mal wüssten, was du da überhaupt für einen "Buzzer" vor dir hast. Ein Foto (mit Lineal) und eine Widerstandsmessung wären da sicher hilfreich. Und natürlich wäre es auch nicht schlecht, wenn du gleich den ganzen Aufbau samt Stromversorgungn mitfotografieren würdest, wenn du schon mal dabei bist.
Nemopuk schrieb: > Alexander H. schrieb: >> sonst geht der Attiny >> scheinbar in die Strombegrenzung. > > Du kannst dessen Ausgänge kurzschließen, ohne dass die Funktion des > Mikrocontrollers beeinträchtigt wird (nur nicht zu viele gleichzeitig). > Wenn es bei dir nur mit einem Widerstand vor dem Schallwandler > funktioniert, dann taugt deine Stromversorgung nicht. Zeige mal Fotos > vom Aufbau. Ja, das wird es sein. Ich hab einen AVRisp mkII mit einem Schalter umgebaut (5V USB Spannung des Programmers auf Vcc am ISP Stecker). Mein Buzzer: https://cdn-reichelt.de/documents/datenblatt/A900/CEM-1203.pdf
Alexander H. schrieb: > Ich hab das Gelesene nicht verstanden und immer noch keine Bilder geliefert!
Alexander H. schrieb: > Mein Buzzer: > https://cdn-reichelt.de/documents/datenblatt/A900/CEM-1203.pdf Da sieht man unterhalb 2kHz einen erheblichen Abfall des Schallpegels, dieser Signalgeber hat da einen Resonanzbereich. Und die Daten sagen auch, ihn nicht oberhalb 5 Volt zu betreiben. Er scheint mir für Deine Anwendung nur begrenzt geeignet. Schaue nach Lautsprecherchen aus Schnurlostelefonen, Pollin sollte sowas haben. Die sind breibandiger, aber auch deutlich größer.
Alexander H. schrieb: > void C (void) { > for (int i = 0; i < 10; i++) { // B: 3k2Hz, 50ms > PORTB = 0x01; > _delay_us(2800); > PORTB = 0x02; > _delay_us(2800); > DDRB = 0x03; // B1 und B0 werden im Gegentakt aktiviert > } > > } Ich meld' mich auch mal zu Wort (wollte mich eigentlich raushalten). Alexander, erklär mir mal bitte schritt für Schritt, was diese (von mir zitierte) Funktion Zeile für Zeile macht. Danach erkläre auch ich Dir, was die einzelnen Programmzeilen bewirken und Du kannst überlegen, was Du dort ändern kannst, damit sich nun endlich die gewünschte Funktion einstellt. Solltest Du hier noch Fragen haben, erklär' ich Dir gern, was GENAU zu tun ist und auch warum. Du kannst nicht einfach - auf gut Glück - irgendwas zusammenkopieren, ohne zu wissen, was Du da tust. Also: klar, kannst Du, machst Du ja auch; wird dann halt nur nie fertig. Und beim nächsten Mal fragste wieder.
Manfred P. schrieb: > Alexander H. schrieb: >> Mein Buzzer: >> https://cdn-reichelt.de/documents/datenblatt/A900/CEM-1203.pdf > > Da sieht man unterhalb 2kHz einen erheblichen Abfall des Schallpegels, > dieser Signalgeber hat da einen Resonanzbereich. Und die Daten sagen > auch, ihn nicht oberhalb 5 Volt zu betreiben. Er scheint mir für Deine > Anwendung nur begrenzt geeignet. > > Schaue nach Lautsprecherchen aus Schnurlostelefonen, Pollin sollte sowas > haben. Die sind breibandiger, aber auch deutlich größer. Im Bereich von 2500–3500 Hz liegen keine Grundfrequenzen typischer Tonleitern (z. B. C-Dur). Der Bereich von 2500–3500 Hz enthält keine Grundtöne und ist daher auch nicht sinnvoll zu verwenden. wie ich schon mehrmals anmerkte, ein Piepser bleibt ein Piepser.
Alexander H. schrieb: > Ich hab jetzt den Buzzer-Ausgang auf PB0 und PB1 ans Laufen bekommen. > Es ist definitiv ein bisschen lauter. > An PB0/PB1 waren jeweils 39 Ohm erforderlich, sonst geht der Attiny > scheinbar in die Strombegrenzung. Die Membranen (Metllplätchen) sind mechanisch vorgespannt (Dauermagnet). Die Ansteuerung mit Wechselstrom bringt da ähnlich "viel", wie eine Z-Diode in Serie zur Freilaufdiode zu verbauen. Ich würde auch nichts an der Frequenz modulieren, nur das Tastverhältnis. Damit lässt sich sogar Sprache "verständlich" ausgeben. Hat Rolf-Dieter Klein, schon ende der 70er gezeigt. :)
Teo D. schrieb: ... > Die Membranen (Metllplätchen) sind mechanisch vorgespannt (Dauermagnet). > Die Ansteuerung mit Wechselstrom bringt da ähnlich "viel", wie eine > Z-Diode in Serie zur Freilaufdiode zu verbauen. > Ich würde auch nichts an der Frequenz modulieren, nur das > Tastverhältnis. Damit lässt sich sogar Sprache "verständlich" ausgeben. > Hat Rolf-Dieter Klein, schon ende der 70er gezeigt. :) Das konnte man auch mit 2 kiloohm Kopfhörern aus dem 1. WK schon, siehe hier: https://de.wikipedia.org/wiki/Datei:Detektor-Kopfhoerer.png.
1 | void C (void) { |
2 | DDRB |= (1<<DDB1)|(1<<DDB0); //1x PortB0 und B1 als Ausgang, andere Portpins unberührt |
3 | for (int i = 0; i < 10; i++) { // (B: 3k2Hz, 50ms) 3.2kHz, 50ms? |
4 | PORTB = 0x01; //2800µsek POTB0 auf High, PORTB1 auf LOW |
5 | _delay_us(2800); |
6 | PORTB = 0x02; //2800µsek POTB1 auf High, PORTB0 auf LOW |
7 | _delay_us(2800); |
8 | } //das ganze zehn mal |
9 | DDRB ~= (1<<DDB1)|(1<<DDB0); // 1x am Ende nach der Schleife Portpins 0,1 vom PORTB wieder auf Eingang |
10 | }
|
Was Du mit den anderen Portpins machst, weiss ich gerade nicht; besser ist es, diese nicht anzufassen. Hier sicher nicht weiter tragisch; man kann durchaus mit 0x01, 0x02 und 0x00 hantieren. Aber es kann auch anders kommen. Zu Deiner Ausgabefrequenz:
1 | (2800µs EIN + 2800µs AUS) = 5600µs Periodendauer |
Frequenz wäre demnach:
1 | 1 / 5600E-6 = 178.5 Hertz |
weit weg von 3200 Hz Dauer des Tones:
1 | (2800µs EIN + 2800µs AUS) * 10 = 0.056 = 56ms |
Zu bemerken sei vielleicht noch, dass der Buzzer am liebsten bei 2Khz herum spielen mag. Muss mit der Geometrie des Aufbaus zusammenhängen. Jedenfalls sagt das das Datenblatt, welches Du freundlicherweise verlinkt hast. Jetzt wäre noch zu klären, ob dein Eingangspin dauerhaft auf LOW liget und er solange dudeln soll, oder ob du einen Triggerimpuls hast, der die Tonausgabe starten soll und diese Folge dann einmal abspielt. (Ich hoffe, ich hab mich nicht verrechnet und blamiere mich hier ;), vieles wurde ja auch schon richtig angedeutet und bemerkt) EDIT: ODER eingefügt
:
Bearbeitet durch User
Beep.mp3 (33,8 KB) audacity vorgeworfen und die zeitskala angepasst
:
Bearbeitet durch User
Esmu P. schrieb: > Beep.mp3 (33,8 KB) audacity vorgeworfen und die zeitskala > angepasst Und das Forum mit einem weiteren Megabyte voelliger Redundanz geflutet.
Dergute W. schrieb: > Esmu P. schrieb: >> Beep.mp3 (33,8 KB) audacity vorgeworfen und die zeitskala >> angepasst > > Und das Forum mit einem weiteren Megabyte voelliger Redundanz geflutet. Damit kann jeder hören was der TS hören wollte...
:
Bearbeitet durch User
Teo D. schrieb: > Die Membranen (Metllplätchen) sind mechanisch vorgespannt (Dauermagnet). Ja. Und? > Die Ansteuerung mit Wechselstrom bringt da ähnlich "viel", wie eine > Z-Diode in Serie zur Freilaufdiode zu verbauen. Unsinn. Wenn (mal angenommen) das Ziel wäre, AC möglichst gut wiederzugeben, dann ist der Trick einfach, die Membrane während der Wiedergabe halt vom Anschlag fernzuhalten. Das macht man ganz einfach durch das passende Tastverhältnis der Ansteuerung. Aber: Das Ziel war hier eben NICHT, AC möglichst gut wiederzugeben, sondern den Höreindruck einer existierenden Vorlage möglichst gut nachzuempfinden. Und auch das Ziel dieser Vorlage war es offensichtlich schon NICHT, AC möglichst gut wiederzugeben. Die hörbaren Artefakte sprechen eindeutig dagegen. D.h.: Dein Beitrag geht zu 100% am Thema vorbei. Sechs, setzen.
Ob S. schrieb: ... > > D.h.: Dein Beitrag geht zu 100% am Thema vorbei. Sechs, setzen. gilt nur für dich
Alexander H. schrieb: > Mein Buzzer: > https://cdn-reichelt.de/documents/datenblatt/A900/CEM-1203.pdf Na endlich, jetzt kann ich eine deiner vorherigen Fragen beantworten: Alexander H. schrieb: > Aber es ist viel zu leise. Liegt das am Frequenzgang des Buzzers? Nach deiner Doku arbeitest du mit 2000 und 3200 Hz. 2000 Hz entspricht der Nennfrequenz des Schallwandler, und 3200 Hz kann er Laut Diagramm sogar noch besser wiedergeben. Wurde alles schon gesagt, nur noch nicht von jedem :-)
:
Bearbeitet durch User
Nemopuk schrieb: ... > Nach deiner Doku arbeitest du mit 2000 und 3200 Hz. ... Nein, er wünscht sich das nur...
Was für ein Aufwand für 6 Töne. Puhh ich glaub da hätte ich mir einfach ein fertiges mp3 Modul aus China bestellt und dann die Datei aus dem ersten Post aufgespielt.
Jens M. schrieb: > Was für ein Aufwand für 6 Töne. Puhh ich glaub da hätte ich mir > einfach > ein fertiges mp3 Modul aus China bestellt und dann die Datei aus dem > ersten Post aufgespielt. Ja, und die war eben Murks...
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.