www.mikrocontroller.net

Forum: PC-Programmierung k8055 Digital ports einzeln ansteuern?


Autor: Sascha Der anfänger (elvis)
Datum:

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

Autor: Stefan B. (stefan) Benutzerseite
Datum:

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

Autor: Sascha Der anfänger (elvis)
Datum:

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

Autor: Stefan B. (stefan) Benutzerseite
Datum:

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


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

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.