www.mikrocontroller.net

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


Autor: Toni (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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):
  ;Lambda-Wert aus Tabelle lesen, pointer einfach +r21:
ldi    ZL, LOW(lambdawerte*2)
ldi    ZH, HIGH(Lambdawerte*2)
clr    r16
add    ZL, r21
adc    ZH, r16 ;only carry
lpm
mov    r21, r0 ;Wert aus tabelle an R21 und somit LCD übergeben

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

Autor: Knut Ballhause (Firma: TravelRec.) (travelrec) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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
.
.
.

Autor: Toni (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen dank, das war das Problem :)

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.