Forum: Mikrocontroller und Digitale Elektronik Inhalt eines Register aufs LCD anzeigen


von Einsteiger (Gast)


Lesenswert?

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

von Walter (Gast)


Lesenswert?

mit der Info kann dir keiner helfen

von Stephan H. (stephan-)


Lesenswert?

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.

von jack (Gast)


Lesenswert?

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

von Mathias U. (munter)


Lesenswert?

Kannst Du schon irgendwas auf dem Display ausgeben?

von Einsteiger (Gast)


Lesenswert?

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"

von Karl H. (kbuchegg)


Lesenswert?

Offenbar verwendest du die Routinen aus dem Tutorial.
Auf genau derselben Tutoriumsseite ist doch beschrieben, wie
man einen Wert aus einem Register ausgibt.

http://www.mikrocontroller.net/articles/AVR-Tutorial:_LCD#Zahlen_ausgeben

von Einsteiger (Gast)


Lesenswert?

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

von Karl H. (kbuchegg)


Lesenswert?

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

von Einsteiger (Gast)


Lesenswert?

"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!

von Bastler (Gast)


Lesenswert?

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

von Falk B. (falk)


Lesenswert?

@ 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

von Einsteiger (Gast)


Lesenswert?

ja danke ich versuche es

Danke an euch noch mal

von Stephan H. (stephan-)


Lesenswert?

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

von jack (Gast)


Lesenswert?

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

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.