kent iemand een algemen software routine om van een decimaal getal ts 0-3000 de twee overeenkomstige bytes te maken

dit kan normaal met 12 bits

ik zou de waarde vaneen slider in VB moeten kunnen omzetten naar twee bytes om deze naar PIC te verzenden

je kan dat door een serie delingen uit te voeren en zo bit per bit bepalen

misschien weet iemand van jullie een betere en snellere methode?

Als je nou eens begint met fatsoenlijk Nederlands in je post te tikken... Dan hoeft men zich niet eerst in te spannen om te lezen wat je nou eigenlijk bedoelt (voordat iemand over je eigenlijke probleem na gaat denken).

Dan voor je vraag:

Je zou je af kunnen vragen of je die resolutie wel nodig hebt. Als je het getal gewoon deelt door 12, zit je in de range 0-250, wat prima in een byte past.

Stel dat je de resolutie echt nodig hebt: DIV is een integer divide (in de meeste talen), terwijl MOD in veel talen de 'rest' retourneert. Zo kun je dus met 2 instructies eea. naar 2 bytes converteren.

Wat moet omgezet worden naar wat?
Kan je een voorbeeld geven?

Op 23 februari 2004 20:36:38 schreef Marco69:
Als je nou eens begint met fatsoenlijk Nederlands in je post te tikken... Dan hoeft men zich niet eerst in te spannen om te lezen wat je nou eigenlijk bedoelt (voordat iemand over je eigenlijke probleem na gaat denken).

oeioeioei, zo erg was het nu toch ook niet

wat betreft delen door twaalf dit is nu de bedoeling niet
mijn resolutie is 12 bits (afgerond naar boven 16 bits of 2 bytes)

ik zou mijn waarde van 0 tot 3000 moeten omzetten in twee bytes dus nul = 00000000 00000000
3000 = 00001011 10111000

ik krijg voor 3000 dan een byte (MSB) met waarde 00001011 of (dec)11 en een byte (LSB) met waarde 10111000 of (dec)184

deze twee bytes kan ik met USART verzenden naar mijn PIC 16F877 en dan verder doorsturen via SPI naar een 12bits DAC

het probleem stelt hem dat ik in VB geen routine gevonden heb om een integer om te zetten naar een word (2 bytes)

kwas misschien in mijn eerste post niet zo duidelijk sorry...

ier een stukje VB code die het doet maar ik vind het wat ingewukkeld voor een simplele conversie


Dim value As Integer
Dim b12, b11, b10, b9 As Integer
Dim result As Integer
Dim hi, lo As Byte

Private Sub Command1_Click()
value = CInt(Text1.Text)
If (value / 2048) >= 1 Then
b12 = 1
result = value Mod 2048
Else
result = value
End If
If (result / 1024) >= 1 Then
b11 = 1
result = result Mod 1024
End If
If (result / 512) >= 1 Then
b10 = 1
result = result Mod 512
End If
If (result / 256) >= 1 Then
b9 = 1
result = result Mod 256
End If
lo = CByte(result)
hi = CByte((b9 * 1) + (b10 * 2) + (b11 * 4) + (b12 * 8))
Label1.Caption = hi
Label2.Caption = lo
b9 = 0
b10 = 0
b11 = 0
b12 = 0
End Sub

Tsja... basic 'programmeurs'... argh...

hi=value DIV 256
lo=value MOD 256

Hoe kort wil je het hebben?

Misschien nog ff wat type casting eromheen; string-to-word conversion, maar dat moet je toch.

[Bericht gewijzigd door Marco69 op ]

Op 23 februari 2004 23:03:24 schreef Marco69:
Tsja... basic 'programmeurs'... argh...

hi=value DIV 256
lo=value MOD 256

Hoe kort wil je het hebben?

Misschien nog ff wat type casting eromheen; string-to-word conversion, maar dat moet je toch.

nice kzal da proberen :)

iets tegen VB? tis eigelijk het ene die ik een beetje ken
als je het allemaal zelf moet leren...
C++ lukt ook wel maar dan in dos

wat bedoel je met casting? een procedure van maken of zo

dank u zeer ik had er eigenlijk niet op gedacht met een gewone deling en modulus... |:(