Forum: PC-Programmierung Anfängerfragen


von Sascha D. (elvis)


Lesenswert?

Hallo

Ich hab es nun endlich geschafft wieder eine Baustelle anzufangen, von 
der ich im Grunde genommen nicht viel Ahnung habe, die mir schlaflose 
Nächte bereitet und vor allem tausende neue Folgeprojekte mit sich 
bringt mit ähnlichen Eigenschaften.

Dabei ist mein Ziel, mir so viele Custom Panels für meinen geliebten 
Flugsimulator X-Plane zu bauen wie es mit meine Möglichkeiten zulassen 
(wie ich vor allem bei professionellen Herstellern sehen kann sind die 
Möglichkeiten nahezu unbegrenzt.)

Nachdem ich einige Knöpfe an einer modifizierten Tastatur festgelötet 
hatte, habe ich meine Ersten „Hardwarebau“-Erfahrungen mit dem 
LPT-Switch gemacht. (mehr Infos über dieses Projekt gibt’s hier 
http://www.x-plane.de/forums/index.php?showtopic=1245&hl=lpt-switch)

Danach bin ich auf  ein etwas komplexeres Projekt eines X-Plan-Kollegen 
gestossen, welches ich dank seiner Grosszügigkeit nun mein eigen nennen 
kann. Es arbeitet mit einem ATMEL Chip, einer USB Schnittstelle und hat 
ein LCD Display (mehr Infos zu diesem Projekt gibt’s hier 
http://www.x-plane.de/forums/index.php?showtopic=106&hl=radio+hardware)

Diese Architektur war dann auch der Grund warum ich in diesem Forum 
gelandet bin. Ich habe mich ein bisschen in das Tutorial eingelesen und 
mir in einem Kaufrausch auch gleich das STK500 von ATMEL zugelegt 
(Welches bis jetzt noch unberührt in der Verpackung liegt). Des Weiteren 
bin ich auf das K8085 USB Experimentier Interface gestossen (Bausatz) 
welches ich für eine gute Übung um Löterfahrung zu sammeln hielt. Dies 
habe ich dann auch nach 6 Stunden Arbeit und ohne grosse Zwischenfälle 
zum Laufen gekriegt (wie mir die Demo Software deutlich beweist).


Meine Grundlagen:

Programmieren ist für mich kein Neuland (Ich arbeite mit PHP und JAVA) 
privat habe ich wenige Erfahrungen mit c++ gesammelt (dies vor allem im 
Bezug auf den Plugin-SDK von X-Plane) welche ich auch gerne noch weiter 
ausbauen würde. Des Weiteren bin ich auf Assembler gestossen (was mich 
vor allem im weiteren Verlauf beim Tutorial erwartet).

Dieser Beitrag wurde auf MAC OS-X geschrieben was ich auch als meine 
Hauptplattform bezeichnen kann, obwohl ich nebenbei noch eine Windows 
Mühle als Ausweich-Variante stehen habe. Ich verfüge über X-Code, wo ich 
auch schon meine ersten C++ Programme mit erfolg kompiliert habe.

Um auch gleich mit meinem ersten Beitrag auf meine erste Frage zu 
kommen. Gerne würde ich noch etwas mit dem K8055 herumspielen, bin aber 
dabei bereits auf die ersten Hürden gestossen. Ich habe mit folgendem 
kleinen Tutorial begonnen um  zu sehen, ob ich die Karte überhaupt 
ansprechen kann. http://www.roboternetz.de/phpBB2/viewtopic.php?t=8429 
leider habe ich die in diesem Tutorial beschriebenen .lib Datei nicht 
gefunden. Ich habe dann mit dem Header und der Lib Datei von der 
Velleman Seite probiert den Code in X-Code zu kompilieren. Leider ohne 
erfolg. Beim suchen bin ich dann auf folgendes Projekt gestossen, 
welches die Lösung für mein Problem sein könnte. 
http://sourceforge.net/projects/k8055mac/ Ich habe dann wieder versucht 
den vorher geschilderten C++ Codes mit dem Mac-Header zu kompilieren. 
Leider wieder ohne erfolg. Die Dateien im Macprojekt so zu analysieren 
dass ich auf die Lösung komme kann ich nicht, da mir das Projekt noch zu 
komplex ist. Wenn aber Jemand eine Lösung wüsste wie ich den kleinen 
Code von www.roboternetz.de (oder einen Ähnlichen) unter dem Mac 
kompilieren kann währe ich sehr dankbar.

Und seit bitte nicht überrascht oder genervt, wenn dies nicht meine 
erste Anfängerfrage bleibt.

Mit besten Grüssen

Sascha

von Sascha D. (elvis)


Lesenswert?

Ich habe in zwischen noch folgenden Link gefunden:
http://soft.pmad.net/k8055/

Ich habe alles nötige instaliert un kann die karte nun auch über 
Commandline (Terminal) ansprechen. In einem C++ Commandline Tool 
Allerdings immer noch nicht :-(


mfg

sascha

von Sascha D. (elvis)


Lesenswert?

ich habe den code nun mal sowei, dasser sich kompillieren lässt. Er 
sieht nun folgendermassen aus:

#include <k8055.h> //muss sich im Projektverzeichniss befinden
#pragma comment (lib, "K8055D_C.lib") //muss sich im Projektverzeichniss 
befinden
#include <iostream> //wichtige include für standard ein- und ausgabe in 
der Konsole



using namespace std; //muss sein macht die sache einfacher von cout 
u.s.w.

int main ()
{


k8055 *dev = new k8055;
dev->OpenDevice(0); // Karte mit der Adresse 0 öffnen

long a;

// die Schleife wird solange bearbeitet wie der Anlogwert größer 1
do{
a=dev->ReadAnalogChannel(1); // Lese analogwert von Eingang 1
cout << a << endl; // gebe Wert in der Konsole aus
dev->WriteAllDigital(a); // gebe Wert am Digitalausgang aus
}while (a > 1); // solange wiederholen wie anawert größer 1

dev->ClearAllDigital(); //alle Ausgänge auf 0
dev->CloseDevice(); // Karte schließen
cout<<"das ist mein text"<<endl;
return 0;
}

Alllerdings gib mir das programm folgenden fehler aus wenn ich es laufen 
lasse:

ZeroLink: unknown symbol '___CFConstantStringClassReference'

CPTEST has exited due to signal 6 (SIGABRT).

Ich habe in der Readme von der besagten Mac Version folgendes gefunden:

- k8055.cpp
  - C++ static library that should replicate most functions listed in 
the Windows .DLL companion guide for the Velleman K8055 USB 
Experimenter.

Kann das etwas damit zutun haben? wie muss ich die .cc datei in mein 
projekt integrieren?


mfg

sascha

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Zu ___CFConstantStringClassReference spuckt Google 656 Treffer aus, die 
auf den ersten Blick alle Mac OS relevant sind.

Weil Mac OS X Anwendungsprogrammierer hier selten sind, würde ich an 
deiner Stelle zusätzlich ein weiteres Forum aufsuchen. Dieses z.B. 
http://www.osxentwicklerforum.de/board.php?boardid=17&sid=42

Wenn du das auch machst, halte den Sourcecode bereit bzw. schreibe 
genauer, was du machst. Ich kann im Moment nicht nachvollziehen, woher 
du k8055.cpp, k8055.h und K8055D_C.lib hast. Die Downloads von 
http://soft.pmad.net/k8055/ und 
http://sourceforge.net/projects/k8055mac/ habe ich mir angesehen - habe 
ich dort was übersehen?


von Sascha D. (elvis)


Lesenswert?

Vielen Dank Stephan

Die Idee mit dem osxentwicklerforum ist mir auch schon gekommen. Ich 
wollte aber noch ein wenig warten und sehen was sich hier ergibt (damit 
ich meinen Tread dort vielleicht etwas aktueller gestalten kann).

Folgendes zur Vervollständigung:
Ich habe auf sourceforge 2 ähnliche osx projekte gefunden
1 http://sourceforge.net/projects/k8055mac/
2 http://sourceforge.net/projects/k8055usbosx

beide Varianten funktionieren gut bei mir. bei der letzteren brauche ich 
noch k8055.kext , welches ich auf der folgenden Seite gefunden habe:

http://soft.pmad.net/k8055/

Dort gibt es ebenfalls noch ein Comandline Tool das ebenfalls 
funktioniert und ein x-code Projekt enthält.

Allerdings funktioniert Projetk nr.1 nicht mehr sobald ich die 
k8055.kext installiert habe.
Die Dateien k8055.cpp und k8055.h habe ich momentan aus dem Projekt nr 2 
genommen, da ich immer noch die k8055.kext  installiert habe. die 
K8055D_C.lib habe ich von der Velleman Seite allerdings weiss ich nicht 
ob ich diese überhaupt brauche bzw. ob sich diese irgendwie durch meine 
k8055.cpp ersetzen lässt.

mfg

sascha

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Die K8055D_C.lib wird dann eine Library für Visual C++ unter Windows 
sein, damit der Linker dort weiss, welche Funktionen in der ähnlich 
genannten DLL drin sind. Unter Nicht-Windows wirst du damit nichts 
anfangen können.

Projekt Nr.2 habe ich bisher noch nicht gesehen. Das schaue ich mir 
vielleicht heute abend an. Es regnet ja.

Jedenfalls laut "k8055.cpp - C++ static library that should ..." spricht 
ja stark dafür, dass alles bei Nr. 2 dabei ist, um eine ähnliche 
Funktion wie unter Windows mit dem Duo LIB/DLL zu erreichen.

von Sascha D. (elvis)


Lesenswert?

O.K. Vielen dank für euere Hilfe und das geduldige lesen Nach etwas 
Hilfe im osxentwicklerforum habe ich es geschaft. nach einbinden des 
Foundation.framewor funktioniert die Software! (die leds Leuchten nur so 
vor sich hin). Allerdings muss ich noch etwas mehr über meine Hardware 
lesen und lernen. Ich verstehe im Grunde was die Software macht. sie 
liest den Wert des Analog Kanals 1 ein und übergibt ihn an alle 
Digitalkanäle. Allerdings verstehe ich nicht wie diese funktionieren. 
Ich weiss, dass ich einzelne Kanäle ein oder ausschalten kann. Ich weiss 
auch dass bei den Analogen Kanälen ein Wert (mittels Spannung?!) 
angegeben wird. Aber was passiert genau wenn ich allen digitalen Kanälen 
einen Wert zuweise? Wenn ich beim Potentiometer vom analog Kanal 1 die 
Spannung verändere, dann verändert sich auch der Wert a (in meinem 
Programm) und verschiedene Digitale Outputs gehen an bzw. aus. aber nach 
welchem Schema?

Ich muss wohl noch einiges über die Digitalen In/Outputs lehrnen, bevor 
ich wirklich loslegen kann.

mfg

Sascha

von Stefan B. (stefan) Benutzerseite


Lesenswert?

http://www.velleman.be/be/en/product/view/?id=351346

The K8055 interface board has 5 digital input channels and 8 digital 
output channels. In addition, there are two analogue inputs and two 
analogue outputs with 8 bit resolution. The number of inputs/outputs can 
be further expanded by connecting more (up to a maximum of four) cards 
to the PC's USB connectors...

Specifications:
* 5 digital inputs (0= ground, 1= open) (on board test buttons provided)
* 2 analogue inputs with attenuation and amplification option (internal 
test +5V provided)
* 8 digital open collector output switches (max. 50V/100mA) (on board 
LED indication)
* 2 analogue outputs:
** 0 to 5V, output resistance 1K5
** PWM 0 to 100% open collector outputs max 100mA / 40V (on board LED 
indication)
* general conversion time: 20ms per command
* power supply through USB: approx. 70mA

Du hättest also

2 Eingaben per Analog als "Achse" z.B. mit Schiebe- oder 
Drehpotentiometer
5 Eingaben per Digital als "Schalter" z.B. Kippschalter oder Taster

8 Ausgaben per Digital z.B. für
  8 LEDs oder
  2 Siebensegement-LEDs direkt oder
  16 BCD encodierte Siebensegment-LEDs. Erfordert aber Hardwarebasteln 
(BCD-Decoder, Demultiplexer, Flipflops). Ich würde den Weg so nicht 
gehen. Die IMHO preiswertere Alternative wäre hier ein µC-Gerät z.B. auf 
AVR-Basis.
1 Ausgabe per Analog z.B. Galvanometer oder LCD-Voltmeter
1 Ausgabe per PWM z.B. kleiner Motor

von Sascha D. (elvis)


Lesenswert?

Hallo Stefan

Vielen dank für deine Antwort und die Kopie vom Datenblatt (das ich 
natürlich schon gelesen habe). Die eingänge verstehe ich auch soweit und 
hab schon den einen oder anderen Schalter und Taster mit X-Plane 
erfolgreich gekoppelt. Der Counter ist adbei wohl eher für die Taster 
wichtig (gerade Zahl = aus / ungerade zahl =ein) oder so ähnlich.

Das ich pro Ausgang ein Led ansteuern kann ist mir ebenfalls klar (die 
sind ja eigentlich schon aufgelötet). Aber ich habe mir gedacht, da muss 
doch noch mehr zu holen sein, denn so eine grosse Karte für 2 
7-Segment-Anzeigen währe wahrscheinlich nicht sinvoll. Deshalb gefällt 
mir deine "16 BCD encodierte Siebensegment-LEDs" Variante schon ziemlich 
gut. Vom Hardwarebau schrecke ich nicht zurück, obwohl ich nicht viel 
Ahnung davon habe. Wenn mir noch jemand einige Details zu dieser 
Variante erzählen könnte, währe ich sehr dankbar.

mfg

sascha

von Stefan B. (stefan) Benutzerseite


Lesenswert?

> "16 BCD encodierte Siebensegment-LEDs" Variante

Uh, da habe ich nicht viel Hirnschmalz reingesteckt. Es war nur so eine 
Idee:

0-9 kann man als BCD-Zahlen mit 4 Bit darstellen. Das frisst 4 digitale 
Ausgaben von den 8 möglichen.

Mit den restlichen 4 digitalen Ausgaben hat man 2^4 = 16 Möglichkeiten, 
die man zur Adressierung von 16 Siebensegment-Elementen benutzen könnte.

Die Ansteuerung würde also auf 4 O-Ports die BCD Zahl geben, die der 
BCD-Decoder in die Ansteuerung eines Siebensegment-Elements umsetzt. 
Welches Siebensegment-Element würde auf den anderen 4 O-Ports definiert. 
Dort würde ein 4-nach-16 Multiplexer die Umsetzung machen.

Der Haken dabei ist, dass beim Umschalten auf ein anderes 
Siebensegment-Element dessen Anzeige erlischt, weil seine BCD Daten 
nicht mehr anliegen. Also müsste man zusätzlich den BCD Wert für jedes 
Element zwischenspeichern.

Jetzt ist man schon bei BCD-Decoder + Multiplexer + Speicher... da 
dachte ich, dass die Idee bereits zu aufwändig ist. Mit einem µC kann 
man einiges davon nämlich in Software nachbauen.

Und wenn man schon den µC benutzt, kann der auch noch die Kommunikation 
mit dem PC machen und die K8055 Karte wäre dafür nicht mehr nötig bzw. 
frei für andere Sachen.

Du kennst vielleicht FSBUS http://www.fsbus.de/index.html dort wird ein 
modulares µC (AVR) basiertes System benutzt. Bei 
http://www.opencockpits.com/index.php?newlang=english baut man auf µC 
vom PIC Typ.

Sehr schöne, interessante Ideen auch für selbstgebaute Instrumente gibt 
es auch auf http://www.mikesflightdeck.com/ (leider habe ich noch keinen 
Shop mit Mikes Buch in DE gefunden; bezahlen in USA ist mir zu 
aufwändig).

von Sascha D. (elvis)


Lesenswert?

Cool!

Vielen Dank Stefan. So in etwa habe ich mir das theoretisch vorgestellt. 
(einige Ausgänge um das 7-Segment-Display anzusteuern(bzw. die ziffern 
zu generieren) und einige um zu sagen welches der Displays angesteuert 
wird). Das hilft mir schon mal für das Verstäntniss der Nutzung der 
Ports (da ich ja im Grunde von Elektronik keine Ahnung habe, aber sehr 
gerne etwas lernen würde).

Ich kenne sowohl FSBUS als auch Opencockpits. Letzeres etwas besser, das 
es da auch bereits x-plane kompatible Software dafür gibt (leider nur 
für Windows). Ich habe allerdings gedacht dass mir opencockpits für den 
Anfang etwas zu gross ist und das ich für das Verstäntniss lieber mit 
einer etwas weniger komplexeren Schaltung beginne. Des Weiteren gefällt 
mir an der k8055 dass ich sie mittels c++ und dem MAC ansprechen kann. 
(was auch einiges an zeit und Tipparbeit in diversen Foren gekostet 
hat:D).

Wenn Ihr aber meint dass diese Karte nicht das Richtige ist um meine 
7-Segment-Displays anzusteuern, dann werde ich mir erst mal ein anderes 
Projekt ausdenken (mir schwirren da zahlreiche Ideen im Kopf herum).

Da ich mit Inputs auch früher schon erste einfache Ergebnisse erzielen 
konnte (modifizierte Tastatur und der LPT-Switch) interessieren mich vor 
allem die Ausgänge. Ich finde  es halt nur etwas fade, dort dann nur 
einige LED anzuschliessen.

Mit freundlichen Grüßen

sascha

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.