Forum: Mikrocontroller und Digitale Elektronik Bascom avr Single umwandeln


von Wolfgang (Gast)


Lesenswert?

Hallo

Ich habe eine Single Variable (Luftfeuchte )
Anzeige auf Lcd

Will die jetzt seriell ausgeben  da reicht mir die Feuchtigkeit ohne
Kommazahlen nun versuche ich jetzt das Single in ein Byte umzuwandeln
und das zu übertragen (will mir die umwandlerei H-Byte ,L-Byte sparen)
Hatt da von euch einer eine einfache Lösung ?

Mfg

Wolfi

von André K. (andre-)


Lesenswert?

SINGLE CONVERSION
When you want to convert a SINGLE into a byte, word, integer or long
the compiler will automatic convert the values when the source string
is of the SINGLE data type.

integer = single

You can also convert a byte, word, integer or long into a SINGLE by
assigning this variable to a SINGLE.

single = long

Beste Gruesse,
André

von Wolfgang (Gast)


Lesenswert?

Tja das dachte ich auch (ist in C genauso) aber das klappt nicht .

Wennn ich zB eine Luftfeuchte von 74,56% habe dann die single variable
(feuchte) in eine Byte Variable(feuchte 2) schiebe dann schwankt die
Feuchte zwischen 52 und 55 hin und her .

Feuchte = Feuchte 2

was kann  das denn sein

Gruß Wolfi

von André K. (andre-)


Lesenswert?

Poste doch bitte mal den ganzen Code. Da muss etwas anderes
schieflaufen, denn das Typecasting funktioniert (gerade mit deinem
obigen Beispiel getestet).

Ich hoffe deine Variablennamen enthalten nicht wirklich Leerzeichen,
wie im Beispiel *g.

Beste Gruesse,
André

von Wolfgang (Gast)


Lesenswert?

hier mal mein Code vielciht kann man ja was daraus lesen warums nicht
Funktioniert

Dim F As Word
Dim Feu As Single
Dim Feu_ As Single
Dim Comp As Single
Dim Comp1 As Single
Dim Feuchte As Byte
Dim T As Word
Dim Temp As Single

Dim A As Byte



Cls
Anfang:


                                          '
Config Adc = Single , Prescaler = Auto
Start Adc

Do
F = Getadc(0)








Feu = F * 0.48875
'5 Volt / 1023=0,0048875
Feu_ = Feu / 100
Waitms 5


Comp = Feu_ / 5
Comp1 = Comp - 0.16
Feu_ = Comp1 / 0.0062



Feuchte =Feu_

Cls

Lcd " Rel" ; Fusing(feu_ , "#.##") ; " %"
Lowerline

Lcd Feuchte;



Waitms 600

Goto Anfang

von André K. (andre-)


Lesenswert?

Ich vermute, du hast den Codefetzen einfach aus deinem Projekt
herausgerissen, da mir das alles doch sehr unvollstaendig vorkommt. An
sich voellig wertlos, denn dieser Teil des Programms funktioniert
wunderbar. Bitte nochmal alles posten, inkl. der Initialisierungen.

Ansonsten ist da ein Do ohne Loop. Nimmt man das Do raus, wird bei
jedem Durchlauf der ADC initialisiert und gestartet - Schwachsinn.
Schwankungen koennen in diesem Teil des Programms nur durch externe
Schwankungen verursacht werden, d.h. das am ADC anliegende Signal
schwankt schon.

Beste Gruesse,
André

von Wolfgang (Gast)


Lesenswert?

Guten Morgen

Danke für deine Antwort .
Das ist schon mein ganzer Code hab da nur noch ein loop ganz unten
gehabt das hab ich rausgeschmissen und das Do vergessen dazu,

Klar Funktioniert das Programm  einwandfrei, die Luftfeuchte wird
ordungsgemäß ausgegeben aber dann diese  in ein byte umzuwandeln klappt
nicht !wiegesagt bei 75,74 %luftfeuchte umgewannelt (In ein Byte) gibt
52...55  (anzeige zweitezeile LCD) klar schwankt die Luftfeuchte im
Kommabereich das ist  nicht schlimm es Funktioniert nur die Umwandlung
nicht .(Feuchte =Feu_  )

Gruß

Wolfgang

von André K. (andre-)


Lesenswert?

Wie sollte das gehen? Wenn es im Simulator funktioniert, muss es auch
auf der ZielHW laufen.

Was mir als erstes auffaellt: Kein $regfile, kein $crystal, kein config
LCD. Auch wenn du das ueber den Wizard richtig eingestellt hast, ist es
besser, das explizit ins Programm zu schreiben. Weiterhin solltest du
testweise beide Stacks und die Framesize auf irgendwas groesser 70
stellen (auch wenn ich mir kaum vorstellen kann, dass das der
Verursacher ist. Eher die HW. Lass dir am besten mal den ADC Wert mit
aufs LCD ausgeben.

Beste Gruesse,
André

von André K. (andre-)


Lesenswert?

Benenne testweise auch die Variable feu_ mal anders. Da gibts bei Bascom
auch hin und wieder Probleme. So darf man zb keine Konstante namens fmul
 festlegen und gleichzeitig Multiplikationen im Programm nutzen.

Beste Gruesse,
André

von Wolfgang (Gast)


Lesenswert?

Danke André

jetzt klappts war die Variable Freu_  obwohl das andere eindwandfrei
Funktioniert hatnur das verschieben in eine Variable hat er nicht mögen


Danke noch mal

Wolfgang

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.