In einer bestehenden Anwendung sitzen 16 NF- Oszillatoren die mit einer positiven Flanke für 2ms eingeschaltet werden. Jeder Oszillator für sich, dh. im Grenzfall sind alle Oszillatoren an oder nur einige. Um diesen Aufwand zu reduzieren, dachte ich an eine uC Lösung. Irgend welche Ideen ? Gruß Uwe
Um welchen Frequenzbereich handelt es sich bei deiner Anwendung denn und wie hoch sind deine Ansprüche an die Genauigkeit der Frequenz? Wie ist das Spannungsniveau? Sind die Oszillatoren einzeln in ihrer Frequenz einstellbar, oder haben sie alle feste Frequenzen? Sind diese Frequenzen irgendwie voneinander abhängig (z.B. f2 = f1 + x; f3 = f2 + x), gibt es also eine mathematische Beziehung zwischen den Frequenzen? Und die wichtigste Frage: Warum soll das bestehende System ersetzt werden? (Never change a running system) Schöne Grüße, Alex
Naja. Die 2ms setzen 500Hz als untere Grenze. Eine Sinustabelle im Stil eines DDS mit 20us auslesen. Mit den Werten 2 Octal DACs ansteuern.
Klingt nach 16-QAM Modulation. Entsprechende ICs sollte Google zu Tage fördern.
Hallo Alex und Mitleser, ich möchte etwas mehr erklären. Bisheriger Zustand. Mit 17 Stück (!) ATiny13 werden Impulse von verschiedener Länge, Dauer und Wiederholzeiten erzeugt und mit einer LED zur Kontrolle angezeigt. Akustisch werden diese Impulse mit der folgenden Schaltung hörbar gemacht. Die unterschiedlich langen Impulse gelangen auf einen Monoflop der die Länge der NF- Frequenz festlegt.Die Tonhöhe wurde so festgelegt, das ein Zusammenhang zwischen der originalen Impulsdauer besteht ( Langer Eingangsimpuls tiefe Freq.- kurzer Impuls hohe Frequenz) Die Höhe der Frequenz spielt keine Rolle. Die Monoflops sind MOS 4098 und die Oszillatoren NAND 4093. (Gesamtaufwand 17 ATiny13; 9 x 4098 und 5 x 4093) Gewiss die Sache läuft, aber ..... Gruß Uwe
Leider verstehe ich die "Problemstellung" nicht :-( Mir ist noch immer nicht klar, was da überhaupt passieren soll bzw. wozu die "Schaltung" dient...
Ich bin mir 100% sicher, dass das mit der richtigen Software auf 1 uC zu schaffen ist. > Gewiss die Sache läuft, aber ..... Was ist das für eine Sache? Welche Eingangssignale hast du? Welche Ausgangssignale willst du? Was soll das Ganze tun? > Mit 17 Stück (!) ATiny13 werden Impulse von verschiedener Länge, Dauer > und Wiederholzeiten erzeugt und mit einer LED zur Kontrolle angezeigt. Zahlen, bitte... > Die Höhe der Frequenz spielt keine Rolle. Also z.B. auch 10mHz bis 2000mHz? Oder gar 10MHz bis 1000MHz? Auch hier: exaktere Zahlen, bitte...
Lothar Miller schrieb: > Oder gar 10MHz bis 1000MHz? Das deckt sich nicht mit dem OP gleich der erste Satz: Uwe W. schrieb: > In einer bestehenden Anwendung sitzen 16 NF- Oszillatoren frank
frank schrieb: > Das deckt sich nicht mit dem OP gleich der erste Satz: > Uwe W. schrieb: >> In einer bestehenden Anwendung sitzen 16 NF- Oszillatoren Das ist mir schon klar, aber er wurde gebeten, das nochmal genauer zu spezifizieren, und es kam dabei nur heraus, dass irgendeine unwichtige Frequenz erzeugt werden soll. BTW: was ist Ultraschall? In der Medizin geht dessen Frequenz hoch bis 50MHz...
Lothar Miller schrieb: > Das ist mir schon klar, aber er wurde gebeten, das nochmal genauer zu > spezifizieren, Bitteschön: Uwe W. schrieb: > Akustisch werden diese Impulse mit der folgenden Schaltung hörbar > gemacht. 50MHz kann ich nicht hören;-) frank
@Uwe W Mann oh Mann, was ist denn so schwierig daran, sich klar und verständlich aus zu drücken ?? Ich habe die Aufgabenstellung so verstanden: Es soll eine einer Impulslänge proportionalen Frequenz ausgegeben werden ? Dabei soll die erzeugte Frequenz für den Menschen hörbar sein Ob das jetzt 1 mal, 5 mal oder 16 mal passieren soll ist doch so etwas von völlig egal ! Wichtig ist nur zu wissen: Wie lange ist der aus zu wertende Impuls minimal und maximal ? Und wie hoch ist die zugehörige Frequenz ? Davon abhängig ist das Ganze mit einem µC oder eben mit 16 µC lösbar. ... ulli-b
Hallo Uli und Mitleser, siehe Blockschaltbild http://www.mydarc.de/dk1kq/Sehkarte.jpg Die Kernfrage ist doch, ob es eine uC Lösung geben kann bei der man mit einem Controller ( oder mehreren -- Preisfrage) alle Funktionsforderungen erfüllen kann. Dies sind bisher 16 ATtiny zur Takterzeugung und 9 Monoflops (4098) sowie 5 NAND (4093). Alleine für die Tonerzeugung werden nach meinen Überlegungen 16 Timer benötig ganz zu schweigen von der Erzeugung der Impulse, die bisher jeweils ein Attiny erledigt hat. Somit komme ich zu den Timerfunktionen: 16 x Takterzeugung 16 x Monoflop 16 x NF- Signal (Burst mit optionalem Decay) Könnte mir vorstellen, dass man nach wie vor für jeden Kanal einen Controller verwendet, der allerdings 3 Timer enthalten müsste. Die direkte Ansteuerung eines Piezo wäre möglich, doch diese arbeiten mehr oder weniger auf einer Frequenz, sodaß die einzelnen Kanäle rein akustisch nicht auseinander gehalten werden können. Denkanstöße willkommen Uwe
> siehe Blockschaltbild Offenbar ist auf dem Bild ein möglicher Lösungsweg beschrieben, aber nicht die eigentliche Aufgabe, denn auch die 2ms aus dem ersten Post kann ich nicht mehr finden: >>>> Oszillatoren die mit einer ... Flanke für 2ms eingeschaltet werden. Ulli B. schrieb: > Wichtig ist nur zu wissen: > Wie lange ist der aus zu wertende Impuls minimal und maximal ? > Und wie hoch ist die zugehörige Frequenz ? Insbesondere frage ich mich: Woher kommen die Impulse? Ich konnte diese Fragen aus dem geposteten Bild leider nicht schlüssig beantworten. Ich fasse mal zusammen, wie ich die Aufgabe sehe: Es gibt 16 Eingänge, an denen irgendwelche Pulse hereinkommen, und 1 Ausgang, an dem ein Lautsprecher angeschlossen ist. In diesem Lautsprecher sind Töne zu hören, deren Tonhöhe zu der ursprünglichen Impulsdauer in Beziehung steht.
@ Uwe W. (uwel) >siehe Blockschaltbild http://www.mydarc.de/dk1kq/Sehkarte.jpg Was denn nun? In deinem ersten Posting erzählst du was von 2ms, jetzt plötzlich 500ms pro Puls. >Die Kernfrage ist doch, ob es eine uC Lösung geben kann bei der man mit >einem Controller ( oder mehreren -- Preisfrage) alle >Funktionsforderungen erfüllen kann. Dies sind bisher 16 ATtiny zur >Takterzeugung und 9 Monoflops (4098) sowie 5 NAND (4093). >Alleine für die Tonerzeugung werden nach meinen Überlegungen 16 Timer >benötig Nöö, man nimmt EINEN Timer und erzeugt damit ALLE Töne. Prinzip der DDS, kann man bei den niedrigen Frequenzen noch per Software erschlagen. > ganz zu schweigen von der Erzeugung der Impulse, die bisher >jeweils ein Attiny erledigt hat. Das kann EIN AVR locker für alle Kanäle machen, incl. Monoflopfunktion. Die Zeiten sind ja riesig. >Könnte mir vorstellen, dass man nach wie vor für jeden Kanal einen >Controller verwendet, der allerdings 3 Timer enthalten müsste. Kann man, ist aber immer noch Overkill^3. >Die direkte Ansteuerung eines Piezo wäre möglich, doch diese arbeiten >mehr oder weniger auf einer Frequenz, sodaß die einzelnen Kanäle rein >akustisch nicht auseinander gehalten werden können. ?? Wie werden sie denn jetzt angesteuert? MFG Falk
> Alleine für die Tonerzeugung werden nach meinen Überlegungen 16 Timer > benötig ganz zu schweigen von der Erzeugung der Impulse, die bisher > jeweils ein Attiny erledigt hat. > Somit komme ich zu den Timerfunktionen: > 16 x Takterzeugung > 16 x Monoflop > 16 x NF- Signal (Burst mit optionalem Decay) Eventuell ist der P8X32 (Propeller) von Parallax für die Aufgabe eine Betrachtung wert, denn er besitzt pro COG (RISC-Subsystem) je 2 32bit-Timer (also insgesamt 16 frei nutzbare 32bit-Timer!) und 32 I/O-Ports (28 oder 30 nutzbar). Mit den acht Prozessoren im Chip könnte man eventuell die restlichen Aufgaben gut in Assembler realisieren. Chip gibts im löt- und experimentierfreudigen DIP40. Hab aber jetzt nicht wirklich verstanden, was da genau we funktionieren soll... Datenblatt: http://www.parallax.com/Portals/0/Downloads/docs/prod/prop/PropellerDatasheet-v1.2.pdf
Ich versteh nicht, was daran jetzt so schwierig ist zu sagen: Ich muss NF-Frequenzen erzeugen und zwar von xy Hz bis xyz Hz Kurvenform: Sinusschwingung, Rechteck oder Dreieck (nichtzutreffendes streichen) Die Frequenz wird durch die Pulslänge eines Eingabepulses bestimmt. Diese Pulslänge bewegt sich im Bereich ab ms bis gh ms. Einstellbar an der ganzen Sache sollen sein die Parameter uvw und rst Und das ganze wird 16 mal benötigt. Geht das zb mit einem Mega16 bei ghi Mhz taktfrequenz? Was ist so schwer daran, mal Klartext zu reden, alle Parameter aus der Aufgabenstellung so zu nennen wie sie sind und nicht immer nur um den heißen Brei mit einer Lösungsidee im Hinterkopf herumzureden.
Hallo uwel, das ist ja wirklich ganz bescheiden, wie Du uns hier mit Infobroeckchen versorgst und dann eine sinnvolle ANtwort erwartest. Karl-Heinz schreibt: > Die Frequenz wird durch die Pulslänge eines Eingabepulses bestimmt. > Diese Pulslänge bewegt sich im Bereich ab ms bis gh ms. Das hattest Du oben auch erwaehnt, widerspricht sich aber damit dass die 4093 laut Deiner Beschreibung nur je eine feste Frequenz erzeugen. Machen die ATinys denn noch was sinnvolles ausser Impulse zu erzeugen? Werden diese Impulse noch fuer was anderes benutzt? > Was ist so schwer daran, mal Klartext zu reden, alle Parameter aus der > Aufgabenstellung so zu nennen wie sie sind und nicht immer nur um den > heißen Brei mit einer Lösungsidee im Hinterkopf herumzureden. Tja, dann gebe ich Dir hier die ANtwort auf die Kernfrage: Frage: "Irgend welche Ideen ?" Antwort: "JA!" Gruss Michael @Karlheinz: Vielleicht sollten wir uns angewoehnen, die Fragesteller nicht zwanzigmal aufzufordern, ihre Fragen richtig zu stellen, sondern genauso zu antworten, wie die Fragen gestellt werden ;-)
An Alle, 1. Wenn ich eine Lösung hätte, würde ich nicht fragen Ich versuche "nicht um den heißen Brei herumzureden" sondern mit meiner Fragerei einen Lösungsweg herauszufinden. Es könnte ja sein, dass jemand im Forum anhand meiner vorgestellten Parameter sagen kann - mit welchem Controller dies zu bewältigen ist. Bisher kann ich einkreisen, dass ein Controller benötigt wird der eine Menge Ports hat und etliche Timer um all diese Schaltfunktionen durchzuführen. 2. zu 2ms - war ein Tippfehler 3. Mit Blockschaltbild versuche ich alle Funktionen zu erklären. Daraus sollte eigentlich ersichtlich sein, dass die Impulse aus einem Attiny 13 heraus kommen. Jeder Kanal ! Aus dem Impulsdiagramm ( ein Kanal ) ist zu entnehmen, wie Breit diese Impulse sind. Da diese unterschiedliche Länge haben, werden alle Impulse auf , wie im Diagramm zu sehen ist, auf 500ms gekürzt. Das macht der Monoflop. ( in etwa, die Zeit ist nicht so wichtig -- der erzeugte Ton soll nur gut hörbar sein, also nicht zu kurz , und nicht nervig lang) Der NF-Generator wird mit den 500ms Impulsen angesteuert und erzeugt während dieser Zeit ein NF- Signal. Die Frequenz des NF- Signal ist von unter geordneter Bedeutung. Sie steht nur zur akustischen Identifizierung des jeweiligen Kanals ( einer aus 16) So könnte der Kanal 1 z.B 260Hz sein und Kanal 500Hz. Die exakte Frequenz nach einer chromatischen Tonleiter ist nicht ein Muß. ( wurde bisher pi mal Daumen eingestellt ) Danke für den Hinweis zum Propeller. Das werde ich mir einmal näher ansehen. mfg Uwe
@ Uwe W. (uwel) >Aus dem Impulsdiagramm ( ein Kanal ) ist zu entnehmen, wie Breit diese >Impulse sind. Da diese unterschiedliche Länge haben, werden alle Impulse >auf , wie im Diagramm zu sehen ist, auf 500ms gekürzt. Das macht der >Monoflop. Naja, für 16 Bit = 16 Ausgänge ein derartiges Bitmuster zu erzeugen ist für einen AVR ein Klacks, der stirbt an Langeweile ;-). EIN Timer, ein paar Tabellen, fertig. >Der NF-Generator wird mit den 500ms Impulsen angesteuert und erzeugt >während dieser Zeit ein NF- Signal. Naja, 16 verschiedene NF-Signale, genauer, Rechtecksignale zwischen 200-2000 Hz zu erzeugen ist auch machbar, das Stichwort DDS fiel schon. Ok, ein bisschen Nachdenken und gute Programmierung braucht man schon, aber das ist OK. Ein AVR mit ausreichend IOs, sprich >16, sollte reichen, also der Standardtyp ATmega8 im DIL28 oder meinetwegen ein ATmega16 im DIL40. Und wieder ein IC Grab weniger auf dieser Welt ;-) MfG Falk
@Uwe W. also kann es auch vorkommen, das mehrere Impulse gleichzeitig reinkommen? - Was dann bedeuten würde, das max. 16 verschiedene Frequenzen gleichzeitig ausgegeben werden müssten? Sascha
Uwe W. schrieb: > Da diese unterschiedliche Länge haben, werden alle Impulse > auf , wie im Diagramm zu sehen ist, auf 500ms gekürzt. Das macht der > Monoflop. Bitte noch ein (Salami-)Scheibchen Information: Welcher Teil der Impulse ist signifikant? Der High-Pegel, der Low-Pegel oder der Abstand zwischen 2 steigenden oder fallenden Flanken? > So könnte der Kanal 1 z.B 260Hz sein und Kanal 500Hz. Ich kapiere es immer noch nicht... :-( Ursprünglich sollte irgendwas mit der Eingangsimplusdauer korrelieren, jetzt soll blos einer der beliebig langen Impulse in irgendeine andere, aber konstante, hörbare Frequenz umgewandelt werden. Deine Afgaben sind offenbar: 1) 16 x Erkennen einer Flanke 2) Ausgabe eines 500ms langen Tons abhängig vom Eingang, an dem die Flanke erkannt wurde Was noch zu beantworten ist: können mehrere der Eingänge gleichzeitig einen Impuls bekommen? Müssen dann mehrere unterschiedliche Töne gleichzeitig ausgegeben werden? BTW: Dir ist schon klar, dass du (auch einfache) Aufgaben nicht leicht verständlich beschreiben kannst?
>ein derartiges Bitmuster zu erzeugen ist >für einen AVR ein Klacks, der stirbt an Langeweile ;-). >EIN Timer, ein paar Tabellen, fertig. Wie ich die "Aufgabenstellung" bisher verstanden habe stimme ich dem völlig zu. >Ein AVR mit ausreichend IOs, sprich >16, sollte reichen Da bin ich mir nicht so sicher, ich habe NOCH IMMER NICHT verstanden, an welcher Stelle entschieden wird, welcher der Ausgangskanäle nun angesteuert wird... (Es sind 17 Ausgangskanäle, richtig?) Gibt es nur 1 Eingang oder 17? >Danke für den Hinweis zum Propeller. Das werde ich mir einmal näher >ansehen. Schau dir bei der Gelegenheit auch mal den Cray CX1 an, der erfüllt die Anforderungen vermutl. auch ;-) Viele Grüße, Alex
Ich hab das Ganze mal fix skizziert, in C. So sollte es vermutlich das machen, was der OP will. Eine Tabelle für das Ton ON/OFF Muster im 500ms Raster, eine für die Töne, Ausgabefrequenz 10 kHz. Eigentlich zu einfach, wenn man drüber nachdenkt ;-) MFG Falk
Ok, kleiner Lapsus, die Zeile
1 | if (cnt==20) { |
Sollte eher so heißen, hab da mit 500Hz statt 500ms gerechnet :-0
1 | if (cnt==5000) { |
Ja, aber wenn der OP noch nicht mal die gewuenschte Funktion eindeutig beschreiben kann, hilft die ganze Rumraterei nichts.... doch Gast
Hallo Falk, Alex und Mitleser, oh- so langsam schält sich ja eine Lösung heraus. Ihr müsst Euch vorstellen, dass, wie im Blockschaltbild gezeigt, es sich um getrennte ( ! ) völlig unabhängige Kanäle handelt, die wiederum die einzelnen Tongeneratoren ansteuern sollen. Ein zeitlicher Zusammenhang zu den Kanälen untereinander wäre nicht erwünscht. An Falk: mit C habe ich (noch) nicht programmiert -- deshalb die Frage, für welchen Controller es gedacht ist. Alex: Das Handbuch zum "Propeller" habe ich einmal quer gelesen, doch ist mir nicht ganz klar geworden, wie man die einzelnen COG getrennt anspricht. Habe nach wie vor zig Fragen und es wäre viel einfacher, wenn man sich über das Internet austauschen könnte. Werde in den nächsten Tagen einmal ein Schaltbild eines Kanals zeigen. Mitleser: Bitte seht Euch das Blockschaltbild mit Impulsdiagramm an, dann braucht ihr nicht geraten raten, wie das Ding funktioniert mfg Uwe
Uwe W. schrieb: > > Mitleser: > Bitte seht Euch das Blockschaltbild mit Impulsdiagramm an, dann braucht > ihr nicht geraten raten, wie das Ding funktioniert Pfeif drauf. Wir hätten gerne von dir eine ordentliche Beschreibung des geforderten. Mit allen relevanten Daten. Es ist dein Projekt, also mach du dir die Mühe und such aus den Diagrammen die relevante Information heraus. PS: Du scheinst immer noch auf dem Zug zu sein, dass du für jeden Kanal einen eigenen Timer brauchst. Dem ist nicht so. Bei deinen Grunddaten macht das ein einziger Timer mit links und dabei langweilt sich der µC noch. Und ich rede nicht vom Propeller. Ich denke übrigens, dass 32 I/O Pins benötigt werden. 16 für die Kanaleingänge, 16 für die Tonausgänge. Also irgendwas Mega16 aufwärts. > 1. Wenn ich eine Lösung hätte, würde ich nicht fragen Es geht nicht darum, dass wir von dir eine Lösung oder Lösungsidee haben wollen. Es geht darum dass wir von dir ein ordentliches Anforderungsprofil haben wollen. Das ist doch nicht zuviel verlangt. Viele von uns sind nämlich gebrannte Kinder. Da wird eine Anforderung so von der Weite in den Raum geschmissen, ein bischen mit den Händen gewedelt, dann versucht man daraus etwas zu machen und verbringt erst mal 1 STunde damit zu erraten, was denn die Aufgabenstellung wirklich ist, löst die und hinterher passts dann nicht. Und dann hört man: Geh bitte, das hättest du dir doch denken können. Beschreib vernünftig den Zusammenhang zwischen Impuls und Tonfrequenz. Minimumwerte, Maximumwerte. Was ist am Puls signifikant? Ist jeder Kanal für sich alleine oder hängen dir irgendwie zusammen? NF kann vieles sein - wie soll das Ausgangssignal aussehen? Reicht eine Rechteckschwingung oder muss mehr Aufwand getrieben werden? Dann kann man auch abschätzen wie sich das mit dem Timing ausgehen wird. Und bitte keine Ausflüchte mehr! Es ist dein Projekt, also stell Du die Daten zusammen!
also ich verstehe das so: du hast 16 unabhängige Eingänge, und wenn an einem dieser Eingänge eine positive Flanke auftaucht, dann wird einer der 16 Ausgänge für 500ms geschaltet, egal wie lang der Impuls ist. Was ist, wenn zwei positive Flanken in weniger als 500ms auf der gleichen Leitung auftauchen?
Was hat es eigentlich mit dem Teil "Taktgeber" auf sich? Wenn ich mir dein Blockschaltbild so ansehe, dann keimt in mir der Verdacht, dass der Teil mit dem Eingangsimpuls eigentlich irrelevant ist. Eigentlich brauchst du nur eine Schaltung die dir (16 mal) eine Tonfolge generiert: 0.5 Sekunden Ton 1.5 Sekunden Pause 0.5 Sekunden Ton 3.5 Sekunden Pause 0.5 Sekunden Ton 8.5 Sekunden Pause und das wars eigentlich schon. Die ganze Geschichte mit Eingangspulsen etc. dient nur zur Verwirrung. In Wirklichkeit geht es nur darum 16 (wegen 16 Kanälen) verschiedene Töne nach einem bestimmten zeitlichen Muster zu erzeugen. Im Grunde ein "Sequencer", wenn auch ein sehr simpler. Kann jeder AVR der genug Ausgangspins hat. Spender ihm ein paar mehr und du kriegst auch noch ein LCD und ein paar Tasten dazu, mit denen man die Pulsfolgen/Zeiten einstellen kann.
@ Uwe W. (uwel) >Ihr müsst Euch vorstellen, dass, wie im Blockschaltbild gezeigt, es sich >um getrennte ( ! ) völlig unabhängige Kanäle handelt, die wiederum die >einzelnen Tongeneratoren ansteuern sollen. Ein zeitlicher Zusammenhang >zu den Kanälen untereinander wäre nicht erwünscht. Aha, nicht ganz unwichtig die Information. Warum auch immer das so sein soll. Na dann musst du wohl sinnvollerweise pro Kanal einen Attiny13 nehmen, dort kann man dann die bisherige Funktion + Monoflop + Tongenerator reinpacken. Fertig. Dann könnte man sogar das sanfte Ausblenden ggf. mit realisieren. >An Falk: mit C habe ich (noch) nicht programmiert -- deshalb die Frage, >für welchen Controller es gedacht ist. AVR. >Bitte seht Euch das Blockschaltbild mit Impulsdiagramm an, dann braucht >ihr nicht geraten raten, wie das Ding funktioniert Technische Kommunikation ist nicht deine Stärke, was? ;-) Wild mit den Armen fuchteln und "dort, dort" rufen reicht nicht. Und nochmal mein Tip. Lies mal was über Netiquette. MfG Falk
@ Karl heinz Buchegger (kbuchegg) (Moderator) >PS: Du scheinst immer noch auf dem Zug zu sein, dass du für jeden Kanal >einen eigenen Timer brauchst. Dem ist nicht so. Möglicherweise schon, denn er will ja kein fest gekoppeltes Timing. Wahrscheinlich soo das eine poyphone Orgel mit driftenten Tonsequenzen werden. Irgendwas psychidelisches? 8-0 >Ich denke übrigens, dass 32 I/O Pins benötigt werden. 16 für die >Kanaleingänge, 16 für die Tonausgänge. Also irgendwas Mega16 aufwärts. In seinem Blockschaltbild kommen die Steuersignal aus einem tiny, also nix Eingänge. MFG Falk
Falk Brunner schrieb: > In seinem Blockschaltbild kommen die Steuersignal aus einem tiny, also > nix Eingänge. Ja, das hab ich auch erst sehr viel später geschnallt. Mich hat, genauso wie viele andere, das Geschwafel über Impulse und 2 Millisekunden und was der Teufel was, verwirrt. Tatsächlich sieht das alles sehr simpel aus. Wenn wir das jetzt richtig entschlüsselt haben, natürlich. Aber der TO äussert sich ja nicht mehr. > Na dann musst du wohl sinnvollerweise pro Kanal einen Attiny13 > nehmen, dort kann man dann die bisherige Funktion + Monoflop + > Tongenerator reinpacken. Die zeitliche Entkopplung könnte man ja auch mit Zufallszahlen :-) erreichen. Was auch nicht ganz uninteressant wäre: Laufen diese Sequenzen ständig oder werden die irgendwie gestartet/gestoppt
@Falk & Karl-Heinz, Uwe W.: Ich verstehe noch immer nicht, was da wann passieren soll :-( Aber ich werde diesen Thread weiterhin verfolgen, in der Hoffnung, nicht dumm sterben zu müssen... Und ich bin nach wie vor der Meinung, dass EIN Controller ausreicht (und das, obwohl ich die Aufgabenstellung nicht verstanden habe). Zur Not mit I2C Porterweiterung und/oder externen Treiberstufen. @Uwe W.: D.h. du möchtest auch 16 (?) Piezo-Summer da dran haben? Reicht nicht einer? Ich Frage mich wirklich, was das werden soll :-) Schöne Grüße & weiterhin viel Erfolg! Alex
Sooooo, ich glaube eine Einzelchiplösung ist mal wieder einfacher als gedacht. Siehe Anhang. Nix weiter als durchdachte Festkommaarithmetik, und schon hat man 16 unabhängige "Sequenzer". Njoy Falk P S Jaja, das ist natürlich streng genommen immer noch synchron und nicht echt asynchron, aber ich vermute mal, für die Anwendung ist es scheinbar asynchron genug. P P S Und der AVR langweilt sich mit knapp 10% CPU-Last ;-)
hmmm, ist noch ein kleiner Bug drin. Korrektur im Anhang.
Der TO Uwe hat ja mit Schiffahrt und Funk zu tun, daher glaube ich, er will entweder - einen Radarschirm hörbar machen oder - "Unterwassermusik"-Verständigung http://www.mydarc.de/dk1kq/ http://www.feuerschiff-elbe1.de/ http://www.feuerschiff-elbe1.de/FUNKER/FUNKER.HTM "Den elektrischen Strom für den Betrieb des Luftschall- und Unterwasserschallsenders und zum Laden der damals noch erforderlichen Batterien lieferten zwei Zweizylinder - Dieselmotoren von je 25 PS Leistung." Falk, ich sehe schon, das hat Dir jetzt keine Ruhe gelassen. Mir auch nicht. Ein paar Kleinigkeiten, damit der AVR sich noch mehr langweilt: > for (i=0; i<16; i++) { ... mask <<=1; } mask=1; do{ ... } while(mask<<=1); //mask ist gleichzeitig Zähler bis 16 > j = (index_data[i]>>12) & 0x0F; das &15 ist überflüssig, da 16-12=4 > static uint16_t cnt; // Zähler für 5ms Flag da er nur bis 50 zählt, genügen 8 Bits. Mir schwebt schon die nächste Version vor, bei der 32 DDSen arbeiten und das Abklingen realisiert ist. Wobei immer noch nicht klar ist, ob es 16 Ausgänge sein sollen, oder ob es auch möglich ist, die 16 Signale auf einen Ausgang zusammenzumischen. Wenn Uwe sich nur leichter täte, Klartext zu sprechen... Also Uwe, erzähl uns doch mal, was das Ganze eigentlich werden soll!
eProfi schrieb: > Wobei immer noch nicht klar ist, ob es 16 Ausgänge sein sollen, oder ob > es auch möglich ist, die 16 Signale auf einen Ausgang zusammenzumischen. Nach der aktuellen Informationslage könnte ich mir da unter der Aufgabe so eine Art "akustische Leuchtfeuer" vorstellen: 16 im Raum verteile Tonerzeuger, die irgendwelche definierten Tonfolgen von sich geben. Immerhin heißt das Blockschaltbild "Sehkarte.jpg"... grübel, grübel... :-/ @ Uwe W. (uwel) Auch ich bin auf die Aufgabenbeschreibung gespannt...
@ eProfi (Gast) >Ein paar Kleinigkeiten, damit der AVR sich noch mehr langweilt: Naja, man muss es nicht übertreiben mit der Hyperoptimierung. > while(mask<<=1); //mask ist gleichzeitig Zähler bis 16 Geht nicht, man braucht mehrfach den Index i. >> j = (index_data[i]>>12) & 0x0F; > das &15 ist überflüssig, da 16-12=4 Ja, war aber ganz am Anfang nicht so, da hatte ich ein >>8 drin. >> static uint16_t cnt; // Zähler für 5ms Flag >da er nur bis 50 zählt, genügen 8 Bits. Dito, war in der vorherigen Version ein Zähler bis 5000. >Mir schwebt schon die nächste Version vor, bei der 32 DDSen arbeiten und >das Abklingen realisiert ist. Dann brauchst du aber mehrere Bits pro Ausgang, dann reichen die Pins nicht. >Wobei immer noch nicht klar ist, ob es 16 Ausgänge sein sollen, oder ob >es auch möglich ist, die 16 Signale auf einen Ausgang zusammenzumischen. Das wäre natürlich denkbar. AVR als digitaler Soundmixer, das hatten wird glaub ich noch nicht. Mfg Falk
Hallo, Ich komme erneut auf das Blockschaltbild zurück. Aus einem Blockschaltbild sollten eigentlich die einzelnen Funktionen zu erkennen sein. Auch ich taste mich an eine mögliche Lösung heran. Das Projekt ist eine Sehkarte.( achte auf das Wort Seh- von sehen.) Ich habe davon schon einige Variationen gebaut. Auf einer Seekarte sind unter vielen anderen Informationen die Betonnung, und Leuchttürme eingezeichnet. Die Fahrwassertonnen wie auch die Leuchttürme habe eine Kennung. Die Leuchttürme und Tonnen habe ich mit Leuchtdioden versehen. Die jeweilige Kennung wurde bisher mit einem Attiny13 erzeugt. Mit einem Tiny kann man 4 unterschiedliche Kennungen erzeugen. ( IO-Pin) Je nach Seegebiet kommen ca 16 ( - deshalb die Zahl 16) zusammen. Das Ganze sieht ganz gut aus und ist ein echter "Hingucker" Da eine weitere Karte in Planung ist, wollte ich die Kennung der Leuchttürme und Fahrwassertonnen hörbar machen. Da eine Kennung, abgesehen von wenigen Ausnahmen immer recht langsam ist ( z.B Westerheversand, wohl der bekannteste Leuchtturm, sendet 3 Blitze mit jeweils 2,5 sek mit einer Pause von 1,7 Sek und einer Wiederholzeit von 15 sek) soll die "Anzeit" durch einen spezifischen Ton hörbar gemacht werden. Die Tonfrequenz ist dabei egal. Deshalb sollen alle "Anzeiten" und damit auch der erzeugte Ton z.B auf eine Tondauer von 500ms begrenzt sein. Um das Ganze so einfach wie möglich zu machen ( ist ja auch eine Kostenfrage) wird jeder Ton mit einem Piezo hörbar gemacht. (Die große Karte ist übrigens in einem Bilderrahmen. (117 x 89 cm) Zum heutigen Wissensstand tendiere ich zu einem völlig neuen Lösungsansatz unter Verwendung eines ( oder mehrere) Controller), die mehrere Ports haben, die LED blinken lassen und gleichzeitig den Ton erzeugt. Somit müssen 16 Kennungen ( erweiterbar) mit den dazugehörenden Tönen erzeugt werden. Falls der Eindruck entstanden ist, dass ich "um den Heißen Brei rede" mag das auch daran liegen, dass ich, umso mehr ich mich mit der Aufgabe beschäftige, immer neue Ideen auftauchen. Bisher habe ich mich nur mit dem Z80 (vor etlichen Jahren), dem Attiny13, At90S2313 und ATMEGA 8 programmiert. Ich möchte betonen, dass ich keine Lösung erwarte, hoffe allerdings auf Anregungen.Anzumerken wäre noch, dass es sich um Multitasking handelt um die einzelnen Zeitenspannen einzuhalten. (( m.E), d.h die einzelnen Kanäle müssen unabhängig von einander laufen Nun alles Klar ? Uwe
In einen Atmega8 mit 16MHz kriegt man 4 DDS-Generatoren mit einer fab von jeweils 32Khz mit 8Bit DAC Output ( oder 8Bit PWM ). Bei fab=8Khz reichts für 16 Oszillatoren.
Uwe W. schrieb: > Nun alles Klar ? Wesentlich klarer :-) Was soll dein µC machen, wenn er nicht Kennungen leuchten lässt bzw. in Sound umsetzt? Du musst drauf achten, dass er nicht aufgrund von Langeweile Suizid begeht :-)
>Sooooo, ich glaube eine Einzelchiplösung ist mal wieder einfacher als >gedacht. Siehe Anhang. Nix weiter als durchdachte >Festkommaarithmetik, und schon hat man 16 unabhängige "Sequenzer". Da sind aber richtige Sinustöne schöner: http://www.linusakesson.net/ ,4 Oszillatoren im 15Khz Zeilenrücklauf einer Videausgabe, Asssembler http://roboterclub-freiburg.de/atmega_sound/atmegaSID.html , 3 Oszillatoren mit verschieden Wellenformen und Hüllkurve mit 16Khz, Programmiersprache C http://elm-chan.org/works/mxb/report.html ,6 Oszillatoren, 32KHz
Mach doch mal ein Foto von dem bisherigen Aufbau :-)
Das würde mich ja schon interessieren...
Dient das Ganze eigentlich einem tieferen Zweck oder ist es nur ein
>Das Ganze sieht ganz gut aus und ist ein echter "Hingucker"
?
Und wie Karl-Heinz bereits sagte (und diverse andere vorher vermuteten):
EIN Mikrocontroller, z.B. Atmega32, reicht dafür vollkommen aus.
Um mehr I/O-Pins zu bekommen kannst du sog. I2C-Porterweiterungen
verwenden. So kannst du mehrere I/O-Pins mit einem seriellen
Datenprotokoll ansprechen...
Viel Erfolg beim Basteln!
Alex
P.S. Was ist jetzt eigentlich deine konkrete Frage?
Hallo Uwe, Es gäbe zumindest einen Controller, der 16 unabhängige Timer hat. Allerdings sind nicht alle auf IO-Ports gelegt. Siehe hier, STM32. Der STM32F103xF.
Danke Uwe für die Erläuterungen, jetzt ist es zumindest etwas klarer. Warum hast Du das nicht gleich in ersten Post gesagt??? Mit scheint, Du bist Dir noch nicht klar, was man -gute Programmierung vorausgesetzt- aus einem µC herausholen kann. Schau Dir mal auf youtube die Videos zu Craft an, da macht der ATMega neben 4-kanaligem Midi-Sound auch noch das Videosignal für den Farbmonitor. Da kann man sagen, dass der µC ausgelastet ist. Beitrag "Re: Craft" Beitrag "VGA-Demo mit Soundausgabe auf einem ATmega88" Aber mit Deiner Aufgabe, ein paar Led blinken zu lassen und ein paar Summer anzusteuern, langweilt er sich nur. Es sind immer noch einige Fragen unbeantwortet: Ist es möglich, alles auf einem Lautsprecher auszugeben? Weißt Du, dass es auch Summer gibt, die bei Anlegen einer Gleichspannung (aus einem Port) summen. Dabei muss man nicht die Tonfrequenz im µC erzeugen, das spart Rechenzeit. Mein lösungsvorschlag ist eine zeitsortierte ToDo-Liste. Wenn z.B. der ms-Zähler den nächsten ToDo-Eintrag erreicht hat, wird er gelöscht und der Timer auf den nächsten Zeitpunkt "aufgezogen". Noch was anderes, Uwe. Falk hat sich hingesetzt und stundenlang für Dich programmiert, und Du gehst überhaupt nicht darauf ein. Ich weiß nicht recht, was Du Dir dabei denkst. Ich denke mir dabei, dass es mit Dir generell nicht einfach ist.
@ Uwe W. (uwel) >Das Projekt ist eine Sehkarte.( achte auf das Wort Seh- von sehen.) >Ich habe davon schon einige Variationen gebaut. >Auf einer Seekarte sind unter vielen anderen Informationen die Jetzt wieder ohne "h" >Zum heutigen Wissensstand tendiere ich zu einem völlig neuen >Lösungsansatz unter Verwendung eines ( oder mehrere) Controller), die >mehrere Ports haben, die LED blinken lassen und gleichzeitig den Ton >erzeugt. Der süsse Brei läßt grüßen . . . ;-) >Somit müssen 16 Kennungen ( erweiterbar) mit den dazugehörenden Tönen >erzeugt werden. Siehe mein Posting. >mag das auch daran liegen, dass ich, umso mehr ich mich mit der Aufgabe >beschäftige, immer neue Ideen auftauchen. Das Problem haben die meisten Projekte. Pass mal auf dass du am Ende nicht nur noch von tollen Ideen schwadronierst aber nie was real fertig bekommst. >Anregungen.Anzumerken wäre noch, dass es sich um Multitasking handelt um >die einzelnen Zeitenspannen einzuhalten. (( m.E), d.h die einzelnen >Kanäle müssen unabhängig von einander laufen Das tun sie in meinem Beispiel seit Anfang an. Die Frage ist, ob sie streng synchron laufen sollen oder nicht. Rein theoretisch sollten ja alle Blinkzeichen immer gleich schnell laufen, also EXAKT x,Ys Blinken mit u,ws Periodendauer. Praktisch geht sowas EXAKT synchron nur über GPS und ist IMO unsinnig. Wie es heute real gemacht wird weiss ich nicht. >Nun alles Klar ? Ja. MFG Falk
@eProfi (Gast) >Noch was anderes, Uwe. Falk hat sich hingesetzt und stundenlang für Dich >programmiert, und Du gehst überhaupt nicht darauf ein. Naja, wir wollen mal nicht übertreiben. Mehr als 1-2 Stunden waren das am Ende nicht.
@ Marc (Gast) >http://www.linusakesson.net/ ,4 Oszillatoren im 15Khz Zeilenrücklauf >einer Videausgabe, Asssembler WOW! Und das alles in einem kleinen 20 MHz AVR! Ich bin schwer beeindruckt! MfG Falk
Falk Brunner schrieb: > @ Marc (Gast) > >>http://www.linusakesson.net/ ,4 Oszillatoren im 15Khz Zeilenrücklauf >>einer Videausgabe, Asssembler > > WOW! Und das alles in einem kleinen 20 MHz AVR! Ich bin schwer > beeindruckt! > > MfG > Falk Der 20MHZ AVR ??? Der schläft doch dabei. Ich hatte damals einen Schneider CPC 6128 mit Z80/4MHz, der konnte das auch.
Markus Müller schrieb: > Ich hatte damals einen > Schneider CPC 6128 mit Z80/4MHz, der konnte das auch. Aber nicht ohne Koprozessoren für Video und Audio...
@ Markus Müller (mmvisual) >Der 20MHZ AVR ??? Der schläft doch dabei. Bestimmt, wenn er VGA!!! Timing mit 31kHz Zeilenfrequenz + Sound + Steuerung erzeugen muss. . . > Ich hatte damals einen >Schneider CPC 6128 mit Z80/4MHz, der konnte das auch. Schneider? Dieser verkappte C64? ;-)
C64 ist ein Comodore gewesen. Ich meinte den Schneider CPC6128. Mit dem habe ich vor 20 Jahren meine Hauptschul Technik Abschlussprüfung absolviert. Ich war der Einzige innerhalb vieler Jahre der in dieser Prüfung ein Computerprogramm abgegeben hatte.
Craft war eigentlich nicht das was ich suchte, sondern die Uzebox (siehe youtube). Ein leicht übertakteter ATMega644 mit einem AD7xx RGB-to-NTSC-converter. Rozzbox ist auch noch ein (leider eingestelltes) Midi-Audio-Projekt, das das letzte aus den AVRs herausholt. Wenn es nur wenige Pins für die LEDs sein sollen, kann man ja Multi- oder Charlyplexen. Wenn man Sorglos-Audio will, nimmt man einen Audio-Chip, der Midi kann (Yamaha, Midi-Expander-Board oder ähnliches).
Hallo, > > Pfeif drauf. Jawoll! > Ich denke übrigens, dass 32 I/O Pins benötigt werden. 16 für die > Kanaleingänge, 16 für die Tonausgänge. Also irgendwas Mega16 aufwärts. Nee, ich denke 1 (EIN) Ausgang reicht! Er will das ganze nicht im Massstab 1:1 sondern auf 1m Breite anordnen, da braucht er doch nicht 16 Piezos! Da reicht ein Kleinlautsprecher fuer die Wiedergabe aller Toene..... wieder was, was nicht klar beschrieben war. Armer Uwe.....hier beommst Du es aber Knueppelhart! Also zusammenfassend: JEDER uC, der Deine 16 Eingaenge (und einen Ausgang) hat ist damit unterfordert. Wenn Du einen Portkonverter fuer die 16 Eingaenge auf serielles Protokoll benutzt, tut es ein 8-beiniger PIC. Nicht gerade mit einem Uhrenquarz, aber mit 8MHz. Ohne Probleme. Und jetzt ist bald mal Schluss hier.... Gruss Michael
> Nun alles Klar ? Endlich, nach gefühlten 100 Beiträgen. Mann kann das schwer sein, sich verständlich auszudrücken. Du warst einfach zu faul beim ersten Beitrag genug hinzuschreiben "was (Irrtum) keiner wissen muß". Mir ist eins aber immer noch nicht ganz klar: Die Karte ist irgendwo (hängt an der Wand) Auf ihr sind (mindestens) 16 Leuchttürme/Tonnen. Alle senden gleichzeitig ihre Blinkfrequenzen, zeitlich durcheinander. Wenn nun alle durcheinanderpfeifen, hört man ja nur noch Radau. Willst du, daß nur eine Tonne/Leuchtturm zu einer Zeit Krach macht (Knopf drücken->Ton) oder z.B. alle Leuchttürme reihum jeweils einer einen ganzen Zyklus lang, dann erst der nächste ? Offenbar nein, du willst daß alle durcheinanderhupen, deswegen die unterschiedlichen Freqeunzen, deswegen die verkürzte Dauer. Ich glaube, das gibt einen ziemlichen Krach. Technisch ist es möglich. Technisch ist es auch mit einem einzigen Mikrocontroller möglich, die Blinkerei und die Töne zu erzeugen (du brauchst nur einen Tonausgang, eine Lautsprecher sow ei ich das verstanden habe, aber mindestens 16 Leuchtdiodenausgänge. Du brauchst also gar nicht 16 Eingänge und dann eine BlackBox die die Töne macht. Aber meinethalben kannst du das auch so aufteilen. Im Prinzip macht dasselbe MIDI: Ein Steuerkommendo sagt, welcher Ton gespielt wird, und polyphon können auch mal mehrere Töne gleichzeitig kommen oder in der Lautstärke abklingen. Es ist nur Software. Aber ich sehe, dir macht die Software Schwierigkeiten. Am einfachsten wäre eine Software die Rechtecktöne erzeugt. Aber die klingen nicht gut. Daher würde ich dir von vorneherein zu Analogtönen raten. Wenn man Töne in bestimmten Freqeunzen mischt, bieten sich Tonabstände wie auf Tonleitern an, wenn man ein "gefälliges" Ergebnis haben will oder eben Töne die gerade anders liegen, wenn man das Chaos wünscht. Das digitale Tonerzeigungsprinzip der DDS verwendet ein programm welches ständig in einer Schleife läuft, der Samplefrequenz, von sagen wir 16000 mal pro Sekunde. Das sind bei einem 16 MHz AVR immerhin 1000 Befehle pro Schleife oder 62 pro Ton. Ein Befehl macht das DDS, es addiert eine Zahl (de facto eine Bruchzahl, also eine Festpunktzahl mit Nachkommastellen, meist digital 16 bit nach dem Komma, 8 bit vor dem Komma). Dann holt man aus eine Ton-Tabelle (bei Sinustönen eine Sinustabelle) den Spannungswert zu dieser Zeit. der nächste Befehl addiert dieses zum Summenwert der dann nahc allen 16 Kanälen an den Leutsprecher geht. Dazu zählt jeder Ton die Durchläufe (500msec = bis 8000) damit er weiss wann er nicht mehr mischen soll (oder schon leiser mischen soll), und wenn er gerade gar nicht aktiv ist (Faktor 0), dann "hört" er auf deinen Eingang und wartet daß an ihm das Signal von 0 auf 5V geht um mitzubekommen, wann der nächste Ton losgeht. In Assembler ist das also kein Problem, du hast massig Zeit wenn du dich nicht verzettelst sondern der klaren Linie folgst. In C kann man es auch schreiben, aber man wird aufmerksamer sein müssn, wann man Code schreibt der 'aus Versehen, Mama: "Es war doch nur ein indizierter Zugriff"' dem Prozessor mehr Arbeit macht. Der Prozessor könnte auch gleich noch die Blinkimpulse erzeugen, wenn man in ihm eine Tabelle ablegt, welcher Ausgang wie lange an und aus und wieder an und nun wieder aus sein soll. Programmstruktur in Pseudocode etwa: long pitch[16]={Tonhöhen} union { byte b[4]: long count; } dds[16]; short sinetable[256]={Sinustabelle}; Werte von -4096 bis +4095 damit 16 keinen Überlauf erzeugen Initalisierung Timerinterrupt alle 16000tel Sekunde On TimerInterrupt: FOR i FROM 1 TO 16 IF duration[i] > 0 THEN dds[i].count+=pitch[i] sum+=sinetable[dds[i].b[3]] duration[i]-=1 ELSE IF PortPin[i] == 1 THEN duration[i] = 8000 END FOR AnalogOutputPort = sum Länger ist das Programm nicht In Assembler wird man statt dds[i}.b[3] einfach das 3 byte des long Wertes nehmen, nichts schieben, das soll die union ausdrücken. Wie auch immer das Analogsignal ausgegeben wird, per eingebauten D/A-Wandler, per initialisiertem 8 biss 16 bit PWM mit 16000 Hz Zyklus, oder an 8 bis 16 Ausgangspins per externem R2R Netzwerk oder extern angeschlossenem (parallel) D/A-Wandler oder per SPI an seriell angeschlossenen D/A-Wandler.
Hallo MaWin und Mitleser, Ich muß ja selbst einmal herausfinden was möglich ist, das hat nichts mit "Faulheit" oder "scheibchenweise" an Information zu tun. Ich selbst bin froh wenn ich einfache Programme schreiben kann. So bin ich natürlich überrascht, wenn hier Programmbeispiele aufgezeigt werden von den ich nie zuvor gehört oder gelesen habe und zur Zeit nichts mit anfangen kann. Mein Gedankengang war der, zuerst einmal herausfinden mit welchem Controller das zu bewältigen wäre und dann hätte ich mich mit diesem auseinander gesetzt. Hier scheinen sich Welten zwischen den Lesern und mir aufzutun. Der Unterschied zwischen der "Sehkarte" und der Seekarte ist aus den angehängten Links zu ersehen. ;-) Die „Sehkarte“ zeigt die Leuchttürme an der Küste und die „Seekarte“ ist eine echte Seekarte, wie man sie auf jedem Schiff findet, die dieses Gewässer befährt. (Pflicht !) > Die Karte ist irgendwo (hängt an der Wand) > Auf ihr sind (mindestens) 16 Leuchttürme/Tonnen. Ja richtig: sehe auf http://www.mydarc.de/dk1kq/bilder/PIC1582.jpg http://www.mydarc.de/dk1kq/bilder/PIC1583k.jpg http://www.mydarc.de/dk1kq/bilder/PIC1586k.jpg http://www.mydarc.de/dk1kq/bilder/PIC1587.jpg Aus den Bildern sind die einzelnen ATTiny13 zu erkennen > Alle senden gleichzeitig ihre Blinkfrequenzen, allerdings nicht zueinander synchronisiert Würden sie synchron laufen, würde der Betrachter nach kurzer Zeit dies feststellen. >Wenn nun alle durcheinander pfeifen, hört man ja nur noch Radau. Richtig- so ist das beabsichtigt. Ob man für jeden Kanal einen eigenen Piezo benötigt, oder alles über einen Lautsprecher machen kann ??? . >Du brauchst also gar nicht 16 Eingänge und dann eine BlackBox die die Töne macht. Richtig - das ist überholt, wenn man das ( ich sage einmal Intern) im Controller machen kann. >Technisch ist es möglich. Technisch ist es auch mit einem einzigen Mikrocontroller möglich, die Blinkerei und die Töne zu erzeugen (du brauchst nur einen Tonausgang, eine Lautsprecher sowie ich das verstanden habe, aber mindestens 16 Leuchtdiodenausgänge. Richtig !!! Das wäre auch in meinen Augen die eleganteste Lösung. Fazit - - welcher Controller kann das? Gruß Uwe
@UweL (Gast) >>Technisch ist es möglich. Technisch ist es auch mit einem einzigen >>Mikrocontroller möglich, die Blinkerei und die Töne zu erzeugen >>(du brauchst nur einen Tonausgang, eine Lautsprecher sowie ich das >>verstanden habe, aber mindestens >>16 Leuchtdiodenausgänge. >Richtig !!! >Das wäre auch in meinen Augen die eleganteste Lösung. >Fazit - - welcher Controller kann das? Immer noch der gleiche. ATmega8 oder ATmega32, eigentlich jeder mit genug IOs. MFG Falk
HI bitte nehmt mir das nicht krumm mit all der Fragerei. Doch nun sehe ich einen Ausgangspunkt für das Projekt. Fange praktisch mit "Null" an. Danke für all die Ratschläge Uwe
Kein Problem, dafür ist so ein Forum ja da und jeder fängt schließlich irgendwann bei "Null" an. Zwei Sachen gibt es jedoch, die du in Zukunft eventuell mehr beherzigen solltest (meiner Meinung nach): 1)Wie auch Falk Brunner schon schrieb: Uwe W.: >>mag das auch daran liegen, dass ich, umso mehr ich mich mit der Aufgabe >>beschäftige, immer neue Ideen auftauchen. Falk Brunner: >Das Problem haben die meisten Projekte. Pass mal auf dass du am Ende >nicht nur noch von tollen Ideen schwadronierst aber nie was real fertig >bekommst. Ab und zu sollte (muss) man auch mal seine Ideen einfach in die Tat umsetzen, auch wenn einem dann hinterher ggf. einfällt, das man ein Detail übersehen hat. Man kann nicht immer_ _alles bis ins kleinste Detail planen. Sonst kommt am Ende gar nichts dabei 'rum... 2)Zuerst selber denken und nicht direkt "die anderen Fragen". Gerade bei privaten Projekten ohne "wirklichen" Zeitdruck sollte man zunächst selber eine Idee erarbeiten und erst danach, wenn man selbst nicht mehr weiter kommt, gezielte Fragen stellen. Das fehlte mir bei dir um ehrlich zu sein. Gezielte Fragen können hier sehr gut beantwortet werden, diffuse hingegen enden in wilden Spekulationen... Das ist nur meine persönliche Einschätzung und muss nicht zwingend immer korrekt sein... Viele Grüße, Alex
Hi, damit Ihr seht, dass sich etwas tut, hier ist das Programm das meine Vorstellungen entspricht. Es sind nicht 16 Oszillatoren, doch kann ich beliebig viele Contoller damit programmieren, sodaß die Forderung nach 16 erfüllt wäre. Die 2. Forderung war, einen Ton bei jeder positiven Impulsflanke zu erzeugen. Dies wird erreicht, indem der Port bei einer steigenden Flanke 49 x hin und her geschaltet wird. Die Pausenzeiten bestimmen dabei die Tonhöhe. Was mir nicht gefällt, ist der Ton an sich. Wünschenswert wäre, dass die Tonamplitude langsam ansteigt oder alternativ ein Sinus- Ton erzeugt wird. PWM wäre eine Möglichkeit, doch geht das in Basic ? Soll ich lieber Assembler lernen ? Gruß Uwe $regfile = "attiny13.dat" $crystal = 1200000 Config Portb = Output $hwstack = 8 ' LED + Ton, OC 6 'final use pwm mode of timer0 'LED An-Zeit ist + Tonlänge Config Timer0 = Pwm , Prescale = 1 , Compare A Pwm = Clear Down Dim A As Byte Do For A = 1 To 49 ' Anzahl der halben Schwingungen Toggle Portb Waitus 6000 ' Dauer einer halben Schwingung Next A Waitms 6000 ' LED AN - Zeit Toggle Portb ' Wechsele Polarität Toggle Portb ' Wechsle Polarität Waitms 10 ' Zeit für Polaritätswechsel Toggle Portb ' Wechsele Polarität Waitms 1000 ' LED AUS- Zeit Loop ´ Starte Ton End
@ Uwe W. (uwel) >Die 2. Forderung war, einen Ton bei jeder positiven Impulsflanke zu >erzeugen. Dies wird erreicht, indem der Port bei einer steigenden Flanke >49 x hin und her geschaltet wird. Die Pausenzeiten bestimmen dabei die >Tonhöhe. naja, sehr einfach gestrickt . . . ;-) >Was mir nicht gefällt, ist der Ton an sich. Wünschenswert wäre, dass die >Tonamplitude langsam ansteigt oder alternativ ein Sinus- Ton erzeugt >wird. Kann man machen. >PWM wäre eine Möglichkeit, doch geht das in Basic ? Ja. >Soll ich lieber Assembler lernen ? Nein. Es reicht in BASCOM halbwegs sauber zu programmieren. Dein Programm mancht nix weiter, als in einer SEHR einfachen Schleife ein paar IOs zu klappern. Nix Flankenerkennung, nix komfortabel programmierbare Pulsfolge, nix! Ich will mich ja nicht ins Rampenlicht stellen, aber da konnte mein Programm ein wenig mehr . . . Was hat dir daran nicht gepasst? MFG Falk
Er müsste erst mal lernen, das das Geheimnis, wenn ein Prozessor mehrere Dinge gleichzeitig tun soll, darin besteht, dass jegleiche From von waitXY verboten ist. Aber offenbar ist er noch nicht soweit.
> Was mir nicht gefällt, ist der Ton an sich. Nicht ohne Grund wurde schon vorher darauf hingewiesen, daß analoge Tonausgabe sinnvoller ist. Wie du das technisch realisierst, ob per (Hardware-)PWM, per Widerstandsnetzwerk an ein paar Ausgängen (paralleler D/A-Wandler) oder per seriell beschicktem D/A-Wandler (Audiowandler) hätten wir dir überlassen, der parallele Wandler kostet zwar eine Handvoll Anschlüsse des uC erscheint mir aber am einfachsten zu programmieren. > Soll ich lieber Assembler lernen ? Na ja, dein Programm ziegt, daß du sehr eindimensional denkst. Das kann man in BASIC und in Assembler :-) Ein erster Schritt wäre schon mal, daß du nicht einrückst wie du meinst daß es eingerückt wäre, sondern daß du einrückst, wie die Programmiersprache die Anweisungen zusammenfasst. Dann steht da ein einsames portb, ich seh nirgends die Pause zwischen dem Blinken, das Programm müsste für eine andere Frequenz oder andere Blinkdauer geändert strukturell werden, also eine Menge Defizite. Das zeigt, daß du noch ganz am Anfang stehst. Wichtiger wäre es, dir die Parallelverarbeitung (wie von mir gezeigt) geistig vor Augen zu führen, dann reicht ein uC für 16 Töne (und du solltest bemerkt haben, daß das Programm nicht mal länger war). Hat man das Konzept verstanden, kann man es in einer beliebigen Sprache hinschreiben. Das Konzept sagt: Die Schleife läuft schnell, sauschnell, z.B. 16000 mal pro Sekunde, aber exakt zeitsynchron. Es ist also klar, daß die Schleife weder mit der Blinkdauer noch mit der Tondauer was zu tun hat, aber sie zählt diese weil sie die verstrichene Zeit vorgibt. Soll etwas 1/2 Sekunde dauern, zählt man in der Schleife bis 8000. Soll etwas 1 Minute dauern, zählt man bis 960000. Sie zählt nicht für 1 LED, sondern für die 1. LED, für die 2. LED für die 3. LED usw. Und sie erzeugt nicht 1 Ton, sondern den Ton für die 1. LED; den Ton für die 2. LED, den Ton für die 3. LED usw. und mischt diese (Summierung, Mittelwert bilden). Was für Töne kommen, welche Pausen beim Blinken sind, soll ja pro LED verscheieden sein, das macht nicht das program,m (unterschiedliches Programm je nach LED9, sondern wird durch definierte Konstanten bestimmt. Eine sagt, wie lange LED1 anbleibt, eine sagt, wei lange LED1 ausbleibt eine sagt welchen Ton LED1 hat usw. Das alles ist viel auf ein mal. Wenn man nicht aufpasst zu viel, denn ein uC ist zwar schnell, man kann ihn aber ebenso schnell ausbremsen. Eine Funktion wie WAIT hat also sicher nichts in der Schleife verloren. Wenn man etwas in der kurzen Zeit nicht ausrechnen kann, kann man es vorher ausrechnen und in der Schlife nur noch auf die Ergebnisse zugreifen. Das beste Beispiel wäre der Ton, man kann den ganzen widergegebenen Ton vorher aufzeichnen und als WAV (Sample pro Sample) abspielen. Mein Programm könnte auch blinken struct { // Beispiel für 1 LED: int intervals; // 18 // gefüllt mit an/aus Werten in 1/10 Sekunde int ticks[31]; // 15,10,15,10,15,10,5,10,5,10,5,10,15,10,15,10,15,1800 } // 3 lang 3 kurz 3 lang, 3 Minuten warten blink[16]; int interval[16]; int remaining[16]; On TimerInterrupt: sum=0 FOR i FROM 0 TO 15 IF duration[i] > 0 dds[i].count+=pitch[i] sum+=sinetable[dds[i].b[3]] duration[i]-=1 END IF // und nun die LEDs: IF remaining[i] > 0 remaining[i]-- // LED bleibt im Zustand wie gehabt ELSE interval[i]++ IF interval[i] >= blink[i].intervals interval[i]=0 END IF IF (interval[i]&1) == 0 LEDOutputPort|=(1<<i) // LED wird eingeschaltet duration[i]=8000 // Ton synchron starten ELSE LEDOutputPort&=~(1<<i) // LED wird ausgeschaltet END IF remaining[i]=blink[i].ticks[interval[i]]*1600 END IF END FOR AnalogOutputPort = sum
Hallo Heinz Buchecker, MaWin und Weitere Karl heinz Buchegger schrieb: > Er müsste erst mal lernen, das das Geheimnis, wenn ein Prozessor mehrere > Dinge gleichzeitig tun soll, darin besteht, dass jegleiche From von > waitXY verboten ist. > > Aber offenbar ist er noch nicht soweit. richtig ! ich möchte die Zusammenhänge auch lernen. Wenig hilfreich ist eine aufgezeigte Lösung - ich muß sie ja selbst verstehen.! MaWin schrieb: > in erster Schritt wäre schon mal, daß du nicht einrückst wie du meinst > daß es eingerückt wäre, sondern daß du einrückst, wie die > Programmiersprache die Anweisungen zusammenfasst. Dann steht da ein > einsames portb, ich seh nirgends die Pause zwischen dem Blinken, das > Programm müsste für eine andere Frequenz oder andere Blinkdauer geändert > strukturell werden, also eine Menge Defizite. Das zeigt, daß du noch > ganz am Anfang stehst. Richtig, möchte es ja an einem Projekt lernen Ich ging immer davon aus, dass das Einrücken nur dazu da ist, dass man es besser lesen kann. Was wirklich dahinter steckt war mir unklar. Wenn hier ein Listing vorgestellt wird ohne Kommentare, kann ich dies nicht nachvollziehen, was damit gemeint ist. Also suche ich was das zu bedeuten hat. So beginnt MaWin listing mit struct --- ?? was soll das bedeuten ? Also lass uns doch ganz von Anfang beginnen, damit ich es nachvollziehen kann. Zuerst wäre zu klären, welcher Controller verwendet werden soll. Ich gehe davon aus, dass 16 Ausgänge zum Schalten benötige werden und weitere 16 für den Tonausgang. Oder gibt es dafür eine andere Lösung. Bei meinem ATTiny-Listing wird der Schaltausgang gleichzeitig auch zur Tonausgabe benutzt. ( Oder soll ich sagen - nacheinander ?) Ein Atmega 8 hat 23 I/O Pins, ein Atmega 16 32 I/O Pins. Ist diese Überlegung richtig ? Wenn ich mir andere Programme ansehe , beginnt dies immer mit der Auswahl des Controllers $regfile ="m8def.dat" 'Atmega8 Deklaration $Crystal =16000000 ' Quarzfrequenz Bin ich damit mit Euch auf einem gemeinsamen Stand ? Gruß Uwe
UweL schrieb: > Hallo Heinz Buchecker, MaWin und Weitere > > Karl heinz Buchegger schrieb: > >> Er müsste erst mal lernen, das das Geheimnis, wenn ein Prozessor mehrere >> Dinge gleichzeitig tun soll, darin besteht, dass jegleiche From von >> waitXY verboten ist. >> >> Aber offenbar ist er noch nicht soweit. > > richtig ! ich möchte die Zusammenhänge auch lernen. Wenig hilfreich ist > eine aufgezeigte Lösung - ich muß sie ja selbst verstehen.! Dann musst du die aufgezeigte Lösung analysieren. So wie ein Maler in seiner Ausbildung viel Zeit damit verbringt, die Bilder der alten Meister zu studieren, sich anzusehen wie sie die Komposition gemacht haben, wie sie Farben zusammengestellt haben, etc. So musst du fremden Code studieren. Nicht einfach nur ansehen, nicht einfach nur laufen lassen, sondern auseinandernehmen und im Detail studieren. Wir alle haben das gemacht. Wieder und immer wieder. Und jetzt bist du drann. Vorlagen gibt es dazu zur Genüge. Und für dein ganz spezielles Problem hat dir sogar jemand eine massgeschneiderte Lösung gebaut, die du studieren kannst.
@UweL (Gast) >Richtig, möchte es ja an einem Projekt lernen Auf welchem Stand bist du denn im Moment? Welche Erfahrung hast du beim Programmieren? >Ich ging immer davon aus, dass das Einrücken nur dazu da ist, dass man >es besser lesen kann. Das ist ein SEHR wichtige Sache. Siehe [[Stukturierte Programmierung auf Mikrocontrollern]]. >struct --- ?? was soll das bedeuten ? Das ist C, das du das offensichtlich nicht kennst, bleib erstmal bei BASCOM. Das reicht für den Anfang. >Zuerst wäre zu klären, welcher Controller verwendet werden soll. Haben wir das nicht lang und breit diskutiert? Leseschwäche? >Ich gehe davon aus, dass 16 Ausgänge zum Schalten benötige werden und >weitere 16 für den Tonausgang. Kann man so machen, ist für dich im Moment das Einfachste. > Oder gibt es dafür eine andere Lösung. Ja, aber die sind komplexer. >Bei meinem ATTiny-Listing wird der Schaltausgang gleichzeitig auch zur >Tonausgabe benutzt. ( Oder soll ich sagen - nacheinander ?) Ja was denn? Wenn du das als Programmierer nicht mal weißt, sehe ich schwarz. Oder hast du einfach nur nach Gefühl ein bestehendes Programm solange geändert, bis es halbwegs das macht, was du willst? >Ein Atmega 8 hat 23 I/O Pins, ein Atmega 16 32 I/O Pins. Nimm den ATmega16. >Wenn ich mir andere Programme ansehe , beginnt dies immer mit der >Auswahl des Controllers Passt. >Bin ich damit mit Euch auf einem gemeinsamen Stand ? Ja. MFG Falk
UweL schrieb: > Also lass uns doch ganz von Anfang beginnen, damit ich es nachvollziehen > kann. Ist dir eigentlich nicht aufgefallen, dass die Vorlage komplett und völlig anders aussieht, als das was du bisher kanntest. Ob das wohl damit zusammenhängen kann, dass du in BASCOM schreibst während die Vorlage in C geschrieben ist?
Karl heinz Buchegger schrieb: > Ist dir eigentlich nicht aufgefallen, dass die Vorlage komplett und > völlig anders aussieht, als das was du bisher kanntest. ... das war mir schon aufgefallen, konnte allerdings nichts damit anfangen .. Falk Brunner schrieb: > Ja was denn? Wenn du das als Programmierer nicht mal weißt, sehe ich > schwarz. Oder hast du einfach nur nach Gefühl ein bestehendes Programm > solange geändert, bis es halbwegs das macht, was du willst? So in etwa. Beginne mit dem, was ich kenne. Muß ja mit etwas anfangen.- so wie Ihr es auch einmal gemacht habt. So frage ich ganz gezielt, wo soll ich beginnen ? Gruß Uwe
@ UweL (Gast) >... das war mir schon aufgefallen, konnte allerdings nichts damit >anfangen .. Ach, und wie wäre es, wenn man da mal den Mund aufmacht? >So in etwa. Beginne mit dem, was ich kenne. Muß ja mit etwas anfangen.- >so wie Ihr es auch einmal gemacht habt. Naja, aber rumstochern wird dich nicht sehr weit bringen. >So frage ich ganz gezielt, wo soll ich beginnen ? Mit dem Lesen des Artikels Netiquette. Deine Art zu kommunizieren ist sehr verbesseungsbedürftig. Und wenn du auf so einem niedrigen Niveau bist, wirst du ziemlich viel Zeit brauchen, um deine ausufernden Wünsche selber zu erfüllen. MFG Falk
Hallo Falk, Reden wir an einander vorbei? Wenn ich bei Null anfange, muß ich doch zuerst einmal herausfinden was machbar ist - von Denen - die in der Materie drinstecken, ergo im Forum fragen - oder wie von Dir formuliert "Herumstochern" Nach allen Antworten und vorherigen Fragen habe ich herausgefunden, dass auf mich Meinungen / Antworten herunter prasseln- von denen ich nix verstehe oder etwas anfangen kann. Also muß ich erneut hinterfragen. Wenn meine Fragerei lästig ist, dann steht es jedem frei, einfach nicht zu antworten. Beim heutigen Stand komme ich zu Fazit, dass ich einen Atmega16 benötige. Jetzt kann ich mich näher mit dessen Programmierung beschäftigen. Oder ist dies wiederum eine falsch Schlußfolgerung ? Da taucht natürlich eine weitere Frage auf, mit der Frage, wo ich eine Liste aller Anweisungen Befehle Sprachgrundlagen finde ? mfg Uwe
> Zuerst wäre zu klären, welcher Controller verwendet werden soll. Tja, wirklich 16, oder nicht doch lieber bis 24 oder gar 32 LEDs ? Irgendwelche Steuerbarkeit (Taster) oder nur ein/aus (Hauptschalter) ? EIN Lautsprecher, nehm ich mal an, und falls man bei der einfachen D/A-Variante bleibt reichen 8 Ausgangsleitungen dafür. Die aber wohl wichtigste Entscheidung: Soll der Ton - ein Rechteckgejaule sein ? (wohl nicht, du hast es schon gehört) - ein Sample-Wave sein (z.B. Sinus) wie in meinem DDS Beispiel - ein MP3 Ton "bing" Da bei letztern ein decodieren und mischen der MP3s mit dem kleinem uC nicht möglich ist, müssten bereits die dekomprimierten WAVs gespeichert werden, pro Leuchtturm ein anderer a 0.5 Sekunden Länge mit z.B. 16000 samples -> macht 128kByte Speicherbedarf, also ein uC mit 256k Flash-Programmspeicher wäre nötig. Das sind schon die grösseren Dinger, wie ATmega2560 (man könnte gleich einen mit eingebauten D/A-Wandler nehmen, dazu fällt mir weil ich bei den tausenden von AVRs langsam nicht mehr durchblicke ad hoc nur der M16C ein, anderer Hersteller, andere Programmierumgebung) Deutlich kleiner ist der Sample Wave, bei dem im Prinzip derselbe Klang, nur in unterschiedlicher Tonhöhe, pro Leuchtturm abgespielt wird, der darf am Anfang und Ende noch einblenden/ausblenden aber ist kontinuierlich (also nicht am Ende eine andere Frequnz als am Anfang). Dann reicht ein einziges Sample von deutlich weniger als 8000 bytes und etwas wie ein ATmega16 Wenn es beim Rechteckgejaule bleiben kann, tut es ein Attiny, denn man hat genug Rechenleistung um selbst die LED Asteuerung per Charlyplexing Multiplex mit weniger Pins realisieren zu können und der Lautsprecher braucht auch nur 1 Pin.
@ MaWin (Gast) >Tja, wirklich 16, oder nicht doch lieber bis 24 oder gar 32 LEDs ? MaWin, dein Enthusiasmus in allen Ehren, aber du demonstrierst gerade sehr schön, wie ein Projekt aus dem Ruder läuft. Das was du da aufzählst ist zwar alles gut und schön, aber von der usprünglichen Aufgabenstellung meilenweit weg. Und von den Fähigkeiten des OP Lichtjahre entfernt. @UweL (Gast) >Reden wir an einander vorbei? Teilweise schon 8-0 >Wenn ich bei Null anfange, muß ich doch zuerst einmal herausfinden was >machbar ist - von Denen - die in der Materie drinstecken, ergo im Forum >fragen Ja. > - oder wie von Dir formuliert "Herumstochern" Ich meinte deine Programmierweise. >Beim heutigen Stand komme ich zu Fazit, dass ich einen >Atmega16 benötige. Ja. >Jetzt kann ich mich näher mit dessen Programmierung beschäftigen. Ja. >Oder ist dies wiederum eine falsch Schlußfolgerung ? Nein. >Da taucht natürlich eine weitere Frage auf, mit der Frage, wo ich eine >Liste aller Anweisungen Befehle Sprachgrundlagen finde ? Im Handbuch von BASCOM, gibt es zum DOwnload beim Hersteller. Aber das it kein Dokument zum Programmieren lernen, dazu braucht man ein Grundlagenbuch, sinnvollerweise auf BASCOM und Mikrocontroller abgestimmt. MFG Falk
Dann will ich weiter definieren, MaWin schrieb: > ja, wirklich 16, oder nicht doch lieber bis 24 oder gar 32 LEDs ? > nein, nein, bleibe bei 16 LED´s. > Irgendwelche Steuerbarkeit (Taster) oder nur ein/aus (Hauptschalter) ? nein, keinen Eingriff in den Programmablauf. - aber - wenn das gepiepe auf die Nerven geht, sollte die Tonausgabe abschaltbar sein. ( Schalter in der Lautsprecherleitung oder doch eine Tastaturabfrage ?) Bisher ging ich davon aus, dass zu jedem Schaltausgang ein Tonausgang gehört und dort als Lautsprecher ein Piezzo ( 3cm Durchm. )verwendet wird. Wie das funktionieren soll mit einem Lautsprecher ist mir (bis jetzt unklar). MaWin schrieb: > Die aber wohl wichtigste Entscheidung: Soll der Ton > - ein Rechteckgejaule sein ? (wohl nicht, du hast es schon gehört) ja, Ein Rechtecksignal hört sich auf die Dauer nicht gut an und wäre die Minimallösung ( wie man das macht, ist mir allerdings bekannt ) > - ein Sample-Wave sein (z.B. Sinus) wie in meinem DDS Beispiel hier taucht für mich die Frage auf, wie man das macht und ob man dann GLEICHZEITIG unterschiedliche Töne erzeugen kann. Sind dann 16 DDS erforderlich ? Deutlich kleiner ist der Sample Wave, bei dem im Prinzip derselbe Klang, nur in unterschiedlicher Tonhöhe, pro Leuchtturm abgespielt wird, der darf am Anfang und Ende noch einblenden/ausblenden aber ist kontinuierlich (also nicht am Ende eine andere Frequenz als am Anfang). Dann reicht ein einziges Sample von deutlich weniger als 8000 Bytes und etwas wie ein ATmega16 So in etwa habe ich mir das auch vorgestellt. Nochmals definiert: Der Pin eines Ports an und abschalten ( z.B 3 Sek an, 3 Sek Pause ) Ist der Pin auf H soll der Ton beginnen. Er sollte aber nicht während der gesamten An-Zeit hörbar sein. Folglich muß er kürzer sein oder noch besser in der Lautstärke abnehmen (Decay) > - ein MP3 Ton "bing" Damit könnte man sicher komplexere Töne erzeugen. Ist aber definitiv umfangreich und ein viel zu großer Brocken für mich (das Projekt) Falk Brunner schrieb: > Im Handbuch von BASCOM, gibt es zum DOwnload beim Hersteller. Aber das > it kein Dokument zum Programmieren lernen, dazu braucht man ein > Grundlagenbuch, sinnvollerweise auf BASCOM und Mikrocontroller > abgestimmt. Habe im Internet gefunden www..rn-wissen.de/index.php/Bascom An Literatur habe ich noch "AVR Mikrokontroller Lehrbuch, W. Roland" und Lernpaket "Mikrocontroller vom Franzis- Verlag" Leider werden dort Beispiele gezeigt, die für meine Aufgabenstellung weniger geeignet sind. Bisher habe ich ein Programm solange compiliert bis es fehlerfrei war und danach mit dem Simulator ausprobiert. Der wirkliche Test erfolgte dann mit der Hardware machen. ( so wird es wohl gemacht - oder ? ) Bei der Simulation laufen aber die Abläufe viel langsamer Folglich brauche ich ein Testboard mit einem Atmega16 und ISP Schnittstelle Soweit einverstanden ? mfg Uwe
@ Uwe W. (uwel) >nein, nein, bleibe bei 16 LED´s. Schau an, men wird langsam vernünftig . . . ;-) >Bisher ging ich davon aus, dass zu jedem Schaltausgang ein Tonausgang >gehört und dort als Lautsprecher ein Piezzo ( 3cm Durchm. )verwendet >wird. Naja, aber 16 Piezos auf so engem Raum ist eher albern. EIN Lautsprecher reicht, das Mischen macht der AVR. >hier taucht für mich die Frage auf, wie man das macht und ob man dann >GLEICHZEITIG unterschiedliche Töne erzeugen kann. Kann man. >Sind dann 16 DDS erforderlich ? Kann sein, muss man drüber nachdenken, ist nicht mehr ganz trivial. >Deutlich kleiner ist der Sample Wave, bei dem im Prinzip derselbe Klang, >nur in unterschiedlicher Tonhöhe, pro Leuchtturm abgespielt wird, der >darf am Anfang und Ende noch einblenden/ausblenden aber ist >kontinuierlich (also nicht am Ende eine andere Frequenz als am Anfang). Das klingt machbar. >Dann reicht ein einziges Sample von deutlich weniger als 8000 Bytes und >etwas wie ein ATmega16 Jo. >Der Pin eines Ports an und abschalten ( z.B 3 Sek an, 3 Sek Pause ) Also di LED. >Ist der Pin auf H soll der Ton beginnen. Er sollte aber nicht während >der gesamten An-Zeit hörbar sein. Folglich muß er kürzer sein oder noch >besser in der Lautstärke abnehmen (Decay) Pinggggggg. >Habe im Internet gefunden www..rn-wissen.de/index.php/Bascom Naja, der Hersteller ist ein anderer. http://www.mcselec.com/ >An Literatur habe ich noch "AVR Mikrokontroller Lehrbuch, W. Roland" und >Lernpaket "Mikrocontroller vom Franzis- Verlag" Klingt brauchbar. >Leider werden dort Beispiele gezeigt, die für meine Aufgabenstellung >weniger geeignet sind. Naja, das wäre auch ein wenig zuviel verlangt. Zumal deine Aufgabe schon DEUTLICH über Anfängerniveau liegt. >Bisher habe ich ein Programm solange compiliert bis es fehlerfrei war >und danach mit dem Simulator ausprobiert. Der wirkliche Test erfolgte >dann mit der Hardware machen. ( so wird es wohl gemacht - oder ? ) Im Prinzip ja. >Bei der Simulation laufen aber die Abläufe viel langsamer Was auch OK ist, DU läuft schliesslich nicht mit 16 MHz. 8-0 >Folglich brauche ich ein Testboard mit einem Atmega16 und ISP >Schnittstelle Jo. >Soweit einverstanden ? Ausnahmsweise ;-) MFG Falk
> > - ein MP3 Ton "bing" > Damit könnte man sicher komplexere Töne erzeugen. > Ist aber definitiv umfangreich und ein viel zu großer Brocken für mich > (das Projekt) Na ja, das ist deutlich einfacher zu programmieren als ein DDS wave mit Hüllkurve (also die vorherige Lösung mit abklingener Lautstärke), kostet aber mehr Speicher (zumindest wenn jede Leuchtturm einen anderen Ton spielen soll, was wohl der Fall ist). > Der Pin eines Ports an und abschalten ( z.B 3 Sek an, 3 Sek Pause ) > Ist der Pin auf H soll der Ton beginnen. Verstanden. Bloss das mit den vielen Lautsprechern nicht. Sind die Leuchttürme so weit voneinander entfernt, daß man je einen Lautsprecher braucht ? > struct --- ?? was soll das bedeuten ? Es sagt nur, daß die folgenden Werte eine Struktur bilden, daß die Anzahl intervals jeweils zu den ticks gehören. Ob du das später in einer Programmiersparche wie C tatsächlich als strucht realisierst, in BASCOM oder in Assembler schreibst, ist vollkommen egal, es ist ein Hinweis FÜR DICH, daß die Werte zusammengehören, dem Microcontroller ist das egal, der erwartet nur ein richtiges Programm. > >Tja, wirklich 16, oder nicht doch lieber bis 24 oder gar 32 LEDs ? > MaWin, dein Enthusiasmus in allen Ehren, aber du demonstrierst gerade > sehr schön, wie ein Projekt aus dem Ruder läuft. Nicht wirklich, Es ist vollkommen egal wie viele Leuchttürme das Programm kann, das ist nur eine Zahl in der Schleife, ob da 16 oder 32 steht, aber es entscheidet welchen Microcontroller er nehmen sollte, nämlich ob einer mit 16 oder 32 Anschlüssen notwendig ist (man kann auch einen mit 4 nehmen, muß dann aber extra Aufwand treiben, und DEN wollen wir ihm nicht zumuten). Nicht die "Grösse" bestimmt die Komplexität, sondern die "kleinen schmutzigen Tricks" die im ungünstigen Fall notwendig werden. Ich würd' Uwe jetzt am liebsten den ATxmega256A1 empfehlen, aber erstens hat Reichelt den nicht und zweitens ist er schlecht lötbar. Das Programm wäre auf ihm aber supereinfach. AT90PWM hat Reichelt auch nicht. Bleibt der M16C Typ M30624, den es bei Glyn fein aufgelötet auf einem Board gibt. Leider ist das kein AVR. Also wird man sich wohl von Typen mit eingebautem D/A-Wandler verabschieden müssen. Der Ersatz braucht nicht 1 Ausgang, sondern 8 damit man den D/A-Wandler durch eine handvoll Widerstände als R2R realisieren kann. Der lässt sich zumindest ohne jeden Programmieraufwand benutzen, einfach den digitalen Samplewert an den Ausgang ausgeben. Also ein Typ mit mindestens 24 nutzbaren Ausgängen und 256k Flash: Reichelt hätte ATMEGA 2560 aber die sind genau so Murks, unlötbare Gehäuse für ihn. Dieser unsinnige Zusammenhang von Speichergrösse und Gehäusegrösse hat mich schon bei FPGAs/CPLDs genervt, selbst wenn die Chiphersteller es sich nicht vorstellen können, es gibt sehr wohl gute Gründe für viel Speicher bei dennoch kleinem Gehäuse, geht bei nacktem Flash-Baustein schliesslich auch. Einen externen Speicher dranzubauen macht die Sache nur unnötig kompliziert. Hmm, hab ich keine Lösung ? Hier lägen reihenweise Boards rum mit massenhaft Speicher und irgendeinem alten Prozessor, aber wer tut sich so was heute schon an.
@MaWin (Gast) >Bloss das mit den vielen Lautsprechern nicht. >Sind die Leuchttürme so weit voneinander entfernt, daß man je einen >Lautsprecher braucht ? Nein, das Ganze ist eine Karte im A3 Format, Pi mal Daumen. >> MaWin, dein Enthusiasmus in allen Ehren, aber du demonstrierst gerade >> sehr schön, wie ein Projekt aus dem Ruder läuft. >Nicht wirklich, Es ist vollkommen egal wie viele Leuchttürme das >Programm kann, das ist nur eine Zahl in der Schleife, ob da 16 oder 32 >steht, Wenns denn mal so einfach wäre. Wenn wir schon "größenwahnsinnig" über Wave Wiedergabe oder gar MP3 reden, kommt der Faktor CPU-Leistung ins Spiel, und der ist mal sicher nicht mit einer einfachen Zahl in einer FOR-NEXT Schleife erledigt. >Nicht die "Grösse" bestimmt die Komplexität, In dem Fall schon. >Ich würd' Uwe jetzt am liebsten den ATxmega256A1 empfehlen, Gehts nicht noch größer. Der OP hat SEHR viel zu tun aber auch SEHR viel gelernt, wenn er in absehbarer Zeit, ich sach mal 1-3 Monate, meine Vorlage verstanden und in BASCOM umgesetzt hat. DANN kann er über Spielchen mit Wave nachdenken. Beitrag "Re: 16 unabhängig arbeitende Oszillatoren ?" >hat Reichelt den nicht und zweitens ist er schlecht lötbar. Das Programm >wäre auf ihm aber supereinfach. Mit Superlativen würde ich sparsam umgehen, auch wenn der Rest der Welt das Gegenteil praktiziert. >gibt. Leider ist das kein AVR. Also wird man sich wohl von Typen mit >eingebautem D/A-Wandler verabschieden müssen. Der Ersatz braucht nicht 1 >Ausgang, sondern 8 damit man den D/A-Wandler durch eine handvoll >Widerstände als R2R realisieren kann. Kann man machen, PWM reicht aber auch. >den Ausgang ausgeben. Also ein Typ mit mindestens 24 nutzbaren Ausgängen >und 256k Flash: So viel? >Dieser unsinnige Zusammenhang von Speichergrösse und Gehäusegrösse hat >mich schon bei FPGAs/CPLDs genervt, selbst wenn die Chiphersteller es >sich nicht vorstellen können, es gibt sehr wohl gute Gründe für viel >Speicher bei dennoch kleinem Gehäuse, geht bei nacktem Flash-Baustein >schliesslich auch. Wenn du denn der Meinung bist, dass es einen nennenswerten Markt für sowas gibt, kauf dir von den Jungs mit den großen FPGAs oder uCs die blanken Dies und pack sie in ein kleines Gehäuse. Du propagierst doch immer die Selbstständigkeit und das Wagen neuer Ideen. >rum mit massenhaft Speicher und irgendeinem alten Prozessor, aber wer >tut sich so was heute schon an. Eben, ab in den Schrott. Wer nciht mit der Zeit geht, geht mit der Zeit. MfG Falk
MaWin schrieb: > Bloss das mit den vielen Lautsprechern nicht. > Sind die Leuchttürme so weit voneinander entfernt, daß man je einen > Lautsprecher braucht ? Vorweg - ich hatte nie damit gerechnet, dass dieses Thema solche Außmaße annimmt. Hier tiefere Erklärung zum Projekt. Die Karte ist ca 50x70 cm Sie zeigt die Westküste von Schleswig Holstein, Mündung der Elbe und Weser. An der ganzen Küste entlang wie auch auf den Inseln sind Leuchttürme. Jeder Leuchtturm hat seine eigene Kennung (Licht). Bisher wurde jede Kennung mit einem Tiny13 erzeugt. Siehe angefügtes Bild der Rückseite. Für Sehbehinderte soll nun jeder Leuchtturm auch akustisch ausgemacht werden. Durch die einzelnen Tonhöhen soll dann zwischen den einzeln Türmen unterschieden werden. Deshalb favorisiere ich zu jedem Leuchtturm einen eigenen Lautsprecher.(piezzo) Mit einem Einzigen wäre die Räumliche Erkennung nicht möglich. Es ist von untergeordneter Bedeutung welche Tonhöhe zu jedem Turm gehört. Meine Vorstellung war, dass eine langsame Kennung einen tiefen Ton erzeugt schnellere Kennungen dementsprechend höher liegen. Zu einer langsamen Kennung gehört z.B ISO 8, d.h 4 sek An, 4 sek Aus; folglich ein Brummton. Zur Identifizierung reicht aber völlig aus, dass der Ton nicht 4 sek anhalten soll sondern z.B auf < 1 sek gekürzt wird. Dies würde auch für alle anderen Kennungen anwendbar sein. Komplizierte Kennungen sind mehrere Impulse mit folgende Dunkelzeiten von einigen Sekunden. Soweit zur Erläuterung Nach all dem Hin und Her ( heutiger Wissensstand ) wird ein Controller mit vielen Schaltausgängen benötigt, wobei zu jedem Schaltausgang ein Tonausgang dazu gehören muß. Im Testaufbau habe ich für jeden Leuchtturm die jeweilige Kennung und einen Ton erzeugt, ( er hört sich nicht gut an) Dies wollte ich nun eleganter lösen, ein Controller, Ton Sinus. Wie vorgeschlagen, werde ich einen ATMEGA16 verwenden, der ja bei Reichelt lieferbar ist. übrigens... bei http://www.mcselec.com/ habe ich das gefunden, nachdem ich gesucht habe. Der nächste Schritt wäre in meinen Augen, ein Flussdiagramm zu erstellen. Macht man das so ? Ach ja noch was, sollte der Controller mit dem internen RC Oszillator oder mit einem Xternen Quarz betrieben werden ? Da die Genauigkeit von unter geordneter Bedeutung ist, würde doch der interen RC- Oszillator ausreichen -oder ? Gruß Uwe
> Da die Genauigkeit von unter geordneter Bedeutung ist, > würde doch der interen RC- Oszillator ausreichen -oder ? Da die Tonhöhe vom Takt abhängt, ergibt RC ein ziemliches Gejaule. > Die Karte ist ca 50x70 cm Ich weiß ja nicht wie gut Blinde sehen können, äh, hören, aber ein Dutzend Lautsprecher in weniger als 10cm Entfernung voneinander kann ICH nicht auseinanderhalten. Ich halte s auch auch für abstrus, daß den Leuten, die die Lichter nicht sehen können, mit den Lautsprechern irgendwie weitergeholfen wäre. Wenn jemand die Karte erfühlen könnte, d.h. mit den Fingern von LED zu LED wandert, hilft ihm vielleicht, wenn die LED, die er anfasst, zu einem Ton führt,wenn sie leuchtet.
Muss es denn unbedingt AVR sein? Wenn sowieso in C programmiert wird, wäre ein dsPIC30xx oder dsPIC33xx genau das richtige: die haben eine DSP-Einheit an Bord, da ist das ganze ein Kinderspiel. Und kosten heute auch nur noch einstellige Beträge.
@ ubuntufan (Gast) >Wenn sowieso in C programmiert wird, wäre ein dsPIC30xx oder dsPIC33xx >genau das richtige: die haben eine DSP-Einheit an Bord, da ist das ganze >ein Kinderspiel. Nicht mehr lange, und wir sind beim 3D-Kinoprojektor mit 100 Kanal Souround Sound ;-)
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.