Forum: Mikrocontroller und Digitale Elektronik tabelle mega 88


von Martin S. (martinsc)


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

von AVRFan (Gast)


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.

von Martin S. (martinsc)


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!

von AVRFan (Gast)


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

von Martin S. (martinsc)


Lesenswert?

vielen dank dür deine hilfreiche antwort!
gruss
martin

von Martin S. (martinsc)


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

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.