Hallo zusammen! habe in assembler ein programm für den mega88 geschrieben, dass mir verschiedene tonfrequenzen mißt. funktioniert alles problemlos. nun möchte ich, dass jeder tonfrequenz eine aktion zugeordnet wird. Sprich wenn ton 1 dedektiert wird soll aktion 1 ausgeführt werden usw. nun weiss ich nicht genau wie ich dass realisiern soll. ich weiss, dass tabellen dafür sehr nützlich sind... ich möchte auch einen gewissen übergang haben, also dass die aktion auch dann ausgelöst wird wenn die tonfrequenz z.B. +/- 5 Hz schwankt. Muss ich dann z.B. bei 10 frequenzen über 100 werte mit der Hand in mein Programm schreiben, oder gibt es dafür eine bessere und weniger schreibintensive methode? gibt es dafür beispiele? Ich hoffe, ich habe mein problem verständlich genug ausgedrückt. Vielen Dank, schon mal für euere hilfe! gruß martin
>Muss ich dann z.B. bei 10 frequenzen über 100 werte mit der Hand in mein >Programm schreiben, Wie kommst Du auf 100? Du brauchst 20 Werte, nämlich jeweils der minimale und der maximale Wert für jede der 10 Frequenzen.
ich komme noch nicht klar damit, wie ich die jeweilige abzweigung dann realisiere. wenn ich einen gemessenen wert habe, muss ich diesen mit den werten in meiner tabelle vergleichen und wenn eine übereinstimmung besteht, soll an eine bestimme stelle gesprungen werden. deshalb brauche ich doch jeden wert, oder? also wenn ich z. B. ein 200 Hz Signal habe, benötige ich doch die zahlen von 195Hz bis 205Hz. Ansonsten kann ich doch meinen Wert nicht vergleichen und somit z.B. eine branch anweisung verwenden. verstehe ich da etwas nicht richtig? danke, für deine antwort!
>also wenn ich z. B. ein 200 Hz Signal habe, benötige >ich doch die zahlen von 195Hz bis 205Hz. Nein, um Himmels willen. Du brauchst nur die beiden Werte 195 und 205. Die schreibst Du in Deine Tabelle (die am Schluss dann 20 Werte enthält). Die "größer als"- und "kleiner als"-Prüfungen kannst Du einfach über die Befehle brge und brlt erledigen:
1 | [fmin und fmax aus Tabelle laden] |
2 | |
3 | cp f, fmax |
4 | brge FreqDoesntMatch |
5 | cp f, fmin |
6 | brlt FreqDoesntMatch |
7 | |
8 | [hier Code fuer "Frequenz passt" (fmin < f < fmax)] |
9 | |
10 | FreqDoesntMatch: |
11 | ...
|
hallo zusammen! nachdem ich hier ne super antwort bekommen habe, versuch ichs nochmal. das beispiel im beitrag vorher leuchtet mir ein und ich verstehe es auch. nun möchte ich es auch mit 16bit zahlen versuchen. ich habe also 10 bereiche mit jeweils einer oberen und unteren grenze. zuerest habe ich bisher immer die jeweiligen High-Bytes miteinander verglichen, anschließend die High-Bytes der untern Grenze. Wie im Beispiel oben. Nur habe ich jetzt ein Problem. wie mach ich es wenn jetzt das High-Byte der Unteren Grenze gleich dem High-Byte der nächsten Oberen Grenze ist. Ich kann ja nicht einfach dann die Low-Bytes miteinander vergleichen. Irgendwie bekomm ich das nicht auf die Reihe. Hoffe es fällt jemandem was gutes dazu ein! Vielen Dank schon mal! Viele Grüsse Martin
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.