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
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
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.
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.