Anzeige:

Spannungsanzeige auf LCD

Hier finden sie die archivierten Beiträge des alten PHPBB Forums von www.loetstelle.net

Spannungsanzeige auf LCD

Von wolli54 am 27.07.2010 16:17

Guten Tag,
ich bin neu im Forum, da ich mich auch erst seit kurzem mit AVR beschäftige.
Ich habe einen Teil des BASCOM AVR-Kurses studiert.
Ich verfüge über ein Experimentierboard von Pollin, mehrere Mega32 und Mega8 sowie LCD-Anzeigen.
Es funktionieren schon einige Programme, bei anderen habe ich noch Probleme.
So habe ich z.B. die Funktion GETADC mit dem Programm aus dem Kurs kennengelernt. Auch die Ausgabe des Wertes auf dem LCD funktioniert mit erweiterten Texten (Spannung Kanal 1....).
Mein Problem sind die vielen Stellen hinter dem Komma. So genau ist die Messung doch nicht. Eine Umwandlung des Messwertes in einen String mit anschliessender Formatierung auf 2 Nachkommastellen funktioniert zwar ohne Fehler im BASCOM, aber nicht in der Schaltung. Können Sie mir dazu einen Tipp geben?

Von BellaD am 27.07.2010 21:02

moin

ohne Sourcecode bleibt nur raten Cool Cool Cool

Tip : Variablen Zuweisung auf Typ überprüfen

Von wolli54 am 29.07.2010 08:47

Guten Tag,

zur besseren Verdeutlichung sende ich den Quellcode für Bascom. Vielleicht kann mir damit jemand helfen. Eigentlich sollte das Problem schon mal aufgetreten sein. Die Begrenzung auf eine gewisse Stellenzahl ist doch bei jeder Meßaufgabe notwendig (Temperatur, Spannung...). Irgendwie habe ich das Prinzip noch nicht verstanden, möchte aber in BASCOM bleiben.

Wolfgang


'--------------------------------------------------------------------------------
'name : getadc test.bas
'micro : Mega32
'geänderte bzw. erweiterte Version des Beispiels aus dem Kleinen Bascom AVR Kurses
'zum Thema A/D-Converter mit dem Befehl GETADC
'--------------------------------------------------------------------------------
$regfile = "m32def.dat" ' we use the Mega 32
$crystal = 2000000
$hwstack = 32 ' default use 32 for the hardware stack
$swstack = 10 ' default use 10 for the SW stack
$framesize = 40 ' default use 40 for the frame space
Const Adc_multi = 0.00488288125
'configure single mode and auto prescaler setting
'The single mode must be used with the GETADC() function
'The prescaler divides the internal clock by 2,4,8,16,32,64 or 128
'Because the ADC needs a clock from 50-200 KHz
'The AUTO feature, will select the highest clockrate possible
Config Adc = Single , Prescaler = Auto , Reference = Avcc
'Now give power to the chip
Start Adc
Dim Messergebnis As Word , Channel As Byte
Dim W As Single
Dim T As String * 1
Channel = 0
'now read A/D value from channel 0
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
'Zuordnung der Anschlüsse von LCD und AVR
Cls
Cursor Off
Locate 1 , 1
'Löschen der Anzeige, Ausschalten Cursor und Setzen des Anfangs der Darstellung
Do
Messergebnis = Getadc(channel)
W = Messergebnis * Adc_multi
'Start des ADC, Multiplikation mit berechneter Konstante
T = Str(W)
T = Format(T , "0.00")
'Umwandlung des Anzeigewertes in String und Formatierung; funktioniert aber
'noch nicht, Ziel ist eigentlich Darstellung 1,23 Volt - also nur 2
'Nachkommastellen
Lcd "Spannung " ; "Kanal " ; Channel
Locate 2 , 1
Lcd "" ; T ; " Volt"
Incr Channel
If Channel > 7 Then Channel = 0
'Anzeige des Messergebnisses mit Kanaldarstellung
Wait 2
Cls
Loop
End

Von BellaD am 29.07.2010 12:54

Zitat:

Dim W As Single
Dim T As String * 1




A string is used to store text. A string must be dimensioned with the length specified.


DIM S as STRING * 5


Will create a string that can store a text with a maximum length of 5 bytes.

The space used is 6 bytes because a string is terminated with a null byte.



Wink

Von wolli54 am 29.07.2010 15:02

Hallo BellaD,

Vielen Dank für Die Antwort.
Ich komme trotzdem damit nicht klar. Meine Einstellung würde ja bedeuten, der Text hat eine Länge von 1 byte. Warum ist die Anzeige dann trotzdem 10 Stellen lang?
Das Format ist 1.123456789, ändere ich den Bereich Format von "000" auf "+", wird ein + vor die Zahlenkolonne geschrieben; schreibe ich stattdessen "0.00" lautet die Anzeige 1.1234567.89. Es werden also Formatierungen angenommen, ausser denen, welche die Länge definierern sollen.
Wenn ich allerdings einen Kanal nach Masse kurzschliesse, lautet die Anzeige "0.0 Volt".

Wolfgang

Von BellaD am 29.07.2010 17:23

moin

Da dein Messwert in 'single' vorliegt ,dürfte Format nicht so das richtige sein ( Bascom Hilfe !)
nimm lieber ' Fusing '

http://avrhelp.mcselec.com/index.html?fusing.htm

Code:

Do
Messergebnis = Getadc(channel)
W = Messergebnis * Adc_multi
'Start des ADC, Multiplikation mit berechneter Konstante
'###T = Str(W)
'###T = Format(T , "0.00")

T = Fusing(W , "#.##") 'Formatting data for appropriate display
.....


und nicht vergessen den String 'T' mit mindestens 6 Zeichen zu dimensionieren (vielleicht willst du ja mal ein Vorzeichen mit anzeigen.

mfg

Ps. Ich hasse Bascom Evil or Very Mad

Von wolli54 am 30.07.2010 08:36

Hallo BellaD

das scheint der entscheidende Hinweis zu sein. Vielen Dank. Leider kann ich erst am Dienstag eine (Erfolgs-)Meldung verkünden.

Wolfgang

Von wolli54 am 03.08.2010 12:09

Hallo!
Diese Antwort war wie angedeutet genau die richtige Lösung.
Jetzt funktioniert es so wie ich wollte.
Nochmals vielen Dank!

Wolfgang

Anzeige: