Forum: Mikrocontroller und Digitale Elektronik Werte aus Flash-Tabelle lesen


von Toni (Gast)


Lesenswert?

Guten Morgen!

ich möchte gerne aus einer auf dem Flash-Speicher hinterlegten "Tabelle" 
Werte einlesen.
Ich lese am ADC eine Spannung ein, auf die dann der jeweilige Wert aus 
der Tabelle gelesen werden soll (ADC funktioniert, passende Spannung 
wird auf dem LCD ausgegeben):
1
  ;Lambda-Wert aus Tabelle lesen, pointer einfach +r21:
2
ldi    ZL, LOW(lambdawerte*2)
3
ldi    ZH, HIGH(Lambdawerte*2)
4
clr    r16
5
add    ZL, r21
6
adc    ZH, r16 ;only carry
7
lpm
8
mov    r21, r0 ;Wert aus tabelle an R21 und somit LCD übergeben

die Tabelle dazu (nur ein Ausschnitt, sind rund 240 Werte):
1
; Daten für die Lambda-Anzeige
2
;Lambda , Spannung
3
;  /100 ,  /100 V
4
;
5
lambdawerte:
6
.DB 121 ; 0
7
.DB 121 ; 1
8
.DB 120 ; 2
9
.DB 120 ; 3
10
.DB 119 ; 4
11
.DB 118 ; 5
12
.DB 117 ; 6
13
.DB 117 ; 7
14
.DB 116 ; 8
15
.DB 116 ; 9
16
.DB 115 ; 10
17
.DB 115 ; 11
18
.DB 114 ; 12
19
.DB 113 ; 13
20
.DB 112 ; 14
21
.DB 112 ; 15
22
.DB 111 ; 16
23
.DB 111 ; 17
24
.DB 110 ; 18
25
.DB 110 ; 19
26
.DB 109 ; 20
27
.DB 108 ; 21
28
.DB 108 ; 22
29
.DB 107 ; 23
30
.DB 107 ; 24
31
.DB 106 ; 25
32
.DB 106 ; 26
33
.DB 106 ; 27
34
.DB 105 ; 28

So, natürlich funktioniert das ganze nicht, sonst würde ich keinen neuen 
Beitrag starten :).
er zeigt mir, wenn ich die Werte einlese, immer den Wert 0 oder 117 aus 
der Tabelle an, obwohl ich irgendwo in der Mitte stehen sollte.
so, nun wo liegt der Fehler?
muss ich das R21 mit 2 Multiplizieren und dann zum pointer addieren?
- habe ich schon probiert, funktioniert allerdings auch nicht.
oder habe ich etwas grundlegendes an der Tabelle falsch gemacht?

Ich Danke euch schonmal im voraus für eure Hilfe.

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Das Flash ist wortweise organisiert. Wenn Du also hinter dem .DB nur ein 
Byte angibst, wird das 2. Byte automatisch mit 0 aufgefüllt. Dein 
Assembler müßte massenhaft Warnings ausspucken. Schreibe also

.DB Wert1, Wert2
.DB Wert3, Wert4
.
.
.

von Toni (Gast)


Lesenswert?

Vielen dank, das war das Problem :)

von spess53 (Gast)


Lesenswert?

Hi

>lpm
>mov    r21, r0 ;Wert aus tabelle an R21 und somit LCD übergeben

'lpm r21,Z' funktioniert bei den aktuellen AVRs auch.

MfG Spess

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.