Archiv verlassen und diese Seite im Standarddesign anzeigen : word nach byte umwandeln
servus
bin noch heftig am proggen
mit dem neuen bascom 1.11.8.4
bin auf ein problem gestosen
ich habe eine wordvariabel mit dem max wert 1024
ich bräuchte eine bytevariabele mit dem maxwert 255 logisch
wie kann ich das geschickt umwandeln von word nach byte
das das ergebnis in der bytevariable das equivalent der wordvariable spiegelt
danke
Ich gehe mal davon aus das dein max. Wert 1023 ist wegen 10Bit (0 bis 1023)
Wie währe es mit ner division durch 4??
MfG
die division durch 4 ergibt doch kommawerte und die sind doch in word
variable nicht erlaubt
wird das automatisch konvertiert
also
word=1023
tmp=word / 4
byte=low(tmp)
was hat dann byte für einen wert
der tiny26 hat kein uart ich kann mir da nix anzeigen lassen
Da es keine Kommawerte gibt müssen die auch nich konvertiert werden oder !?! Nachkommestellen werden einfach ignoriert.
word=1023
word=word / 4
byte=word
Mit Low brauchst Du da nichts machen da der Wert ned größer werden kann als 255.
1023 / 4 = 255 mit Byte/Word-Werten (Versuchs im Bascom-Simulator)
danke werde ich dann mal testen jedoch iust da irgendwas faul
kann sein das es da wieder mal timer probleme gibt
wenn der adc im free modus läuft und dann noch der servo befehl
läuft
der tiny26 hat damit probleme timer0=8bit
kolisson
20.02.2007, 16:16
kannst es ja mal so versuchen:
dim spannung as word
spannung = Getadc(1)
Shift spannung , Right , 2
die variable "spannung" ist zwar per definition immer noch word, der inhalt ist aber nur die höherwertigsten 8 bit des adc-wertes.
merijnwijnen
20.02.2007, 23:13
Nette loesung:
-2 dazu zahlen: P=P+2
-dann durch 4 teilen (am besten mit shift, 2 right, ghet aber auch mit integer teilung ): shift, P ,Right, 2
das zusammen ist ein integer teilung mit richtigen rundung. Normalerweise runden integer teilung und shift immer nach unten.
Gruesse,
Merijn
kolisson
20.02.2007, 23:34
hallo Merijn
was haste denn da geschrieben ?
da die lösung ja von mir stammt, würde ich gern verstehen, was du schreibst.
also mach mal den erklärbär zu deinem beitrag
gtuss
merijnwijnen
21.02.2007, 00:38
Hallo Kolisson,
nimm mal :
P=7 decimal (00000111 binair)
Shift, p, right 2 ergibt dan binair 00000001, also 1 decimal.
Normalerweise sollte es aber nach 2 gerundet werden, denn
7/4 = 1.75, nach rundung gibt dass 2
Die shift function, und auch die Integer teilung runden immer nach unten weil sie einfach die letzt bits weglassen. Das kann mann loesen indem man die halfte des Teilers (hier also 4/2=2 erst zu dem zu teilen wert zahlt:
Gleichen Vorbild:
p=7 dec (00000111 bin)
p=p+2 :ergibt 9 dec (00001001 bin)
shift, P, right, 2 ergint binair 00000010, also 2 dec.
Damit stimmt die rundung. Versuch es selber mal mit 6 dec und 5 dec, dan siehst du wie es functioniert.
Das geht auch mit integer in two's complemet notation wie Bascom sie verwendet.
Ist dies verstaendlich?
Gruesse,
Merijn
kolisson
21.02.2007, 01:06
okay ... habe ich nun verstanden.
werde ich mir auch merken .. könnte mal wichtig werden.
hier ging es ja darum, die werte von einem 10bit wandler in ein byte zu quetschen. da für die meisten anwendungen 8bit ausreichend sind, will man hier mal runter teilen. die ansätze mit adc / 4 könnten meiner meinung nach wesentlich mehr rechenzeit beanspruchen als die variante mit shift right.
hast du schonmal ausprobiert, ob bascom bei teilungen durch 2.4. oder 8 ...
also durch den befehl x / 8 automatisch den shift-befehl generiert oder ob es eine division durchführt ?
wenn es denn einen unterschied macht, was man da eingibt ... in das bascom.. sollten wir mal einen thread aufmachen... thema : schnelle divisionen mit microcontrollern.
ähnliches auch mal zu den variablentypen... hatte neulich mit jemandem gesprochen, der kategorisch die verwendung der variablen "word" ablehnte. auf nachfrage stellte sich dann heraus, dass er word mit string verwechselte.
gruss
die umwandlung verbrät mehr speicherplatz als das ganze programm mit 3 singel variablen
also ist nicht so mein ding
hab jetzt eine singel und 2 constanten
jetzt gehts so lalal
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.