www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Bascom avr Single umwandeln


Autor: Wolfgang (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: André K. (andre-)
Datum:

Bewertung
0 lesenswert
nicht 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é

Autor: Wolfgang (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: André K. (andre-)
Datum:

Bewertung
0 lesenswert
nicht 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é

Autor: Wolfgang (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: André K. (andre-)
Datum:

Bewertung
0 lesenswert
nicht 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é

Autor: Wolfgang (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: André K. (andre-)
Datum:

Bewertung
0 lesenswert
nicht 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é

Autor: André K. (andre-)
Datum:

Bewertung
0 lesenswert
nicht 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é

Autor: Wolfgang (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.