Anfängerfragen: k8055 und C++ mit dem Mac?

  • Anfängerfragen: k8055 und C++ mit dem Mac?

    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
    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
    x-plane.de/forums/index.php?showtopic=106)

    Diese Architektur war dann auch der Grund warum ich auf dem Forum von mikrocontroller.net gelandet bin. Ich habe mich ein bisschen in das AVR-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 AVR-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 kleinen C++ Programme (vor allem commandline Tools oder plugins für x-plane) 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. 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 folgende zwei Projekt gestossen, welche die Lösung für mein Problem sein könnten. sourceforge.net/projects/k8055mac/
    sourceforge.net/projects/k8055usbosx

    Beide Projekte lassen sich bei mir hervorragend kompilieren und funktionieren auch. Das Zweite benötigt jedoch noch die k8055.kext, di ich hier gefunden habe. soft.pmad.net/k8055/ (wenn ich diese installiert habe Funktioniert das erste Projekt nicht mehr) unter soft.pmad.net/k8055/ habe ich ein weiteres Commandline Projekt für das k8055 gefunden (was bei mir ebenfalls funktioniert).


    Mit dem den Headern und der k8055.cpp des zweiten oben genannten Projektes habe ich dann versucht den folgenden Code zu kompilieren (was auch funktioniert hat):

    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;
    }

    (Eine etwas modifizierte Variante des weiter oben beschriebenen Tutorials)

    Wenn das Programm allerdings laufen lassen will, erhalte ich folgenden Fehler:

    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?


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

    Mit besten Grüssen

    Sascha
  • Hallo,

    habe im Moment keine Zeit auf Deinen Beitrag näher einzugehen... aber für X-Plane kann man bei mir immer etwas Zeit herausschlagen.

    Melde Dich gerne mal per PM, Skype o.Ä.

    Gruss -- und ich schreib was, wenn ich mehr Zeit hab :D

    Alex
    The only thing that really worried me was the ether.
  • Kannst Du mir einen Gefallen tun, und das ganze mal in ein kleines Paket packen und zum DL breitstellen. Ich helfe sehr gerne, aber kann mir jetzt schlecht alles zusammensuchen.

    Aber als Schuss in's blaue: Link mal mit dem CoreFoundation.framework

    Alex
    The only thing that really worried me was the ether.
  • Hallo

    Vielen Dank. Es hat nun geklappt. Aber du hast gut ins blaue geraten. Es war nicht das CoreFoundation.framework sondern das Foundation.framework dass gefehlt hat. Ob das Programm die Karte richtig anspricht kann ich erst Testen, wenn ich Zuhause bin. (Ich habe mir das x-code projet auf die schnelle im Büro nachgebastelt)

    mfg

    sascha
  • Freut mich, dass es klappt! Und wie gesagt, für X-Plane und Hardware bin ich immer zu haben.

    Im Übrigen, willkommen im Forum. Und um Dich gleich richtig willkommen zu heissen:

    Original von elvisaronp
    X-Code


    Original von elvisaronp
    x-code


    Original von Chris Espinosa
    One more thing...

    The C language is case-sensitive. Compilers are case-sensitive. The Unix command line, ufs, and nfs file systems are case-sensitive. I'm case-sensitive too, especially about product names. The IDE is called Xcode. Big X, little c. Not XCode or xCode or X-Code. Remember that now.


    :D

    Alex
    The only thing that really worried me was the ether.
  • O.K Vielen dank für den Hinweis. Gross- Kleinschreibung war noch nie meine Stärke :D
    Das Programm Funktioniert, und wie! (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 weiss dass diese Frage weniger in dieses Forum gehört, und werde sie deshalb auch noch in mikrocontroller.net stellen.

    mfg

    Sascha
  • Dank der Hilfe von Alex habe ich es endlich geschafft, meinen Code in die X-Plane Plugin-Form zu packen. Allerdings ist mir noch einiges unklar. Ich habe in meinem Comandline Tool die Ports laufend über eine Endlosschleife abgefragt. (mir ist schon klar, dass dies keine saubere Lösung ist). dies Funktioniert in der Plugin-Form natürlich nicht, da so das Plugin nie zu ende geparsert wird und immer in der Schleife hängen bleibt. Gerne wüsste ich wie ich die Werte laufend abfrage. (mit einem Timer?!)

    Über eine Antwort würde ich mich freuen

    mfg

    Sascha
  • Zunächst einmal finde ich dein Projekt sehr interessant.
    Ich bewege mich nicht in den Lüften, sondern ganz popelig auf der Erde und in Gleise gezwungen. Mit meiner Physik-AG habe ich an einem Modelleisenbahnwettbewerb teilgenommen. Die Schüler erhielten neben der MEB ein K8055. Die Programmierung habe ich größtenteils übernommen. Einer der beteiligten Schüler ist früh auf die K8055Demo-Implementation für MacOS-X gestoßen (controlplus.biz/k8055/index.html), allerdings in Objective-C geschrieben. Ich selbst habe noch keine größeren Programmierprojekte realisiert und bin immer noch dabei, mich in Objective-C und Cocoa einzuarbeiten.
    Das Schöne an der Implementation der Demo-Programms ist, dass das K8055 als Klasse abgelegt und so in jedes andere Projekt eingegliedert werden kann.

    Zu deinem Timer-Problem: Das gleiche Problem hatte ich auch! Suche mal unter 'K8055' im Forum und du findest die Diskussion dazu. Ob es dir bei C++ hilft, weiß ich nicht!