Sida 1 av 3
Velleman K8056 kod i hexa?
Postat: 12 mars 2006, 18:24:36
av magi5
Hej.
Jag har en Velleman K8056 på RS232 men använder CGI och behöver sända hexa kod till systemet.
Så hur översätter man styrkod till hexa?
Låt säga att jag ska sätta relä 2 till ON.
Instruction sequence:
1. CHR$(13) = 0D
2. Card adress(1..255) = 01
3. Instuktions ('S') = 53
4. Adress (1..255) or relay#('1'..'9' ACHII) = 02
5. Checksum(2-complement of the sum of 4 previous bytes + 1)
13+01+53+02+01 = 70 and in hex 46
Så koden ska se ut så här tror jag i hexa:
0D01530246
Vad gör jag för fel?
Info:
http://www.velleman.be/downloads/0/illu ... _k8056.pdf
Detta är mitt projekt som jag nu ska utöka.
http://www.elektronikforumet.com/forum/ ... hp?p=68867
Regards Magi
Postat: 12 mars 2006, 18:29:11
av Jeppsson
Utan att ha studerat PDF rejält så tror jag inte att du kan addera ihop alla hexcod till en utan måste skicka dom en och en i följd...
Förstår du vad jag menar?
Postat: 12 mars 2006, 18:31:16
av Jeppsson
Förtydligande, du måste skicka följande hexcode
0D,01,53,02,01 utan kommatecken för att den skall köpa koden...
Postat: 12 mars 2006, 18:34:47
av MadModder
byt ut sista 01 där mot 46
Men jag förstår inte varför de blandar in 2-komplement där. Det kan ju aldrig bli ett negativt nummer, så det gör ju ingen skillnad.
Postat: 12 mars 2006, 19:28:20
av magi5
Hej.
Ska det inte vara så här?
0d+01+'S'+02+01 ger i dec
13+01+83+02+01 = 100 and in hex 64
Så koden ska se ut så här tror jag i hexa:
0D01530264
Postat: 12 mars 2006, 19:32:39
av MadModder
Joooo natruligtvis. S är ju 53 i hex, och 83 i dec. Kan ju inte blanda...

Postat: 12 mars 2006, 20:00:08
av magi5
Hej.
Jag får ändå ingen reaktion från k8056.
Inte ens in signal lampan blinkar till då jag skickar data.
Någon som har en aning?
Regards Magi
Postat: 12 mars 2006, 20:31:23
av MadModder
Undrar om det inte ska stå nånting annat än 2-complement där...
Låt säga att vi har adress 255 på ett kort. Då blir ju checksumman mer än 255!
Aha! enligt deras VB-exempel, räknar de ut checksumman såhär:
checksum = (255 - ((((13 + address + Asc("S") + Asc("1")) / 256) - Int((13 + address + Asc("S") + Asc("1")) / 256)) * 256)) + 1
Dvs relänumret ska inte vara 01 för 1, utan 49 för ascii "1" !
Och om det blir ett negativt tal, ska man invertera alla bitar binärt, och lägga till 1 binärt. Det är det som är 2-komplement.
Postat: 12 mars 2006, 20:56:03
av magi5
MadModder skrev:Undrar om det inte ska stå nånting annat än 2-complement där...
Låt säga att vi har adress 255 på ett kort. Då blir ju checksumman mer än 255!
Aha! enligt deras VB-exempel, räknar de ut checksumman såhär:
checksum = (255 - ((((13 + address + Asc("S") + Asc("1")) / 256) - Int((13 + address + Asc("S") + Asc("1")) / 256)) * 256)) + 1
Dvs relänumret ska inte vara 01 för 1, utan 49 för ascii "1" !
Och om det blir ett negativt tal, ska man invertera alla bitar binärt, och lägga till 1 binärt. Det är det som är 2-komplement.
Tack.
Ska prova med en gång.
Postat: 12 mars 2006, 21:00:59
av vfr
MadModder skrev:om det blir ett negativt tal, ska man invertera alla bitar binärt, och lägga till 1 binärt. Det är det som är 2-komplement.
Nej. Inte om det blir negativt, utan alltid!
Postat: 12 mars 2006, 21:05:09
av MadModder
din checksumma för relä 2 borde då bli 109, dvs 6D i hex.
sålänge du håller dig med en kortadress under 100, så blir det lite enklare att räkna ut checksumman:
255-(13+adress+83+49+relä)+1
där relä är 1-8.
49 för att det ska bli ascii-värdet av reläet.
Postat: 12 mars 2006, 21:11:14
av MadModder
vfr skrev:MadModder skrev:om det blir ett negativt tal, ska man invertera alla bitar binärt, och lägga till 1 binärt. Det är det som är 2-komplement.
Nej. Inte om det blir negativt, utan alltid!
Förklara då hur ett binärt tal som motsvarar 7 även är 0111 binärt efter att man "2-komplementat" det? Binära tal som inte har MSB satt är nämligen direkt översättbart till decimalt utan att "2-komplementa" tillbaks det.
http://www.cs.ualberta.ca/~casey/c101/1 ... 2comp.html
Men i det här fallet så ska man tydligen 2-komplementa det oavsett. Skum formel... den klipper helt enkelt bort alla bitar över 8...
Postat: 12 mars 2006, 21:15:35
av magi5
Hej.
Ska det inte vara så här?
0d+01+'S'+'2'+01 ger i dec
13+01+83+50+01 = 148 and in hex 94
Så koden ska se ut så här tror jag i hexa:
0D01533294
Får ändå ingen reaktion.
Ska prova med kortnr som ascii oxo
0d315332c4 funkade inte heller

Postat: 12 mars 2006, 21:20:50
av MadModder
nej du ska ta 255-(13+1+83+50)+1
vilket ger 109
0D0153326D
Har du förresten laddat hem vellemans testprogram och fått reläerna att funka över huvud taget?
Postat: 12 mars 2006, 21:26:21
av magi5
MadModder skrev:nej du ska ta 255-(13+1+83+50)+1
vilket ger 109
0D0153326D
Har du förresten laddat hem vellemans testprogram och fått reläerna att funka över huvud taget?
Jag har testat med program o allt funkade med det och testknapp.
Men nu funkar det.
Jag älskar er allihopa universellt mycket
Vill ni prova min tanks så hör bara av er.
MSN /
spidg@hotmail.com
Regards Magi