Forum: PC-Programmierung k8055 Digital ports einzeln ansteuern?


von Sascha D. (elvis)


Lesenswert?

Hallo

Wie Bereits in einigen anderen Treads erwähnt, experimentiere ich mit 
dem k8055 und x-plane (Flugsimulator). Dies funktioniert auch schon ganz 
gut. Nun habe ich das problem das ich in C++ die Digitalen Ports nicht 
richtig einzeln ansteuern kann. Ich habe gelesen, dass der Wert in UINT8 
angegeben wird. allerdings werde ich aus diesem Wert nicht schlau. MIt 
ReadDigitalChannel(1) kann ich immer den ersten Kanal abfragen, das 
funktioniert. MIt ReadDigitalChannel(2) kann ich den 2 Kanal aber nicht 
ansprechen. Ich habs binär Probiert DigitalChannel(01000000) und Hex 
DigitalChannel(40) leider auch vergeblich. Kann mit jemand sagen, wie 
ich die Ports einzeln ansteuern kann?

mfg

sascha

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Was meinst du genau mit Ansteuern?

Ausgabe kannst du mit den Funktionen
SetDigitalChannel(Kanal: 1-8) und WriteAllChannel(Wert: 0-255) machen

Eingabe kannst du mit den Funktionen
ReadDigitalChannel(Kanal: 1-5) und ReadAllChannel machen

Bei den ...All.. Funktionen bekommst du bzw. setzt du einen Wert, der 
als bitweise Verorderung der einzelnen Kanäle aufgebaut ist. Kanal 1 und 
5 aktiv wären 00010001 = 0x11 hex. = 17 dez.

Bei den anderen beiden Funktionen bekommst du boolsche Werte, d.h. 
1=wahr 0=falsch

von Sascha D. (elvis)


Lesenswert?

Ich habs raus. Zumindest mit ReadAllDigital(). Es handelt sich um einen 
5 Stelligen Binärwert, dr haber vorher noch in hex umgerechnet werden 
muss.

bin: 00001 hex:1 kanal:1
bin: 00010 hex:2 kanal:2
bin: 00100 hex:4 kanal:3
bin: 01000 hex:8 kanal:4
bin: 10000 hex:10 kanal:5

womit ich in c++ mit if(ReadAllDigital() == 4) kanal 3 auslese.
wie ich mit ReadDigitalChanel() gezielt einzelne Kanäle auslese weiss 
ich allerdings immer noch nicht. ist auch nicht mer wichtig, 
funktioniert ja auch mit ReadAllDigital(), hätte aber für das Verstädnis 
der Karte geholfen.

mfg

sascha

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Wenn du ReadAllDigital() funktionsfähig hast, kannst du 
ReadDigitalChanel() davon ableiten, wenn es in deiner K8055-API nicht 
funktioniert. Du pickst den gefragten Kanal aus dem Gesamtwert aus.


1
BOOL ReadDigitalChanel(longint channel)
2
{
3
   assert(channel >= 1 && channel <= 5);
4
   return (ReadAllDigital() & (1 << (channel-1))) != 0 ? TRUE : FALSE ;
5
}

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.