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

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.