www.mikrocontroller.net

Forum: Projekte & Code Thermometer mit ds18s20 und LED Annzeige


Autor: Paul Baumann (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!
Hier ist ein Prg für ein Thermometer mit 7 Segment LED
Anzeige.
Vielleicht kann es auch ein anderer brauchen!

MfG Paul

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und das funktioniert wirklich ?

Ich kann nirgends die mindestens 500ms Wartezeit für die Wandlung
entdecken und das Busy-Waiting ist ja auch auskommentiert.

Wenns also doch funktioniert widerspricht es jedenfalls völlig den in
dem Datenblatt angegebenen Methoden.


Auch dürfte das Digit0 wesentlich heller leuchten, da ja dann immer die
Mainloop länger dauert wegen der 1-wire Sachen.
Deshalb multiplexe ich immer im Timerinterrupt.


Peter

Autor: Paul Baumann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Peter!
Ja, das funktioniert wirklich! ...und ganz ohne Assembler :-)))
Ich konnte nach dem Testen die Busy Abfrage herausnehmen, da es
offenbar mit dem Wandeln im DS1820 schneller geht als angegeben.

Mit dem letzten Digit hast Du recht; es ist ein kelin wenig heller.
Aber es ist scön, wenn einer das PRG im Kopf durchforstet und es nicht
nur einfach so hinnimmt!

MfG Paul

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich vermute mal, der DS18S20 ignoriert weitere Startbefehle während der
Wandlung und hat ein extra Latch, daß die alte Wandlung ausgibt,
solange die neue noch läuft.

Da das aber alles undokumentiert ist, würde ich es lieber nicht so
machen.

Die alten DS1820 hatten jedenfalls während einer Wandlung nur Mist
ausgegeben.


Für eine 1/10 Grad Anzeige sollte man außerdem nur alle 5s oder noch
länger wandeln, da sonst der erhöhte Stromverbrauch während der
Wandlung eine merkbare Eigenerwärmung verursacht (+0,1..0,3°).


Peter

Autor: Paul Baumann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Peter!
Ich habe mir ein Präzisionsthermometer geliehen, welches
am gleichen Messort 0,1 Grad weniger anzeigt. Die Linearität
ist im ganzen Bereich gleich gut. Somit bin ich ganz zufrieden
mit dem Resultat.
Ich habe das Display aus einer alten Personenwaage. Weil es so
schön gross ist, (5 cm hohe Ziffern) habe ich halt das Thermometer
gebaut.
Ich baue schon seit etlichen Jahren Ekeltronikkram, aber noch nicht
sehr viel mit MC s.
Da ja die Syntax von Assemblern immer eine andere ist, arbeite ich
lieber mit Basic oder Pascal.

Du schriebst, dass Du lieber im Timerinterrupt multiplext. Davon
riet mir mein Arzt auf Befragen ab.
Er empfahl statt dessen intravaginale Injektionen!

MfG Paul

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"0,1 Grad weniger anzeigt"

Das ist aber purer Zufall, der Fehler darf ja bis zu +/-1° betragen.


Die Eigenerwärmung kriegst Du aber nur so raus, daß Du den Sensor
längere Zeit (>30min) im Standby, d.h. ohne Wandlung an ruhiger Luft
betreibst und danach die Wandlungen aktivierst.
Dann wirst Du ab der 1. Messung ein Ansteigen beobachten und daß ist
dann der Fehler durch die Eigenerwärmung.


Wenn Dein Arzt was von Timerinterrupts versteht, dann hat er den
falschen Beruf und Du solltest ihn schleunigst wechseln. Er kann ja
nicht mal Dein Geschlecht erkennen (intravaginale Injektionen!).


Peter

Autor: Henning Halm (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Man sollte die Kirche im Dorf lassen. Ich finde es toll, wenn ein
Hobbyelektroniker sein Programm ins Netz stellt. Vielleicht ist es
Zufall, vielleicht wurde der DS18S20 verbessert, auf jeden Fall scheint
es zu funktionieren. Am einfachsten ist es, wenn es der Zweifler selbst
ausprobiert und dann sein Ergebnis mitteilt. Mit Pauschalaussagen ist
niemanden gedient.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Henning

"Am einfachsten ist es, wenn es der Zweifler selbst
ausprobiert und dann sein Ergebnis mitteilt. Mit Pauschalaussagen ist
niemanden gedient."

Ich habs ausprobiert und dabei besagte Eigenerwärmung beobachtet.

Es geht ja auch aus dem Datenblatt hervor:

Standby: 1µA
Active: 1,5mA

Und 5V * 1,5mA = 7,5mW sind schon beträchtlich. Das wird Dir auch jeder
bestätigen, der andere Sensoren (z.B. PT100) nimmt.


Es sei denn, man will die Erwärmung absichtlich haben, z.B. um die
Strömungsgeschwindigkeit zu messen.


Peter

Autor: ---- (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Henning:
Wem wäre dann geholfen, wenn Codebeispiele hier vorgestellt werden, von
denen man nicht sicher sein kann, daß sie funktionieren?

Einem Anfänger ohne Referenzwissen? sicher nicht.
Einem ders sowieso schon besser weiß? der braucht das Codebeispiel
nicht.

Also kritische Betrachtung ist enorm wichtig. Peter konnte sogar die
Nebenwirkungen (LED heller) aus dem Code rauslesen. Und das das
Originalprogramm sich nicht um das Timing/Ausleseintervalle usw.
kümmert, mag in diesem Falle funktionieren - im Nachbaufalle aber evtl.
nicht!

---- (QuadDash).

Autor: Paul Baumann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Männer und Frauen!

Ich habe das Prg für ein simples Zimmerthermometer geschrieben.
Es erhebt keinen Anspruch auf absolute Genauigkeit und Perfektion.

Ich denke, +/- 0,1 Grad reichen für das Wohnzimmer.:-))

Wenn sich aber jemand berufen fühlt, Verbesserungen und ent-
sprechende Änderungen einzuarbeiten: Feuer frei!

Es werden ohnehin nicht viele Codebeispiele in das Forum gestellt;
da dachte ich mir nichts Böses.

Mfg Paul

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Paul,

"Ich habe das Prg für ein simples Zimmerthermometer geschrieben.
Es erhebt keinen Anspruch auf absolute Genauigkeit und Perfektion."

das hat ja auch niemand verlangt.

Aber es muß schon erlaubt sein, Verbesserungsmöglichkeiten zu
benennen.
Ob Du sie auch ausprobierst ist allein Deine Sache.

Ich freue mich jedenfalls immer, wenn jemand was zu meinen Beispielen
schreibt und besonders, wenn er anderer Meinung ist oder Verbesserungen
findet, denn nur dadurch kann man lernen.


Und wenn Du nicht weißt, was "multiplexen im Timerinterrupt"
bedeutet, dann brauchst Du das nur zu sagen, das nimmt Dir keiner
übel.
Aber dann blöde Sprüche abzulassen, das ist nicht schön :-(

Das hat auch nichts mit Assembler zu tun, auch in Bascom kann man
Interrupts benutzen.


Peter

Autor: Paul Baumann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Peter

Peter, ich wollte Dir nicht in irgendeiner Art auf den Schlips
treten. Ich habe auch nichts gegen Kritik und Anregungen. So habe
ich das nicht gemeint und gewollt.

Auch weiss ich, was ein Timerinterrupt ist, wie man ihn in Bascom
programmiert und multiplexen konnte ich in meinem PRG auch genug :-)

Ich habe ein lebhaftes Vorstellungsvermögen, deshalb habe ich mir
vorgestellt, wie DU im Timerinterrupt multiplext (ROTFL). Siehe Deine
erste Antwort.

Das war nicht so bierernst zu sehen.

MfG Paul

Autor: Paul Baumann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So, das Gerät existiert nun in 4-facher Ausführung und die
Messwerte sind am gleichen Ort auch gleich hoch. (Bis auf den
unvermeidlichen Digitfehler in der Kommastelle).

@ QAUDDASH:Es ist also reproduzierbar.

MfG Paul

Autor: stromi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Paul
sollte dich nicht abschrecken hier zu posten.
meine Codes sind zB. auch nicht immer eingerückt wie es sein sollte,
soll ja helfen.... Und das Programm "funst" auch bei mir, zwar mit
LCD
aber auch wunderbar.
Tschaui

Autor: Paul Baumann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Stromi!

Na da bin ich ja entzückt. (Wie Kojak sagen würde) :_))

MfG Paul

Autor: mike (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Paul Baumann

Habe dieses Programm mal mit Bascom 1.11.9.0  compiliert
und es erscheinet ein Fehler für

Fourdigitdisplay = Format(str(decigrades) , "00") + 
'Format(str(tfrac) , "00")

kann es sein das dies aus der neueren Version herrührt und die damalige
Version dies nicht erkannte.

Programm ist ja auch schon 5 jahre alt.

gruß mike

Autor: Paul Baumann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Möglich ist alles. :-)
Nein, im Ernst: WAS für eine Fehlermeldung gibt es denn? Mit der Version
1.11.8.1 habe ich es ebn noch einmal fehlerfrei kompilieren können.

MfG Paul

Autor: mike (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Paul

Also:

Error: 213 Line 50
String expected for assigment[STR(DECIGRADES)]

Error:  13 Line 50
Incalid datatype[[0011]200]

Error: 124 Line 50
Loop expected

wenn ich die Zeile rauskommentiere ,compiliert er es,aber dann fehlt
ja was.

danke Mike

Autor: Paul Baumann (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Keine Ahnung, was bei Dir passiert. :-(

Ich habe Dir mal die .hex-Datei angehangen, die ich eben noch einmal 
daraus
"hergestellt" habe.

MfG Paul

Autor: mike (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habe mir eben noch mal das Demo geladen ist 1.11.8.7

Jetzt kommt nur der Fehler 13  Invalid datatype[200].

Die Älteren Demo´s habe ich leider nicht,hatte mir mal
Bascom gekauft,letztes Jahr und dacht das ich so auf dem neuesten
Stand bin und alle bugs die bisher enthalten sind beseitigt.

mfg Mike

Autor: mike (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke werde ich mal probieren.

Mike

Autor: Paul Baumann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nein, das ist wie bei jeder Software: kleinere Bugs werden nach und nach 
durch größere ersetzt. ;-))

MfG Paul

Autor: mike (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wohl wahr, hoffe das ich das Thermometer so hin bekommen.Wenn
nicht melde ich mich noch einmal.

mfg Mike

Autor: Avr Nix (avrnix) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Paul,

schönes Projekt! Hatte das mal vor paar Jahren mit einen Nokia Display 
wie hier beschrieben gemacht 
http://comwebnet.weimars.net/index.php?option=com_...

ist auch in Bascom, hatte mir da im Netz eine Tabelle gefunden welches 
eine Auflösung von 0,1 Grad versprach, obwohl der Sensor +-0,5 Grad 
Messen kann
(DS18S20).

Musstest du was kalibiren oder eine Konstante einbauen?
Weil +-0,1 Grad ist schon was!

Autor: Paul Baumann (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Die Routine stammt aus dem Datenblatt vom Onkel Dallas/Maxim. Ich habe 
es mal angehängt.

MfG Paul

Autor: Paul Baumann (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hier noch ein paar Bilder vom Apparat.

Paul

Autor: Rolf Im forum (for_ro)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

mike wrote:

> Fourdigitdisplay = Format(str(decigrades) , "00") +
> 'Format(str(tfrac) , "00")

Hier bekommst du den Fehler wegem des "+"-Zeichens am Ende der Zeile. 
Wenn du den zweiten Teil auskommentieren willst, dann mach das ' vor das 
+

Den Format Fehler bekommt man, weil Bascom früher erlaubt hat, als Input 
für die Format Funktion nicht nur einen String, sondern auch eine 
Funktion, die einen String zurückgibt, zu verwenden. Heute geht das 
nicht mehr. Du musst also so schreiben:

Temp_str = str(decigrades)
Fourdigitdisplay = Format(Temp_str , "00")
Temp_str = str(tfrac)
Fourdigitdisplay = Fourdigitdisplay + Format(Temp_str , "00")

@avr_nix
Warum denkst du , dass der DS18s20 nur 0,5° Auflösung hat? Er hat 
tatsächlich 1/16 ° Auflösung, überträgt diese aber nicht in den Bytes 1 
und 2, sondern im Byte 7. Musst du dir im Datenblatt mal durchlesen. Die 
besagte Tabelle verspricht ja nicht die Auflösung, die muss der Sensor 
schon liefern und tut es auch.

Gruß

Rolf

Autor: mike (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für die Antwort:

Habe jetzt das mal getestet.Musste aber noch
Temp_str = str(tfrac) auskommentieren.
str(tfrac) ist ja nicht declariert und ich weiss auch nicht
wozu.Wenn ich das so mache funzt es.

was auch noch dazu kommt ist der unterstich der entfernt
werden musste,sehe ich das so richtig.
Temp_str = str(decigrades) in  Tempstr = str(decigrades)


mfg Mike

Autor: Rolf Im forum (for_ro)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Mike,
ja, es muss Tempstr heissen, weil die Variable ja so deklariert ist. 
Hatte ich aus dem File Thermometer0_1.bas falsch in Erinnerung.
Ich schätze mal, dass der Autor mit tfrac den Nachkommateil meinte, der 
aber jetzt im Programm nicht mehr enthalten ist.

Gruß

Rolf

Autor: Paul Baumann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich hatte "Tempstr" im Text. Wenn Du die Änderung von Rolf nehmen 
willst,
mußt Du natürlich alles andere auch "Temp_str" nennen.

MfG Paul

Autor: mike (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke,muss morgen erst mal die Hartware aufbauen.
Dann wird sich herausstellen,ob es funktioniert.
Habe ja auch die HEX von Paul Baumann bekommen,
denke das diese 100% läuft.Er hat ja schon einige Anzeigen
am laufen.

mfg Mike

Autor: Mike Köppl (helimike0705)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo ,

So habe mir das Thermometer mal auf dem Steckbrett aufgebaut.
Funktioniert prima,habe auch eine kleine änderung vorgenommen.
Jetzt leuchten die Segmente gleich hell und ein kleines Gradzeichen
im oberen Teil wird bei mir angezeigt.Okay eine kleine einschränkung,
die mich aber nicht stört,ist,die anzeige wird nach rund 20 sek. immer
kurz (1/10 tel sek. denke ich)dunkel geschalten.
Habe so mit einfachen mitteln die Erwärmung des Sensors eliminiert und
eine gleichbleibende helligkeit.

Danke nochmal an "Peter" und "Rolf Im forum"

Gruß Mike

Autor: Paul Baumann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Na prima! Da gibt es nun 5 Geräte davon. :-)

MfG Paul

Autor: Mike Köppl (helimike0705)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Entschuldige : Nicht Peter soll es sein .
der Dank geht an "Paul Baumann".

Dies wollt ich nur noch klarstellen.

Wenn mein projekt fertig ist gibt es auch noch ein Bild.

Mike

Autor: Paul Baumann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für den Dank. ;-)

MfG Paul

Autor: Paul Baumann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich hatte erst eine Sequenz drin, die darauf wartete, daß der DS1820
"FF" zurückgibt, als Zeichen dafür, daß er mit dem Wandeln fertig ist.

Er ist aber wesentlich schneller fertig damit, als es im Datenblatt 
steht.
Dadurch konnte ich das auskommentieren. Der Meßwert blieb der Gleiche.

Ich nehme an, daß der Onkel Dallas/Maxim auf "Nummer sicher" gehen 
wollte.

Wurst-Käse Fall, oder wie das heißt. ;-)

MfG Paul

Autor: Mike Köppl (helimike0705)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Paul,
und der Rest des Forums.Paul habe mal dein Thermometer nachgebaut und 
auch gleichzeitig erweitert,man kann jetzt Mini- und Maximal-temperatur
abfragen.Die Anzeige ist gleichmässig hell und die DS1820 abfrage wird
auch etwa alle 5 Sekunden abgefragt.Das aufrufen der Mini bzw. 
Maxi-temp.wird auch rund 5 Sekunden angezeigt,der wechsel ist natürlich 
auch möglich innerhalb der 5 sek.Denke das du damit einverstanden bist, 
das ich dein Programm benutzt habe und ein klein wenig verändert.

Habe mit diesem Teil wieder einen menge gelernt,danke.


mfg Mike Köppl

Autor: Paul Baumann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Na freilich bin ich einverstanden. Deswegen habe ich ja den Quelltext 
veröffentlicht, damit man ihn verändern und auf seine Bedürfnisse 
zuschneiden kann.

Daß das "C" für Celsius bei mir heller leuchtet als die anderen Segmente
hatte ich absichtlich so gemacht, damit man gleich sieht, daß das ein 
Thermometer ist.

MfG Paul

Autor: Max (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das könnte was sein, was ich mal nachbauen könnte freu

Habt ihr die Segmentanzeige direkt an den AVR gehängt, oder über ein 
Treiberarray wie das ULN2003?

In der bas-Datei steht das leider nicht genau drin.

Gruß und vielen Dank für die Anregung

Max

Autor: Paul Baumann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, die Anzeigen hängen direkt (über entsprechende 
Segmentvorwiderstände) und 4 Treibertransistoren am MC. Es wird wohl bei 
neueren sog. Low-Current Anzeigen auch ohne die Transistoren gehen. 
Natürlich muß dann die Invertierung (der NOT-Befehl) raus.

MfG Paul

Autor: Max (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok,

danke für die Antwort. Besser ist es dann über 4 PNP-Transistoren  oder?
Desweiteren habe ich gerade mal geguckt, ob es schon Anzeigen gibt, bei 
denen die Segmente bereits zusammengefasst sind, damit ich diese 
multiplexen kann und nicht alle einzeln verdrahten muss....habe aber 
leider nichts gefunden.

Autor: Paul Baumann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Besser ist es dann über 4 PNP-Transistoren  oder?
Das hängt davon ab, ob Du Anzeigen mit gemeinsamer Anode oder 
gemeinsamer Kathode hast.

Vierstellige Anzeigeelemente gibt es in rauhen Mengen. ;-)

Zum Bleistift:

http://www.conrad.de/Bauelemente-Bausatze/4_digit_led.sap

...oder Du gehst zum freundlichen Fernsehmann, läßt Dir einen alten 
Sat-Receiver geben und veranstaltest ein schönes Schlachtfest. :-)

MfG Paul

Autor: Max (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"...oder Du gehst zum freundlichen Fernsehmann, läßt Dir einen alten
Sat-Receiver geben und veranstaltest ein schönes Schlachtfest. :-)"

Habe ich mir auch schon gedacht, da ich da ja arbeite^^
Aber in den alten zB GRundig sind einzelne drin, die über ein IC 
angesteuert werden.

Autor: Tobias Xxx (tobiasblome)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Paul!
Tolles Programm!!! Super!!!

Ich habe auch noch eine Änderung:

meine Anzeige flackert etwas und deswegen habe ich die 6ms 
rausgenommen... nun leuchten die Segmente nach....

deshalb direkt unter die ehemaligen 6ms:

Portb = 0 'um das Ghosting zu vermeiden


mfg, Tobias

Autor: Tobias Xxx (tobiasblome)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
gibt es eine einfache Möglichkeit die Zahlen umzudrehen?
Also wenn ich in die Variable Decigrades = 1234 schreibe steht auf der 
Anzeige 4321 - wie kann ich das ändern?

Tobias

Autor: Paul Baumann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Klar. ;-) Die Basisanschlüsse der Digit-Treiber sind bei Dir in der 
falschen Reihenfolge angeschlossen.
Der 4. muß der 1. sein
der 2. der 3.
der 3. der 2.
und der 1. der 4.

MfG Paul

Autor: Tobias Xxx (tobiasblome)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ja - naja ich dachte man könnte das software mäßig "mal eben" ändern...

hatte diesen Teil geändert aber ohne Erfolg...

old:

 Incr Digit
    If Digit = 4 Then
   Digit = 0
   End If

und so hab ich geändert...

 decr Digit
    If Digit = 0 Then
   Digit = 4
   End If

aber das geht leider nicht...

Autor: Paul Baumann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dann mußt Du vorher DIGIT auf den Startwert 4 einstellen, denn die 
Variable hat ja jetzt beim Start 0.

MfG Paul

Autor: Tobias Xxx (tobiasblome)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
also wenn ich nur den Startwert ändere ändert sich auf der anzeige 
nichts an der Reihenfolge.

Das muss ich mir noch mal überlegen woran das liegt.

Tobias

Autor: Tobias Xxx (tobiasblome)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ok - ich habe die Anzeigen getauscht ;-)
das war dann doch das einfachste.

Kann man die führenden Nullen entfernen und durch ein Leerzeiche im 
String oder so ersetzen?

Tobias

Autor: Paul Baumann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
If Val(tempstr) = 0 Then        'Führende Nullen wegblenden
   If Digit = 0 Then : Portd.2 = 1 : Portb = 1
   End If
End If

Setz das mal vor die SELECT CASE- Anweisung. Ich kann es jetzt nicht in 
Natura testen, weil das Thermometer nicht hier ist. Auf Deutsch:

Wenn der Ziffernwert Null ist UND das erste Digit ist dran, dann mache 
die Segmente aus und steuere den 1.Transistor nicht an.

MfG Paul

Autor: Tobias Xxx (tobiasblome)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Paul,

nun wird die ertse 0 ausgeblendet. Die anderen Nullen natürlich noch 
nicht.

Kannst du mir den Code bitte noch etwas erklären?

__
If Val(tempstr) = 0 Then        'Führende Nullen wegblenden
   If Digit = 0 Then : Portd.2 = 1 : Portb = 1
   End If
End If
____

Steht in Val(tempstr) nicht der String mit 4 Stellen drin? also zum 
Beispiel 0012? wie kann ich das dann mit 0 vergleichen?

Gibt es nicht eine Möglichkeit zu sagen wenn Val(tempstr) = "00##" then
die beiden ersten Digits abschalten?


mfg, Tobias

Autor: Tobias Xxx (tobiasblome)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
oh Denkfehler:
in Val(tempstr) steht immer nur die aktuelle Stelle drin

Autor: Tobias Xxx (tobiasblome)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hab es nun so versucht - etwas aufwendig aber es geht...


Dim Digit0 As Bit        'Merker =0 wenn 1. Stelle =0
Dim Digit1 As Bit

'Tausenderstelle
If Val(tempstr) = 0 Then                      'Führende Null wegblenden
   If Digit = 0 Then : Portc.1 = 0 : Digit0 = 0   ': Portb =0 
'C.1=Digit Transistor
   End If
End If
'Hunderterstelle
If Val(tempstr) = 0 Then                         'Führende Null 
wegblenden
  If Digit = 1 And Digit0 = 0 Then : Portc.2 = 0 : Digit0 = 1 :Digit1 = 
0 'C.2=Digit Transistor
   End If
End If
'Zehnerstelle
If Val(tempstr) = 0 Then                          'Führende Null 
wegblenden
  If Digit = 2 And Digit1 = 0 Then : Portc.3 = 0 :Digit1 = 1 
'C.3=Digit Transistor
   End If
End If



gruß, Tobias

ps wenn jemand eine "sauberere Idee hat gerne posten

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.