Forum: Mikrocontroller und Digitale Elektronik AD Wert auf dem LCD anzeigen lassen


von Marco H. (purzelbaum)


Lesenswert?

Moin,

ich hab mein Problem mit dem Ausgeben an das LCD hinbekommen.
Nun kommt aber das nächste große Problem.
Ich hab nach diesem Thema schon gesucht aber nichts wirklich hilfreiches 
gefunden.
Ich habe einen A/D Wandler, ich hab auch schon gespielt, dass wenn z.B. 
der Wert über einen bestimmten geht und Carry Flag gesetzt wird steht 
auf dem LCD z.B. 1. Zeile -> Analog Wert:
         2. Zeile -> >150 oder <150

so nun möchte ich aber den eingelesenen A/D Wert so ausgeben wie er im 
ADRES (PIC 16F76) steht. Mein Problem liegt darin, dass ich nicht weiß 
wie ich diesen Wert zerpflücken soll. Wenn der Wert bei "183" liegt, 
muss dieser ja auch in 3 Teile zerpflückt werden.
Ich hab absolut keinen ansatz, wie ich dieses Problem lösen kann.
Ich hab schon überlegt, das so zu machen:
A/D Wert = 183 - 100 -> variable "hundert" inkrementieren bis rest 83
A/D Wert =  83 -  10 -> variable "zehner" inkrementieren bis rest 3
A/D Wert =   3 -   1 -> variable "einer" inkrementiern bis rest 0

Und dann ausgeben. Bei dem LCD sind die Zahlen in der Matrix bei 0x60.
Dann müsste mann nur noch
0x60 + 0x01 für die "1"
ausgeben
0x60 + 0x08 für die "8"
ausgeben
0x60 + 0x03 für die "3"
ausgeben

So sieht finde ich einfach aus :-), ist es aber irgendwie nicht :-D

Wenn jemand einen Lösung hat, bitte posten :-) oder mir auf die Sprünge 
helfen ;-)

Gruß der Marco

von Gast (Gast)


Lesenswert?

Ansatz:

1. Wie oft steckt die 100 drin? So lange 100 abziehen bis Rest < 100.
2. "                  10   "  ? "        10   "                < 10.
3. Siehe oben ;)

So sparst du schonmal viel Zeit.
Die drei Ergebnisse dann mit dem Offset für die Zahl 0 im CGROM des 
Displays addieren und abschicken.

Grüße

von Gast (Gast)


Lesenswert?

Ach ja: Bevor du 100 oder 10 subtrahierst musst du natürlich noch 
prüfen ob die Zahl dafür größ genug ist.
Nach dem Motto

while(zahl>=100)
{
  zahl-=100;
  hunderter++;
}

etc.

von noch ein Gast (Gast)


Lesenswert?


von Marco H. (purzelbaum)


Lesenswert?

Danke für den Ansatz :-D Ich hatte vergessen zu schreiben, dass ich das 
ganze in Assembler mache :-). Aber ich glaube ich fang nächste wochen 
mit C an :-D :-D

von Karl H. (kbuchegg)


Lesenswert?

Dein Ansatz ist ja nicht schlecht.

> Ich hab schon überlegt, das so zu machen:
> A/D Wert = 183 - 100 -> variable "hundert" inkrementieren bis rest 83

Nicht bis rest 83, sondern: bis rest kleiner 100

> A/D Wert =  83 -  10 -> variable "zehner" inkrementieren bis rest 3

Nicht bis rest 3, sondern bis rest kleiner 10

> A/D Wert =   3 -   1 -> variable "einer" inkrementiern bis rest 0

Da brauchst du nichts mehr machen. Der aus dem vorhergehenden Schritt 
entstandene rest ist bereits die Einerstelle.

Alles was du können musst, ist also eine Schleife aufbauen, die solange 
läuft bis eine kleiner Bedingung zutrifft (und das sollte auch dann 
schon geprüft werden, wenn die Schleife das erste mal ansetzt).
Da das aber Assembler Basis Wissen ist, 2 Zahlen auf 
größer/kleiner/gleich/ungleich zu untersuchen, solltest du das unbedingt 
hinkriegen.
Wie das beim PIC ist, kann ich nicht sagen. Aber normalerweise hat ein 
µC so etwas wie einen Compare-Befehl der Prozessor-Flags setzt 
(Zero-Flag, Negativ-Flag udlg.) So ein Compare macht nichts anderes als 
die beiden Zahlen voneinander abzuziehen. Kommt dann zb 0 heraus, wird 
das Zero-Flag gesetzt und ein nachfolgender Jump Befehl kann das 
auswerten (und die Logik sagt dann: die beiden Zahlen waren gleich).
Wie gesagt, so funktioniert das bei den meisten µC. Wies beim PIC ist 
weiß ich nicht.

Eine gute Anlaufstelle, um mal zu sehen, wie andere Leute gewisse 
PIC-Programme schreiben, ist immer http://www.sprut.de

von Marco H. (purzelbaum)


Lesenswert?

Ahhhh ja jetzt habe ich es hinbekommen.
Ist zwar ein wenig fummelig, klappt aber und ist noch nicht mal ein 
wirklich schwieriger code :-)

Ich hab mein Tagesziel erreicht :-D

Wiedermals Danke an alle die geanwortet haben :-)
Besonderes Dankeschön geht an Gast :-) und Karl Heinz :-)
Echt gute Tips :-D

Gruß der Marco

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.