Forum: Mikrocontroller und Digitale Elektronik 16 unabhängig arbeitende Oszillatoren ?


von Uwe W. (uwel)


Lesenswert?

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

von Alex (Gast)


Lesenswert?

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

von Falk B. (falk)


Lesenswert?

@  Uwe W. (uwel)

>Irgend welche Ideen ?

Ja, lies mal was über Netiquette.

MfG
Falk

von Purzel H. (hacky)


Lesenswert?

Naja. Die 2ms setzen 500Hz als untere Grenze. Eine Sinustabelle im Stil 
eines DDS mit 20us auslesen. Mit den Werten 2 Octal DACs ansteuern.

von melt (Gast)


Lesenswert?

Welche Wellenform ist überhaupt gewünscht?

von Klaus2m5 (Gast)


Lesenswert?

Klingt nach 16-QAM Modulation. Entsprechende ICs sollte Google zu Tage 
fördern.

von Uwe W. (uwel)


Lesenswert?

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

von Alex (Gast)


Lesenswert?

Leider verstehe ich die "Problemstellung" nicht :-( Mir ist noch immer 
nicht klar, was da überhaupt passieren soll bzw. wozu die "Schaltung" 
dient...

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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...

von frank (Gast)


Lesenswert?

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

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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...

von frank (Gast)


Lesenswert?

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

von Ulli B. (ulli-b)


Lesenswert?

@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

von Uwe W. (uwel)


Angehängte Dateien:

Lesenswert?

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

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

> 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.

von Falk B. (falk)


Lesenswert?

@  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

von Ingo K. (drohne235)


Lesenswert?

> 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

von Karl H. (kbuchegg)


Lesenswert?

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.

von Michael R. (mexman) Benutzerseite


Lesenswert?

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 ;-)

von Uwe W. (uwel)


Lesenswert?

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

von Falk B. (falk)


Lesenswert?

@  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

von Sascha W. (sascha-w)


Lesenswert?

@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

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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?

von Alex22 (Gast)


Lesenswert?

>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

von Falk B. (falk)


Angehängte Dateien:

Lesenswert?

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

von Falk B. (falk)


Lesenswert?

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) {

von nichtGast (Gast)


Lesenswert?

Ja, aber wenn der OP noch nicht mal die gewuenschte Funktion eindeutig 
beschreiben kann, hilft die ganze Rumraterei nichts....

doch Gast

von Uwe W. (uwel)


Lesenswert?

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

von Karl H. (kbuchegg)


Lesenswert?

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!

von A. B. (funky)


Lesenswert?

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?

von Karl H. (kbuchegg)


Lesenswert?

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.

von Falk B. (falk)


Lesenswert?

@  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

von Falk B. (falk)


Lesenswert?

@  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

von Karl H. (kbuchegg)


Lesenswert?

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

von Alex B. (Firma: Ucore Fotografie www.ucore.de) (alex22) Benutzerseite


Lesenswert?

@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

von Falk B. (falk)


Angehängte Dateien:

Lesenswert?

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 ;-)

von Falk B. (falk)


Angehängte Dateien:

Lesenswert?

hmmm, ist noch ein kleiner Bug drin. Korrektur im Anhang.

von eProfi (Gast)


Lesenswert?

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!

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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...

von Falk B. (falk)


Lesenswert?

@  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

von Uwe W. (uwel)


Lesenswert?

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

von Marc (Gast)


Lesenswert?

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.

von Karl H. (kbuchegg)


Lesenswert?

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 :-)

von Marc (Gast)


Lesenswert?

>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

von Alex B. (Firma: Ucore Fotografie www.ucore.de) (alex22) Benutzerseite


Lesenswert?

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?

von Markus M. (Firma: EleLa - www.elela.de) (mmvisual)


Lesenswert?

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.

von eProfi (Gast)


Lesenswert?

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.

von Falk B. (falk)


Lesenswert?

@  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

von Falk B. (falk)


Lesenswert?

@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.

von Falk B. (falk)


Lesenswert?

@  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

von Markus M. (Firma: EleLa - www.elela.de) (mmvisual)


Lesenswert?

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.

von Simon K. (simon) Benutzerseite


Lesenswert?

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...

von Falk B. (falk)


Lesenswert?

@  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? ;-)

von Markus M. (Firma: EleLa - www.elela.de) (mmvisual)


Lesenswert?

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.

von eProfi (Gast)


Lesenswert?

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).

von Michael R. (mexman) Benutzerseite


Lesenswert?

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

von MaWin (Gast)


Lesenswert?

> 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.

von UweL (Gast)


Lesenswert?

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

von Falk B. (falk)


Lesenswert?

@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

von Uwe W. (uwel)


Lesenswert?

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

von Alex B. (Firma: Ucore Fotografie www.ucore.de) (alex22) Benutzerseite


Lesenswert?

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

von Uwe W. (uwel)


Lesenswert?

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

von Falk B. (falk)


Lesenswert?

@  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

von ... (Gast)


Lesenswert?

Falk Brunner schrieb:
> Was hat dir daran nicht gepasst?

Er hats nicht verstanden. :-)

von Karl H. (kbuchegg)


Lesenswert?

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.

von MaWin (Gast)


Lesenswert?

> 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

von UweL (Gast)


Lesenswert?

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

von Karl H. (kbuchegg)


Lesenswert?

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.

von Falk B. (falk)


Lesenswert?

@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

von Karl H. (kbuchegg)


Lesenswert?

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?

von UweL (Gast)


Lesenswert?

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

von Falk B. (falk)


Lesenswert?

@  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

von UweL (Gast)


Lesenswert?

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

von MaWin (Gast)


Lesenswert?

> 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.

von Falk B. (falk)


Lesenswert?

@  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

von Uwe W. (uwel)


Lesenswert?

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

von Falk B. (falk)


Lesenswert?

@  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

von MaWin (Gast)


Lesenswert?

> > - 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.

von Falk B. (falk)


Lesenswert?

@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

von Uwe W. (uwel)


Angehängte Dateien:

Lesenswert?

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

von MaWin (Gast)


Lesenswert?

> 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.

von ubuntufan (Gast)


Lesenswert?

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.

von Falk B. (falk)


Lesenswert?

@  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
Noch kein Account? Hier anmelden.