Hallo,
hat hier mal jemand die Heavy-Metal-Maschine von Elektor gebaut?
Wenn ja, welche Klangerfahrungen konnte er sammeln?
Ich überlege derzeit, mir auch so ein Teil zu bauen (allerdings
eventuell statt mit vier mit acht Oszis und einem AVR als
Hüllkurvengenerator).
Hat hier etwa noch keiner die weltberümte Heavy-Metal-Maschine von
Elektor gebaut?
Dabei hat Elektor das Projekt doch in mindestens drei Büchern
veröffentlicht (mindestens!)
;)
Hallo hermy,
am Besten fragst du in ca. 3,5h noch einmal nach, vielleicht meldet hat
dann einer der vielen Nachbauer ein Einsehen und meldet sich. Vielleicht
hat er deinen Beitrag nur übersehen, obwohl er nur darauf gewartet hat,
dass er eine Anfrage brantworten darf.
der Gast
Ingolf O. schrieb:> Nichtmal die Elektor-Suche findet was bei Eingabe von "heavy metal> machine" bzw. nur von "heavy metal"...
tatsächlich nicht???
Also das Teil funktioniert folgendermaßen:
Man hat vier Rechteckgeneratoren, deren Frequenzen mit Potis in weiten
Bereichen geregelt werden können.
Jeweils zwei Rechteckgeneratoren werden über ein EXOR-Gatter
zusammengemischt.
Die beiden erhaltenen Signale werden wieder über ein EXOR-Gatter
zusammengemischt.
Das so entstandene Signal durchläuft einen Hüllkurvengenerator mit einem
OpAmp 3080, bei dem die Anstiegszeit und die Abschwellzeit geregelt
werden kann.
Das Ergebnis soll eine Fülle unbeschreiblicher, metallähnlicher
Geräusche sein, die man damit erzeugen kann.
Vom Hammerschlag auf einen Ambos bis zum chinesischen Supergong oder dem
Lärm einer Maschinenhalle...
PS:
man beachte den text unter dem schaltplan, bes. den letzten satz...
"Klassische Multioszillatorenschaltung mit OTA VCA. Die Hüllkurve wird
durch Kondensatorladung und -entladung erzeugt. Der Decay Bereich lässt
sich mittels 4fach Schalter umschalten und mit einem Potentiometer
einstellen. Als Trigger dient ein normaler Taster. Eher ein
Lötübungsstück als ein Drum Synth."
Diese Schaltung war mir bislang unbekannt.
Aber ich habe irgendwann in den 80'er Jahren des letzten Jahrhunderts
eine ähnliche Schaltung aus der ELRAD aufgebaut.
Aus meiner Erinnerung heraus, ist ja ca. 25 Jahre her kann ich nur sagen
Sehr empfehlenswert
Soweit ich mich erinnere, waren es dort 5 oder 6 Rechteckoszillatoren
die mit XOR-Gattern verknüpft wurden.
>Ich überlege derzeit, mir auch so ein Teil zu bauen (allerdings>eventuell statt mit vier mit acht Oszis und einem AVR als>Hüllkurvengenerator).
Die Rechteckfrequenzen kannst du auch mit dem AVR machen, falls du
lieber programmieren statt löten willst:
Hey, Danke für das Programm!
>Die Rechteckfrequenzen kannst du auch mit dem AVR machen, falls du>lieber programmieren statt löten willst:
Das will ich tatsächlich lieber! Aber so ganz ist mir nicht klar, wie
ein AVR vier bis sechs in der Frequenz stufenlos regelbare
Rechteckoszillatoren simulieren kann. So ein µC kann doch nur
ganzzahlige Teiler seiner Taktfrequenz als Rechteckschwingungen
ausgeben...
hermy schrieb:> So ein µC kann doch nur> ganzzahlige Teiler seiner Taktfrequenz als Rechteckschwingungen> ausgeben...
Das stimmt im Prinzip auch, der µC muss also *ein kleines bischen
schummeln*
Dazu ist der eine Rechteck mal etwas länger oder kürzer als der andere.
Auf einem Oszilloskop ist das als gewisse Unschärfe der Rechteckflanken
durchaus zu sehen.
Im Frequenzspektrum ist dieses als eine Art Grundrauschen zu sehen, die
unendlichen Oberwellen der Rechteckschwingung werden unendlich an
F_abtast_halbe gespiegelt.
1
Phasen_acc1+=Frequenz1;
Dies ist eine Software DDS (Digitale Direkt Synthese)
1
(Phasen_acc1&0x8000)
dient nur dazu das most significant Bit herauszuschneiden.
aha, interessant... ich bin alles andere als ein C-profi, nehme meistens
lieber bascom, weil für simple sachen für mich einfacher.
wie verstellt man bei dem angegebenen programm denn die frequenzen von
außen?
hermy schrieb:> wie verstellt man bei dem angegebenen programm denn die frequenzen von> außen?
Frequenz1 bis Frequenz5 sind globale Variablen.
Du könntest z.B. an die Analog-eingänge des µC Potis anlöten und die
Spannungen im Hauptprogtramm mit dem ADC-Wandler messen.
Oktoberfestbesucher schrieb:> Du könntest z.B. an die Analog-eingänge des µC Potis anlöten und die> Spannungen im Hauptprogtramm mit dem ADC-Wandler messen.
stört das nicht die rechteck-frequenzen, wenn plötzlich zwischendrin
werte über den ADC eingelesen werden?
Ich glaube, der Prozessor wird sich dabei immer noch langweilen. Denn
die Frequenzen sollen ja im NF-Bereich (maximal 20 Kiloherz) liegen. Der
Prozessor kann aber Megaherz.
Christian H. schrieb:> Ich glaube, der Prozessor wird sich dabei immer noch langweilen. Denn> die Frequenzen sollen ja im NF-Bereich (maximal 20 Kiloherz) liegen. Der> Prozessor kann aber Megaherz.
glaube, so bis 50khz sollten pro oszi minimal möglich sein, weil es ja
um die mischprodukte (interferenzen) geht, denn es können auch längst
nicht mehr hörbare frequenzen mischprodukte im nf-bereich erzeugen.
bei 100khz läge die periodendauer immerhin schon bei 10ns
hermy schrieb:> stört das nicht die rechteck-frequenzen, wenn plötzlich zwischendrin> werte über den ADC eingelesen werden?
Die Frequenzen werden im Timerinterrupt erzeugt.
Einlesen der ADC-Werte im Hauptprogramm.
Also kein Problem.
stimmt, 10µs, war wohl doch schon ein bisschen spät gestern ;)
ok, dann gehts ja...
wie erzeugt man denn die Frequenzen im Timerinterrupt?
Schätze mal, Timerinterrupt bedeutet, dass irgendein register
runtergezählt wird und immer bei einem bestimmten wert irgendwas macht,
z.b. port von hi auf lo stellen (oder umhgekehrt) zur
rechteckerzeugung...!?!?!
Timerinterrupt sagt nur das in einer bestimmten Zeit dieser
Teil des Programmes periodisch angesprungen wird.
Ob du dann einen PortPin setzt oder etwas anderes tust ist dir
überlassen.
Aber du hast Recht mit dem was du gesagt hast :)
Pascal L. schrieb:> Timerinterrupt sagt nur das in einer bestimmten Zeit dieser> Teil des Programmes periodisch angesprungen wird.
kann man pro timer auch mehrere solcher interrupts vorsehen?
im moment ist mir nicht ganz klar, wie man mit einem einzigen
timerinterrupt vier oder mehr rechteckgeneratoren simulieren will, die
von der frequenz her unabhängig voneinander jeder für sich individuell
eingestellt werden können...
hermy schrieb:> im moment ist mir nicht ganz klar, wie man mit einem einzigen> timerinterrupt vier oder mehr rechteckgeneratoren simulieren will, die> von der frequenz her unabhängig voneinander jeder für sich individuell> eingestellt werden können...
Ich habe am 19.04.2010 um 16:48 Uhr hier einen Quellcode gepostet.
Du brauchst ihn nur compilieren (AVR Studio 4 und Winavr) und mit einem
Programmiergerät (Ponyprog) in einen ATtiny25 brennen.
An den Portleitungen PB0 bis PB4 hast du dann die Frequenzen
262Hz, 294Hz, 330Hz, 349Hz und 392Hz.
Dies entspricht den Tönen C, D, E, F und G.
Benutze dies als Ausgangsbasis und versuche zu verstehen was dort
passiert.
Oktoberfestbesucher schrieb:> Ich habe am 19.04.2010 um 16:48 Uhr hier einen Quellcode gepostet.>> Du brauchst ihn nur compilieren (AVR Studio 4 und Winavr) und mit einem> Programmiergerät (Ponyprog) in einen ATtiny25 brennen.> An den Portleitungen PB0 bis PB4 hast du dann die Frequenzen> 262Hz, 294Hz, 330Hz, 349Hz und 392Hz.> Dies entspricht den Tönen C, D, E, F und G.>> Benutze dies als Ausgangsbasis und versuche zu verstehen was dort> passiert.
hallo o-festbesucher,
bin z.zt. dabei, das AVR studio 4 einzurichten. braucht man das winAVR
zum C-programmieren (habe auf dieser seite unter "AVR" (oben links unter
"home") bei den programmen nichts weiter mit der bezeichnung gefunden)?
leider habe ich nur Mega8-Controller und größer vorrätig.
das brennen könnte man wohl auch mit bascom erledigen, denke ich (ist
nämlich schon auf dem rechner)
hermy schrieb:> braucht man das winAVR> zum C-programmieren
Ja, musst du runterladen und installieren.
Ist der Compiler.
Wenn du dann bei AVR Studio 4 ein neues Projekt aufmachst, hast du die
Wahl zwischen Atmel AVR Assembler und GCC.
GCC = Gnu C Compiler.
>leider habe ich nur Mega8-Controller und größer vorrätig.
in dem C-Rogramm sind die folgenden 2 Zeilen:
speziell auf den ATtiny25 zugeschnitten, damit wird der Timer und der
Interrupt configuriert. Musst du umschreiben oder ATtiny25 kaufen.
>das brennen könnte man wohl auch mit bascom erledigen, denke ich (ist>nämlich schon auf dem rechner)
wenn du da ein Programmiertool hast mit dem du eine *.hex Datei in einen
µC programmieren kannst, sollte das OK sein.
Wenn du dich mit BASCOM auskennst, kannst du dir mal
Beitrag "BASCOM Programm nach C übersetzen"
anschauen...
Hallo,
bin im Moment noch mit einem anderen Projekt beschäftigt.
Habe mir aber mal ein paar weitere Gedanken zur HMM gemacht.
5 Oszis sind natürlich super, weil man so alle 4 EXOR-Gatter im 4070 zum
Einsatz bringen kann.
Prima wäre natürlich, wenn man auf Knopfdruck die genauen Frequenzen der
5 Oszis anzeigen könnte, dann hätte man die Möglichkeit, Klänge zu
reproduzieren.
Habe hier ein Bord mit M32 und Vier-Zeilen-LCD, das bietet sich gradezu
an.
Stellt sich noch die Frage, wie die Frequenzen verstellt werden.
Man braucht ja im Grunde 10 Leitungen dafür, wenn man mit Drucktastern
arbeitet, also pro Oszi 1x "f erhöhen" und 1x "f erniedrigen".
So viel erst mal, danke für den Link zum Bascom-in-C-Übersetzen
hermy schrieb:> 5 Oszis sind natürlich super, weil man so alle 4 EXOR-Gatter im 4070 zum> Einsatz bringen kann.
Es geht noch toller:
Die EXOR-Gatter kann man auch in Software machen:
1
PORTB=((Phasen_acc1>>8)
2
^(Phasen_acc2>>8)
3
^(Phasen_acc3>>8)
4
^(Phasen_acc4>>8)
5
^(Phasen_acc5>>8))>>7
>Man braucht ja im Grunde 10 Leitungen dafür, wenn man mit Drucktastern>arbeitet, also pro Oszi 1x "f erhöhen" und 1x "f erniedrigen".
Oder mit 5 Poti's an den ADC-Eingängen
Oktoberfestbesucher schrieb:> Es geht noch toller:> Die EXOR-Gatter kann man auch in Software machen
Das wäre natürlich die Non-Plus-Ultra-Lösung!!!!!!!!
Potis sind für die Anwendung natürlich wesentlich komfortabler als
Druckschalter.
Aber schafft der AVR denn auch alles gleichzeitig, fünf unabhängige
Rechteckoszillatoren, deren EXOR-Verknügpung UND das Einlesen von fünf
AD-Werten?
Meine Idee wäre, die Potis nur auf Knopfdruck einzulesen. Dann müßten
die AD-Wandler nur auf Demand ausgewertet werden und ansonsten wäre der
Controller von Messoperationen befreit und könnte sich ganz der
Soundausgabe widmen...
Sowas funktioniert so:
1. Die Versorgungsspannung wird eingeschaltet
2. Der µC kommt aus dem Reset
3. Timer & Interrupt werden initialisiert => es gibt ca. 100000 mal pro
Sekunde einen Timerinterrupt. Dort werden die Frequenzen erzeugt, die
Bits XOR-verknüpft und am Port ausgegeben.
4. Das Hauptprogramm ist eine Endlosschleife und wird ca. 100000 mal pro
Sekunde unterbrochen ohne das das weiter stört.
Im Hauptprogramm werden die Poti's eingelesen.
Mit diesen Werten der Potis werden die Variablen geändert die das
Interrupt-Programm zur Erzeugung der Frequenzen verwendet.
Dann wird das Display aktualisiert.
Und weiter zum Anfang der Hauptprogramm-Endlosschleife.
Oktoberfestbesucher schrieb:> Dann wird das Display aktualisiert.> Und weiter zum Anfang der Hauptprogramm-Endlosschleife.
Danke für die näheren Informationen zum Programmablauf!
Hatte unter Bascom mal eine Servosteuerung für 18 Servos mit M32
programmiert. Da zuckten alle paar hundert mS die Servos aus
unerfindlichen Gründen alle gleichzeitig.
Nach einigem Suchen und Probieren bin ich darauf gekommen, dass es am
LCD-Display lag.
Habe daraufhin die Displaysteuerung aus dem Programm genommen und dann
war das Servozucken verschwunden.
Bist Du sicher, dass bei der Interrupt-Programmierung solche (in dem
Fall akkustischen) Zuckeffekte nicht auch auftreten können?
hermy schrieb:> Bist Du sicher, dass bei der Interrupt-Programmierung solche (in dem> Fall akkustischen) Zuckeffekte nicht auch auftreten können?
In diesem Fall ja!
hermy schrieb:> Wie kann man denn abschätzen, ob ein Interrupt den periodischen> Gesamtablauf stört oder nicht?
Wenn der µC z.B mit 8MHz läuft und der Timer so programmiert ist, das
z.B. 100000 Timer-interrupts pro Sekund auftrete, dann musst du in der
Timerinterrupt-routine weniger als 8MHz/100000 = 80 Taktzyklen
verbrauchen.
Bedenke das auch noch ein paar Taktzyklen für den Rücksprung draufgehen.
Verbrauchst du mehr als 80 taktzyklen in der Timerinterruptroutine,
holpert das ganze, für's Hauptprogramm bleib nix mehr an rechenleistung
über und einige Timerinterups werden verschluckt.
Bitteschön, mal 'ne Übersetzung des Ursprungscodes zum Testen. Fand's
interessant. Keine Ahnung ob bugfrei, Fehler dürfen behalten werden ;-)
Braucht ca. 63% Rechenleistung des µC, d.h. ~160 der 256 Takte die
zwischen den Overflows zur Verfügung stehen. Ohne ASM in Bascom m.E.
nicht zu machen.
Nachtrag:
Kleiner Schönheitsfehler, "unsigned short int" muss mit "Word" übersetzt
werden, statt mit "Integer", hat allerdings auf die eigentliche Routine
keinen Einfluss.
1
Dim Phasen_acc1 As Word
2
...
@Oktoberfestbesucher,
nicht schlecht was C da produziert hat, aber meine Lösung ist kleiner
und schneller als das C Compilat, wenn auch nur unwesentlich, 13 Takte.
Und das obwohl mein Code 'ne Schleife benutzt und nicht "ungerollt" ist.
@Лдгпысруш-ук
> Dann guckst du dir den Code in 2 Jahren an und verstehst Null!
Wenn ich's ohne Kommentare lasse, dann muss ich in zwei Jahren erst
wieder drüber nachdenken, da hast Du recht. Würde mir aber beim C Code
ganz genauso passieren, denn ich habe mich noch nie mit DDS beschäftigt
und offen gesagt nur sehr geringe Ahnung davon. Aber ich versteh' C und
kann ganz leidlich ASM.
> Eher: Kann kein C.
Das hättest Du jetzt nicht sagen dürfen, ich will mir die verbogene
Sprache nur nicht antun, mit Makefile und einer Legion von möglichen
Schalterchen. Da ich C nicht übe, wäre ich im Schreiben natürlich
erstmal langsamer als in Bascom, und müsste mir ein paar Dinge aneignen,
geht aber recht schnell. Ich hab' nur einfach keine Lust auf C. Außerdem
schreib ich gern ASM und Inlineassembler in C ist nur noch peinlich. Das
tu ich mir sicher nicht an. Das ich C verstehe, sollte Dir aus meiner
Übersetzung klar werden.
Was wird das jetzt eigentlich wieder ? Wieder so'n Längenvergleich oder
der übliche Versuch der Missionierung ?
Mein Code war für hermy oder andere gedacht, die eben C nicht können,
nicht mögen, oder was auch immer. Kannst ja drüber weglesen was ich
geschrieben hab'.
Hallo,
ich verstehe leider im Moment fast nur Datensalat.
Wie strickt man das ASM-Prog denn jetzt zusammen, damit es funktioniert
(mit EXOR und ADC/Potis)?
Das ist jetzt ohne LCD, oder?
Ich habe hier mal einen kleinen Ausschnitt aus einem Assembler-programm
das ich vor 2 Jahren geschrieben habe.
Da ich keine Zeit zum schreiben von Kommentaren habe,
verwende ich viele Label. Damit wird das Programm dann quasi
selbstkommentierend...
hermi oder hermy ?
Das ist nur die (hoffnungsvollerweise fehlerfreie) Bascom Übersetzung
des von Oktoberfestbesucher geposteten C Codes. Mein letztes Post war
die auf XOR geänderte ISR, auch laut C Beispielcode, die dann halt nur
auf einem Ausgang das ver-xor-te Signal rausgibt.
Der Originalcode arbeitet mit festen Frequenzvorgaben, diese sind in
Frequenz1..5 abgelegt, d.h. der erste Beispielscode gibt an 5 Pins 5
feste Frequenzen laut Vorgabe aus, der zweite Beispielscode die
ver-xor-ung dieser 5 Frequenzen. Alles, was Du zusätzlich willst, musst
Du selbst programmieren, also ADC abfragen, Frequenzen setzen, LCD
Ausgabe usw.
Es gibt nur eine Sache, auf die Du aufpassen musst, und zwar ist es der
"atomare" Zugriff auf die Variablen Frequenz1..5. Grund dafür ist, daß
beim Neubeschreiben diese Variablen jederzeit ein Timerinterrupt
dazwischenhauen kann, und dann ist möglicherweise nur ein Byte des Words
oder des unsigned short ints geschrieben. Das würde falsche Werte und
demgemäß zufällige Töne ergeben und die würde man hören.
Man darf den Timerinterrupt auch nicht sperren, denn das würde die DDS
Erzeugung stören. Das Problem ist zu lösen, indem man ein
Synchronisationsflag am Ende der ISR setzt. Man wartet dann bis dieses
Flag gesetzt ist, und schreibt erst dann neue Werte nach Frequenz1..5
Aus Gesagtem sollte auch klar sein, daß das Programm ohne weitere
Interrupts arbeiten muss, solange Sound ausgegeben wird.
Wenn Du soweit bist, dann sag Bescheid, aber versuch erstmal
Oktoberfestbesucher's Code oder meinen in der einfachsten Version zum
Laufen zu bringen.
@Oktoberfestbesucher,
ja, so versuch ich meine Labels auch anzulegen.
MWS schrieb:> Das Problem ist zu lösen, indem man ein> Synchronisationsflag am Ende der ISR setzt. Man wartet dann bis dieses> Flag gesetzt ist, und schreibt erst dann neue Werte nach Frequenz1..5
?????????
> Aus Gesagtem sollte auch klar sein, daß das Programm ohne weitere> Interrupts arbeiten muss, solange Sound ausgegeben wird.
?????????
Die Sounderzeugung passiert aus der Interrupt-Service-Routine (ISR)
heraus.
Dieses läuft quasi im Hintergrund.
Es ist völlig OK, wenn das Hauptprogramm eine der globalen
16-Bit-Variablen ändert, kurz für ein paar Taktzyklen, den
Timerinterrupt zu sperren. Ein Interrupt der während dieser Sperrzeit
ausgelöst wird, wird dann nur ein paar Taktzyklen später bedient.
Es ist in diesem Falle aber auch OK, wenn man, während das Hauptprogramm
eine der 16-Bit-Variablen ändert, den Timerinterrupt nicht sperrt.
Die 16-Bit_Variablen werden nur geändert, während jemand am Poti dreht.
Da bei dieser ganzen Geschichte eh metallisch klingende Sounds mit einem
breiten Frequenzspektrum erzeugt werden, stören ein paar falsche Töne
überhaupt nicht.
Oktoberfestbesucher,
ich dachte nur ein wenig weiter.
Ersteres wäre mein Ansatz gewesen, ein ungestörtes Schreiben der
Variablen zu ermöglichen, ohne den DDS Ablauf zu stören. Ein Sync-Flag
ist m.E. der sauberere Weg, als den Int zu sperren.
Es könnte doch jemand auf die Idee kommen einen Sequenzer reinzubasteln,
oder die Tonhöhe in einer Schleife zu verändern. Das würde zu häufigeren
Zugriffen führen und sich störend auswirken.
Aber da ich's "trocken" programmiert und nicht angehört hab', lass' ich
mir da gerne etwas sagen.
> Dieses läuft quasi im Hintergrund.
Ja, schon klar :D
Aber andere ISRs, wie z.B. eine Timer1 ISR als Zeitgeber für einen
Sequenzer können die Ausführung der DDS Timer ISR verzögern. Allein die
5 Poti Lösung braucht keine anderen ISRs.
MWS schrieb:> Aber andere ISRs, wie z.B. eine Timer1 ISR als Zeitgeber für einen> Sequenzer können die Ausführung der DDS Timer ISR verzögern.
Dann muss so ein Interrupt eine niedrige Priorität bekommen.
Oder kein Interrupt für so was verwenden, sondern folgende Lösung:
In der Sounderzeugungs-interrupt-routine wird jedesmal eine globale
Variable hochgezählt. Im Hauptprogramm wird dann per Polling geschaut ob
sie diesen oder jenen Wert erreicht hat und dann die Soundfrequenzen
gewechselt.
Oktoberfestbesucher schrieb:
> Dann muss so ein Interrupt eine niedrige Priorität bekommen.
Bei AVRs nur durch nested Interrupts möglich
> Im Hauptprogramm wird dann per Polling geschaut ob sie diesen oder jenen> Wert erreicht hat und dann die Soundfrequenzen gewechselt.
Klar, aber man kann einen anderen Timer, sofern verfügbar, pollen. Aber
das war ja mein Argument, keine Ints verwenden. Natürlich gehen nested
Ints, nur sollte der Zauberlehrling da wissen was er tut :D
War nicht für Dich gedacht, Dir muss ich's nicht erklären, Du weist ja
was Du machst.
von mir nur eine kurze meldung nebenbei.
hab mir ein paar bücher über AVRs besorgt, um mich mal in die basis
einzulesen, wie das mit den ganzen registern, interrupts, timern etc.
funktioniert, das war bei bascom doch irgendwie auf der strecke
geblieben.
wo sind wir denn jetzt, gibt es schon eine fertige version, die man nur
noch auf den chip zu brennen braucht?
viele grüße!
hermy schrieb:> wo sind wir denn jetzt, gibt es schon eine fertige version, die man nur> noch auf den chip zu brennen braucht?
Ich sach mal so:
Es ist dein Projekt!
ich sehe schon, man hat ein einsehen und das thema zurückverschoben...
Karl heinz Buchegger schrieb:> hermy schrieb:>>> wo sind wir denn jetzt, gibt es schon eine fertige version, die man nur>> noch auf den chip zu brennen braucht?>> Ich sach mal so:> Es ist dein Projekt!
ein paar tage brauche ich mindestens noch, um die sache ASM-mässig
zusammenzustricken ;)
und einen echten überblick hab ich z.zt. auch nicht. bei den ganzen
programmzeilen oben, die alle nicht von mir stammen, würde ich eher mal
sagen, es ist UNSER projekt!
hermy schrieb:> ich sehe schon, man hat ein einsehen und das thema zurückverschoben...>> Karl heinz Buchegger schrieb:>> hermy schrieb:>>>>> wo sind wir denn jetzt, gibt es schon eine fertige version, die man nur>>> noch auf den chip zu brennen braucht?>>>> Ich sach mal so:>> Es ist dein Projekt!>> ein paar tage brauche ich mindestens noch, um die sache ASM-mässig> zusammenzustricken ;)> und einen echten überblick hab ich z.zt. auch nicht. bei den ganzen> programmzeilen oben, die alle nicht von mir stammen, würde ich eher mal> sagen, es ist UNSER projekt!
Genau das würde ich nicht sagen.
Es ist dein Projekt und jemand hilft dir dabei.
Du hast Schwierigkeiten bei diesem 30 Zeiler den Überblick zu behalten?
Na dann, gutes Gelingen.
Ich denke du hast das Prinzip immer noch nicht durchschaut.
Analogie:
Ich steh mit einer Nadel hinter dir und steche dich jede Sekunde einmal
in den Allerwertesten. Du zählst mit und bei jedem 2-ten Stich hebst du
den linken Arm, bei jedem 3-ten Stich hebst du den rechten Arm.
Wie sieht das für jemanden aus, der nicht weiß, dass ich mit einer Nadel
hinter dir stehe?
Nun für den sieht es so aus, als ob sich dein linker Arm mit einer
Frequenz von 0.5Hz hebt, während sich dein linker Arm mit einer Frequenz
von 0.33Hz hebt. Wenn ich dir jetzt sage, dass sich dein rechter Arm bei
jedem 5-ten mal heben soll, dann bekommt dein rechter Arm eine Frequenz
von 0.2Hz.
Obwohl du nur einen Zeitgeber hast, hast du unterschiedliche Frequenzen
erzeugt. Und wenn du noch 3 Arme mehr hättest, könntest du mit diesem
Schema 5 unterschiedliche Frequenzen erzeugen. Du darfst nur nicht mit
den Zählern für die Arme durcheinander kommen.
hermy schrieb:
> ein paar tage brauche ich mindestens noch, um die sache ASM-mässig> zusammenzustricken ;)
Sehr interessant, da in ASM nix zusammengestrickt werden muss.
In Oktoberfestbesucher's Code nicht und in meinem auch nicht.
Möglicherweise ist Dir die leere while(1){} oder die leere Do/Loop
entgangen, die nur darauf wartet Deine Geistesblitze bezüglich Variation
der 5 Frequenzen aufzunehmen. Das kann alles in gutem alten C oder
Bascom geschehen.
MWS schrieb:> In Oktoberfestbesucher's Code nicht und in meinem auch nicht.> Möglicherweise ist Dir die leere while(1){} oder die leere Do/Loop> entgangen, die nur darauf wartet Deine Geistesblitze bezüglich Variation> der 5 Frequenzen aufzunehmen. Das kann alles in gutem alten C oder> Bascom geschehen.
ich muss auch gestehen, dass ich mich noch nicht intensiv mit den progs
beschäftigt habe.
ehrlich gesagt wollte ich sogar auch noch eigene ASM-gehversuche
unternehmen ;)
nette analogie mit den armen, aber bei dem versuch, mir in den
allerwertesten zu stechen, würden meine arme sich eher in richtung
mensch-mit-der-nadel bewegen (aua, und zwar nicht für mich ;-))
spass beiseite, wie geht das denn jetzt mit den "unscharfen" flanken zur
stufenlosen frequenzregelung?
es macht ja keinen sinn, wenn man nur bestimmte teiler einer
grundfrequenz erzeugen kann...
morgen mehr, bis dahin guten rutsch an alle leser in den 1.5.!
;)
hermy schrieb:> spass beiseite, wie geht das denn jetzt mit den "unscharfen" flanken zur> stufenlosen frequenzregelung?> es macht ja keinen sinn, wenn man nur bestimmte teiler einer> grundfrequenz erzeugen kann...
Das kommt drauf an :-)
Wenn ich dich nicht einmal in der Sekunde steche, sondern 1000 mal und
du nicht bis 2 sondern bis 2000 zählst, dann haben wir beide auch wieder
0.5Hz erzeugt.
Aber: Anstatt bis 2000, kann ich dich jetzt auch bis 1999 zählen lassen,
was einer Armhebefreuqenz von 0.50025Hz entspricht. Und wenn ich dich
bis 1998 zählen lasse, dann hast du eine Armhebefrequenz von 0.5005Hz.
Jetzt kann ich dich natürlich nicht nur 1000 mal in der Sekunde stechen,
sondern auch 10000 mal, mit dem Effekt, das ich deinen Zählerstand (und
damit die zu erzeugende Frequenz) noch feiner abstufen kann. OK, das
geht nicht, weil du nicht so schnell zählen kannst. Aber dein µC kann
das :-)