Inhalt eines Register aufs LCD anzeigen

Gast #730009
Hallo alle,

Ich muss erstmal sagen ich bin ein Einsteiger im Programmierung mit 
Atmega8. Ich schreibe gerade Vorwärtszählercode mit Anzeige auf dem LCD 
gesteuert durch tastendruck.Hab es mit LED erstmal simuliert alles lauft 
bis jezt richtig nur habe da ein problem und zwar:

nach Tastendruck wird ein Register incrementiert und ich weiß nicht wie 
den Inhalt von diesem Register auf mein den LCD anzeigen kann. Hab mich 
schon mit den lcd-routine und das ascii system vertraut gemacht.

Bin ratlos. Könntet ihr mir helfen?

danke schon mal
die Frage ist doch WAS willst Du da sehen.
Danach entscheidet sich welchen Weg Du gehen mußt.
Der HEX Wert wäre das Einfachste.
Das Byte zerstückeln in 2 Nibble. Jeweils 30h dazu addiert und Ausgeben.
ABER .... Das gilt nur für Zhalenwerte von 0 - 9 !!
Die Werte von A - F müüsen extra berechnet werden.
Gast
>Bin ratlos. Könntet ihr mir helfen?

Du mußt schon wenigstens sagen, ob Du in Assembler oder sonstwie
programmierst (ich tippe mal auf Bascom ;-).
Gast
ja du hast recht, ich probiere es noch mal.

aus diesem Problemausschnit asu den Tutorial sollte die Buchstabe "T" 
aufs Display anzeigt werde. ich habe das gleich Prinzip benutzt nur das 
den Wert, den ich anzeigen will ist im Register r17 und lauft von 0 bis 
255.

mit diesen Zeile:
ldi temp1, r17

geht es nicht.

.include "m8def.inc"

.def temp1 = r16
.def temp2 = r17
.def temp3 = r18


           ldi temp1, LOW(RAMEND)      ; LOW-Byte der obersten 
RAM-Adresse
           out SPL, temp1
           ldi temp1, HIGH(RAMEND)     ; HIGH-Byte der obersten 
RAM-Adresse
           out SPH, temp1

           ldi temp1, 0xFF    ; Port D = Ausgang
           out DDRD, temp1

           rcall lcd_init     ; Display initialisieren
           rcall lcd_clear    ; Display löschen

           ldi temp1, 'T'     ; Zeichen anzeigen
           rcall lcd_data

           loop:
           rjmp loop

.include "lcd-routines.asm"
Gast
ja habe ein kleines code aus dem Tutorial zur Anzeige von " test" 
probiert und es klappt und ich versteh aus das Code.

ich programmiere in Assembler mit AVR Studio und hab ein STK500 von 
Atmel
Einsteiger wrote:
> ja habe ein kleines code aus dem Tutorial zur Anzeige von " test"
> probiert und es klappt und ich versteh aus das Code.
>
> ich programmiere in Assembler mit AVR Studio und hab ein STK500 von
> Atmel

Dann lies im Tutorium weiter. Weiter unten auf der Seite wird
genau das gezeigt, wonach du fragst.

Drück einfach auf den Link hier
http://www.mikrocontroller.net/articles/AVR-Tutorial:_LCD#Zahlen_ausgeben
Gast
"Um Zahlen, die beispielsweise in einem Register gespeichert sind, 
ausgeben zu können, ist es notwendig sich eine Textrepräsentierung der 
Zahl zu generieren. Die Zahl 123 wird also in den Text "123" umgewandelt 
welcher dann ausgegeben wird. "

Ich verstehe nicht was damit gemeint ist.Textrepräsentierung? Ich kenne 
überhaupt nicht den Inhalt meines Register nur das der Zahl von 0 bis 
255 enthält!
Gast
Das ist so gemeint:

Wenn dein Register beispielsweise den Wert 136, dann muss eine 1, dann 
eine 3 und zuletzt eine 6 ausgegeben werden.

Du musst dir also eine Routine überlegen die Zahlen (vom Register) in 
einzelne Stellen zerlegt (Hunderter, Zehner, Einer).
@ Einsteiger (Gast)

>Ich verstehe nicht was damit gemeint ist.Textrepräsentierung?

Das Stichwort heisst ASCII Kodierung.

http://de.wikipedia.org/wiki/ASCII

> Ich kenne
>überhaupt nicht den Inhalt meines Register nur das der Zahl von 0 bis
>255 enthält!

Den musst du auch nicht kennen, die Umwandlung rechnet das aus. Überleg 
mal. Deine Zahl von 0..255 wird in EINEM Byte gespeichert. Die Ausgabe 
braucht aber DREI ZEICHEN. Und genau dass muss die Umwandlungsfunktion 
leisten. Byte -> drei ASCII-Zeichen.

MFG
Falk
deswegen sagte ich ja die Ausgabe des HEX Wertes ist am einfachsten.
Außerdem kann man damit in Detenblättern schnell was anfangen.
Die dez. Werte müßtest Du dann oft wieder in HEX oder BIN umrechnen.
bei zB 38h im Regster wird daraus 03 und 08,
Danach 30h zu jeder Zahl dazu. Macht 33h und 38h.
Jetzt schau mal in die ASCI Tabelle rein !!
Gast
>bei zB 38h im Regster wird daraus 03 und 08,
>Danach 30h zu jeder Zahl dazu. Macht 33h und 38h.

Und was macht der arme Kerl dann bei Registerinhalt ABh?
Da wirds dann für ihn eindeutig komplizierter, wie wenn er gleich 
dezimal
ausgeben würde.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.