mikrocontroller.net

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


Autor: Marco Hinrichs (purzelbaum)
Datum:

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

Autor: Gast (Gast)
Datum:

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

Autor: Gast (Gast)
Datum:

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

Autor: noch ein Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Marco Hinrichs (purzelbaum)
Datum:

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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

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

Autor: Marco Hinrichs (purzelbaum)
Datum:

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

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.