Hallo zusammen,
ich habe für ein UKW-Sender-Projekt (2m-Band FM ;) ) einen ATmega32 als
Controller für die 1.ZF verwendet. Der Mega32 bekommt über einen
Seriellen Bus die Ausgangsfrequenz des Senders und schaut dann in einer
Lookup-Tabelle nach, welchen wert die ZF haben muss und berechnet dann
den Register wert für den DDS-Chip. Um zu überprüfen, ob er die Werte
richtig ausliest habe ich erst mal folgenden Code benutzt (ich habe mal
das Grundgerüst weggelassen):
1 | Do
|
2 | Input Mhz
|
3 |
|
4 | select case Mhz 'aus der Variablen für die WunschFrequenz vergleichen
|
5 |
|
6 | case "Freq.1"
|
7 | Fq = lookup(stelle, datensatz1) 'stelle und datensatz stehen hier nur als ersatz
|
8 |
|
9 | case "Freq.1"
|
10 | Fq = lookup(stelle, datensatz2)
|
11 | end select
|
12 |
|
13 | print Fq
|
14 |
|
15 | Loop
|
16 | end
|
17 |
|
18 | 'Lookup Tabelle
|
19 | datensatz1:
|
20 | data stelle , stelle1 , stelle2
|
21 |
|
22 | datensatz2:
|
23 | data stelle , stelle1 , stelle2
|
Die Komplette Lookup-Tabelle hat einen Umfang von 19 Datensätzen mit 20
werten. für jeden wert habe ich einen eigenen Lookup Befehl, da es keine
lineare Zuweisung der Tabelle zu der Wunschfrequenz ist.
Mein Problem ist nun folgendes:
Wenn ich über seriell einen Wert hineingebe kommt nur bei einer Zahl der
richtige Wert zurück, da diese in einer extra spalte der lookup-Tabelle
ist, sonst kommt meistens 2056 oder eine anderer wert im Bereich von
-30000 bis +30000 zurück, was definitiv nicht die ZF Werte sind.
Hat jemand eine Ahnung, warum ich nichts sinnvolles zurück bekomme und
wie ich das lösen kann? Ist der Ram vom µC zu klein oder ist das
außerhalb der Maximalgröße für lookup-Tabellen? Ich bin mit meinem
Latein am ende :P