tabelle mega 88

OP #717509
Lesenswert?

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
Gast #717510
Lesenswert?

>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.
OP #717520
Lesenswert?

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!
Gast #717538
Lesenswert?

>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
...
OP #719320
Lesenswert?

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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren