Mache doch vorher ein CLS
Hallo,
ich habe mir mal ein kleines Wattmeter Programm gebastelt.
welches man später mit nur wenig externen Bauteilen in die Praxis umsetzen könnte.
Nur leider besitzt das Programm einen kleinen Schönheitsfehler.
Bei 8,1 Watt Leistung wird korrekt "8.1W " angezeigt.
Steigt die Leistung auf 10,1 Watt wird auch korrekt "10.1W" angezeigt.
Jetzt kommt der Schönheitsfehler. Wenn die Leisung aber wieder auf 7,9V absinkt wird aber leider "7.9WW" angezeigt.
Kann man die ...
Lcd Fusing(watt , "#.#") ; "W"
... Zeile so abändern das da was vernünftiges rauskommt?
gruß CaliCode:$regfile = "m8def.dat" $crystal = 1000000 $hwstack = 40 $swstack = 30 $framesize = 60 Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , _ Db7 = Portd.7 , E = Portd.3 , Rs = Portd.2 Config Lcd = 16 * 2 Cursor Off Cls Dim Messvolt As Word Dim Messstrom As Word Dim Volt As Single Dim Strom As Single Dim Watt As Single Const Spannungsfaktor = 0.0048828125 Const Stromfaktor = 0.0048828125 Do Config Adc = Single , Prescaler = Auto , Reference = Avcc Start Adc Messvolt = Getadc(0) Messstrom = Getadc(1) Volt = Messvolt * Spannungsfaktor Strom = Messstrom * Stromfaktor Watt = Volt * Strom Locate 1 , 1 Lcd "Wattmeter" Locate 1 , 12 Lcd Fusing(watt , "#.#") ; "W" 'siehe Text Locate 2 , 3 Lcd Fusing(volt , "#.#") ; "V" Locate 2 , 11 Lcd Fusing(strom , "#.#") ; "A" Waitms 100 Loop End
Mache doch vorher ein CLS
Signatur??? kann ich mir nicht leisten!!!
Hallo Rofo88,
danke für deinen Hinweis, aber für Cls in der Hauptscheife ist das Display etwas zu träge.
Es flackert, vielleicht lässt sich das flackern mit ...
Cls 1 , 16 , 16
... in den Griff bekommen aber irgendwie funktioniert das nicht und aus der Hilfe werde ich auch nicht wirklich schlau.
gruß Cali
Ich gebe in solchen Fällen an der betreffenden Stell erst so viele Leerzeichen aus, wie der Text maximal lang sein kann. Dann springe ich direkt wieder zurück, und überschreibe die Leerzeichen mit den Daten.
Und wenn man es wirklich gut machen will, schreibt man sich ne Funktion, die die Zahlen immer in fester Position ausgibt, also bei kleinen Zahlen führende Nullen oder Leerzeichen einfügt. Dazu müsstest du theoretisch nur testen, ob watt kleiner 10, und dann erst ein Leerzeichen schreiben. Das liest sich dann auch viel angenehmer, weil die Position nicht springt.
Hallo uwegw,
danke für deine tipps.
Die erste Variante funktioniert zwar ist aber sehr unschön, weil man auch wieder das flackern hat.
Die 2. Variante klingt vernünftig, mir wäre es auch lieber wenn der Punkt nicht hinundherspringt. Leider habe ich keine Vorstellung wie eine solche Funktion aussehn könnte. Kennst du dafür irgend ein Guide oder Codebeispiel.
Ps: Hätte vielleicht erwähnen sollen, das ich ein absoluter Neuling in Sachen Programmierung bin. Hab mir gestern mittag meine myAVR Platine zusammengelötet und am abend meinen erstes Programm getippt.
gruß Cali
Man kann das fusing erst in einen String machen, und dann mit LEN() fragen, wie lang die Sache geworden ist. Daraus kann man die Anzahl der notwendigen Füll-Blanks festellen.
Angenommen, du willst immer 4 stellen haben
Code:DIM flo AS SINGLE DIM ss AS STRING * 10 DIM fil AS BYTE flo = 8.7 ' z.B. ss = FUSING(flo, "#.#") fil = 4 - LEN(ss) If Fil > 0 Then LCD Spc(fil) ; End If LCD Ss ; "W"
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
Du machst erst dein Locate, und dann
If watt<10 Then
Lcd " "
Endif
Danach dann die Ausgabe.
(Hoffe, das funktioniert so. Hab jahrelang kein Bascom benutzt.)
Jo, erst eine Leerzeichen ausgeben und dann die Zahl mit W.
Oder jedesmal ein "W " ausgeben, dann wird das "W" das stehenbleibt überschrieben.
Das Gegenteil von "gut" ist "gut gemeint"!
Hallo
Mach es doch so:
Code:If watt <10 then Locate 1 , 12 Lcd " "; Fusing(watt , "#.#") ; "W" Else Locate 1,12 Lcd Fusing(watt , "#.#") ; "W" end if
mfg Luca
Sollte ein Bild von mir nicht angezeigt werden, einfach eine PM schicken!
Problem gelöst!
Hab den Vorschlag von PicNick mal unter die Lupe genommen, ihn aufgebröselt und nochmal etwas vereinfacht.
Strom, Spannung und Leistung werden jetzt korrekt sowie flimmerfrei angezeit. Desweiteren ist der Code übersichtlicher geworden und kann ohne weiteres auf x beliebige Stellen erweitert werden.
gruß caliCode:$regfile = "m8def.dat" $crystal = 1000000 $hwstack = 40 $swstack = 30 $framesize = 60 Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , _ Db7 = Portd.7 , E = Portd.3 , Rs = Portd.2 Config Lcd = 16 * 2 Cursor Off Cls Dim Messvolt As Word Dim Messstrom As Word Dim Volt As Single Dim Volt_a As String * 10 Dim Strom As Single Dim Strom_a As String * 10 Dim Watt As Single Dim Watt_a As String * 10 Const Spannungsfaktor = 0.0048828125 Const Stromfaktor = 0.0048828125 Do Config Adc = Single , Prescaler = Auto , Reference = Avcc Start Adc Messvolt = Getadc(0) Messstrom = Getadc(1) Volt = Messvolt * Spannungsfaktor Strom = Messstrom * Stromfaktor Watt = Volt * Strom Locate 1 , 1 Lcd "Wattmeter" Volt_a = Fusing(volt , "#.#") If Len(volt_a) = 3 Then Volt_a = " " + Volt_a + "V" Else Volt_a = Volt_a + "V" End If Locate 1 , 12 Lcd Volt_a Strom_a = Fusing(strom , "#.#") If Len(strom_a) = 3 Then Strom_a = " " + Strom_a + "A" Else Strom_a = Strom_a + "A" End If Locate 2 , 12 Lcd Strom_a Watt_a = Fusing(watt , "#.#") If Len(watt_a) = 3 Then Watt_a = " " + Watt_a + "W" Else Watt_a = Watt_a + "W" End If Locate 2 , 3 Lcd Watt_a Waitms 250 Loop End
Lesezeichen