Bascom: ADC umrechnen, LCD-Wert formatieren

Gast #406099
Lesenswert?

Hallo Leuts!


Ich bin hier mal wieder am Verzweifeln ...
Ich beschäftige mich noch nicht lange mit Bascom.
Ich möchte eine kleine U-Meßschaltung realisieren.
2 ADC Ports auslesen, umrechnen und auf gLCD ausgeben, Spannung bis 5
Volt, Uref = 5 V.

Also, das Auslesen und Umrechnen klappt schon, aber ich möchte den Wert
auf dem LCD formatieren. Unter 1 Volt soll in Millivolt angezeigt
werden, und zwar (absichtlich) so:

###.# mV ... ab 1 V dann
##.## V

Ich verwende den Befehl "format", aber irgendwie zeigt der ständig
lange Zahlen an. Mit "Fusing" fängt die Anzeige links an und wandert
-je mehr Stellen vorm Komma- nach rechts, das will ich verhindern.

Für einen ADC paste ich mal meinen (besch....) code, nicht lachen :)

-------------------------------------
Dim Adc0 As Word
Dim Vpre As Single
Dim V0 As Single
Dim C0index As String * 2

Config Adc = Single , Prescaler = Auto , Reference = Avcc
Start Adc

Vpre = 48876 / 10000000

Adc0 = Getadc(3)
V0 = Adc0 * Vpre

Dim V0test As String * 5

If V0 < 1 Then
V0 = V0 * 1000
C0index = "mV"
V0test = Str(v0)
V0test = Format(v0test , "     ")
Else
V0index = " V"
V0test = Str(v0)
V0test = Format(v0test , "     ")
End If

Locate 5 , 2
Lcd C0test
Locate 5 , 7
Lcd C0index
-------------------------------------

Ich hab mittlerweile schon Stunden gesucht und probiert ...
(die doppelte Ausführung von format im IF-Abschnitt ist noch vom
Probieren drin)
Wenn Lcd Fusing(...) von rechts nach links schreiben würde, wäre es
glaube ich kein Problem.

Für einen Rat bin ich sehr dankbar!


Grüße, Robert
Gast #406102
Lesenswert?

Hallo Jürgen,


vielen Dank, das hat funktioniert :)
Allerdings, sobald ich Vpre "genauer" machen will, also 489 oder
4887, dann auch die < 10000 und < 100 um die extra-Stellen vergrößere,
klappt das irgendwie nicht mehr, ich hab schon etliche Kombinationen
ausprobiert ... :)


Hmm, gleich noch eine Anfängerfrage (an alle) hinterher:
Ich habe noch einen DS18B20 hinzugefügt und lasse auch die Temperatur
anzeigen. Ich hab beide Abläufe in je ein Sub gepackt und rufe diese
nacheinander auf.
Das hat allerdings den Nachteil, daß erst wieder gemessen wird, wenn
die Temperatur ausgewertet wurde. Ist es möglich, 2 oder mehrere
Subs/Programmteile gleichzeitig aufzurufen?

Also zum Beispiel: Aktualisieren der Temp alle 30 sec, Messen am ADC0
alle 2 sec, am ADC1 alle 10 sec, Anzeige-Aktualisierung der Uhrzeit
alle 60 sec, usw.

Grund: Ich möchte noch ein paar andere Dinge hinzufügen, die alle
unterschiedlich oft aufgerufen werden sollen. Ich habe leider noch
keine Hinweise im Netz gefunden. Ich möchte später eine Art Menü
erstellen, welches alle Programmteile gleichzeitig anzeigt, aber halt
zu unterschiedlichen Zeitpunkten aktualisiert.
(Ich bin mir sicher, daß dies möglich ist, da ich so etwas schon
funktionieren gesehen habe :D)


Danke und Grüße,
Robert
Gast #406105
Lesenswert?

@Jürgen: Danke :)

@Marko: an Timer dachte ich auch schon, habe dann aber erst mal nur
etwas von Ports gelesen und nicht weiter geforscht. Werde mich gleich
mal da durchlesen :D

So als Anfänger hat man's schon nicht leicht ...
Hab das ganze Wochenende nur experimentiert, macht aber auch ne Menge
Spaß :D


Grüße, Robert

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren